使用`dd`复制多分区,多FS设备的经验

我有一个光盘上有几个分区,每个分区有不同types的文件系统(ext3,ext4,和,比方说,NTFS)。 我想知道是否可以使用dd将整个光盘复制到新光盘(容量更大),最好是单次操作。

为了防止不必要的努力,让我澄清一些事情。 我对其他方式不感兴趣(我知道正确的方法,第三方软件是不可取的)。 我并不是对理论答案感兴趣(“它应该工作”)。 我对其他人尝试做这样的事情非常感兴趣。

我知道真正正确的答案是“试试看”,但距离光盘有250英里。

如果你必须这样做,而且你必须处在一个非常糟糕的地方 ,甚至不要想这么做。

单独复制分区是最安全的。 例如:

 # Install a temporary ssh key so we don't have to deal with lots of # password prompts, remember to remove it from authorized_keys later ssh-keygen ssh-copy-id -i ~/.ssh/id_rsa user@host # Copy everything, you can go have breakfast - and probably lunch - # while you wait for partition in /dev/sdb?* do dd if=$partition | ssh user@host "dd of=$(basename $partition).img" done 

等待几分钟或几小时完成复制,然后从磁盘映像开始恢复。 例如,在新磁盘上,可以创build一个新的分区表,使用正确大小的分区来保存磁盘映像,然后将映像dd映射回新分区。


复制整个磁盘 (例如dd if=/dev/sdb )会使事情变得更加复杂,因为您拥有完整的磁盘映像,您可能必须以某种方式将其分割成多个分区。 如果你想把整个驱动器直接连接到另一个物理磁盘上,那么再想想:当系统拒绝确认分区表和新的硬盘驱动器之间有什么关系时,有时候你会丢失。

如果您必须一次复制整个磁盘(您可能不需要这样做,所以不要考虑这个问题),然后将其复制到映像文件,并使用kpartx与分区一起工作。 例如:

 dd if=/dev/sdb | ssh user@host "dd of=sdb.img" # Later, on the recovery host... kpartx -l sdb.img kpartx -a sdb.img # Now you can... mount -o ro /dev/mapper/loop0p1 /mnt/rescuep1 mount -o ro /dev/mapper/loop0p2 /mnt/rescuep2 # or copy to a new hard drive... dd if=/dev/mapper/loop0p1 of=/dev/sdc1 dd if=/dev/mapper/loop0p2 of=/dev/sdc2 

如果物理磁盘遇到麻烦,请考虑使用dd_rescue (尽pipe您没有真正问过这个问题)。