如何更改 /boot/grub/grub.cfg 中的 UUID

如何更改 /boot/grub/grub.cfg 中的 UUID

我问的是,如何更改uuid/boot/grub/grub.cfg以便 grub 可以在指定的分区上加载操作系统。

我有两个磁盘:

  • SSD /dev/sda1 的 uuid 为 d7f0cf11-3edf-4859-b65a-3b5bc60ea7b9
  • HDD /dev/sdb1 的 uuid 为 47d9205b-00a8-40e5-88d6-e8b9571799a7

两个磁盘都包含相同的内容(Ubuntu 根目录),但分区 uuid 不同,因为的内容是从以下位置sda1克隆的:sdb1clonezilla

问题是/boot/grub/grub.cfg,它是自动生成的,包含:

           if [ x$feature_platform_search_hint = xy ]; then
              search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1  47d9205b-00a8-40e5-88d6-e8b9571799a7
            else
              search --no-floppy --fs-uuid --set=root 47d9205b-00a8-40e5-88d6-e8b9571799a7
            fi
            echo    'Loading Linux 4.4.0-146-generic ...'
            linux   /boot/vmlinuz-4.4.0-146-generic root=UUID=47d9205b-00a8-40e5-88d6-e8b9571799a7 ro  quiet splash $vt_handoff

表明 grub 从中选择 Ubuntu 根目录sdb1而不是sda1,而我希望它选择sda1

我尝试直接替换所有内容47d9205b-00a8-40e5-88d6-e8b9571799a7d7f0cf11-3edf-4859-b65a-3b5bc60ea7b9然后运行update-grub,但一切都恢复原状。

那么还有其他更好的解决方案吗?/boot/grub/grub.cfg实际上是自动生成的。如果我分离了sdb1,grub 将无法启动,因为它找不到 的 uuid sdb1

谢谢


更新:

shijiex@shijie:~$ cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    nodev,noexec,nosuid 0       0
# / was on /dev/sda1 during installation
UUID=d7f0cf11-3edf-4859-b65a-3b5bc60ea7b9  /               ext4    errors=remount-ro 0       1

#UUID=47d9205b-00a8-40e5-88d6-e8b9571799a7 /old_os               ext4    errors=remount-ro 0       2
# /backup was on /dev/sda5 during installation
UUID=d36e69de-3af8-4302-a2b1-f32c2538493d /backup         ext4    defaults        0       0
# /home was on /dev/sda7 during installation
UUID=95ffe5be-ed1c-4d2b-b745-e31ba62ca63d /home           ext4    defaults        0       2
#UUID=e2ae897d-62b1-45d3-a17a-49e7a1b8fbe7 /home           ext4    defaults        0       2

# /vm was on /dev/sda8 during installation
#UUID=222bf555-b2d3-4607-a856-f5fd785b1862  /vm            ext4    defaults        0       2
# /opt was on /dev/sda8 during installation
UUID=ffbc1ea0-f426-4def-9349-a6f68b486b2f  /opt       ext4    defaults        0       0
# /other was on /dev/sda6 during installation
UUID=657778bc-fde8-4261-9fe6-4134c6a7fb3f /other          ext4    defaults        0       0


# /other was on /dev/sda6 during installation
#UUID=6db98036-2350-4289-b9ef-8e0a2ae52eeb /win           ext4    defaults        0       2


# swap was on /dev/sda9 during installation
UUID=71c498b2-3484-4d5b-b64a-270cc352841b  none            swap    sw              0       0
#UUID=05f1ba29-4188-40d1-8597-de708b48ed50  /tmp           swap    sw              0       0

blkid

 shijiex@shijie:~$ sudo blkid 

