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

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

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

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

答案1

这是判断 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

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

您必须解析上述文件的输出,确定文件位于哪个磁盘/分区menu.lst上,挂载它,读入并解析它。您还需要读入 grub/default 文件以找出哪个 grub 菜单项是默认的,因为这可能是您最感兴趣的 root= 参数。

答案2

替代方法

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

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

如果您看到 GRUB 遇到故障时显示的任何消息,则表示您已安装 grub。

向 ubuntuforums.org 上的 louib 致敬,感谢他在这篇受密码保护的帖子中做出回答:http://ubuntuforums.org/showthread.php?t=363372

要扫描所有设备,lsblk(列出块设备)很方便:

user@host:~$ sudo sh -c 'for d in $(lsblk -Ardpn -o NAME); do dd bs=512 count=1 if=$d 2>/dev/null | strings | grep -qi grub && echo "Grub found on dev: ${d}"; done' 
Grub found on dev: /dev/sda

对于那些好奇的人来说,这是我从以下网址获得的信息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

其中没有关于 GRUB 的具体内容。

答案3

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

$ sudo apt-get install grub-emu
$ sudo grub-emu

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

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

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

  • 在 X-windows 中,如果你想与 grub 交互,你需要键盘焦点成为在终端上您从中运行 grub-emu,而不是在弹出的窗口中。
  • c您可以按下然后输入来退出模拟器exit
  • 退出后,您的终端仿真器可能处于不良状态(例如,Enter 不会显示在新行上)。通过输入 来修复此问题reset。(不用担心,它不会重新启动您的机器。它只会清理您的终端。)

答案4

仅为了方便使用,使用了 benrifkah 答案中的信息的原始脚本:

#!/bin/bash
device=$1
strings_found=`dd bs=512 count=1 if=${device} 2>/dev/null | strings`
if [[ ${strings_found} == *"GRUB"* ]]; then
  echo "${device} has GRUB installed"
fi

相关内容