DebianがGRUB 2(パッケージgrub-pc
)にアップデートしても、MBRは自動的にアップグレードされません。代わりに、GRUB 2をチェーンロードするように古いGRUB 1インストールを設定します。これにより、管理者は新しい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(心配しないでください。この情報は、ドイツ語を話さない人も理解できるはずです)がより良いアプローチを示しているようです。
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[^_]