03月07, 2018

使用dd备份存储设备

我们可以使用dd很方便地把任何存储设备或者其下面的某个分区按字节备份到某个文件中,也可以从某个文件写回存储设备。

dd的用法也很简单。执行dd if=源 of=目的即可。

下面举几个例子:

  • dd if=/dev/sda of=/dev/sdb:将设备/dev/sda按字节复制到/dev/sdb中,相当于硬盘对拷。
  • dd if=/dev/sdb of=/opt/SDCard.img:将设备/dev/sdb按字节复制到文件/opt/SDCard.img中,是将存储设备按字节备份到文件。
  • dd if=/opt/SDCard.img of=/dev/sdb:将上面的ifof颠倒过来了,作用也就是从文件将数据复制到存储设备中,相当于恢复。

这里需要注意一个问题:最好是把设备取消挂载之后再进行dd写入操作,否则写入完成之后取消挂载拔出设备时,系统可能会对设备的分区信息进行写入操作,导致恢复进去的分区信息被覆盖,从而无法读取设备。当然,如果不小心忘了在写入之前取消挂载也没关系,可以等设备不在工作时直接拔出设备,或者重新dd一下,等一秒之后使用^C结束操作,这样开头的几个扇区会重写进去,分区信息也就得以恢复了。

不过在dd的过程中是不知道进度的,但我们也有其他方法可以做到。

我们新开一个终端,执行watch -n 5 pkill -USR1 ^dd$,执行dd的界面就会每隔五秒输出一次信息。

此外还有以下几种方法,但我只测试了第一种。

第一种方式:每5秒显示进度

watch -n 5 pkill -USR1 ^dd$

第二种方式:

watch -n 5 killall -USR1 dd

第三种方式:

while killall -USR1 dd; do sleep 5; done

第四种方式:

while (ps auxww |grep " dd " |grep -v grep |awk '{print $2}' |while read pid; do kill -USR1 $pid; done) ; do sleep 5; done

参考文档:

http://blog.csdn.net/mao0514/article/details/53351138

http://www.cnblogs.com/blackangeldsf/p/7454722.html

本文链接:https://debug.fanzheng.org/post/backup-storage-devices-using-dd.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。