当前位置: 首页>>技术问答>>正文


如何克隆到较小的硬盘?

, , , ,

问题描述

如何将硬盘克隆到较小的硬盘。

  1. Clonezilla很棒,但它不支持这样的功能。

  2. 此外,dd和PartImage不支持此要求。

  3. 由于MBR不是文件,因此rsync不会复制MBR。

我需要克隆硬盘而不是备份,所以rsync不是一个可接受的答案。

有什么建议?

最佳解决思路

您显然无法将较大的分区克隆到较小的分区(使用dd等),因为空间不足。

但是,如果较大分区上的文件也适合较小的分区,则可以使用rsync复制这些文件。使用的确切选项取决于您的特定用例,但只需复制以下应执行的所有文件:

rsync -av /mount/point/of/large/partition/ /mount/point/of/small/partition

编辑:再次:您不能将较大的分区克隆到较小的分区。 (但请继续阅读,您的问题可以解决。)

原因很简单:您的源分区比目标分区大。你能指望什么?是否应该删除一些块?哪个? dd应该怎么知道?当然,您可以使用ddbs=count=选项仅复制源分区的第一个so-and-so块,使其适合您的目标分区,但最终会出现分区损坏。那肯定不是你想要的。

因此,由于您无法将较大的分区克隆到较小的分区上,因此您唯一能做的就是首先将源分区的大小减小到小于或等于目标分区的大小,如gparted所知文件系统细节,这样你就不会丢失数据。只有这样你才能使用dd来克隆分区。理想情况下,源分区的新大小应该等于目标分区的大小(而不仅仅是更小或相等),否则在克隆后最终会在目标分区上留下一些未分配的空间。

另请注意,您不应简单地将较大驱动器的MBR复制到较小驱动器的MBR上(反之亦然)。 MBR大小为512字节,是硬盘的第一部分,包含有关硬盘布局的信息:

  • 446字节 – Bootstrap。

  • 64字节 – 分区表。

  • 2个字节 – 签名。

(注意446+64+2=512。)

如果你坚持克隆MBR,那么只能克隆前446个字节,如下所示:

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。 (More information is available here.)

但是,正确的方法是在新的硬盘驱动器上进行干净的Grub重新安装(或者你的MBR上的任何东西)。

总而言之,如果要将较大的驱动器克隆到较小的驱动器上,请按以下步骤操作:

  1. 在目标驱动器上布置分区表,其中包含与源驱动器上一样多的分区。源驱动器上的分区与目标驱动器上的分区之间应该存在one-to-one对应关系,除了目标驱动器上的(某些)分区可能小于源驱动器上的相应分区。使用fdiskcfdisk等工具。

  2. 对于目标驱动器上小于源驱动器上相应分区的每个分区,请减小源驱动器上此对应分区的大小,以匹配目标驱动器上分区的大小。使用gparted等工具。

  3. 对于源驱动器上的每个分区,请发出命令

    dd if=/dev/sdaX of=/dev/sdbY
    

    …将分区/dev/sdaX从源驱动器克隆到目标驱动器上的相应分区/dev/sdbY(当然,适当地替换设备名称。)

  4. 如果您仍坚持同时克隆MBR,请使用本文后面进一步编写的两个dd命令(具有/tmp/mbr.bak内容的那些命令)。但是,请记住,干净的Grub re-install会更好。

次佳解决思路

正如Malte Skoruppa已发布的那样,无法进行精确克隆。但是,只要较大的磁盘未满,clonezilla就能完成此任务(Malte已经提到过)。

基本上,您需要启用高级选项和”ignore”关于较小磁盘的警告消息。有关屏幕截图的详细信息,请参阅Clonezilla docs。将160GB HDD的备份恢复到64GB SSD时遇到了同样的问题。对我来说这很有效。

应该是您想要的结果的另一个解决方案是恢复到相同大小的磁盘并重新分区以使新分区模式适合较小的磁盘。有关如何执行此操作的详细信息,请参阅jsm-techblog.blogspot.de

第三种解决思路

Gparted应该可以胜任

  1. 使用gparted调整大小后,从驱动器启动,使操作系统有机会在使用Clonezilla进行映像之前修复任何错误。

  2. 然后运行Clonezilla并制作所需硬盘分区的副本

另一个我认为对我很好的选择:MondoRescure

Mondo Rescue is a GPL disaster recovery solution.

It supports tapes, disks, network and CD/DVD as backup media, multiple filesystems, LVM, software and hardware Raid.

一个简单的指南可以找到here

我会发布一些截图:

第1步备份(分区屏幕)

1.从支持的备份媒体类型列表中选择。

software-recommendation,dd,clone,clonezilla,ubuntu

