6.12 用dd克隆磁盘
同硬盘和分区打交道时,我们可能需要创建所有分区的副本或备份,而不仅仅是复制内容(不仅是各个硬盘分区,而且包括引导记录、分区表等信息)。这时,我们就可以使用dd
命令,它能够用于克隆任何类型的磁盘,如硬盘、闪存、CD、DVD以及软盘等。
6.12.1 预备知识
dd
命令原意是Data Definiton。由于不正确的使用会导致数据丢失,因此它获得了Data Destroyer这一谑称。使用dd
的时候,要留意参数的顺序。错误的参数会损毁全部数据。dd
基本上算是一个比特流复制器(bitstream duplicator),它可以将来自磁盘的比特流写入文件,也可以将来自文件的比特流写入磁盘。让我们来看看dd的用法。
6.12.2 实战演练
dd
的语法如下:
- $ dd if=SOURCE of=TARGET bs=BLOCK_SIZE count=COUNT
其中:
if
代表输入文件或输入设备路径;of
代表目标文件或目标设备路径;bs
代表块大小(通常以2的幂数形式给出,如512、1024、2048等)。COUNT
是需要复制的块数(整数)。
需要复制的字节总数 = 块大小 * COUNT
bs
和count
都是可选的。
通过指定COUNT
,我们可以限制从输入文件复制到目标的字节数。如果不指定COUNT
,dd
会对输入文件进行复制,直到遇见文件结束标志(EOF)为止。
要将一个分区复制到文件中,可以使用:
- # dd if=/dev/sda1 of=sda1_partition.img
该命令中的 /dev/sda1
是该分区的设备路径。
用备份恢复分区:
- # dd if=sda1_partition.img of=/dev/sda1
要留心if
和of
参数。错误使用会造成数据丢失。
将设备路径 /dev/sda1修改成适合的路径,就可以复制或恢复任何磁盘。
如果要永久性删除一个分区中所有的数据,我们可以用dd
向该分区中写入0值,命令如下:
- # dd if=/dev/zero of=/dev/sda1
/dev/zero
是一个字符设备。它总是返回字符 '\0'
。
在容量相同的硬盘间进行克隆:
- # dd if=/dev/sda of=/dev/sdb
其中,/dev/sdb是第二个硬盘。
要制作CD ROM的镜像(ISO文件),方法如下:
- # dd if=/dev/cdrom of=cdrom.iso
6.12.3 补充内容
如果将文件系统创建在一个由dd
生成的文件中,那么我们可以将它挂载到挂载点上。下面让我们看看使用方法。
挂载镜像文件
用环回(loopback)的方法可以将任何由dd
生成的文件镜像进行挂载,这是用mount
命令的-o loop
实现的。
- # mkdir /mnt/mount_point
- # mount -o loop file.img /mnt/mount_point
这样,我们就可以通过 /mnt/mount_point来访问镜像文件的内容了。
6.12.4 参考
3.12节讲解了如何利用dd
从CD中创建一个ISO文件。