将双启动系统上的 Ubuntu 安装移动到新硬盘

将双启动系统上的 Ubuntu 安装移动到新硬盘

我在洁净室里有一台旧的 Windows 7 电脑,去年我在上面安装了 Ubuntu 20.04。它在旧版 BIOS 中启动。但是硬盘很小,当我开始在 Ubuntu 上需要更多库时,它就被填满了,直到我无法再编译代码。不幸的是,没有选择将新电脑移到洁净室。

因此,我给电脑加了一个新硬盘。同时,我已经在 Ubuntu 上工作了很多,不想进行全新安装。所以我想到在新硬盘上克隆现有的 Ubuntu,将 Windows 保留在第一个硬盘上,将 Linux 移到第二个硬盘上。我按照这个指导。新硬盘是 GPT 硬盘,不是 MBR 硬盘。我按照第一步操作,在第二个硬盘 /dev/sdb 上创建了 linux 分区,并将 /dev/sda 上的现有安装克隆到第二个硬盘上。现在分区如下所示:

Disk /dev/sda: 232,91 GiB, 250059350016 bytes, 488397168 sectors
Disk model: Hitachi HDS72102
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xacac4a9e

Device     Boot     Start       End   Sectors   Size Id Type
/dev/sda1  *         2048   4194303   4192256     2G  7 HPFS/NTFS/exFAT
/dev/sda2         4194304 413276159 409081856 195,1G  7 HPFS/NTFS/exFAT
/dev/sda3       413278206 471500799  58222594  27,8G  5 Extended
/dev/sda4       471500800 488376319  16875520     8G  7 HPFS/NTFS/exFAT
/dev/sda5       413278208 442572799  29294592    14G 83 Linux
/dev/sda6       442574848 458196991  15622144   7,5G 82 Linux swap / Solaris
/dev/sda7       458199040 471500799  13301760   6,4G 83 Linux

Partition table entries are not in disk order.


Disk /dev/sdb: 3,65 TiB, 4000787030016 bytes, 7814037168 sectors
Disk model: WDC WD40EFRX-68W
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: C83A757F-A61B-4837-91BA-0FAC700B6DD0

Device         Start        End   Sectors   Size Type
/dev/sdb1       2048  218796031 218793984 104,3G Linux filesystem
/dev/sdb2  218796032  355510271 136714240  65,2G Linux swap
/dev/sdb3  355510272 1011861503 656351232   313G Linux filesystem

我更改了第二块硬盘的 UUID,现在这些是 IDS

/dev/sda6: UUID="dd927015-e6ef-42ff-9425-a69f1e9ab305" TYPE="swap" PARTUUID="acac4a9e-06"
/dev/sda5: UUID="bf14b622-0982-496e-86aa-c251b683f44a" TYPE="ext4" PARTUUID="acac4a9e-05"
/dev/loop0: TYPE="squashfs"
/dev/loop1: TYPE="squashfs"
/dev/loop2: TYPE="squashfs"
/dev/loop3: TYPE="squashfs"
/dev/loop4: TYPE="squashfs"
/dev/loop5: TYPE="squashfs"
/dev/loop6: TYPE="squashfs"
/dev/loop7: TYPE="squashfs"
/dev/sda1: LABEL="SYSTEM" UUID="C436D90736D8FAFE" TYPE="ntfs" PARTUUID="acac4a9e-01"
/dev/sda2: LABEL="OS" UUID="326482BC648281F9" TYPE="ntfs" PARTUUID="acac4a9e-02"
/dev/sda4: LABEL="HP_RECOVERY" UUID="38CCDE7ACCDE323C" TYPE="ntfs" PARTUUID="acac4a9e-04"
/dev/sda7: UUID="f4efeebf-90ee-43d2-9009-8f17cecdcc9e" TYPE="ext4" PARTUUID="acac4a9e-07"
/dev/sdb1: UUID="f270a5b7-5522-45c5-b786-579e14a5ace6" TYPE="ext4" PARTLABEL="Root" PARTUUID="64854bfb-abdc-4239-b4dc-370bcb8e6b98"
/dev/sdb2: UUID="dd927015-e6ef-42ff-9425-a69f1e9ab305" TYPE="swap" PARTLABEL="SWAP" PARTUUID="21c902e4-27e3-4468-8a9c-eafc25a875e6"
/dev/sdb3: UUID="e8815fb4-f207-47bb-a3c3-ac1eaa964f27" TYPE="ext4" PARTLABEL="Home" PARTUUID="aaf46669-0390-4a51-8246-efc1447fe5dc"
/dev/loop8: TYPE="squashfs"
/dev/loop9: TYPE="squashfs"
/dev/loop10: TYPE="squashfs"
/dev/loop11: TYPE="squashfs"
/dev/loop12: TYPE="squashfs"

