语境
我有一台带有 SATA ( sdb/hd1
) 插槽和 m.2 ( sda/hd0
) 插槽的笔记本电脑。我在 hd0 插槽上有一个 SSD,带有启动和 EFI 分区,在 hd1 上有一个 HHD,上面有/
、/home
和分区。swap
我最近买了一个更大的 SSD 来替换旧的。更换时,我对SSD上的所有分区以及/root
HDD上的分区进行了备份(使用clonezilla);然后我恢复了新驱动器上的所有这些分区。我还将旧/
分区保留在硬盘上,以防出现问题。
我在恢复后做了这些更改:
- 在该文件中,我更改了引用旧分区 ( ) 或其 UUID ( )
/boot/grub.cfg
的所有行以引用新分区。/root
/dev/sdxn
UUID=[old partition's uuid]
- 在
/etc/fstab
(在新分区上),我还将旧分区的所有 UUID 更改为新分区。
问题
这些更改使我能够在新 SSD 上正确启动,但每次更新后,文件/boot/grub.cfg
都会返回引用旧分区。我猜测仍然有一些负责生成 grub 配置的文件仍然具有旧的分区信息,但我无法找到它。
答案1
在 Debian/Ubuntu 上,/boot/grub/grub.cfg
通常由 自动生成,并在每次内核更新时grub-mkconfig
调用。update-grub
grub-mkconfig
从 获取其配置/etc/default/grub
,并使用/etc/grub.d/
目录中的脚本来构建/boot/grub/grub.cfg
文件。您没有提到检查这些位置,所以您应该这样做。这两个地方都可能包含自定义内容。
在 UEFI 系统上,还包含/boot/efi/EFI/ubuntu/grub.cfg
包含目录的文件系统的 UUID /boot/grub
(无论是根文件系统还是单独的/boot
文件系统)。该文件只是指示grubx64.efi
查找该文件系统并从那里读取“真正的”GRUB 配置文件。