如何克隆到较小的硬盘?

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

  1. Clonezilla很棒,但它不支持这样的function。
  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=选项来仅复制源分区的第一个这样多的块,使其适合您的目标分区,但最终会出现分区损坏。 那肯定不是你想要的。

因此,由于您无法将较大的分区克隆到较小的分区上,因此您唯一能做的就是首先将源分区的大小减小到小于或等于目标分区的大小,并使用类似于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 。 ( 更多信息请点击此处。 )

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

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

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

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

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

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

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

  4. 如果你坚持也克隆了MBR,请使用上面在本文中进一步编写的两个dd命令(那些带有/tmp/mbr.bak东西)。 但是,请记住,重新安装干净的Grub会更好。

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

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

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

Gparted应该做的工作

  1. 使用gpartedresize后,从驱动器启动,使操作系统有机会在使用Clonezilla成像之前修复任何错误。

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

另一个我觉得很适合我的选择: MondoRescure

Mondo Rescue是一款GPL灾难恢复解决方案。

它支持磁带,磁盘,网络和CD / DVD作为备份媒体,多个文件系统,LVM,软件和硬件Raid。

这里有一个简单的指南

我会发布一些截图:

第1步备份(分区屏幕)

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

在此处输入图像描述

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

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

在此处输入图像描述

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

在此处输入图像描述

5.如果要备份整台计算机,则可能需要排除某些目录,例如/ shared / MP3。 请在“排除目录”对话框中指定它们。 请在每个路径之间放置一个管道,例如/ shared / private | / scratch | / nfs | / windows

在此处输入图像描述

你的内核是否理智? Red Hat,Mandrake,SuSE,Debian和Slackware用户通常会说“是”,因为这些供应商擅长生成可靠的内核。 如果您使用的是Gentoo或LFS,那么您的内核可能是非标准的,在这种情况下,请说“不”使用Mondo的故障安全内核(单独提供)。

在此处输入图像描述

7.如果您想在将档案写入媒体后validation档案,请在此处说“是”。 如果你对你的硬件和你的Linux发行版有绝对的信心,那就说’不’……还有一点祷告。

在此处输入图像描述

8.如果您确定要继续,请说“是”并在Mondo备份计算机时找到其他事情要做。 如果你说’不’那么你将被毫不客气地倾倒在shell提示符下。 🙂

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

第2步恢复(分区克隆)

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

在此处输入图像描述

2.插入磁带/ CD后,单击“确定”。 如果您生成了磁带备份,则磁带本身就足够了。 如果您生成了CD备份,则第一张CD就足够了。 否则,您可能需要引导介质。

在此处输入图像描述

3.Flag您要还原的文件和目录。 使用“更多”和“更少”按钮打开和关闭子目录。

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

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

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

  3. 在目标机器中安装SSD后,第二个技巧是再次使用分区管理器在SSD上创建所需的分区结构。
  4. 然后使用Clonezilla将保存的分区(使用restoreparts)恢复到SSD上。

请参阅: “克隆”硬盘驱动器到较小的SSD,以获得有关该过程的更多讨论以及参考源的许多链接。

由于上面的大多数示例似乎都建议实际重新调整原始驱动器的大小。如果数据实际复制之前通过修改数据存在风险。

还有另一种风险较低的方法,虽然我使用的是非常手动的。 因为它会使源驱动器保持不变,以防您因为某些操作失败而退回。

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

