如何制作整个硬盘的副本?

我有一台Ubuntu 12.04的生产服务器,配备了一个500GB(已使用近15GB)的硬盘。我想要将整个硬盘,包括其分区结构,复制到另一个容量为400GB的硬盘上,以确保更换硬盘不会影响工作系统。
请问,哪种工具是最佳解决方案?

你是否可以直接访问服务器?如果可以的话,你能否在RAID中安装一个硬盘?这可能是最简单和最安全的解决方案。 - don.joey
Clonezilla - Shaharil Ahmad
5个回答

有很多工具可以完成这个任务,每个工具都有其优点和缺点。Clonezilla 是一个经常用于此任务的实用工具;然而,我不确定它在目标磁盘比源磁盘小的情况下是否能很好地处理。
另一个选择是手动分区目标磁盘(使用GParted、partedfdiskgdisk或其他工具),在目标磁盘上创建文件系统,挂载目标分区,并使用cptar将所有内容复制过去。这将需要对目标进行一些额外的更改,例如(可能)调整其/etc/fstab并安装引导加载程序。总体而言,这种方法需要更多的努力,但如果你知道自己在做什么,它非常灵活,并且绝对可以从较大的磁盘复制到较小的磁盘,前提是文件实际上能够适应目标空间。

1cp命令复制整个文件系统的内容,会不会对/dev/proc这样的目录造成问题呢? - Bert Van Vreckem
1/dev/proc目录都是动态的——它们由内核中的特殊驱动程序创建为虚拟文件系统。因此,在复制操作中,通常应省略这些目录。 - Rod Smith
1是的,你必须省略那些。使用"cp --one-file-system"命令。 - Jakob
默认情况下,clonezilla 伪克隆硬盘:(1) 它备份结构元数据,包括 MBR;(2) 备份已使用的数据扇区,也就是忽略了它能理解的分区中的空闲空间;(3) 压缩备份的分区。这意味着只要原始磁盘上至少有100GB的可用空间,clonezilla 就可以将一个500GB的硬盘“克隆”到一个400GB的硬盘上。换句话说,clonezilla 能够处理目标磁盘比源磁盘更小的情况。 - landroni
@RodSmith,关于“用cp命令复制所有内容”...那么元数据(最后访问时间等)呢? - Pacerier
如果您想要使用 cp 命令来完成该任务,最好使用 -a 选项,以保留大多数元数据。 - Rod Smith

备份您的主要硬盘。 使用gparted来缩小您的主要硬盘,使其容量略小于目标硬盘的容量,在您的情况下小于400GB。 复制整个硬盘。为此,请从引导光盘启动,并使用dd if=/dev/sda of=/dev/sdc bs=1M,其中sda是您的主要硬盘,sdc是您的新硬盘。或者类似clonezilla这样的工具(复制整个磁盘)。

1任何文件系统调整操作都存在一定的风险,可能导致文件系统崩溃。尽管这种风险很小,但是在存在其他选择(比如使用Clonezilla,如果它能处理较小的目标,或者使用tarcp)时,冒这个险是不明智的。 - Rod Smith
1我们在生产环境中经常使用gparted。引用Clonezilla的话:“目标分区必须与源分区相等或更大。”如果您对分区、引导扇区、fstab等有所了解,手动复制也可以接受。 - Clausi
1我坚持我的观点:调整分区大小存在一些灾难性失败的风险。注意:灾难性。在调整大小过程中,停电或系统崩溃、错误或其他问题可能导致调整结果出现损坏的数据结构,如果能修复的话,修复将耗时且成本高昂。即使 Clonezilla 不是其中之一,也有更好的选择。如果您经常这样做而没有遭受到影响,那只是表示您幸运,并非别的。 - Rod Smith
1比起重复你的观点并提到幸运,对你的理论进行实质性的证明要好得多。根据我的经验,“灾难性失败”只会发生在你没有备份的情况下——备份是我清单上的第一位。 ;) - Clausi

我会推荐使用Clonezilla,它简单易用,可以对整个磁盘进行备份,并且备份所需的空间也不多。
要做到这一点,首先您需要从这里下载Clonezilla ISO文件。
下载完成后,您需要将其刻录到光盘上。
然后,您需要从光盘启动以进行完整系统备份。
有关详细步骤,请参考此处- http://clonezilla.org/clonezilla-live-doc.php 您需要选择“保存磁盘映像”选项,具体步骤请参考此处-http://clonezilla.org/show-live-doc-content.php?topic=clonezilla-live/doc/01_Save_disk_image 备份完成后,您可以使用“恢复磁盘映像”选项来进行还原。具体操作步骤请参考此处链接:http://clonezilla.org/show-live-doc-content.php?topic=clonezilla-live/doc/02_Restore_disk_image 请查阅并如有任何疑问,请告知。
谢谢!

如其他人所建议的,如果您将工作分区调整为较小的大小,Clonezilla可以完成这项工作。 然而,我看到有一个名为FSArchiver的工具, 它允许将数据恢复到较小的驱动器,只要数据适合(就像在您的情况下)。很抱歉我无法提供更多帮助,因为我只使用过Clonezilla,但链接和他们的论坛中有一些信息。

你可以使用dd命令来复制磁盘。这篇文章描述了如何使用Ubuntu Live CD克隆硬盘的方法。

但请记住,硬盘驱动器的大小并不相等。由于尺寸差异会导致任何问题吗? - hunter
1不建议使用dd将较大的磁盘复制到较小的磁盘,因为这样很可能会导致丢失和/或截断分区,从而造成数据丢失。 - Rod Smith
在这篇帖子中,对于“dd”有一个更详细的回答,请参考:http://askubuntu.com/a/55908/58950 - carnendil
虽然这个回答在理论上可能是正确的,但最好还是在这里包含回答的关键部分,并提供链接作为参考。 - RolandiXor