将 root 更改为新硬盘分区会破坏 grub

将 root 更改为新硬盘分区会破坏 grub

我的根分区已打开/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'

并更改gpt1gpt2. (我在这里假设您只有一个磁盘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 /查找提示字符串的正确值。

相关内容