grubがデバイスにインストールされているかどうかを確認するにはどうすればよいですか?


37

grubがディスクにインストールされているかどうか、どのように設定されているか(特に、rootパラメーターの設定)を確認するにはどうすればよいですか

ソフトウェアRAID1アレイの多くのディスクをチェックして、両方のディスクにgrubがインストールされていることを確認する必要があります。各ディスクのgrubには適切なルート値があります。


3
以下の新しい回答を受け入れることを検討できますか?受け入れられた答えは今では時代遅れであるため
rubo77

@ rubo77、私の答えは、grub0.9x以下が一般的に使用されていて、名前がに変更されるずっと前に正しかったgrub-legacy。これが気になる場合は、特にについて新しい質問をすることをお勧めしますgrub2。または、時間の経過とともに陳腐化したすべての質問と回答を修正するキャンペーンを実施します。
cas

3
悪気ない。SOは知識ベースであり、時間とともに変化することを意図していると思います。古い回答を更新する必要があります。
-rubo77

回答:


28

更新:

この回答は2009年のもので、grub2ではなくgrub-legacyに適用されます。

fileMBRで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=paramaterは、GRUBの中に保存されているMBRに格納されていないmenu.lstファイルシステム(上に格納されたファイル、通常ルートFSの/ブート/ grubのディレクトリまたは/ブートファイルシステムのグラブディレクトリに-常にではないが、それをどこでも可能です)。

上記のファイルの出力を解析し、menu.lstファイルが存在するディスク/パーティションを特定し、マウントし、読み込み、解析する必要があります。また、grub / defaultファイルを読み込んで、どのgrubメニューエントリがデフォルトであるかを判断することもできます。これは、おそらく最も関心のあるroot =パラメータを持つエントリだからです。


その場合、grubが適切な場所でmenu.lstを探していることを確認する方法が必要です...どこにブートメニューを取得できるようにするかは、ブートローダーにディスクとパーティションを通知する必要があります。
DrStalker

grubのホームページgnu.org/software/grub、grub wiki grub.enbug.org、およびwikipedia en.wikipedia.org/wiki/GRUB
cas

8
これはgrub2ではもはや正しくありません。代わりに@benrifkahの回答を参照してください。
ポールトムブリン

52

別の方法

file -s私のファイルコマンドのマジックファイルが古くなったため、Ubuntu Lucidで私のために働いていませんでした。マジックファイルが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については何もありません。


5
スポットオン。受け入れられた答えは、いくつかのマシンでは機能しませんでしたが、あなたのマシンでは機能しました。
セリン

13
受け入れられた答えは2009年に書かれ、(grub.cfgではなくmenu.lstの言及から明らかなように)grub1、つまり「grub-legacy」についてでした。それ以降は明らかに変化しており、grub2はMBRに識別子を入れません。一部のマシンでは機能するが他のマシンでは機能しない場合、一部のマシンにgrub1があり、他のマシンにgrub2があることを意味します。
cas

1
クレイグに説明をありがとう。私が最初にfile -sコマンドを試してみたシステムは、GRUB2と思われるgrub-pcを使用しているため、部分的に正しいように聞こえます。ただし、file -sGRUB 0.97を実行する他のシステムで実行し、動作するシステムと動作しないシステムがありました。これらのシステムの違いは、fileコマンドに付属するマジックファイルの数字にありました。マジックナンバーファイルを交換すると、非稼働システムの定義が稼働システムの障害の原因であることが確認されました。
ベンリフカ

7

を使用grub-emuして、次にマシンがリブートしたときにgrubが表示するメニューを表示できます。

$ sudo apt-get install grub-emu
$ sudo grub-emu

デスクトップマシンでは、期待どおりにメニューが表示されましたが、実際にカーネルを起動するふりをした場合、「no such device」エラーが発生しました。これは予想される動作だと思います。

DigitalOcean VPSでは、サーバーは実際には正常に再起動しましたが、grubメニューにエントリは表示されませんでした。(これは2013 VPSであるため、走行距離は異なる場合があります。)

実行時の注意事項grub-emu

  • X-windowsでは、grubとやり取りしたい場合、ポップアップしたウィンドウではなく、grub-emuを実行した端末にキーボードフォーカス合わせる必要があります。
  • を押してcからを入力して、エミュレータを終了できますexit
  • 終了後、ターミナルエミュレータの状態が悪い場合があります(たとえば、Enterは新しい行に表示されません)。を入力して修正しますreset。(マシンが再起動されないことを心配しないでください。端末をクリーンアップするだけです。)

c続けて入力してもexitうまくいきませんでした。
ファヒムミサ

1
grubウィンドウ自体ではなく、grubウィンドウを生成した元の端末にフォーカスがあることを確認してください(これを実現するために
少し時間
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.