问题发生在第 5 步,当时我应该编辑 grub 和 fstab。当我删除 Ubuntu live flash 并重置计算机时,在启动菜单中我可以在 /dev/sdb1 上看到 Ubuntu。我启动到 /dev/sda5 上的旧 linux 来编辑 grub.cfg。两个驱动器上的 Ubuntu 条目如下所示:

menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-bf14b622-0982-496e-86aa-c251b683f44a' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos5'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos5 --hint-efi=hd0,msdos5 --hint-baremetal=ahci0,msdos5  bf14b622-0982-496e-86aa-c251b683f44a
    else
      search --no-floppy --fs-uuid --set=root bf14b622-0982-496e-86aa-c251b683f44a
    fi
    linux   /boot/vmlinuz-5.8.0-43-generic root=UUID=bf14b622-0982-496e-86aa-c251b683f44a ro  quiet splash nouveau.modeset=0 $vt_handoff
    initrd  /boot/initrd.img-5.8.0-43-generic
}


menuentry 'Ubuntu 20.04.2 LTS (20.04) (on /dev/sdb1)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-f5ca21f3-97f4-4c3e-be0b-d5fd2834d566' {
    insmod part_gpt
    insmod ext2
    set root='hd1,gpt1'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1  f5ca21f3-97f4-4c3e-be0b-d5fd2834d566
    else
      search --no-floppy --fs-uuid --set=root f5ca21f3-97f4-4c3e-be0b-d5fd2834d566
    fi
    linux /boot/vmlinuz-5.8.0-43-generic root=UUID=bf14b622-0982-496e-86aa-c251b683f44a ro quiet splash nouveau.modeset=0 $vt_handoff
    initrd /boot/initrd.img-5.8.0-43-generic
}

现在我做了以下事情:1-指南提到将 uuid 更改为新的,以及分区和驱动器名称。我尝试将第一个条目更改为指向 hd1,gpt1 而不是 hd0,msdos5。并设置 uuid,使用新的 UUID 更改 fstab,然后尝试以下命令:

shell> sudo grub-install -d /media/<new partition uuid>/usr/lib/grub/i386-pc /dev/sda

注意:我有 grub 2。按照指南更新了分区选项。然后我重置了系统。启动选项仍然相同,无论如何我都会在旧的 linux 中启动。

3- 此外,fstab 包含一个自动 UUID:f5ca21f3-97f4-4c3e-be0b-d5fd2834d566,它也用于 sdb 上的 Ubuntu 的 grub.cfg。当我尝试更改第二个菜单项时,这次我收到一条错误消息,提示未找到此特定分区。我必须返回菜单并再次选择我的旧 Linux 才能启动。所以这也失败了。

1- 可能第一个问题是,我是否可以通过这种方式将 Linux 移动到 gpt 驱动器,而启动分区位于第一个 MBR 磁盘上(或者我是否应该将第二个驱动器更改为 MBR?)

2- 鉴于 grub 自动在两个驱动器上都有针对 Ubuntu 的菜单项,我现在应该更改哪一个?最后,我希望删除 sda5 上的 linux,如果这有任何不同的话。一个问题是,我是否也应该更改 --hint-bios --hint-efi --hint-baremetal 选项的 xy?

3- 那么,我在这个过程中做错了什么?或者我应该怎么做才能正确更改 grub 配置文件或正确安装它,以便在 sda2 上有 windows,在 sdb1 上有 Ubuntu?有没有更好的教程/指南或完全不同的流程我应该在这里遵循?

答案1

因此,鉴于所有评论都无济于事,我回答了我自己的问题,以防将来有人遇到同样的情况。

将第二个保留为 GPT 是可以的。编辑 grub.cfg 应该只会更改第二个 linux 的根分区的 uuid。唯一的问题是 grub-install 命令必须包含 --boot-directory 选项来设置第二个硬盘的启动目录。否则它会安装在第一个硬盘上,您无法启动第二个硬盘。当我也提供启动目录时,我可以启动和更新 grub。

相关内容