2.如果您要备份CD /DVD- + R [W],那么Mondo会询问您的CD刻录机是否具有BurnProof技术,是否在笔记本电脑内,或者是否是偏心的。如果您要备份到磁带流媒体,那么您将看不到此消息

你想要多少压缩?无,如果你的磁带流媒体有内置硬件压缩。最高,如果您的CPU速度非常快。平均值应该适用于大多数情况。

software-recommendation,dd,clone,clonezilla,ubuntu

4.如果你想备份整个计算机(不包括/sys,/run和/proc,自然和/tmp),那么将其保留为/这是默认值。否则,指定子集(例如/usr /local | /home)确保在每个路径之间放置一个管道。

software-recommendation,dd,clone,clonezilla,ubuntu

5.如果要备份整台计算机,则可能需要排除某些目录,例如: /共享/MP3。请在’exclude directories’对话框中指定它们。请在每条路径之间放一根管子,例如/共享/私| /划伤| /NFS | /窗口

software-recommendation,dd,clone,clonezilla,ubuntu

你的内核是否理智? Red Hat,Mandrake,SuSE,Debian和Slackware用户通常应该说’yes’,因为这些供应商擅长生产可靠的内核。如果您使用的是Gentoo或LFS,那么您的内核可能是non-standard,在这种情况下,请说’no’使用Mondo的故障安全内核(单独提供)。

software-recommendation,dd,clone,clonezilla,ubuntu

7.如果要在将存档写入媒体后验证存档,请在此处说’yes’。如果你对你的硬件和Linux发行版有绝对的信心,那就说’no’ ……还有一点祷告。

software-recommendation,dd,clone,clonezilla,ubuntu

8.如果你确定要继续,请说’yes’并在Mondo备份你的计算机时找到别的事情。如果您说’no’,那么您将在shell提示符下被毫不客气地转储。 🙂

software-recommendation,dd,clone,clonezilla,ubuntu

9.备份过程现在开始了。首先要执行一些pre-backup任务,但备份基本上正在进行中。为简化备份过程,您被问到一系列问题。下次,如果您愿意,可以使用各种命令行开关调用mondoarchive来控制其行为,而不是回答一系列问题。有关详细信息,请参见手册页。

software-recommendation,dd,clone,clonezilla,ubuntu

10.Mondo将为要备份的所有文件制作目录。这可能需要长达五分钟。文件列表将分为几组,每组大约4 MB(压缩前)文件。这通常需要一分钟。

software-recommendation,dd,clone,clonezilla,ubuntu

11.Mondo调用Mindi。 Mindi生成可启动媒体映像和辅助数据磁盘映像,这些映像基于您现有的Linux发行版和文件系统。这样,您可以确定Mondo的工具将与您现有的文件系统和二进制文件兼容:Mondo的工具是您的工具。 Mindi最多需要五分钟才能跑完。

software-recommendation,dd,clone,clonezilla,ubuntu

12.最后,Mondo开始备份您的计算机。此过程可能需要几分钟或几个小时,具体取决于您要归档的数据量,CPU的速度,RAM的容量等等。它将备份您的常规文件,然后备份您的大文件(大于约32MB的文件)。如果您选择验证备份,Mondo也会这样做。

software-recommendation,dd,clone,clonezilla,ubuntu

第2步恢复(分区克隆)

1.选择您的备份媒体类型。实时恢复过程非常类似于从Mondo媒体启动后键入没有参数的mondorestore时所遇到的过程。

software-recommendation,dd,clone,clonezilla,ubuntu

2.插入磁带/CD后,点击’OK’。如果您生成了磁带备份,则磁带本身就足够了。如果您生成了CD备份,则第一张CD应该足够了。否则,您可能需要引导介质。

software-recommendation,dd,clone,clonezilla,ubuntu

3.Flag您要还原的文件和目录。使用’More’和’Less’按钮打开和关闭子目录。

software-recommendation,dd,clone,clonezilla,ubuntu

4.指定要将文件还原到的位置。通常,’/’是合适的。如果您不想覆盖要还原的文件的较新版本,请指定/tmp /BKP或类似的还原路径。

software-recommendation,dd,clone,clonezilla,ubuntu

5.Mondorestore将从媒体中检索配置信息。 (示例屏幕适用于磁带用户.CD用户会看到不同的内容。)

software-recommendation,dd,clone,clonezilla,ubuntu

6.Data将恢复到硬盘 – 首先是常规文件,然后是恢复集中的任何大(32MB或更大)文件。

software-recommendation,dd,clone,clonezilla,ubuntu

第四种思路

