如何判断设备上是否安装了 grub?

DrS*_*ker 41 grub software-raid

如何判断 grub 是否安装在磁盘上,以及它是否具有什么设置(特别是它对 root 参数的设置)

我需要检查软件 RAID1 阵列中的许多磁盘,以确保两个磁盘都安装了 grub,每个磁盘上的 grub 都具有适当的根值。

ben*_*kah 55

替代方法

file -s在 Ubuntu Lucid 中对我不起作用,因为我的文件命令的魔法文件已过期。如果您的魔法文件没有跟上 GRUB 更改,另一种方法是使用如下dd命令检查设备的前 512 个字节:

user@host:~$ sudo dd bs=512 count=1 if=/dev/sda 2>/dev/null | strings
ZRr=
`|f
\|f1
GRUB
Geom
Hard Disk
Read
 Error
Run Code Online (Sandbox Code Playgroud)

dd通过strings命令发送命令的输出,从而去除不可打印的字符(传输统计数据被丢弃到/dev/null)。

如果您看到 GRUB 在遇到故障时会显示的任何消息,那么您已经安装了 grub。

在 ubuntuforums.org 上给 louib 的帽子提示,以便在此受密码保护的帖子中回答:http ://ubuntuforums.org/showthread.php?t=363372

出于好奇,这是我从file -s以下内容中得到的:

user@host:~$ sudo file -s /dev/sda
/dev/sda: x86 boot sector; partition 1: ID=0x83, active, starthead 32, startsector 20
48, 337211392 sectors; partition 2: ID=0x5, starthead 254, startsector 337215486, 1434214
6 sectors, code offset 0x63
Run Code Online (Sandbox Code Playgroud)

那里没有特别关于 GRUB 的内容。

  • 接受的答案是在 2009 年写的,并且(从提到 menu.lst 而不是 grub.cfg 应该很明显)是针对 grub1 又名“grub-legacy”的。显然,从那以后事情发生了变化,grub2 没有在 MBR 中放置标识符。如果它在某些机器上对您有效,但在其他机器上无效,则意味着您在某些机器上有 grub1,而在其他机器上有 grub2。 (13认同)
  • 发现。接受的答案在几台机器上对我不起作用,但你的。 (5认同)

cas*_*cas 28

这是判断是否安装了 GRUB 的简单方法。如果它不起作用,您的file命令的数据库可能已过时,您可以更新其数据库或使用另一个答案中的替代方法。

您可以使用file来识别 MBR 中的 GRUB。例如

# file -s /dev/sda
/dev/sda: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3
, stage2 address 0x2000, stage2 segment 0x200; partition 1:
ID=0xfd, starthead 1, startsector 63, 1044162 sectors; partition
2: ID=0x82, starthead 0, startsector 1044225, 1028160 sectors;
partition 3: ID=0xfd, starthead 0, startsector 2072385,
1951447680 sectors, code offset 0x48
Run Code Online (Sandbox Code Playgroud)

root=paramater不存储在MBR,这是存储在GRUB的menu.lst文件,该文件被存储在文件系统(通常在根文件系统的/ boot / grub目录或/ boot文件系统的grub目录-但并非总是如此,它可以在任何地方)。

您必须解析上面文件的输出,确定menu.lst文件所在的磁盘/分区,安装它,读入并解析它。您还需要阅读 grub/default 文件以找出默认的 grub 菜单条目,因为这可能是您最感兴趣的具有 root= 参数的条目。

  • 这对于 grub2 不再正确。请参阅@benrifkah 的回答。 (9认同)

joe*_*dle 9

您可以使用grub-emu来查看 grub 在机器下次重新启动时将显示的菜单。

$ sudo apt-get install grub-emu
$ sudo grub-emu
Run Code Online (Sandbox Code Playgroud)

在我的台式机上,菜单按预期显示,但如果我真的假装启动内核,我会收到“没有这样的设备”错误。我认为这是预期的行为。

在我的 DigitalOcean VPS 上,grub 菜单中没有显示任何条目,尽管服务器确实重启正常。(这是 2013 VPS,所以你的里程可能会有所不同。)

运行时的一些注意事项grub-emu

  • 在X-Windows中,如果你想使用GRUB进行交互,你需要你的键盘焦点在终端上从中运行平头动车组,而不是其弹出的窗口上。
  • 您可以通过按c然后输入退出模拟器exit
  • 退出后,您的终端模拟器可能处于不良状态(例如 Enter 不会显示在新行上)。输入reset. (别担心它不会重启你的机器。它只会清理你的终端。)