如何将我的整个Ubuntu系统移动(复制)到另一块硬盘?

我安装Ubuntu的硬盘即将损坏。我不想失去三年的数据、自定义和应用程序。我正在寻找一种方法,将完整的系统(包括SWAP,因为我不确定是否可以将系统重新链接到新的SWAP分区)移动到另一个硬盘上的分区,而不是整个硬盘。基本上,我想做的就是像我在Windows安装中使用Norton Ghost所能做的那样。我考虑使用Clonezilla,但我认为我会遇到GRUB的问题(尤其是尝试从与配置文件中不同的UUID引导)。你知道有什么方法可以做到这一点吗?
PS,我的主目录已加密,但这并不是真正的问题,因为我可以解决这个问题。
编辑:更改说明以使其更清晰。
5个回答

我最终使用了Live CD中的Gparted。我复制了分区并将其粘贴到另一块硬盘上的未分配空间中。然后我使用blkid检查了UUID,并编辑了fstab文件。效果非常好!


6如果由于任何原因(例如需要更多空间),您要在同一系统中移动分区,那么在修改fstab之前,您必须更改新分区的UUID,因为它将与原始分区具有相同的UUID(请参阅http://askubuntu.com/questions/109938/change-hdds-uuid)。 - Greg Kramida
1这就是我喜欢Linux的原因。 - deFreitas
1如果您正在用新的启动盘替换旧的启动盘,那么您还需要在其中安装grub。如果您是添加新的硬盘或替换数据盘,那么您不需要这样做。 - David C.

嗯,我只是用USB闪存驱动器和Ubuntu Live进行了操作。
我正在将Ubuntu 13.10从较大的硬盘传输到较小的固态硬盘,并且Clonezilla“说”这种方式无法完成,因为目标分区比源分区小。
所以我启动了Ubuntu Live,挂载了两个硬盘(新硬盘当然已经分区好了,别忘了交换分区 ;) ),然后只需:
cd /media/ubuntu/old-hdd-uuid/

那么:

sudo cp -R --preserve=all bin/ boot/ cdrom/ dev/ etc/ home/ lib/ lib32/ lib64/ media/ mnt/ opt/ proc/ root/ run/ sbin/ srv/ sys/ tmp/ usr/ var/ /media/ubuntu/new-hdd-uuid/

上面你可以看到,它只是将一个硬盘驱动器中的所有目录递归地复制到另一个硬盘驱动器中,并保留所有权限和其他相关信息。
cd /media/ubuntu/new-hdd-uuid/

然后我必须在新磁盘的根目录下创建两个符号链接:
sudo ln -s boot/vmlinuz-x.xx.x-xx-generic vmlinuz
sudo ln -s boot/initrd.img-x.xx.x-xx-generic initrd.img

下一步是安装grub,所以:
sudo grub-install --boot-directory=boot/ /dev/sdxy

其中x代表设备,y代表分区号(如果不确定,请使用cfdisk或fdisk打印分区表...)

最后一步是将新硬盘的UUID更改为旧硬盘的UUID(这是欺骗grub配置、fstab或其他配置而不需要搜索和修复配置的最简单方法)

sudo tune2fs /dev/sdxy -U OLD-UUID

设备重新挂载后将显示新的UUID。 现在重新启动,如果一切正常,您的Ubuntu应该启动...


你可以使用dd来完成。要获取完整信息,请查看网站。

使用Ubuntu Live CD克隆硬盘

警告 dd是一个非常强大的低级工具,即使有一个小错误也足以抹掉整个磁盘。请在使用时非常小心,并尽可能使用更高级别的工具。
还要注意,此方法仅适用于目标磁盘与原始磁盘大小相同或更大的情况


