出于好奇,是否有可能找出哪个引导加载程序用于启动给定系统?系统启动的是GRUB,利洛或任何其他引导加载程序?
我想一定存在一些相同的/sys
或变量?/proc
编辑:
引导信息摘要: => Lilo 安装在 /dev/sda 的 MBR 中
sda1:___________________________________________________________________
File system: Boot sector type: Unknown Boot sector info: Mounting failed: mount: unknown filesystem type ''
/dev/sda
是我必须用来启动的唯一设备。
我想知道,如果唯一可用的单个分区上没有已知的文件系统,那么它是如何启动的呢?
答案1
我不认为在 或 下以有意义的方式跟踪此/sys
信息/proc
。我能理解启动后您可以访问此信息的唯一方法是询问系统,查看是否存在 GRUB 或 Lilo 配置文件,或者使用诸如以下的脚本bootinfoscript
。
示例 - 检查启动设备
如果您知道系统是用哪个设备引导的,则可以使用dd
转储引导加载程序的内容,然后grep
转储 GRUB 或 LILO。
您可以使用以下命令来确定您使用的是 GRUB 还是 LILO:
$ sudo dd if=/dev/sda bs=512 count=1 2>&1 | grep GRUB
$ sudo dd if=/dev/sda bs=512 count=1 2>&1 | grep LILO
返回此字符串的是您正在使用的引导加载程序:
Binary file (standard input) matches
示例 - 使用 bootinfoscript
$ sudo ./bootinfoscript --stdout
Boot Info Script 0.61 [1 April 2012]
============================= Boot Info Summary: ===============================
=> Grub2 (v1.99) is installed in the MBR of /dev/sda and looks at sector 1 of
the same hard drive for core.img, but core.img can not be found at this
location.
sda1: __________________________________________________________________________
File system: ext4
Boot sector type: -
Boot sector info:
Operating System:
Boot files: /grub2/grub.cfg
...
然而,这些方法都不是“决定性的”,因为多个引导加载程序可以共存,但至少它可以让您大致了解“可能”正在使用的引导加载程序。
参考
答案2
看这。但是,该脚本是用 Bash 编写的,因此如果您需要在嵌入式平台上运行它,则必须对其进行修改。我已经测试了这个脚本,它可以正确识别 Ubuntu 上的 GRUB 和 Slackware 上的 LILO。