dd命令磁盘对拷及备份-阿里云开发者社区

开发者社区> 云计算> 正文

dd命令磁盘对拷及备份

简介:

dd命令:convert and copy a file

用法:

   dd if=/PATH/FROM/SRC of=/PATH/TO/DEST 

   bs=#:block size, 复制单元大小;

   count=#:复制多少个bs;


磁盘拷贝:

    dd if=/dev/sda of=/dev/sdb


备份MBR

    dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1


破坏MBR中的bootloader:

    dd if=/dev/zero of=/dev/sda bs=256 count=1


两个特殊设备:

    /dev/null: 数据黑洞;

    /dev/zero:吐零

 

1.做硬盘对拷:

 

dd if=/dev/sda of=/dev/sdb bs=1024k &

 

注意:

 

(1).先改fstab文件,把LABLE换成对应的  /dev/sda(不改的话,拷完后重启系统不知道从哪块盘启动了)

 

/dev/sda2               /                       ext3    defaults        1 1
/dev/sda5               /data                   ext3    defaults        1 2
/dev/sda1               /boot                   ext3    defaults        1 2

 

(2).一定要写bs=1024k,一定要加k, 默认是bytes,不加K或M,是以bytes写入,
    有可能系统要挂了,至于 也有人写bs=4M,没啥区别,最后速度差不多。

(3).加 & 后台进行,因为要用当前的终端来查看dd进度,如果忘了加 &,可以用Ctrl+z

    把dd进程移到后台,再运行 bg 记其后台运行(为了在当前终端查看进度)。 

 

 

2.查看dd完成进度,要不然鬼知道啥时候能dd完成啊

 

  ps -ef|grep dd   //查看 dd 进程id号,其实上边命令加&后,己经显示了。

  kill -USR1  id   //查看 dd 完成进度

 

100118036480 bytes (100 GB) copied, 1346.94 seconds, 74.3 MB/s

  如果想时时查看进度,可以用下面语句:

 

 watch -n 1 kill -USR1 3730   // 每2秒查看一次进度

 while kill -USR1 3730;do sleep 2;done;   //每2秒查看一次进度

 

这种是通过发送USR1信号的方法,去产生一个标准的IO错误,来达到显示当前COPY进度与COPY速度的目的。

 

3.如果sdb原来是一个裸盘没有格式化过,dd可能并不能拷贝superblock信息,所以盘不能mount起来。
所以只需要进入fdisk界面:

 

# fdisk /dev/sdb

# w

 

“write table to disk and exit”,sdb就可以mount起来了,如果是格过的,可能需要fsck一下就可以了


注意:建议不要轻易dd,有可能把系统搞坏,在有把握情况下或数据备份过情况下使用dd



本文转自 ljohnmail 51CTO博客,原文链接:http://blog.51cto.com/ljohn/1891735,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
云计算
使用钉钉扫一扫加入圈子
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

其他文章