私のサーバーはまだgrubレガシー(GRUB 1)MBRを使用していますか?

私のサーバーはまだgrubレガシー(GRUB 1)MBRを使用していますか?

DebianがGRUB 2(パッケージgrub-pc)にアップデートしても、MBRは自動的にアップグレードされません。代わりに、GRUB 2をチェーンロードするように古いGRUB 1インストールを設定します。これにより、管理者は新しいGRUB 2構成をテストできます。何らかの理由でGRUB 2が失敗した場合でも、以前のGRUB 1エントリのいずれかを使用してシステムを起動できます。 GRUB 2をテストした後、実行してupgrade-from-grub-legacyMBRを交換してから手動で削除する必要があります/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記事には、他のオペレーティングシステムで他の多くのMBRを識別するために使用できるより多くのIDが含まれています。

答え2

サーバーがまだGRUB 1 MBRを使用している場合、デバイスの3番目の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[^_]

関連情報