为什么 Mint 无法启动我克隆的 Ubuntu 分区?(UUID 问题)

为什么 Mint 无法启动我克隆的 Ubuntu 分区?(UUID 问题)

我一直在运行 Ubuntu 10.04,刚刚安装了 Linux Mint 13。我可能会全职使用 Linux Mint,但目前我想将其安装到第一个分区,但保持 Ubuntu 可启动。

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    58593279    29295616   83  Linux
/dev/sda2        58595326   976768064   459086369+   5  Extended
/dev/sda5       959980140   976768064     8393962+  82  Linux swap / Solaris
/dev/sda6        58595328   898696186   420050429+  83  Linux
/dev/sda7       898697216   959963135    30632960   83  Linux

sda6 是包含我所有文档的数据分区。sda7 是新添加的,用于创建双启动设置。我使用以下命令将 sda1 克隆到 sda7

 dd if=/dev/sda1 of=/dev/sda7

当然,这也克隆了 UUID,因此我使用以下命令为 sda7 创建了一个新的 UUID

tune2fs /dev/sda7 -U random

当我列出 UUID 时,blkid它确实发生了变化。然后我将 Linux Mint 安装到 sda1。我还设置了 fstab 来挂载 sda7,这样我就可以将配置文件复制到新操作系统。我可以正常启动 Linux Mint,但当我尝试启动 Ubuntu 时,我收到一条消息(来自内存,可能不完整),提示加载程序找不到/dev/disk/by-uuid/<old UUID>

此时我查看了 grub.cfg,果然,旧的 UUID 和新的 UUID 都列出了:

### BEGIN /etc/grub.d/30_os-prober ###
menuentry "Ubuntu, with Linux 2.6.32-41-generic (on /dev/sda7)" --class gnu-linux --class gnu --class os {
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos7)'
    search --no-floppy --fs-uuid --set=root 3869f8c2-dcf8-4522-bc8b-91b0ce0040fa #This is the new UUID
    linux /boot/vmlinuz-2.6.32-41-generic root=UUID=72a5e117-9a39-4de1-9d28-53791d055ff5 ro quiet splash #This is the old UUID
    initrd /boot/initrd.img-2.6.32-41-generic
}

然后我尝试用 修复此问题sudo update-grub,但仍然得到相同的条目,其中混合了新旧 UUID。我还尝试手动编辑 grub.cfg 以将旧 UUID 替换为新 UUID,但仍然得到相同的消息,即加载程序找不到具有旧 UUID 的设备。

那么,update-grub从哪里读取旧 UUID?如何修复 grub 以便它可以启动克隆的分区?

答案1

我猜你没有查看/编辑引导加载程序正在查看的同一个 grub.cfg。请记住,你/boot/grub现在有两个不同的目录,引导加载程序需要知道要查找哪一个。update-grub正在更新当前安装的 grub.cfg /boot/grub/grub.cfg。我猜引导加载程序正在查看另一个分区。喝完第一杯咖啡后,我可以通过阅读你的帖子并做笔记来确认这一点,但现在这必须是一个有根据的猜测。

我相信您需要做的是运行sudo grub-install --root-directory=/ /dev/sda。我提供完整版本以获取更多信息 ---root-directory参数默认为/

此命令将在 /dev/sda 上重新安装引导加载程序,并指示它在“根目录”参数 (/boot/grub) 中查找 grub.cfg。如果您希望 grub.cfg 位于不同的发行版中,则可以挂载它并指定不同的“根目录”,例如,/mnt/my_other_distro/如果它挂载在 中/mnt/my_other_distro

如果您在我喝咖啡时遇到问题,请告诉我。:)

编辑:喝完咖啡) 我现在看到一个重要的问题……您应该更改 sda1 的 UUID,而不是 sda7。然后,当您将 Mint 安装到 sda1 上时,如果您重新格式化,它无论如何都会更改它,但如果您不更改它,它可能会混淆。通过更改旧 Ubuntu 安装的 UUID,您使其 /etc/fstab 中的所有挂载设置以及 GRUB 菜单无效。我认为 Mint 不会重新生成菜单,而只会复制条目,因此它不关心它是否正确。

运行 update-grub 可以更正 grub.cfg,但不会更正 MBR 中的 grub 代码;这只能使用 grub-install 来更改。

而且 Linux Mint 不知道 grub.cfg 中的条目实际上是什么意思,因为它可能指的是当时还不存在的驱动器。我认为它只是将新条目添加到现有条目的顶部。

答案2

好的,我找到了一个解决方案,这可能就是我首先应该(或不应该)做的事情。

dd克隆 Ubuntu 分区之后,在安装 Linux Mint 之前,我启动了 Ubuntu。那时我意识到(查看分区表)UUID 已重复,因此我生成了一个新的 UUID。但是当我安装 Linux Mint 时,它格式化了原始分区并生成了一个新的 UUID。基本上,我运行

sudo tune2fs /dev/sda7 -U <old UUID>
sudo grub-update

并适当地重置 fstab,一切正常。首先就不应该改变克隆分区的 UUID。

不过,知道如何改变分区的 UUID 并且让引导加载程序找到它可能会很有用,所以 Marty 感谢您上述的回复。

答案3

这对我和其他人来说都是一样的。

编辑#1--------------------

http://www.linuxjournal.com/content/copy-your-linux-install-different-partition-or-drive

这只是我在查看时发现的一个线索.....在我将其添加到下面之后,立即退出这里.....

---------------编辑#1 结束

我还要补充一点;

无论格式化如何,UUID 始终保持不变。如果需要,只有在使用 Dban 或 SecureDelete 时(每个人都可以使用 HaremsBootCD(适用于所有操作系统)或 UltimateBootCD(适用于 Windows)找到它),它才可以更改(因为它会注销/退出操作系统以运行这些程序)只有 SecureDelete 可以直接与 HDD 通信。通过任何操作系统进行的任何格式化都无法擦除 UUID,甚至通过普通的 liveCD 也无法擦除 UUID(如上所述)。

是的,正如我所猜测的,如果克隆的分区已经克隆了 uuid(这是一个非常糟糕的想法,也是软件开发部门的管理不善……),那么记录和记录两个驱动器和分区表的 uuid 是安全的,以便更正将来的 fstab(当然,使用任何实时 CD 以 root 身份对其进行编辑)以便引导 Linux。但我不认为或看不到克隆的分区会包含根分区表的任何部分。分区和分区表是两个不同的东西,一个位于另一个之上,作为表上的一层。因此,UUID 应该保持不变……除非在该表上添加了新分区(主分区、逻辑分区或扩展分区)

所以,现在这里的线程已经结束了...Linux 很有趣,因为我们可以做到这一点,但同时,Linux 也很痛苦,因为我们必须知道我们必须做并且必须做所有那些“棘手”的事情。

我喜欢/热爱 Ubuntu/Mint/Debian/CrunchBang/Slackware 论坛,因为我们可以交换新旧解决方案。不像 arch 论坛(大多数人和我都不喜欢/热爱),那里的任何“解决方案”在 12 天或更糟糕的情况后就过时了,并且/或者任何用户甚至会因为试图说“谢谢”而受到斥责(即使在阅读 arch 手册之后)(也许我应该从 LFS 开始制作自己的操作系统 --linux-from-scratch;)可能比询问其他人的操作系统如何工作更容易构建,谁知道呢(?)

无论如何,我在谷歌上搜索了有关克隆 Linux 安装的方法后找到了这里。我不仅发现可以做到这一点,而且我必须确保它具有正确的 UUID,除了克隆并启动之外,我还没有想到这一点。

相关内容