[sudo] password for shijiex: 
/dev/sda1: UUID="d7f0cf11-3edf-4859-b65a-3b5bc60ea7b9" TYPE="ext4" PARTUUID="2fe05ff9-01"
/dev/sda3: UUID="95ffe5be-ed1c-4d2b-b745-e31ba62ca63d" TYPE="ext4" PARTUUID="2fe05ff9-03"
/dev/sda4: UUID="8d114eed-5ce4-4d6f-8a28-8a7092b01d46" TYPE="ext4" PARTUUID="2fe05ff9-04"
/dev/sda5: UUID="94b0fb65-f56d-426d-81f9-d05a8ac783eb" TYPE="ext4" PARTUUID="2fe05ff9-05"
/dev/sdb1: UUID="47d9205b-00a8-40e5-88d6-e8b9571799a7" TYPE="ext4" PARTUUID="0001c588-01"
/dev/sdb10: LABEL="New Volume" UUID="6db98036-2350-4289-b9ef-8e0a2ae52eeb" TYPE="ext4" PARTUUID="0001c588-0a"
/dev/sdb11: UUID="ffbc1ea0-f426-4def-9349-a6f68b486b2f" TYPE="ext4" PARTUUID="0001c588-0b"
/dev/sdb5: UUID="d36e69de-3af8-4302-a2b1-f32c2538493d" TYPE="ext4" PARTUUID="0001c588-05"
/dev/sdb6: UUID="657778bc-fde8-4261-9fe6-4134c6a7fb3f" TYPE="ext4" PARTUUID="0001c588-06"
/dev/sdb7: UUID="e2ae897d-62b1-45d3-a17a-49e7a1b8fbe7" TYPE="ext4" PARTUUID="0001c588-07"
/dev/sdb8: UUID="222bf555-b2d3-4607-a856-f5fd785b1862" TYPE="ext4" PARTUUID="0001c588-08"
/dev/sdb9: UUID="71c498b2-3484-4d5b-b64a-270cc352841b" TYPE="swap" PARTUUID="0001c588-09"
/dev/loop0: TYPE="squashfs"
/dev/loop1: TYPE="squashfs"
/dev/loop2: TYPE="squashfs"
/dev/loop3: TYPE="squashfs"
/dev/loop4: TYPE="squashfs"

答案1

您表示已将 HDD 克隆到 SDD。但是当我查看sudo blkidcat /etc/fstab时,发现它们之间没有太大关联。分区不匹配。UUID 不匹配。我怀疑您所做的更改不仅仅是克隆和启动。

如果不知道您到底做了什么或如何做了,就很难为您提供一个简洁的答案......但您可以尝试一下......

  • 打开机器,进入 GRUB 菜单
  • 按下e键进入编辑模式
  • 使用箭头键找到“quiet splash”
  • 找到UUID=xxxx同一行开头的
  • 将整个UUID=xxxx部分更改为/dev/sda1
  • control+xF10编辑后继续启动
  • 一旦启动,sudo update-grub然后reboot
  • 进入 BIOS 启动菜单并选择从 SDA 启动,或者将启动顺序更改为 CD-ROM/SDA/SDB/etc。
  • 在 GRUB 菜单中,选择要启动的正确磁盘

答案2

对于将来遇到这种情况的任何人。这将是在 grub 中更改根分区 UUID 配置的正确方法。在执行以下操作之前,请确保您拥有要用作根 ( / ) 的设备的正确 UUID。

编辑 /etc/default/grub 并添加以下变量:

GRUB_DEVICE_UUID=***INSERT NEW UUID HERE***

然后运行这个:

sudo update-grub

这不会改变搜索的提示条目,但无论如何都不会匹配,所以它应该可以工作。如果有人想研究改变这一部分的方法,我会很想知道。

答案3

@heynnema 的回答帮助我解决了大部分问题,但对我来说还不够,因为我的 BIOS 菜单没有显示此分区的启动项(不确定原因)。无论如何,我按照他们的步骤操作,直到从启动菜单中选择磁盘为止:

进入 BIOS 启动菜单并选择从 SDA 启动,或者将启动顺序更改为 CD-ROM/SDA/SDB/etc。

没有执行此步骤,而我只是像平常一样继续进入 grub,并启动与原始安装相对应的条目(因此在 @Xu 的例子中,这将是/dev/sdb1)。启动后,我sudo update-grub运行update-grub系统,并且它拾取了在新系统上运行后所做的更改。现在,当我从 grub 菜单中选择新条目时,它会启动到正确的系统。

希望这能帮助那些在 BIOS 菜单中找不到条目的人。

答案4

/boot/grub/grub.cfg您可以像之前一样 直接在 中更改 UUID 。/boot/grub/grub.cfg不会自动更新。但是,如果您想保留可启动性,您还需要在其他地方相应地更改 UUID,例如,在 EFI/UEFI 启动中、在/boot/efi/EFI/ubuntu/grb.cfg和 中/etc/fstab

相关内容