如何发现安装了哪个引导加载程序?

Nor*_*sey 9 boot bootloader grub grub2

在 Debian Linux 机器上,我遇到了一个非常奇怪的情况,开机后,GRUB 失败并显示错误“没有这样的分区”,但是如果我按下重置按钮,它会正常启动。我正在尝试诊断情况,但我意识到我不知道哪个版本的引导加载程序安装在哪里? 我怎样才能知道? 也就是说,如何找出每个磁盘的 MBR 上安装了哪些引导加载程序,以及如何找出各个分区上安装了哪些第二阶段引导加载程序?

如果我不能确切地找出我有什么,我会满足于能够找出安装了哪个版本的 GRUB

don*_*sti 14

您可以使用dd查看MBR 上是否安装了 GRUB(1 或 2):

dd if=/dev/sda bs=512 count=1 2> /dev/null | grep -q GRUB && echo "GRUB found"
Run Code Online (Sandbox Code Playgroud)

如果找到 GRUB 签名,则可以运行:

file -s /dev/sda
Run Code Online (Sandbox Code Playgroud)

如果输出类似于:

/dev/sda: x86 引导扇区;GRand 统一引导加载程序,stage1 版本 0x3.......

那么你已经在 MBR 上安装了 GRUB1。如果没有提到 Grub,像这样:

/dev/sda: x86 引导扇区;分区 1:ID=0x83,活动,starthead 32,startsector 2048........

那么您在该磁盘的 MBR 上安装了 GRUB2。

要查找基本的 GRUB 文件(GRUB1 为“stages”,GRUB2 为“images”):

GRUB1:

配置文件:

find / -name menu.lst
Run Code Online (Sandbox Code Playgroud)

阶段:

find / -name stage1
Run Code Online (Sandbox Code Playgroud)

或者

find / -name stage2
Run Code Online (Sandbox Code Playgroud)

GRUB2:

配置文件:

find / -name grub.cfg
Run Code Online (Sandbox Code Playgroud)

图片:

find / -name core.img
Run Code Online (Sandbox Code Playgroud)

或者

find / -name boot.img
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用http://bootinfoscript.sourceforge.net,它为您提供有关启动状态的详细信息,并告诉您安装了哪个引导加载程序,并结合了许多与启动相关的详细其他信息。它在 debian 中作为包 boot-info-script 提供。

  • `sudo apt install boot-info-script` 然后 `sudo bootinfoscript`。输出位于“RESULTS.txt”中。在 Ubuntu 18.04(5 年后)上有效。 (2认同)