编辑/修改 在收到长重播后,基本上说“你在 grub 中看到的东西是假的”,我已经放弃了这个问题 - 在我看来,我必须删除大部分 Ubuntu 条目,并希望我的电脑仍然可以运行。
我想得到这个问题的答案。 (可能会转发)
我的假“grub”告诉我我安装了 Ubuntu 5.15.0.50 GENERIC。操作系统选项及其“高级选项”均未表明可以从中启动此类通用选项。由于我目前“一瘸一拐”的 22.04.1 通用版本是 5.13.0.46,并且正在慢慢变得更糟,所以我至少想尝试一下 5.15.0.50。
有什么合理的解决办法吗? (运行 5.15.0.50) - 从 ISO 干净加载是不合理的 - 我更看重我的 C++ 代码而不是工作操作系统 - 将不胜感激。
请不要“切换到本月的 Linux 风格”。
干杯。
这是一个多问题帖子。
- 我的多重引导系统 - 所有 Ubuntu,没有 Windows - 从 加载(并运行 - 使用“df”)
/dev/sde14
,但是“grub”菜单显示它实际上是从 加载/dev/sdd3
。这怎么可能? - 我喜欢清理未使用/无法加载操作系统分区。 “grub”菜单显示
dev/sde31
,但“gparted”不显示此类分区。我可以编辑什么文件来手动从“grub”菜单中删除此项?
q5@q5-desktop:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 5.2M 1 loop /snap/bluez/334
loop1 7:1 0 4K 1 loop /snap/bare/5
loop2 7:2 0 5.2M 1 loop /snap/bluez/302
loop3 7:3 0 114.9M 1 loop /snap/core/13741
loop4 7:4 0 115M 1 loop /snap/core/13886
loop5 7:5 0 55.6M 1 loop /snap/core18/2560
loop6 7:6 0 55.6M 1 loop /snap/core18/2566
loop7 7:7 0 62M 1 loop /snap/core20/1611
loop8 7:8 0 63.2M 1 loop /snap/core20/1623
loop9 7:9 0 86.8M 1 loop /snap/crossover/16
loop10 7:10 0 238.1M 1 loop /snap/firefox/1918
loop11 7:11 0 236.8M 1 loop /snap/firefox/1943
loop12 7:12 0 346.3M 1 loop /snap/gnome-3-38-2004/115
loop13 7:13 0 164.8M 1 loop /snap/gnome-3-28-1804/161
loop14 7:14 0 346.3M 1 loop /snap/gnome-3-38-2004/119
loop15 7:15 0 91.7M 1 loop /snap/gtk-common-themes/1535
loop16 7:16 0 81.3M 1 loop /snap/gtk-common-themes/1534
loop17 7:17 0 107.5M 1 loop /snap/logs/13
loop18 7:18 0 45.9M 1 loop /snap/snap-store/592
loop19 7:19 0 45.9M 1 loop /snap/snap-store/599
sda 8:0 1 465.8G 0 disk
└─sda1 8:1 1 465.8G 0 part
sdb 8:16 0 1.8T 0 disk
├─sdb1 8:17 0 512M 0 part
├─sdb2 8:18 0 17G 0 part
├─sdb3 8:19 0 41.9G 0 part
├─sdb4 8:20 0 195.3G 0 part
│ └─md127
│ 9:127 0 390.4G 0 raid5 /mnt/md127
│ /mnt/MDI_RAID_5
├─sdb6 8:22 0 41.3G 0 part
├─sdb7 8:23 0 97.7G 0 part
├─sdb8 8:24 0 97.7G 0 part
├─sdb9 8:25 0 977M 0 part
├─sdb10 8:26 0 98G 0 part
├─sdb12 8:28 0 147.2G 0 part
├─sdb14 8:30 0 38.1G 0 part
├─sdb15 8:31 0 97.7G 0 part
├─sdb16 259:2 0 61.7G 0 part
├─sdb17 259:3 0 195.3G 0 part
│ └─md127
│ 9:127 0 390.4G 0 raid5 /mnt/md127
│ /mnt/MDI_RAID_5
├─sdb18 259:4 0 146.5G 0 part
├─sdb26 259:5 0 9.9G 0 part
└─sdb30 259:6 0 96.8G 0 part
sdc 8:32 0 298.1G 0 disk
├─sdc1 8:33 0 512M 0 part
├─sdc3 8:35 0 19.5G 0 part
├─sdc5 8:37 0 4G 0 part
├─sdc6 8:38 0 7G 0 part
├─sdc7 8:39 0 24.9G 0 part
├─sdc8 8:40 0 35G 0 part
├─sdc16 259:0 0 7G 0 part
└─sdc17 259:1 0 79.6G 0 part
sdd 8:48 0 931.5G 0 disk
├─sdd1 8:49 0 147.2G 0 part
├─sdd4 8:52 0 147.2G 0 part
├─sdd5 8:53 0 147.2G 0 part
├─sdd6 8:54 0 147.2G 0 part
└─sdd7 8:55 0 146.7G 0 part
sde 8:64 0 2.7T 0 disk
├─sde1 8:65 0 512M 0 part /boot/efi
├─sde2 8:66 0 301.6G 0 part /media/q5/7309e060-4c31-462d-89e2-e2a2d9d051571
├─sde3 8:67 0 96.8G 0 part /media/q5/eaf6611c-a53c-4b45-9c2c-7bb0f57d1b956
├─sde4 8:68 0 5G 0 part /media/q5/eaf6611c-a53c-4b45-9c2c-7bb0f57d1b955
├─sde5 8:69 0 188.6G 0 part /media/q5/eaf6611c-a53c-4b45-9c2c-7bb0f57d1b954
├─sde7 8:71 0 212.3G 0 part /media/q5/TEMP+PHOTOS1
├─sde8 8:72 0 1M 0 part
├─sde9 8:73 0 96.8G 0 part /media/q5/272a5fa3-385b-46c5-9107-109ea3b7fd0c1
├─sde10 8:74 0 33.6G 0 part /media/q5/0d1ba4f5-9db9-491b-a83e-03670b2913c6
├─sde11 8:75 0 7G 0 part /media/q5/07fb0647-7d13-44da-bf01-6f4a48f2c8a61
├─sde14 8:78 0 324.2G 0 part /var/snap/firefox/common/host-hunspell
│ /
├─sde16 259:7 0 147.2G 0 part /media/q5/1T_NEW_COPY
├─sde17 259:8 0 114.5G 0 part
├─sde18 259:9 0 195.3G 0 part
│ └─md127
│ 9:127 0 390.4G 0 raid5 /mnt/md127
│ /mnt/MDI_RAID_5
├─sde19 259:10 0 116.6G 0 part /media/q5/07fb0647-7d13-44da-bf01-6f4a48f2c8a6
├─sde20 259:11 0 96.8G 0 part /media/q5/eaf6611c-a53c-4b45-9c2c-7bb0f57d1b957
├─sde21 259:12 0 224.9G 0 part /media/q5/04ab946c-a6e6-4e56-b952-bbd652caf6111
└─sde22 259:13 0 14G 0 part /media/q5/0537ec3b-5c68-4951-90a5-536ad44f2cbd1
sdf 8:80 1 0B 0 disk
sdg 8:96 1 0B 0 disk
sdh 8:112 1 0B 0 disk
sdi 8:128 1 0B 0 disk
sdj 8:144 1 14.4G 0 disk
├─sdj1 8:145 1 512M 0 part
└─sdj2 8:146 1 13.9G 0 part /media/q5/4835fa9c-77a4-490a-94bf-80f40b432366
sdk 8:160 0 149.1G 0 disk
└─sdk1 8:161 0 149G 0 part /media/q5/MDI
q5@q5-desktop:~$
按要求发布
q5@q5-desktop:~$ sudo efibootmgr -v
[sudo] password for q5:
BootCurrent: 0005
Timeout: 1 seconds
BootOrder: 0005,0000,0006,0009,000C,000D,000E,000F,000B,0002
Boot0000* ubuntu HD(1,GPT,2051a2c4-274c-4564-8d21-f272138c9284,0x800,0x100000)/File(\EFI\ubuntu\shimx64.efi)
Boot0002 USB BBS(USB,,0x0)..GO..NO........].e.M. .B.a.y. .R.e.a.d.e.r. .1...0.0....................A...................................$..Gd-.;.A..MQ..L.9.2.0.3.1.1.1........BO..NO........e.e.M. .B.a.y. .R.e.a.d.e.r. .1...0.1....................A...........................................$..Gd-.;.A..MQ..L.9.2.0.3.1.1.1........BO..NO........e.e.M. .B.a.y. .R.e.a.d.e.r. .1...0.2....................A...........................................$..Gd-.;.A..MQ..L.9.2.0.3.1.1.1........BO..NO{.......Y.S.e.a.g.a.t.e....................A.............................&..Gd-.;.A..MQ..L.N.A.8.3.3.B.D.C........BO..NO.........K.i.n.g.s.t.o.n.D.a.t.a.T.r.a.v.e.l.e.r. .3...0.P.M.A.P....................A...................................F..Gd-.;.A..MQ..L.6.C.6.2.6.D.7.C.2.7.E.6.B.1.2.1.6.9.2.4.0.0.6.E........BO..NO........g.W.D.C. .W.D.1.6.0.0.A.B.-.2.2.D.Y.A.0....................A......................................Gd-.;.A..MQ..L.7.D.1.6.0.0.A.B.5.2.2.D........BO..NO........e.e.M. .B.a.y. .R.e.a.d.e.r. .1...0.3....................A...........................................$..Gd-.;.A..MQ..L.9.2.0.3.1.1.1........BO..NO........o.S.e.a.g.a.t.e. .B.U.P. .U.l.t.r.a. .T.o.u.c.h. .0.0.0.4....................A...................................6..Gd-.;.A..MQ..L.0.0.0.0.0.0.0.0.N.A.B.1.3.3.H.H........BO
Boot0005* ubuntu HD(1,GPT,0621e243-4a24-4e6d-bdbb-cd02425977f8,0x800,0x100000)/File(\EFI\ubuntu\grubx64.efi)..BO
Boot0006* Hard Drive BBS(HD,,0x0)..GO..NO........u.S.T.3.3.2.0.4.1.8.A.S....................A.................................>..Gd-.;.A..MQ..L. . . . . . . . . . . . .V.6.P.M.D.L.P.Z........BO..NO........u.H.i.t.a.c.h.i. .H.D.S.7.2.1.0.1.0.C.L.A.3.3.2....................A.................................>..Gd-.;.A..MQ..L. . . . . . .P.J.9.6.0.4.D.H.T.2.G.1.F.P........BO..NO........o.W.D.C. .W.D.5.0.0.0.A.A.K.S.-.7.5.V.0.A.0....................A...........................>..Gd-.;.A..MQ..L. . . . .W. .-.D.C.W.W.A.8.F.5.3.6.8.8.8........BO..NO........o.W.D.C. .W.D.2.0.E.Z.A.Z.-.0.0.G.G.J.B.0....................A...........................>..Gd-.;.A..MQ..L. . . . .W. .-.D.X.W.2.K.9.A.1.0.4.L.P.H........BO
Boot0009* UEFI: Seagate PciRoot(0x0)/Pci(0x1d,0x0)/USB(1,0)/USB(3,0)/HD(1,GPT,bdea077f-9c43-4715-93c9-25136563c691,0x800,0x100000)..BO
Boot000B ubuntu HD(1,GPT,6854ec75-d77f-4e3e-b98c-fd028c46e45b,0x800,0x100000)/File(\EFI\ubuntu\grubx64.efi)..BO
Boot000C* UEFI: KingstonDataTraveler 3.0PMAP PciRoot(0x0)/Pci(0x1d,0x0)/USB(1,0)/USB(4,0)/USB(5,0)/HD(1,GPT,2051a2c4-274c-4564-8d21-f272138c9284,0x800,0x100000)..BO
Boot000D* UEFI: Seagate BUP Ultra Touch 0004 PciRoot(0x0)/Pci(0x1d,0x0)/USB(1,0)/USB(1,0)/USB(4,0)/HD(1,GPT,7149cebc-a872-4fa7-bf45-e75ea1672895,0xffff,0xefff1)..BO
Boot000E* UEFI: Seagate BUP Ultra Touch 0004 PciRoot(0x0)/Pci(0x1d,0x0)/USB(1,0)/USB(1,0)/USB(4,0)/HD(10,GPT,66537b42-4255-4eef-886f-7f0d54024f1f,0x803c8000,0x39fbc000)..BO
Boot000F* UEFI: Seagate BUP Ultra Touch 0004 PciRoot(0x0)/Pci(0x1d,0x0)/USB(1,0)/USB(1,0)/USB(4,0)/HD(12,GPT,eaa6938b-2fda-41b8-a307-6eaa95e594e4,0xba384000,0x3a98000)..BO
q5@q5-desktop:~$
答案1
1. 这怎么可能?
GRUB 引导菜单项中的任何文本都只是文本。它与任何 Linux 设备没有直接关系 - 因为当 GRUB 运行时,Linux 设备尚不存在。将磁盘/分区/可启动操作系统列表从固件/引导加载程序传递到内核也不一定有帮助:不能普遍保证 Linux 内核会按照与固件相同的顺序检测磁盘。
在像您这样的 UEFI 系统上(由于存在文件系统/boot/efi
),固件会根据 UEFI NVRAM 变量中的信息加载引导加载程序。您可以使用 来查看它们sudo efibootmgr -v
。这些变量可以通过多种方式识别 EFI 系统分区(简称 ESP)及其中的文件以进行引导,但最常见的可能是使用 PARTUUID 和 Windows 样式的路径名。
一旦固件加载了引导加载程序,引导加载程序基本上就可以做任何它想做的事情了。通常 GRUB 会读取一个配置文件,该文件会告诉它要做什么以及要显示什么样的菜单。该配置文件的位置可以 a) 嵌入在文件中,或 b) 由位于文件所在同一目录中的grubx64.efi
迷你文件间接指定。grub.cfg
grubx64.efi
在内部,GRUB 使用磁盘和分区标识符,例如(hd0,gpt1)
.任何对 的引用/dev/sd*
在引导时对 GRUB 来说都是毫无意义的。如果启动菜单项包含任何 Linux 设备名称,则它们是历史信息充其量,并且直接的猜测最坏的情况是。由于 GRUB 仅具有 Linux 内核和 initramfs 功能的一小部分,因此它最多只能记录创建 GRUB 配置时 Linux 设备名称的存在方式,仅此而已。
如果您已执行 Boot_repair 建议的修复操作,则它可能添加了一个新的 UEFI 引导变量,该变量使用 Boot_repair 创建的配置文件来调用 Boot_repair 安装的 GRUB 版本。由于这有效地覆盖了所有发行版的 GRUB 实例,因此当您需要再次启动系统时它可能会有所帮助...但由于 Boot_repair 生成的菜单不一定会随着您安装的操作系统接收内核更新而更新,例如Boot_repair 生成的 GRUB 配置不应被视为永久解决方案,而应被视为临时解决方法允许您决定哪个多重引导操作系统应管理主引导加载程序以及其他操作系统/引导加载程序应如何与主引导加载程序耦合。
话虽如此,“grub
从一个分区加载并且操作系统实际上从另一个分区运行”实际上可能是一种完全正常的情况:
- 在 UEFI 系统上,固件(或安全启动垫片)从 ESP 加载 GRUB(在 Debian/Ubuntu 上,通常安装在 处的单独文件系统
/boot/efi
) - GRUB 从一个或多个文件系统位置读取其配置(通常
/boot/grub
可能是 Linux 根文件系统或单独/boot
文件系统的一部分,但当然也可能有更深奥的配置) - GRUB 配置指示 GRUB 在何处读取内核和 initramfs 文件,以及它向内核提供哪些内核引导参数(通常内核和 initramfs 文件位于
/boot
,但使用自定义 GRUB 配置时,它们可以位于 GRUB 支持的任何文件系统上) GRUB 和/或系统固件)。 - 最终,initramfs 的内容将决定哪个文件系统被挂载为 Linux 根文件系统(大多数发行版的 initramfs 实现都遵循内核引导选项
root=
,但可以完全忽略它并执行 initramfs 配置为执行的任何操作)
2. 我可以编辑什么文件来手动从“grub”菜单中删除此项?
我们不可能知道这一点,因为您没有向我们提供必要的信息来弄清楚这一点。不过,我可以给你一些指导,告诉你如何自己解决这个问题。
首先,既然您显然拥有 UEFI 系统,那么您很幸运。在 BIOS 引导系统上,这会比较棘手。
从...开始sudo efibootmgr -v
。该BootCurrent: NNNN
行将标识BootNNNN
系统用于达到当前状态的相应引导变量。该BootNNNN
行可以有多种形式,但它可能包含加载引导加载程序文件的 ESP 的 PARTUUID,以及引导加载程序文件的路径名(相对于 ESP 文件系统的根),Microsoft 风格。您可以使用 来查看分区的 PARTUUID lsblk -o +partuuid
,无需sudo
。
如果引导加载程序文件是shimx64.efi
,它将grubx64.efi
从填充程序所在的同一目录加载。如果引导加载程序文件是grubx64.efi
,它将直接加载,而不需要安全引导填充程序。如果grub.cfg
ESP 的同一目录中有一个文件,请读取它:在大多数情况下,它要么是实际的 GRUB 配置,要么是一个迷你配置,它只是告诉 GRUB 真正的配置文件在哪里,可能使用文件系统 UUID 和一个路径名。用于lsblk -o +uuid
查看文件系统的文件系统 UUID。
但是,您的 GRUB 可能会将配置文件路径名嵌入到grubx64.efi
二进制文件中并指向某个不明显的位置。在这种情况下,strings grubx64.efi | grep -B 1 '^sbat,1,SBAT Version' | head -1
也许可以提供一个线索;但是,这不能保证有效,因为从 GRUB 二进制文件中可靠地找到初始配置文件路径需要解析二进制数据结构。
3、从efibootmgr -v
输出来看
根据efibootmgr -v
输出,您的系统当前可能拥有(或可能已经拥有)三个独立的 GRUB 实例,并且所有实例都被命名为ubuntu
,因此可能无法在 BIOS 引导顺序菜单中区分它们。
指示BootCurrent: 0005
系统当前正在使用以下Boot0005
条目启动:
Boot0005* ubuntu HD(1,GPT,0621e243-4a24-4e6d-bdbb-cd02425977f8,0x800,0x100000)/File(\EFI\ubuntu\grubx64.efi)..BO
从这里,我们可以看到包含引导加载程序的 EFI 系统分区的唯一 PARTUUID 是0621e243-4a24-4e6d-bdbb-cd02425977f8
,并且它可能是其 GPT 分区磁盘上的第一个分区 ( HD(1,GPT...
)。运行lsblk -o +partuuid | grep -i 0621e243-4a24-4e6d-bdbb-cd02425977f8
,您将识别包含活动引导加载程序的磁盘。
如果那是不是在当前正在运行的 Ubuntu 实例中安装的磁盘/boot/efi
,那么我的理论是正确的,您当前正在使用其他某个 Ubuntu 实例的 GRUB 进行引导,使用sudo update-grub
上次执行时生成的 GRUB 配置文件那操作系统实例。启动到该操作系统实例,sudo update-grub
在那里运行,然后启动回当前操作系统很可能会导致os-prober
识别当前运行的 Ubuntu 实例现在具有 5.15.0-50 内核,并相应地更新启动菜单。
但是,如果当前运行的 Ubuntu 实例是您的“主要”实例,您可能希望将其引导加载程序设为主要实例。为此,您必须检查当前/boot/efi
文件系统的 PARTUUID:
lsblk -o +partuuid |grep /boot/efi
查找输出BootNNNN
中sudo efibootmgr -v
包含该 PARTUUID 的行。然后使用sudo efibootmgr --bootorder NNNN,0005,0000,006,0009,000C,000D,000E,000F,000B,0002
其中 NNNN 与包含BootNNNN
当前/boot/efi
.
这是一次性操作,如果成功,sudo update-grub
在此 Ubuntu 实例中应正常更新活动引导加载程序,并且任何内核更新应自动再次在 GRUB 引导菜单中可见。但是,那其他Ubuntu 实例将失去其作为“启动菜单的主要维护者”的角色,并且任何内核更新那sudo update-grub
Ubuntu 实例只有在运行后才能启动当前的Ubuntu 实例。
进行此更改后,您可能会发现 GRUB 引导菜单现在可能有很大不同,因为它将sudo update-grub
运行os-prober
以重建其他可引导操作系统实例的列表。这可能会很好地解决您在 GRUB 菜单中看到不存在的分区的问题;但是,如果“幽灵”实例仍然存在,则应该可以在/boot/grub/grub.cfg
您当前的 Ubuntu 实例中找到它们,并且您可以选择自定义它或脚本/etc/grub.d/30_os-prober
以减少列出的操作系统实例的数量。
一旦您成功创建与您的主操作系统匹配的 GRUB 实例作为您的主引导加载程序(使用上面的说明)并已测试其效果令您满意BootNNNN
,那么您可以考虑使用从固件启动变量中删除额外的条目sudo efibootmgr --delete-bootnum -b NNNN
。这至少可以最大限度地减少固件启动顺序菜单(“BIOS 设置”)中的混乱。