我有一个定期备份的磁盘。该磁盘由几个不同的分区组成。以前我一直使用 dd 命令一次性备份 /dev/sdX ,一切都很顺利。有时我还使用这些备份将磁盘克隆到另一个磁盘。
然而,事实证明,其中一个分区非常大,并且很少发生变化。如果我可以只备份单个分区,这样备份可以更小,那就更好了。
当然 dd 可以只备份 /dev/sdX1、/dev/sdX2 等。但是:我仍然希望能够从裸机将这些备份克隆到新磁盘。我目前可以通过整个磁盘的备份很好地做到这一点,但是如果我只备份分区,情况会有所不同。
我该怎么做呢?我还需要存储 MBR 之类的东西吗?
答案1
对于 Linux 上的 dd 来说,数据是在文件之间还是在块设备之间传输并不重要。
我假设,当您创建备份时,您将其存储在磁盘映像中,如下所示:
dd bs=128M if=/dev/sda of=backup.dd
注意:这还将复制 MBR 和 GPT 数据,因为它们驻留在磁盘的前 512 (MBR) 或 16k (GPT) 字节中。
Linux 中的好处是:您可以像使用“虚拟”循环设备的块设备一样使用映像文件:
udisksctl loop-setup --file backup.dd
现在您的备份出现在文件管理器中 - 就像外部备份一样。通常/dev/loopX
用X
数字来称呼。循环设备也有分区/dev/loopXp1
等。
您现在可以更新备份的单个分区:
dd bs=128M if=/dev/sda1 of=/dev/loopXp1
更新后,“卸载”文件:
udisksctl loop-delete --block-device /dev/loopX
但是等等 - 还有更多:使用专门的文件系统工具,您可以通过仅复制分区的已使用部分而跳过所有空白空间来加快更新速度。我可以推荐这些(我不知道其他人的想法):
- 外部2/3/4:
e2image -rap /dev/sda1 /dev/loopXp1
- NTFS:
ntfsclone --overwrite /dev/loopXp1 /dev/sda1
但是等等 - 还有更多:根据利用率,您还可以使用 rsync 来更新备份。为此,需要在备份文件中挂载文件系统(在循环设置之后,在循环删除之前):
udisksctl mount -b /dev/loopXp1
rsync -av wherever/dev/sda1/is/mounted/ wherever/dev/loopXp1/is/mounted/
udisksctl unmount -b /dev/loopXp1