将新的目标驱动器与原始驱动器一起安装到计算机中。

  • 从ubuntu live cd启动计算机。
  • 在目标驱动器上。 使用gparted create:一个ext4(或你决定切换到的任何新的快速文件系统)(卷,交换卷和交换 – 文件系统
  • 在gparted中设置新卷上的bootflag

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

mount src只读/在/ mnt / source下

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

在/ mnt / destination下安装目标驱动器

  • mount / dev / sdb1 / mnt / destination /

将src文件系统复制到目标文件系统:

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

ubuntu使用uuid而不是设备名来查找和装载驱动器,因为我们有一个新磁盘,我们想要更改目标fstab以使用新驱动器uuid来安装磁盘

  • ls -la / dev / disk / by-uuid

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

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

  • grub-install / dev / dev / sdb

现在从计算机中删除源驱动器并启动目标驱动器。 grub将无法完全启动并退出到grub恢复shell中的恢复shell:

加载一些所需的grub模块 – insmod ext2 – insmod linux列出你的磁盘设备 – 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是​​设备,则下次重新启动只有dst磁盘的>机器时,驱动器将成为rootfs磁盘

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

这应该已成功启动机器最后更新grub以使用新磁盘uuid所以你不需要每次都重复这个手动过程:

  • 更新GRUB

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

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

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

来自Clonezilla文档 :

如果您确定图像中的所有数据都适合较小的磁盘,即它不会被写入错误的磁盘空间,您可以选中“-icds”选项。警告! 要选择此选项,您必须知道自己在做什么!

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

可能不是问题的正确答案,但我到达此页面试图解决类似的问题:

我想将旧的256Mb紧凑型闪存卡克隆到32Mb的闪存卡中,闪存卡包含一个小型Linux设备,可生产小型弹簧线圈。

解决这个问题:

(当然,256Mb中使用的有效空间<32Mb,因此很适合)

  1. 使用’dd’创建256Mb闪存卡的图像(即假设卡安装在/ dev / sdb中):

     dd if=/dev/sdb of=image256.iso 
  2. 使用unetbootin读取’image256.iso’ISO(Diskimage选项)。

  3. 选择32Mb卡所在的USB驱动器,然后继续将映像转储到32Mb卡中。

就是这样,32Mb卡再次成功启动了我的机器。

HTH

您可以尝试分两步完成将系统克隆到稀疏图像(图像在添加更多内容时变大)现在从此Image恢复到第二个较小的磁盘。

它可以完成..使用live cd只需从大磁盘收缩文件系统(resize2fs),而不是最后一个分区(如/ dev / sdc3)的lvm(如果有的话),这样它就可以放在小磁盘上。

使用fdisk删除并使用较小扇区重新创建最后一个分区(/ dev / sda3),因此大磁盘的最后一个扇区具有与小磁盘的最后一个扇区相同的值。

比你的#dd if = big of = small bs = 10M,直到空间不足为止。

收缩时要格外小心,因为一个坏值会导致数据丢失。

使用GParted缩小较大磁盘中的文件系统后,我将两个磁盘置于镜像模式的RAID盒中,其中较大的磁盘是源,较小的磁盘是目标。 我只需要点击案例内的重置按钮(不是改变模式,即Raid 1到Raid 0)来开始克隆。 工作得很完美! :)我使用GW3.5AX2-SU3 / MB Raid案例。

我发布了将250gb(sda)的启动磁盘缩小到120gb(sdc)磁盘的经验

sda包含2个分区:

  • sda1 – > / boot(ext3)
  • sda2 – > lvm2:/(245gb)和交换(5gb)

所以我这样做:

  • dd sda mbr to sdc
  • fdisk sdc并写入更改,因此它在sdc中创建结构
  • dd sda1到sdc1

然后因为我的gparted不适用于lvm:

