Answers:
您显然不能将较大的分区克隆到较小的分区(使用dd
等),因为空间不足。
但是,如果较大分区上的文件也适合较小分区,则可以rsync
用来复制这些文件。使用的确切选项取决于您的特定用例,但是要简单地复制所有文件,则应执行以下操作:
rsync -av /mount/point/of/large/partition/ /mount/point/of/small/partition
编辑: 再次:您不能将较大的分区克隆到较小的分区。(但是请继续阅读,您的问题可以解决。)
原因很简单:您的源分区大于目标分区。你能指望什么?是否应该删除一些块?哪个?怎么dd
知道?当然,你可以使用dd
的bs=
,并count=
选择只复制源分区,使得它适合于你的目标分区的第一个某某那么多块,但你最终会与一个破碎的分区。那当然不是您想要的。
因此,由于您无法将较大的分区克隆到较小的分区,因此您唯一可以做的就是首先使用一些类似的方法将源分区的大小减小到小于或等于目标分区的大小gparted
。文件系统的详细信息,这样您就不会丢失数据。只有这样,您才能使用dd
克隆分区。理想情况下,源分区的新大小应等于目标分区的大小(而不是小于或等于),否则克隆后您将在目标分区上得到一些未分配的空间。
另请注意,你应该不是简单地复制MBR较大的驱动器上的小驱动器的MBR(或反之,对于这个问题)。MBR大小为512字节,是硬盘驱动器的第一部分,其中包含有关硬盘驱动器布局的信息:
(请注意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上的任何文件),然后重新安装。
总结一下,如果要将较大的驱动器克隆到较小的驱动器,请按照下列步骤操作:
在目标驱动器上布置一个分区表,该分区表具有与源驱动器一样多的分区。源驱动器上的分区与目标驱动器上的分区之间应该一一对应,除了目标驱动器上的(某些)分区可以小于源驱动器上的相应分区。为此,请使用诸如fdisk
或之类的工具cfdisk
。
对于目标驱动器上每个小于源驱动器上相应分区的分区,请减小源驱动器上该相应分区的大小以匹配目标驱动器上该分区的大小。使用诸如此类的工具gparted
。
对于源驱动器上的每个分区,发出命令
dd if=/dev/sdaX of=/dev/sdbY
...以将分区/dev/sdaX
从源驱动器克隆到/dev/sdbY
目标驱动器上的相应分区(当然,请适当地替换设备名称。)
如果您还坚持克隆MBR,请使用本文dd
上面进一步编写的两个命令(包含这些/tmp/mbr.bak
内容的命令)。但是,请记住,干净的Grub重新安装会更好。
rsync
的确不是为了克隆。这正是我在说的-请仔细阅读我的帖子。;)我编辑了帖子,以解释如何克隆所有分区以及MBR。希望这更接近您想要的。
parted
/ gparted
完全可以。通常,有许多方法可以实现目标。fdisk
/ cfdisk
是更“基本”的工具,在上面的描述中,我只是试图引用可以完成此工作的最基本的工具。
由于Malte Skoruppa已发布,因此无法进行精确克隆。但是,只要较大的磁盘未满,clonezilla就能执行此任务(Malte已经提到了这一点)。
基本上,您需要启用高级选项,并“忽略”有关较小磁盘的警告消息。有关屏幕截图的详细信息,请参见Clonezilla文档。将160GB HDD的备份还原到64GB SSD时,我遇到了同样的问题。对我来说,这很好。
应该是您想要的结果的另一种解决方案是将其还原到相同大小的磁盘,然后重新分区以使新的分区方案适合较小的磁盘。有关如何执行此操作的详细信息,请参见jsm-techblog.blogspot.de。
-k1
这将在目标磁盘中按比例创建分区表,并打开选项-r
以自动调整分区中文件系统的大小。这个对吗?
k1
选件使它正常工作,但是该-icds
选件对我有效。我将发布更多详细信息的答案。
Gparted应该做的工作
使用gparted调整大小后,从驱动器引导,使操作系统有机会在使用Clonezilla进行映像之前修复所有错误。
然后运行Clonezilla并复制所需的硬盘分区
我发现对我来说很棒的另一个选择:MondoRescure
Mondo Rescue是GPL灾难恢复解决方案。
它支持将磁带,磁盘,网络和CD / DVD作为备份介质,多个文件系统,LVM,软件和硬件Raid。
一个简单的指南可以在这里找到
我将发布一些屏幕截图:
1.从支持的备份媒体类型列表中选择。
2.如果要备份到CD / DVD- + R [W],则Mondo会询问您CD刻录机是否具有BurnProof技术,是否在笔记本电脑内部或是否偏心。如果您要备份到磁带机,则不会看到此消息
3.您要压缩多少?没有,如果您的磁带流媒体具有内置的硬件压缩。最大,如果您的CPU速度飞快。在大多数情况下,平均值应该可以。
4.如果要备份整个计算机(自然不包括/ sys,/ run和/ proc以及/ tmp),则将其保留为默认值/。否则,请指定子集(例如/ usr / local | / home),以确保在每个路径之间放置一个管道。
5.如果要备份整个计算机,则可能要排除某些目录,例如/ shared / MP3。请在“排除目录”对话框中指定它们。请在每条路径之间放置一个管道,例如/ shared / private | / scratch | / nfs | / windows
6,你的内核健全吗?红帽,Mandrake,SuSE,Debian和Slackware用户通常应该回答“是”,因为这些供应商擅长生产可靠的内核。如果您使用的是Gentoo或LFS,则您的内核可能是非标准的,在这种情况下,请说“否”以使用Mondo的故障安全内核(单独提供)。
7.如果要在将存档写入媒体后验证存档,请在此处说“是”。如果您对自己的硬件和Linux发行版本有绝对的信心,请说“不” ...并祈祷一下。
8.如果确定要继续,请说“是”,然后在Mondo备份计算机时找到其他事情要做。如果您说“否”,那么您将毫不客气地在shell提示符下转储。:-)
9.现在将开始备份过程。首先要执行一些预备份任务,但是备份实际上正在进行中。为了简化备份过程,向您询问了一系列问题。下次,如果愿意,您可以使用各种命令行开关调用mondoarchive来控制其行为,而不用回答一系列问题。有关详细信息,请参见手册页。
10.Mondo将为要备份的所有文件创建目录。这最多可能需要五分钟。文件列表将分为几组,每组大约4 MB(压缩前)文件。这通常需要一分钟。
11.蒙多给明迪打电话。Mindi会基于您现有的Linux发行版和文件系统生成可引导媒体映像和辅助数据磁盘映像。这样,您可以确定Mondo的工具将与您现有的文件系统和二进制文件兼容:Mondo的工具就是您的工具。Mindi最多需要五分钟才能运行。
12.最后,Mondo开始备份您的计算机。此过程可能要花费几分钟或几小时,具体取决于要归档的数据量,CPU的速度,拥有的RAM等等。它将先备份您的常规文件,然后再备份您的大文件(大于约32MB的文件)。如果您选择验证备份,则Mondo也会这样做。
1.选择备份媒体的类型。从Mondo媒体启动后,实时还原过程与如果键入不带参数的mondorestore时将经历的过程非常相似。
2.插入磁带/ CD后,单击“确定”。如果生成了磁带备份,则磁带本身就足够了。如果生成了CD备份,则第一张CD就足够了。否则,您可能需要启动媒体。
3.标记要还原的文件和目录。使用“更多”和“减少”按钮打开和关闭子目录。
4.指定要将文件还原到的位置。通常,“ /”是合适的。如果不想覆盖要还原的文件的较新版本,请指定/ tmp / BKP或类似名称作为还原路径。
5.Mondorestore将从媒体检索配置信息。(示例屏幕面向磁带用户。CD用户将看到不同的内容。)
6.数据将还原到硬盘上-首先还原常规文件,然后还原到还原集中的所有大文件(32MB或更大)。
通过使用Clonezilla,可以将较大的硬盘“伪克隆”为较小的硬盘。有效地,您可以保存和还原磁盘的分区。以下步骤(专为从HDD到SSD的传输而开发)可助您一臂之力:
第一个技巧是使用Gparted调整硬盘驱动器上分区的大小,缩小每个分区,以减少其包含的未使用空间。显然,分区的大小必须使所有分区所需的总空间小于SSD的容量。
然后运行Clonezilla并制作单个硬盘分区的副本(使用saveparts选项),并将其临时存储在外部USB驱动器上。请注意,必须保存分区(saveparts),而不是制作整个磁盘的映像(savedisk)。
请参阅:将硬盘驱动器“克隆”到较小的SSD,以获取有关该过程的更多讨论以及许多参考源链接。
由于上面的大多数示例似乎都建议实际调整原始驱动器的大小,因此在实际制作副本之前修改数据可能会造成风险。
尽管我使用的是非常手动的方法,但还有另一种方法风险较低。由于它使源驱动器保持原样,以防万一您因为某些故障而后退。
同样,通过克隆/调整大小,在进行磁盘交换时,您不能在切换到新驱动器时切换到新文件系统。通过以下过程,您只需要在目标驱动器上创建您选择的文件系统。
将新的目标驱动器与原始驱动器一起安装到计算机中。
在我的示例中,源(原始驱动器)为/ dev / sda,目标(新的较小驱动器)为/ dev / sdb在您的设置中,可能有所不同
在/ mnt / source下将src挂载为只读
将目标驱动器安装在/ mnt / destination下
使用以下命令将src文件系统复制到目标文件系统:
因为我们有新磁盘,所以ubuntu使用uuid而不是设备名称来查找和安装驱动器,我们想更改目标fstab以使用新驱动器uuid来安装磁盘
ls -la / dev / disk / by-uuid
现在将uuid更改为/并在/ mnt / destination / etc / fstab中交换。如果您决定将其更改为与原始驱动器不同的文件,请不要忘记更改安装点的文件系统
如果重要的是grub是相同版本,请再次启动原始磁盘,然后运行并运行以下命令以将grub安装到新驱动器
现在,从计算机中卸下源驱动器,然后启动目标驱动器。grub将无法完全启动并退出到grub恢复外壳中的恢复外壳:
加载一些所需的grub模块-insmod ext2-insmod linux列出您的磁盘设备-ls
选择合适的设备(在我的示例中为hd0,msdos1)
查找vmlinuz-xxx和initrd-xxx的确切名称以配置要使用的grub
ls /启动/
在上面的ls中查看并使用vmlinuz和initrd的专有名称,并使用它们代替我在下面使用的示例版本
linux /boot/vmlinuz-2.6.32-5-amd64 root = / dev / sda single
如果/ dev / sda是设备,则下次仅使用dst磁盘重新引导> machine时,驱动器将成为rootfs磁盘
的initrd /boot/initd.img-2.6.32-5-amd64
这应该已经成功启动了计算机,最后更新grub以使用新的磁盘uuid,因此您不必每次都重复此手动过程:
您可以使用Clonezilla和GParted将数据传输到较小的驱动器。
使用GParted Live CD可以缩小分区,使其适合新驱动器。移动分区,使空白(灰色)空间位于驱动器的末端/右侧。如果在第一个分区离开该空间之前已经有空间,则该空间可能包含引导或其他隐藏信息。
使用Clonezilla进行device-device
克隆。选择高级选项,然后启用该-icds
选项以跳过磁盘大小检查。继续克隆,删除旧驱动器,然后尝试从新驱动器启动。如果遇到错误,请尝试使用该-fsck-src-part
选项来修复源磁盘上的错误。
如果您确定映像中的所有数据都可以容纳较小的磁盘,即不会将其写入错误的磁盘空间,则可以选中选项“ -icds”。警告!要选择此选项,您必须知道自己在做什么!。
我读过的一个常见问题解答建议在Clonezilla中同时使用-icds
和-k1
选项,但对我不起作用。其他人提到您可以使用GParted复制分区,但是它不能复制所有分区类型,并且使用该方法后,我无法启动计算机,这可能是由于未复制分区之间的某些隐藏信息。
可能不是该问题的正确答案,但是我到达此页面试图解决类似的问题:
我想将一个旧的256Mb紧凑型闪存卡克隆到一个被破坏的32Mb闪存卡中,该闪存卡包含一个制造小型弹簧线圈的小型Linux设备。
这样解决:
(当然,在256Mb中使用的有效空间为<32Mb,因此非常合适)
使用“ dd”创建256Mb闪存卡的映像(即假设该卡安装在/ dev / sdb中):
dd if=/dev/sdb of=image256.iso
使用unetbootin读取“ image256.iso” ISO(Diskimage选项)。
选择32Mb卡所在的USB驱动器,然后继续将图像转储到32Mb卡中。
就是这样,32Mb卡再次成功启动了我的机器。
高温超导
我发布了将250gb(sda)的启动磁盘缩小到120gb(sdc)磁盘的经验
sda包含2个分区:
所以我这样做:
然后,因为我的gparted不适用于lvm:
从应急磁盘:
pvresize / dev / sda2 --setphysicalvolumesize xxxxxxxxxxxxK(我给LV空间多了1 GB)(我这里有一个错误...所以:
但是分区仍然很大,因为我只缩小了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并调整大小以适合它们。新分区的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命令文档中找到有关此命令可能的标志的更多详细信息。
我遇到了这个问题,因为无法识别我的NVMe(三星950 Pro),导致Win 10更新到1607的更新在重启后会中断,因此我将NVMe克隆到了另一个(更大的)内部驱动器(在我的情况下为“ Toshiba”) ,更新了Win 10,并将系统还原回NVMe。
这是我需要完成的步骤(因为restoreparts -icds
无法正常工作)。
如果从稳定分支使用Clonzila,则必须在BIOS中切换到传统引导模式才能从CD引导。否则,如果您从备用分支使用下载,则它应支持UEFI引导。
自行负责遵循指南。这里的步骤和命令已经过检查和再次检查,但是错别字可能会导致数据丢失或硬件故障,因此,请首先了解您在做什么,然后按照以下步骤进行操作即可。
第一次,我认为我在Windows中与NVMe仍存在Win引导信息时发生了一些冲突,因此这一次我在初始克隆到东芝之后(因此,在切换到UEFI引导之前)立即删除了NVMe驱动器上的所有分区
〜删除可以在Clonezilla shell中轻松完成:
sudo su
dd if=/dev/zero of=/dev/nvme0n1 bs=512 count=1
〜或者,引导至GParted并在那里进行可视化处理
(在BIOS中切换到UEFI引导)
由于复制MBR对我无济于事,因此GPT在这个故事中很重要,因此请进入(Clonezilla)shell并使用以下命令将GPT从东芝复制到NVMe:
sudo su
sgdisk /dev/sda -R /dev/nvme0n1
sgdisk -G /dev/nvme0n1`
(说明)
由于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
...
(更多信息)
备份Tosiba MBR和GPT:
sgdisk --backup=sda.gpt /dev/sda
将备份复制到一个安全的位置(以便我们可以还原它,而不是我们在第6步中所做的整个驱动器映像)
mkdir /mnt/usb
(put in usb flash or similar)
mount /dev/sdb /mnt/usb
cp sda.gpt /mnt/usb
umount /dev/sdb`
清除东芝分区信息,以免与Windows发生冲突
dd if=/dev/zero of=/dev/sda bs=512 count=1
(在BIOS中切换为UEFI引导)从Windows 10(1607)DVD引导,选择“修复”>“疑难解答”>“命令提示符”,然后执行所有这些操作:
bootrec /fixboot
bootrec /scanos
bootrec /fixmbr
bootrec /rebuildbcd
exit
(更多信息)
重新引导到NVMe磁盘上的Windows 1607