1. Clonezilla很棒,但它不支持这种功能。 2. 此外,dd和PartImage也不支持此需求。 3. rsync不会复制MBR,因为MBR不是文件。
我需要克隆HDD而不是备份,因此rsync不是可接受的答案。
有什么建议吗?
显然,你无法将一个较大的分区克隆到一个较小的分区(使用dd等工具),因为空间根本不足。
但是,如果较大分区上的文件也可以适应较小的分区,你可以使用rsync来复制这些文件。要使用的确切选项取决于你的特定用例,但是要简单地复制所有文件,可以使用以下命令:
rsync -av /mount/point/of/large/partition/ /mount/point/of/small/partition
编辑:
再次强调:你不能将一个较大的分区克隆到一个较小的分区。(但请继续阅读,你的问题仍然可以解决。)dd
又该如何知道呢?当然,你可以使用dd
的bs=
和count=
选项,只复制源分区的前几个块,使其适应目标分区,但最终你会得到一个损坏的分区。这肯定不是你想要的结果。dd if=/dev/source of=/tmp/mbr.bak bs=512 count=1
dd if=/tmp/mbr.bak of=/dev/target bs=446 count=1
...将/dev/source
和/dev/target
替换为源硬盘和目标硬盘的设备名称,例如/dev/sda
和/dev/sdb
。(更多信息请点击此处。)
然而,正确的做法是在新的硬盘上进行干净的Grub重新安装(或者您在MBR上安装的其他引导程序)。
总结一下,如果您想要将一个较大的硬盘克隆到一个较小的硬盘上,请按照以下步骤进行:
在目标驱动器上设置一个分区表,其中包含与源驱动器上的分区数量相同的分区。源驱动器上的分区与目标驱动器上的分区应该一一对应,只是目标驱动器上的分区(有些)可以比源驱动器上的分区小。使用诸如 fdisk
或 cfdisk
的工具来完成。
对于目标驱动器上比其对应的源驱动器上的分区小的每个分区,将源驱动器上的这个对应分区的大小减小到与目标驱动器上的分区大小相匹配。使用诸如 gparted
的工具来完成。
对于源驱动器上的每个分区,执行以下命令:
dd if=/dev/sdaX of=/dev/sdbY
... 将源驱动器上的分区 /dev/sdaX
克隆到目标驱动器上的相应分区 /dev/sdbY
(当然要适当替换设备名称)。
如果您坚持要克隆 MBR,请使用本帖子中更早写的两个 dd
命令(带有 /tmp/mbr.bak
的那些)。但是,请记住重新安装干净的 Grub 更好。
rsync
确实不适用于克隆。这正是我之前所说的-仔细阅读我的帖子吧。;) 我编辑了我的帖子,解释了如何克隆所有分区以及MBR。希望这更接近你想要的。 - Malte Skoruppafdisk
/cfdisk
,而在第二步使用parted
/gparted
?为什么要使用不同的工具? - gerritparted
/gparted
作为第一步是完全可以的。就像很多情况一样,达到目标有很多种方法。fdisk
/cfdisk
是更基础的工具,在上述描述中,我只是试图提到最基本的工具来完成任务。 - Malte Skoruppa-k1
,它会按比例在目标磁盘上创建分区表,并打开-r
选项以自动调整分区中的文件系统大小。这正确吗? - Pro Backupk1
选项使其工作,但 -icds
选项对我有效。我会发布一个更详细的答案。 - bbodenmillerGparted应该能完成这个任务。
使用gparted调整大小后,从驱动器启动,给操作系统修复任何错误的机会,然后再使用Clonezilla进行镜像。
然后运行Clonezilla,并复制所需的硬盘分区。
我发现另一个对我很好的选择是:MondoRescure
Mondo Rescue是一个GPL灾难恢复解决方案。
它支持磁带、磁盘、网络和CD/DVD作为备份介质,支持多个文件系统、LVM、软件和硬件Raid。
可以在这里找到一个简单的指南:here
我将发布一些截图:
1.从支持的备份介质类型列表中选择。
1.选择您的备份介质。实时恢复过程与从Mondo媒体启动后键入mondorestore命令时的体验非常相似。
3. 标记您想要恢复的文件和目录。使用“更多”和“更少”按钮来打开和关闭子目录。
/dev/sda
目标 (新的较小驱动器) 是:/dev/sdb
在您的设置中可能会有所不同。# Mount src as read only under `/mnt/source`:
sudo mkdir /mnt/source ; sudo mount -o ro /dev/sda/mnt/souce
# Mount the destination drive under `/mnt/destination`
sudo mount /dev/sdb1 /mnt/destination/
# copy src filesystem to destination filesystem with:
sudo rsync -log /mnt/destination/rsync-copy.log --progress -avr --exclude=/mnt/source/dev/ -A -H -X --numeric-ids /mnt/source/* /mnt/destination/
fstab
以使用新驱动器的UUID来挂载磁盘。# list disk UUID:s and pick the appropriate one for your drive
ls -la /dev/disk/by-uuid
sudo grub-install /dev/dev/sdb
# load some needed grub modules
insmod ext2
insmod linux
# lists your disk devices
ls
hd0,msdos1
)set root=(hd0,msdos1)
vmlinuz-xxx
和initrd-xxx
的确切名称,以配置GRUB使用。ls /boot/
ls
命令中获取vmlinuz和initrd的正确名称,并使用它们代替我在下面示例中使用的版本。linux /boot/vmlinuz-2.6.32-5-amd64 root=/dev/sda single
/dev/sda
是设备,下次您只使用目标磁盘重新启动机器时,该驱动器将成为根文件系统磁盘。initrd /boot/initd.img-2.6.32-5-amd64
boot
sudo update-grub
设备-设备
克隆。选择高级选项并启用-icds
选项以跳过磁盘大小检查。继续进行克隆,移除旧驱动器,并尝试从新驱动器启动。如果出现错误,请尝试-fsck-src-part
选项,该选项可帮助您修复源磁盘上的错误。如果您确定镜像中的所有数据都可以适应较小的磁盘,即不会写入错误的磁盘空间,您可以选择选项“-icds”。警告!要选择此选项,您必须知道自己在做什么!
我阅读的一个常见问题解答建议使用Clonezilla的-icds
和-k1
选项,但对我来说没有起作用。其他人提到可以使用GParted复制分区,但它无法复制所有分区类型,并且在使用该方法后,我的机器无法启动,可能是因为未复制某些隐藏在分区之间的信息。
pip install weresync
weresync -C -g 2 -E 1 /dev/sda /dev/sdb
-B 3
传递给WereSync即可。使用dd
创建一个256Mb闪存卡的映像(此示例假定卡已挂载在/dev/sdb
):
dd if=/dev/sdb of=image256.iso
使用unetbootin读取image256.iso
ISO文件(磁盘映像选项)。
选择32Mb卡所在的USB驱动器,然后将映像转储到32Mb卡中。