“Pseudo-cloning”可以通过使用Clonezilla来实现较大硬盘的”Pseudo-cloning”。实际上,您可以保存和恢复磁盘的分区。以下步骤(针对HDD到SSD传输开发)将帮助您:

  1. 第一个技巧是使用Gparted调整硬盘驱动器上的分区大小,缩小每个分区,以减少它包含的未使用空间量。显然,分区的大小必须使所有分区所需的总空间小于SSD的容量。

  2. 然后运行Clonezilla并制作单个硬盘分区的副本(使用saveparts选项),将这些临时存储在外部USB驱动器上。请注意,必须保存分区(saveparts)而不是制作整个磁盘(savedisk)的映像。

  3. 在目标机器中安装SSD后,第二个技巧是再次使用分区管理器在SSD上创建所需的分区结构。

  4. 然后使用Clonezilla将保存的分区(使用restoreparts)恢复到SSD上。

请参阅:“Cloning” a hard drive to a smaller SSD以获取有关该过程的更多讨论以及参考源的许多链接。

第五种思路

由于上面的大多数例子似乎都暗示了re-sizing你的原始驱动器如果它实际复制之前通过修改它会冒你的数据。

还有另一种风险较低的方法,尽管我使用的是非常手动的。因为它会保持原始驱动器不受影响,以防你因为失败而想要退回。

此外,使用克隆/re-sizing,在进行磁盘交换时,无法切换到较新的文件系统,同时转移到新驱动器。通过以下步骤,您只需在目标驱动器上创建所选的文件系统。

Install new destination drive along side original drive into your computer.

  • 从ubuntu live cd启动计算机。

  • 在目标驱动器上。使用gparted create:一个ext4(或你决定切换到的任何新的快速文件系统)(卷,交换卷和交换 – 文件系统

  • 在gparted中设置新卷上的bootflag

在我的示例中,源(原始驱动器)是/dev /sda,目标(新的较小驱动器)是/dev /sdb在您的设置中它可能是不同的

mount src as read only under /mnt/source

  • mkdir /mnt /source; mount -o ro /dev /sda /mnt /souce

mount the destination drive under /mnt/destination

  • mount /dev /sdb1 /mnt /destination /

copy src filesystem to destination filesystem with:

  • rsync -log /mnt/destination/rsync-copy.log –progress -avr –exclude = /mnt /source /dev /-A -H -X –numeric-ids /mnt /source /* /mnt /destination /

ubuntu uses uuid instead of device name to find and mount the drive since we have a new disk , we want to change the destination fstab to use the new drives uuid to mount the disk

  • ls -la /dev /disk /by-uuid现在为/更改uuid并在/mnt /destination /etc /fstab中交换。如果您决定将其更改为与原始驱动器不同的内容,请不要忘记更改挂载点的文件系统

如果重要的是grub是相同的版本,再次启动原始磁盘并运行并运行以下命令将grub安装到新驱动器

  • grub-install /dev /dev /sdb

Now remove the source drive from your computer and boot the destination drive. grub will fail to boot completely and exit to a recovery shell in the grub recovery shell:

to load some needed grub modules – insmod ext2 – insmod linux lists your disk devices – ls

pick the proper device (in my example its is hd0,msdos1)

  • set root =(hd0,msdos1)

find the exact name of vmlinuz-xxx and initrd-xxx to configure grub to use

  • ls /boot /查看并使用你从上面的ls获得的vmlinuz和initrd的正确名称并使用它们而不是我在下面使用的示例版本

  • linux /boot/vmlinuz-2.6.32-5-amd64 root = /dev /sda single如果/dev /sda是​​设备,下次重新启动只有dst磁盘的>机器时驱动器将成为rootfs磁盘

  • initrd /boot/initd.img-2.6.32-5-amd64

this should have successfully booted the machine Finally to update grub to use the new disk uuid so you dont need to repeat this manual procedure every time:

  • update-grub

第六种思路

您可以使用ClonezillaGParted将数据传输到较小的驱动器。

使用GParted Live CD缩小分区,使其适合新驱动器。移动分区,使空(灰色)空间位于驱动器的末尾。如果在您的第​​一个分区离开该空间之前已经有空的空间,因为它可能包含引导或其他隐藏信息。

使用Clonezilla进行device-device克隆。选择advanced options并启用-icds选项以跳过磁盘大小检查。继续克隆,删除旧驱动器,并尝试从新驱动器启动。如果出现错误,请尝试使用-fsck-src-part选项来帮助您修复源磁盘上的错误。

来自Clonezilla docs

If you are sure all the data from the image could fit the smaller disk, i.e. it won’t be written to the wrong disk space, you can check the option “-icds”.Warning! To select this option, you have to know what you are doing!.

One FAQ我读过建议使用-icds-k1选项与Clonezilla,但这对我不起作用。其他人提到你可以使用GParted复制分区但是它无法复制所有分区类型,并且在使用该方法后我无法启动我的机器,可能是由于分区之间的某些隐藏信息未被复制。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2096.html,未经允许,请勿转载。