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

Mad*_*ter 5 dd disk-image

我有一个带有多个分区的磁盘,每个分区都有不同类型的文件系统(ext3、ext4 和 NTFS)。我想知道我是否可以使用 将整个光盘复制到一张新光盘(容量更大)dd,最好是在一次操作中。

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

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

Mic*_*ton 8

如果你必须这样做,而且你必须在一个非常糟糕的地方甚至考虑这样做......

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

# 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
Run Code Online (Sandbox Code Playgroud)

等待几分钟或几小时让复制完成,然后从磁盘映像开始恢复。例如,在一个新磁盘上,您可以创建一个新的分区表,其中包含正确大小的分区以保存磁盘映像,然后dd将映像返回到新分区。


复制整个磁盘(例如dd if=/dev/sdb)会使事情变得更加复杂,因为您拥有完整的磁盘映像,无论如何您可能不得不以某种方式将其拆分为多个分区。如果您想dd将整个驱动器直接连接到另一个物理磁盘,请再想一想:有时当系统拒绝承认分区表和新硬盘驱动器彼此有任何关系您就会失败。

如果您必须一次性复制整个磁盘(您可能不必这样做,所以不要考虑这一点),然后将其复制到映像文件并用于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
Run Code Online (Sandbox Code Playgroud)

如果物理磁盘有物理问题,请考虑使用dd_rescue(尽管您并没有真正询问)。