我的服务器是否仍在使用 grub 旧版 (GRUB 1) MBR?

我的服务器是否仍在使用 grub 旧版 (GRUB 1) MBR?

当 Debian 更新到 GRUB 2(软件包grub-pc)时,它不会自动升级 MBR。相反,它配置了旧的 GRUB 1 安装,以便链式加载 GRUB 2;这样管理员就可以测试新的 GRUB 2 配置。如果 GRUB 2 由于某种原因失败,您仍然可以使用旧的 GRUB 1 条目之一引导系统。测试 GRUB 2 后,您应该运行upgrade-from-grub-legacy以替换 MBR,然后手动删除/boot/grub/menu.lst*.

不幸的是,我们并没有在很多服务器上真正这样做,所以现在我们混合了 GRUB 1 和 GRUB 2 MBR,并且我们不知道哪个服务器正在使用哪个版本。有没有办法检测GRUB MBR版本?

答案1

德语 Ubuntu wiki(别担心,即使对于不会说德语的人来说,这些信息也应该是可以理解的)似乎展示了一种更好的方法:

http://wiki.ubuntuusers.de/GRUB-Umgebung_analysieren?redirect=no#GRUB-Version-in-MBR-oder-Partitions-Bootsektor-ermitteln

sudo hexdump -v -s 0x80 -n  2 -e '2/1 "%x" "\n"'  /dev/sdXY

结果可换算成下表:

5272    GRUB (Legacy)
aa75    GRUB (Legacy)
48b4    GRUB 2 (version 1.96)
7c3c    GRUB 2 (version 1.97 or 1.98)
020     GRUB 2 (version 1.99)
488     Grub 2 core.img
31d2    Grub 2 core.img
8053    LILO

原始 wiki 文章包含更多 ID,可用于识别其他操作系统中的许多其他 MBR。

答案2

我发现当服务器仍在使用 GRUB 1 MBR 时,设备的第三个 512 字节块包含以下字符串:

some-server ~ # dd if=/dev/sda bs=512 count=1 skip=2 2>/dev/null | strings
0.97
/boot/grub/stage2 /boot/grub/menu.lst

如果服务器使用 GRUB 2 MBR,则该块将不包含任何可读字符串:

some-other-server ~ % dd if=/dev/sda bs=512 count=1 skip=2 2>/dev/null | strings
WVSS
Z[^_]

相关内容