如何修复 grub.cfg 中的错误 UUID?

如何修复 grub.cfg 中的错误 UUID?

我在我的电脑上单独运行 Debian Wheezy,最近我将根分区复制到另一个分区同步我发现这种方法效果很好(我也知道 dd 和 ddrescue,但它们会在新分区上留下不可用的空间)。我使用以下命令为新分区生成了一个新的随机 UUID:sudo tune2fs -U 随机 /dev/hda9并更新了 fstab / 和 /home 条目。

然后,由于我对 GRUB 了解甚少,我使用了一个 gui(GRUB Customizer)来探测新的操作系统并向 GRUB 和 MBR 添加一个条目 - 它会创建一个 /etc/grub.d 条目,然后更新 GRUB。

在启动时,GRUB 列表包含新的操作系统(在 sda9 上),但它启动第一个操作系统(我从 -sda5 复制)。

/boot/grub/grub.cfg 包含新的 debian 操作系统,但它看起来像这样

set root='(hd0,msdos9)'  
search --no-floppy --fs-uuid --set=root 64662470-0e58-4dfd-90ac-43227d773556  
linux /boot/vmlinuz-3.2.0-2-amd64 root=UUID=cc3bca0d-aee4-4b9c-95c2-57212cc36d4d ro quiet  
initrd /boot/initrd.img-3.2.0-2-amd64

第一个 uuid 是 sda9,但第二个 uuid 是 sda5。我可以在启动时更改第二个 uuid(使用 E),然后它会启动 sda9。
那么我该如何更正 grub.cfg,以便 sda9 GRUB 列表条目永久从 sda9 启动?

答案1

只需编辑/boot/grub/grub.cfg/并将 sda5 的 UUID 替换为 sda9 的 UUID:

search --no-floppy --fs-uuid --set=root 64662470-0e58-4dfd-90ac-43227d773556  
linux /boot/vmlinuz-3.2.0-2-amd64 root=UUID=64662470-0e58-4dfd-90ac-43227d773556 

为了避免在将来的运行中出现此类错误update-grub 从您要使用的系统。如果你从旧操作系统运行它,它将拾取当前的根分区并设置 grub.cfg 从该分区启动。

答案2

当您update-grub从运行时sda5,它会读取/boot/grub/grub.cfgsda9复制的sda5。首先启动到 ,sda5这是您的主操作系统。然后使用以下命令进行修复:

SourceUUID=cc3bca0d-aee4-4b9c-95c2-57212cc36d4d
TargetUUID=64662470-0e58-4dfd-90ac-43227d773556
sudo mkdir /mnt/clone
sudo mount -t auto -v /dev/sda9 /mnt/clone
sudo sed -i "s/$SourceUUID/$TargetUUID/g" /mnt/clone/boot/grub/grub.cfg
sudo update-grub
sudo umount /mnt/clone -l

我基于这个答案Ubuntu 16.04 LTS 克隆到新分区脚本

答案3

我必须删除 /boot/grub/menu.lst(你应该先 cp 一个备份),然后 update-grub 表示同意生成一个新的。然后它检测到正确的分区 UUID 来引导。

相关内容