从救援盘:

  • 首先卸下VG / LV00
  • e2fsck VG / LV00
  • resize2fs / VG / LV00 xxxxxxxxK(我比使用的空间多1gb)
  • lvreduce -L xxxxxxxxxK VG / LV00(我比fs空间多1gb)
  • pvresize / dev / sda2 –setphysicalvolumesize xxxxxxxxxxxxK(我比威尔LV空间多1 gb)(我这里有一个错误……所以:

    • pvs -v –segments / dev / sda2(查看细分)
      • pvmove –alloc anywhere / dev / sda2:segment_min-segment_max(来自我在“光盘右侧”看到的片段)

但是分区仍然很大,因为我只收缩FS-LV-VG,所以:

我用fdisk重新创建分区:

 fdisk /dev/sda d --> 2 n --> p --> 2 --> default --> (new reduced size!!!) w 

然后系统提示旧分区表正在使用,直到下次重启。 但我忘了重新启动并执行图像:

dd if = / dev / sda2 of = / dev / sdc2 bs = 4096(此时我觉得有些东西会出错,因为分区表没有反映出新sda2的结束,我无法用sdc启动)

但一切都很好,重启后,甚至系统选择sdc分区启动 (它抱怨重复PV,LV和/ boot)

我不知道我是幸运还是我做了不必要的步骤…任何评论都要欣赏。

免责声明:我是WereSync的原作者

使用WereSync可以实现这一点。 WereSync遵循Malte答案的一般过程,但只需要一个命令而不是几个命令。 此外,如果您使用克隆作为备份,它可以逐步更新该备份,因为它在后端使用rsync。

要安装WereSync,请使用pip:

 pip install weresync 

从那里你可以简单地使用WereSync命令

  weresync -C -g 2 -E 1 /dev/sda /dev/sdb 

上面的命令将数据从/ dev / sda复制到/ dev / sdb。 -C标志标记WereSync应检查两个驱动器上的分区是否相同,如果不是,则WereSync应将分区从/ dev / sda复制到/ dev / sdb并resize以使它们适合。 新分区的UUID将不同。 用于测试分区是否有效的系统可能很苛刻,因此在您第一次备份后我建议省略此标志。

可以省略-g-E命令,但在这种情况下,引导加载程序安装几乎肯定会失败。

-g是指“grub分区”,或者应该安装分区grub。 通常这是安装在/上的分区。 因此,如果您在/上安装了/ dev / sda2,则将-g 2传递给WereSync,如上例所示。 如果省略,WereSync将尝试自己发现正确的分区,但这很容易出错。 我建议简单地传递旗帜。

-E表示EFI分区。 如果您的EFI分区位于/ dev / sda1上,请将-E 1传递给WereSync,如上面的命令所示。

如果/ boot文件夹有一个单独的分区,则需要让WereSync知道。 如果您在/ dev / sda3上有,那么将-B 3传递给WereSync。

有关此命令可能标志的更多详细信息,请参阅WereSync命令文档 。

我遇到这个问题导致Win 10更新到1607会在重新启动后中断,因为我的NVMe(三星950 Pro)无法被识别,所以我将NVMe克隆到另一个(更大的)内部驱动器(在我的情况下是“Toshiba”) ,更新了Win 10并将系统恢复到NVMe。

以下是我需要做的步骤(因为带有-icds restoreparts不起作用)。

工具:

  • Windows 10 1607 DVD(位深度和语言取决于您当前的操作系统)
  • Clonezilla Live DVD( 2.4.5 + )
  • 或Clonezilla Live DVD( 20160203-xenial + ),因为它可以在BIOS中设置UEFI启动
  • (可选)GParted Live DVD( 0.27.0-1 )

制备:

  1. 刻录CD / DVD上的所有工具
  2. 运行Clonezilla并克隆(驱动映像)NVMe到图像(例如外部驱动器)

注意:

如果您使用来自稳定分支的Clonzila,则必须在BIOS中切换到Legacy启动模式才能从CD启动。 否则,如果您使用备用分支下载,则应支持UEFI引导。

免责声明:

按照自己的责任遵循指南。 这里的步骤和命令都经过检查和双重检查,但拼写错误可能会导致数据丢失或硬件故障,因此首先要了解您正在做的事情并将这些步骤作为正确方向的提示。

程序,流程:

  1. 运行Clonezilla并克隆(驱动器驱动)NVMe到Toshiba(在我的情况下,另一个内部驱动器,我事先清理/备份)
  2. 第一次我认为我在Windows中有一些冲突,NVMe仍然有Win启动信息,所以这次我在最初克隆到Toshiba之后(所以,在切换到UEFI启动之前)删除了NVMe驱动器上的所有分区

    〜使用以下命令在Clonezilla shell中轻松完成删除:

     sudo su dd if=/dev/zero of=/dev/nvme0n1 bs=512 count=1 

    〜或者,启动到GParted并在那里进行视觉操作

  3. (切换到BIOS中的UEFI启动)

  4. 开机(将使用东芝)
  5. 运行Win 10 1607安装DVD并选择安装,选中下载更新,然后选择保留应用和数据。 这应该将东芝升级到最新版本的Win 10。
  6. (切换到BIOS中的Legacy boot)以防万一,将Toshiba备份到图像(通过Clonezilla)
  7. 因为复制MBR对我没有任何作用,所以GPT在这个故事中很重要,所以进入(Clonezilla)shell并将GPT从Toshiba复制到NVMe

     sudo su sgdisk /dev/sda -R /dev/nvme0n1 sgdisk -G /dev/nvme0n1` 

    ( 解释 )

  8. 因为Clonezila(即使使用Expert开关-icds)重新启动以恢复分区,再次进入shell并执行:

     partprobe #forces kernel to reload partition infos fdisk -l #shows all disks info dd if=/dev/sda1 of=/dev/nvme0n1p1 bs=64K status=progress dd if=/dev/sda2 of=/dev/nvme0n1p2 bs=64K status=progress dd if=/dev/sda3 of=/dev/nvme0n1p3 bs=64K status=progress ... 

    ( 更多信息 )

  9. 备份Tosiba MBR和GPT:

     sgdisk --backup=sda.gpt /dev/sda 
  10. 将备份复制到安全的地方(因此我们可以将其恢复,而不是我们在步骤6中执行的整个驱动器映像)

     mkdir /mnt/usb (put in usb flash or similar) mount /dev/sdb /mnt/usb cp sda.gpt /mnt/usb umount /dev/sdb` 
  11. 清除Toshiba分区信息,以免与Windows发生冲突

     dd if=/dev/zero of=/dev/sda bs=512 count=1 
  12. (从BIOS切换到UEFI启动)从Windows 10(1607)DVD启动,选择“修复”>“疑难解答”>“命令提示符”并执行以下所有操作:

     bootrec /fixboot bootrec /scanos bootrec /fixmbr bootrec /rebuildbcd exit 

    ( 更多信息 )

  13. 重新启动到NVMe磁盘上的Windows 1607

  14. 赢得!
  15. (在磁盘管理中重新初始化东芝)
  16. (可选)备份更新的NVMe磁盘(使用Clonezilla克隆到映像)