假设我有 2 个 Linux 系统。它们都有/boot/grub/grub.cfg
,但启动时使用的分区来自其中一个。没有/boot
分区。如何确定/boot/grub/grub.cfg
应该使用哪个分区以及如何更改?
我有 1 个物理磁盘、2 个分区和 UEFI/GPT。
答案1
您的问题不太清楚,但我相信:
假设我们有两个物理磁盘,这取决于 BIOS/UEFI 查找的位置。也称为启动顺序。这与 UEFI 略有不同,因为安装程序直接与系统对话以安装其垫片,但您可以有两个系统安装两个单独的 UEFI 垫片。顺序由系统在启动时决定。
假设一个物理磁盘上有两个分区,带有 BIOS,这取决于谁最后(在安装时或自运行以来)写入了 MBR(主引导记录,磁盘的开始部分)
install-grub
。如果您重新安装 grub,它们可以相互覆盖。update-grub
应该只更新本地配置。假设两个分区,一个物理磁盘,UEFI,两者应该能够和平共处。您可以在系统级别选择启动顺序,每个引导加载程序可能都知道另一个,但它们不会争夺一个 MBR。
答案2
我在一个 SSD 上安装了三个发行版。设置是 UEFI/GPT。每当安装新发行版时,它都会控制 grub。
为了获得所需的/boot/grub/grub.cfg
控制,请使用该发行版启动并使用:
$ sudo cat /boot/efi/EFI/ubuntu/grub.cfg
search.fs_uuid 8337e8c8-6461-44f2-b5fe-dfd5b6b05883 root
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg
$ sudo grub-install
Installing for x86_64-efi platform.
Installation finished. No error reported.
$ sudo cat /boot/efi/EFI/ubuntu/grub.cfg
search.fs_uuid b40b3925-70ef-447f-923e-1b05467c00e7 root
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg
- 第一个
cat
显示 Ubuntu 19.04 grub 的使用情况8337e8c8-6461-44f2-b5fe-dfd5b6b05883
- 该
grub-install
命令将使用已启动的发行版覆盖该命令UUID
- 最后
cat
揭示了现在正在使用 Ubuntu 16.04 grubb40b3925-70ef-447f-923e-1b05467c00e7
。 - 从现在开始,只有 Ubuntu 16.04
update-grub
命令会更改 grub 启动菜单。update-grub
在 Ubuntu 19.04 中运行将更改其本地副本,/boot/grub/grub.cfg
但不会影响启动菜单。
我创建了一个脚本来为 grub 菜单选项提供更有意义的名称:
sed -i "s|Windows Boot Manager (on /dev/nvme0n1p2)|Windows 10|g" /boot/grub/grub.cfg
sed -i "s|Windows Boot Manager (on /dev/sda1)|Windows 10 original|g" /boot/grub/grub.cfg
sed -i "s|Ubuntu 16.04.5 LTS (16.04) (on /dev/nvme0n1p7)|Broken Ubuntu 16.04|g" /boot/grub/grub.cfg
sed -i "s|Ubuntu 19.04 (19.04) (on /dev/nvme0n1p10)|Ubuntu 19.04|g" /boot/grub/grub.cfg
现在 grub 菜单选项从以下改变:
2. Ubuntu 19.04 (19.04) (on /dev/nvme0n1p10)
3. Advanced options for Ubuntu 19.04 (19.04) (on /dev/nvme0n1p10)
到:
2. Ubuntu 19.04
3. Advanced options for Ubuntu 19.04