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


37

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

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


3
您可以考虑接受以下新答案吗?因为公认的答案是现在已经过时
rubo77

@ rubo77,我的回答当时是正确的,当时grub普遍使用0.9x 或更低的值,并且很久之后才将其重命名为grub-legacy。如果您对此感到困扰,建议您专门问一个新问题grub2。或者,进行一场运动,纠正因时间流逝而过时的每个问题和答案。
cas

3
没有恶意。我认为SO是一个知识库,并且会随着时间而变化。一旦过时的答案应予以更新。
rubo77 '16

Answers:


28

更新:

这个答案来自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=paramater不存储在MBR,这是存储在GRUB的menu.lst文件,该文件被存储在文件系统(通常在根文件系统的/ boot / grub目录或/ boot文件系统的grub目录-但并非总是如此,它可能在任何地方)。

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


在那种情况下,我需要一种方法来确保grub在正确的位置寻找menu.lst ...必须在某个地方告诉引导加载程序必须进入哪个磁盘和分区,以便它可以获取引导菜单。
DrStalker

有很多关于GRUB在GRUB主页有用的信息gnu.org/software/grub,蛴螬维基 grub.enbug.org,并在维基百科en.wikipedia.org/wiki/GRUB
中科院

8
对于grub2,这不再正确。请参阅@benrifkah的答案。
Paul Tomblin,2013年

52

替代方法

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

出于好奇,这是我从中得到的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的任何东西。


5
发现。在几台机器上,已接受的答案对我不起作用,但在您的机器上,对我来说是有效的。
Cerin

13
接受的答案写于2009年(从menu.lst而不是grub.cfg的提及中可以明显看出)是grub1的又名“ grub-legacy”。自那时以来,情况显然已经发生了变化,并且grub2不在MBR中放置标识符。如果它在某些计算机上对您有用,但对其他计算机却不起作用,则意味着您在某些计算机上具有grub1,在其他计算机上具有grub2。
cas

1
感谢您的澄清Craig。我最初在该file -s命令上尝试过的系统使用的是grub-pc,它显然是GRUB2,所以听起来您部分正确。但是,我file -s在其他一些运行GRUB 0.97的系统上运行,并且在某些系统上运行,而在其他系统上却没有运行。这些系统之间的区别在于file命令附带的魔术文件中的数字。交换幻数文件确认来自非工作系统的定义导致了工作系统失败。
benrifkah 2011年

7

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

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

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

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

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

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

c紧跟着打字exit对我没有用。
Faheem Mitha

1
确保您将注意力集中在生成grub窗口的原始终端上,而不是grub窗口本身(花了我一秒钟时间才意识到这一点)
Madivad
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.