it-swarm.cn

如何知道设备上是否安装了grub?

如何知道磁盘上是否安装了grub,以及它是否具有什么设置(值得注意的是,它对root参数具有什么设置)

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

39
DrStalker

更新:

这个答案来自2009年,适用于grub-legacy,而非grub2。

您可以使用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文件系统-但并非总是如此,它可以在任何地方)。

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

28
cas

替代方法

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

[email protected]:~$ 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

出于好奇,这是我从file -s得到的:

[email protected]:~$ 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完全没有。

53
benrifkah

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

_$ Sudo apt-get install grub-emu
$ Sudo grub-emu
_

在我的台式机上,菜单按预期显示,尽管如果我实际上假装引导内核,则会出现“没有此类设备”错误。我认为这是预期的行为。

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

运行_grub-emu_时的一些注意事项:

  • 在X窗口中,如果要与grub交互,则需要将键盘焦点放在终端上从中运行grub-emu,而不是在弹出的窗口上。
  • 您可以通过按c然后键入exit退出仿真器。
  • 退出后,您的终端仿真器可能状态不佳(例如Enter不会显示在新行上)。通过键入reset修复此问题。 (不用担心它不会重启您的计算机。它只会清理您的终端。)
7
joeytwiddle