克隆硬盘是一项常见的维护任务。不必费心刻录新的启动CD或支付新软件费用 - 您可以使用Ubuntu Live CD轻松完成此操作。
不仅可以使用Ubuntu Live CD进行克隆,而且可以直接使用 - 无需额外的软件!我们将使用的程序称为dd,并且几乎所有Linux发行版都包含它。dd是一个用于低级复制的实用工具 - 它直接在存储设备的原始数据上工作,而不是处理文件。
您还可以使用:
Clonezilla,一款免费的硬盘克隆软件。Clonezilla从一个Live CD运行,并具有简单的用户界面。当然,您仍然需要注意自己在做什么,但这个工具可以通过逐步分解来极大地简化您的工作。 您可以在此处下载Clonezilla 警告 在开始之前,请确保您查看了Clonezilla的限制。
你还提到过你在Windows上用过Ghost,其实你也可以使用Linux版本的Ghost
来源:http://www.howtogeek.com/howto/19141/clone-a-hard-drive-using-an-ubuntu-live-cd/ 来源:http://www.makeuseof.com/tag/2-methods-to-clone-your-linux-hard-drive/

dd是否也允许仅复制分区?就像 sudo dd of=/dev/sdb3 of=/dev/sda2这样。 - boywithaxe
只要两个驱动器的确是完全相同的大小,并且您的命令是dd if=/dev/sd3 of=/dev/sd2 - Mitch
谢谢,不过这些分区位于两个不同的物理驱动器上,/dev/sda 和 /dev/sdb。如果使用 sd3 和 sd2 作为描述符,那么复制将在同一物理驱动器内进行吗? - boywithaxe
驱动器的大小可以不相同,唯一的要求是你将信息复制到的驱动器要比被复制的驱动器大。 - Bruno Pereira
谢谢,布鲁诺,但这并没有回答我的问题。我有两个物理驱动器,SDA和SDB。SDA有4个分区,SDB有3个。我想把/dev/sdb3移动到/dev/sda3,而不是将整个SDB的内容移到SDA上。我查阅了文档,没有提及这个选项。也许我只是尝试一下Ghost。 - boywithaxe
2"由于硬盘存在故障,使用ddrescue将是更好的选择。" - Ciro Santilli OurBigBook.com

几年前,我成功地使用了这个工具来“克隆”我的分区:G4L。一切都正常运行,只需要进行一些后安装的修正,比如调整分区大小(因为我在不同大小的硬盘上克隆了分区)和重新安装 grub(非常简单,只需使用一个 Live CD 在 MBR 中重新安装它)。

你可以放心地忽略交换分区(你可以在以后再重新创建它),或者也可以将其克隆并稍后激活,手动编辑 /etc/fstab 或从命令行执行。

前几周,我又用 clonezilla 再次进行了克隆,一切都顺利进行,仍然需要进行相同的后克隆修正。所以不要担心,试试看吧,你原始硬盘上的任何数据都不会受到影响!

编辑:

我找到了一封旧邮件,其中描述了第一次克隆过程。我按照以下步骤进行操作:

将我的新USB连接的硬盘分区与旧硬盘完全相同。 使用G4L以原始模式克隆分区。 使用resize2fs启动Live CD并调整分区大小。 从USB断开硬盘并安装在SATA / PATA上。 再次使用Live CD引导并挂载新磁盘: mkdir disk mount / dev / sda1磁盘(其中sda1包含启动和根分区) mount /dev/sda2 磁盘/boot (如果您有不同的启动分区) mount --bind / dev / disk/dev/ mount -t proc none disk/proc chroot disk / bin / bash grub-install /dev/sda(在sda MBR上安装GRUB)
重新启动,检查交换空间 享受

@boywithaxe - 关于你对Mitch's answer的评论,你确实可以通过执行dd if=/dev/sdb3 of=/dev/sda3来复制相关分区。这实际上是最简单的部分。最棘手的部分是你还需要挂载新复制的分区,以及其他几个分区,并安装 grub (grub-install /dev/sda),在重新启动之前还要添加一个交换分区(如果你正在克隆一个可引导的分区)。使用这种方法,也不需要进行resize2fs操作。
我刚刚不得不自己做了这个,我使用了在Ubuntu 14.04上进行Windows升级后的引导修复(非RAID)jasmines 答案的组合方法。
所以,在从liveCD启动之后:
dd if=/dev/sdb3 of=/dev/sda3

当那个完成了,然后
sudo mount /dev/sda3 /mnt 

其中sda3包含最近复制的引导和根分区

sudo mount --bind /dev/ /mnt/dev/

sudo mount -t /proc none /mnt/proc

sudo chroot /mnt

sudo grub-install /dev/sda 

注意这是sda而不是sda3

update-grub

exit