ディスクにgrubがインストールされているかどうか、およびgrubの設定(特に、rootパラメーターの設定)であるかどうかを確認するにはどうすればよいですか?
ソフトウェアRAID1アレイの多くのディスクをチェックして、両方のディスクにgrubがインストールされていることを確認する必要があります。各ディスクのgrubには適切なルート値があります。
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=
パラメータはMBRには保存されません。これは、GRUBのmenu.lst
ファイルに保存されます。このファイルは、ファイルシステム(通常はルートfsの/ boot/grubディレクトリまたはのgrubディレクトリ)に保存されます。/bootファイルシステム-常にではありませんが、どこにあってもかまいません)。
上記のファイルの出力を解析し、menu.lst
ファイルが存在するディスク/パーティションを特定し、マウントして、読み込んで解析する必要があります。また、grub/defaultファイルを読み込んで、どのgrubメニューエントリがデフォルトであるかを確認することもできます。これは、おそらく最も関心のあるroot =パラメータを持つものだからです。
代替方法
file -s
は、Ubuntu Lucidでは動作しませんでした。fileコマンドのマジックファイルが古くなっているためです。マジックファイルが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については何もありません。
grub-emu
を使用して、マシンが次に再起動したときにgrubが表示するメニューを表示できます。
$ Sudo apt-get install grub-emu
$ Sudo grub-emu
デスクトップマシンではメニューが期待どおりに表示されましたが、実際にカーネルをブートするふりをすると、「そのようなデバイスはありません」というエラーが表示されました。私はそれが予想される行動だと思います。
私のDigitalOcean VPSでは、サーバーは実際には正常に再起動しましたが、grubメニューにエントリが表示されませんでした。 (これは2013 VPSであるため、走行距離は異なる場合があります。)
grub-emu
を実行する際の注意事項:
c
を押してからexit
と入力すると、エミュレータを終了できます。reset
と入力して修正します。 (マシンが再起動しないことを心配しないでください。ターミナルをクリーンアップするだけです。)