我的根分区已打开/dev/sda1
,我将根分区更改为。我用 UUID/dev/sda2
更新了 中的条目。/etc/fstab
/dev/sda2
但是,我不确定,grub 如何知道根分区已更改为新的 UUID 即/dev/sda2
?除了 之外,还应该在哪些地方进行更改/etc/fstab
,以便 grub 可以找到根分区并引导系统?
因为,我想学习东西,所以我也想知道除了简单的命令 update-grub 之外的步骤。
我必须在其他地方改变一些东西吗?
我只是运行Linux。
答案1
假设您使用的是 grub2,最重要的配置文件是grub.cfg
(通常位于/boot/grub
基于 BIOS 的系统和/boot/efi/EFI/<os name>/
efi 系统的目录中)。当计算机启动时,grub 遵循该文件中的指令。这只是一个文本文件,因此您可以手动编辑它,或者使用一些自动工具(shell 脚本)grub-mkconfig
(又名grub2-mkconfig
)根据/etc/default/grub
文件和/etc/grub.d/
目录中定义的规则创建配置。
无论如何,如果您更改了根分区,则需要注意一些事项。首先是linux内核参数:grub直接不受根分区的影响,但它需要将正确的路径传递给内核,所以寻找这样的行
linux /vmlinuz-4.19.5 root=/dev/sda1
并将其更改为/dev/sda2
.
也可以通过UUID方式传递:
linux /vmlinuz-4.19.5 root=UUID=abcdefgh-ijkl-mnop-qrst-uvwxyz
您可以使用 grub 的命令测试您的 root UUID:
grub-probe --target=fs_uuid /
第二件事要检查/更改是内核文件本身。它可以驻留在单独的分区上(通常为/boot
),也可以驻留在根分区 ( /
) 上。在后面的情况下,您需要搜索一行
set root='hd0,gpt1'
并更改gpt1
为gpt2
. (我在这里假设您只有一个磁盘hd0
,并且使用 GUID 分区表,这是当今的标准)。
根据您的配置,您可能还需要更改文件系统 UUID 和提示字符串以找到内核的正确路径。它可能看起来像
search --no-floppy --fs-uuid --set=root --hint-ieee1275='ieee1275//disk@0,gpt1' --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 abcd-efgh
search --no-floppy --fs-uuid --set=root abcd-efgh
您已经知道的新 UUID,用于grub-probe --target=hints_string /
查找提示字符串的正确值。