如何在不重新安装的情况下将 Ubuntu/Windows 7 dualboot 从 HDD 迁移到 HDD+SSD?

Chr*_*oph 6 partitioning ssd dual-boot gparted clonezilla

我的笔记本电脑上有一个有效的双启动设置(Ubuntu 12.10 和 Win7)。
我有一个 320GB 的 HDD /,其中有/homeswapwinsys和一个大windata分区。总共占用了超过 250GB 的空间。

现在我买了一个250GB的SSD放在我的Ultrabay上,我想把大数据分区以外的所有分区都迁移到SSD上,根据SSD空间有控制地放大,留windata在HDD上,扩展到整个尺寸。我想避免全新安装 Ubuntu 和 Windows。

我已经阅读了很多,但我不确定实现这一目标的最佳方法是什么?

  • Clonezilla 磁盘到磁盘克隆已失效,因为目标磁盘较小。
  • Clonezilla partitions-to-partitions(省略数据分区)似乎是一种方式,但我只能按比例放大分区(即使我可以),我不知道这是否会创建正确的SSD分区对齐。另外,引导扇区/引导加载程序怎么样,尤其是双引导?
  • 最明智的方法似乎是从 live cd 使用 GParted,根据需要在 SSD 上创建分区,然后将 HDD 分区复制到新分区中,并扩展 HDD 上的数据分区。这在我看来是最简单的方法 - GParted 可以进行正确对齐,但我不知道是否也可以复制引导加载程序?另外,如果这有效,为什么每个人似乎都推荐 Clonezilla?
  • 我的引导分区是第一个分区 (sda1),Windows 系统所在的分区。

纯粹在 GParted 中这样做会起作用吗?我可以安全地删除扩展分区设置(我不再需要它了,因为现在每个磁盘只有 4 个分区)?或者如果我将来想进一步细分(对于暂存盘等),我应该保留它吗

额外问题:我的 /home 仍然是 ext2 - 我可以制作新的 /home ext4,并将 ext2 分区复制过来,它不会损坏吗?

我知道我必须重写 /etc/fstab 来调整 UUID,而且我可能需要一个 Windows 救援磁盘来“修复”混乱的 Windows 引导系统。还有什么陷阱吗?

fdisk -l 输出:

Disk /dev/sda: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x80d2f3ee

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *          63   104856254    52428096    7  HPFS/NTFS/exFAT
/dev/sda2       184538655   625137344   220299345    7  HPFS/NTFS/exFAT
/dev/sda3       104856255   136311524    15727635   83  Linux
/dev/sda4       136311649   184538654    24113503    5  Extended
/dev/sda5       148890420   184538654    17824117+  83  Linux
/dev/sda6       136311651   148874354     6281352   82  Linux swap / Solaris

Partition table entries are not in disk order
Run Code Online (Sandbox Code Playgroud)

dab*_*oss 6

我会使用 GParted 来复制 / 和 winsys 分区。

只要您运行Boot Repair , Grub/linux 就会在复制后启动。并且根据这篇文章,只要您有 Windows 修复盘来修复移动后的安装,Windows 应该可以使用 GParted 移动。

尽管只要您只有 4 个主分区,您就可以安全地将扩展分区删除到新驱动器上,但我不建议这样做。可能您希望将 ssd 放入一个扩展分区,并将所有其他分区放入该扩展分区中。

当然,做这样的操作总是会失败,即使原因是任意的,比如 live cd 断电,所以在复制之前一定要备份你的数据。而且我还建议您在使用 windows 和 linux 成功启动到 SSD 之前不要对 HHD 进行任何更改。

您可能想要采取的步骤是:

启动到 live CD 并运行 GParted。

在 SSD 上创建一个扩展分区,覆盖整个驱动器。

将linux/partition和winsys分区复制到SSD上,HHD上原样不变。

如果你想在 SSD 上 /home,那么在扩展分区内创建一个新的 ext4 分区,并使用 rsync 将所有数据从原始数据复制到副本。一个示例 rsync 命令可能是这样的:

sudo rsync -rhtvlpEog --progress /media/PATH_TO_HOME_PARTITION_ON_HHD/ /media/PATH_TO_HOME_PARTITION_ON_SSD/
Run Code Online (Sandbox Code Playgroud)

该命令的解释:-r 递归复制,-h 提供人类可读的输出,-t 保留修改时间,-v 提供更多输出,-l 将符号链接复制为符号链接,-p 保留文件权限,-E 保留可执行性,-o 保留所有者,-g 保留组。

将 winsys 和 / 标记为可在 SSD 上启动。

卸载并可能断开您的 HHD 与计算机的连接,然后运行boot-repair,将 grub 安装到 SSD 并使 / 可启动。

仍然从 live CD,编辑 SSD / 分区上的 fstab 以获得新的 /home 分区 UUID。

通过启动仅安装了 SSD 的计算机来测试 grub/linux 是否工作。(还要测试您的 /home 分区中是否有所有数据)

然后,如果是这样,请使用 Windows 修复磁盘获取 SSD 上的 Windows 分区可引导。

在 SSD 上使用 windows 修复盘后,尝试同时启动 windows 和 linux,不连接 HHD。

注意:请确保不要删除或移动 HHD 上的任何内容,直到您确认 windows 和 linux 都可以在 SSD 上运行。

如果一切都在 SSD 上运行,则从 HHD 中擦除 /、/home 和 winsys 分区,并扩展 windata 分区以使用整个分区。

我已经概述了我将采取的步骤。我不能保证 Windows 修复磁盘可以工作,但根据那篇文章应该可以。我可以保证在移动 / 分区时启动修复工作。我知道这是可行的,因为我已经使用 GParted 移动了很多分区。

此外,如果这些步骤中的任何一个失败并且 SSD 无法启动,您仍然拥有所有数据,并且所有内容仍在 HHD 上工作。

来自 OP 的其他经验:

  • 最好有 3 个 live CD/USB 记忆棒 - GParted Live、引导修复、windows 系统修复,我需要所有这三个
  • 我最终没有转换主分区,所以我没有使用 rsync 步骤
  • 请注意,在分区复制时,UUID(唯一分区标识符)保持不变。这很好,因为您不必编辑 Ubuntu fstab,并且 Windows 不想再次激活,但是在初始复制阶段之后,为了进行测试,您应该从系统中移除/拔下 HDD,否则存在多个分区具有相同的 UUID。这会产生意想不到的结果。
  • 从实时 CD 映像制作可启动 U 盘(如果您不再有 CD 驱动器)的有用工具是tuxbootunetbootinTotalMounter。特别是对于 Windows 系统修复盘,这可能很棘手 - 使用 TotalMounter 将其直接创建为 .iso,例如本指南