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

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

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

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

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

答案1

如果你必须这样做,而且你必须处于非常糟糕的地方甚至思考关于这样做...

最安全的做法是单独复制各个分区。例如:

# 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

等待几分钟或几小时,复制完成,然后开始从磁盘映像进行恢复。例如,在新磁盘上,您可以创建一个新的分区表,其中的分区大小正确,可以保存磁盘映像,然后将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

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

相关内容