grub2が実際にMBRをインストールしたドライブを確認する方法は?


17

私はDebian / Squeezeシステムを使用しています(少なくともWoodyに遡る歴史があります)。これはSqueezeアップグレードの一部としてgrub2にアップグレードされました。すべて正常に動作しますが、ディスク構成を台無しにしようとしています。

現在、マシンはRAID1-ed /、/ homeおよび/ bootパーティションを備えた2つの80GBドライブで実行されています(RAID1-ed "/ data"およびいくつかのスワップを備えたドライブのペアがあります。 、しかし、私はそれらに触れていません)。

2個の130GB SSDを追加し、少なくとも80GBドライブのパーティションと同じ大きさにパーティション分割し、RAID1を拡張してそれらを含めるようにして新しいSSDドライブに切り替え、同期を待ってから古いものを削除するつもりです。アレイのドライブを使用して、SSDだけを残します(そしてファイルシステムを拡張します)。しかし、mdadm / ext3の論争はこの質問の目的ではありません...

その結果、マシンから削除したい2つの古い80GB(IDE)ドライブが残ります。私の心配は、それらを削除するといくつかの重要なMBRが必要になることです。マシンが起動可能なままであることを確認するにはどうすればよいですか?

すなわち:

  • Squeezeアップグレードを行ったとき、grub2をインストールするドライブについていくつかの選択肢が提示されたことを覚えています(デフォルトですべてのドライブを使用しました)。ただし、当時はSSDはマシンにありませんでした。grubをSSD MBRにインストールするためにこれを再実行するにはどうすればよいですか?(私はそれがいくつかのパッケージのdpkg-reconfigureであると推測しています)。

  • grub2がインストールされていると思うドライブを見つけるにはどうすればよいですか?最近、/ boot / grub /の下にほぼ200個のファイルがあります。どこを探しますか?また、/ boot / grub / device.map.autoが現在3つのドライブのみをリストしている(80GBのうち2つが他のドライブペアのうちの1つだけで、SSDがまったくない)ことは少し奇妙に思えます。どうすれば最新の状態にできますか?(更新:それは赤いニシンでした; device.map.autoは何年も前の遺物のようです; device.mapはgrub-mkdevicemapによる更新で賢明に見えました。この領域の私の妄想は古いモボのBIOSに由来すると思いますGRUBが気付いたデバイスの順序を並べ替えます)。

結果:すべてが順調に進み、2つの古い80GB IDEドライブがすぐに使用可能になり、すべてのファイルシステムが新しいパーティションサイズにリサイズされたRAID1 ed SSDから実行される、スピーディーでクイックブートシステムができました。私が探していたもう1つの「Grubパズルの欠けているピース」はdpkg-reconfigure grub-pc、MBRを維持するディスクを求めるプロンプトでした。アーロンの答えは実際、これが期待通りに機能していることを私に安心させるために最も効果的であり、したがってその答えを受け入れました。

回答:


17

MBRは512バイトなので、GRUBが存在するかどうかを簡単に確認できます...

dd if=/dev/sda bs=512 count=1 | xxd

それはMBRをダンプします、私はバイト0x17F = 383で私の「GRUB」を見ます。

dd if=/dev/sda bs=1 count=4 skip=383

それを行うと、「GRUB」の後にdd出力が表示されます。

それをbash forループまたは何かでラップして、より多くのドライブに移動できます。手動で行いたくない場合。


4
ちょっとした追加-GRUBの位置はバージョンごとに変わる可能性が高いため、を使用できますdd if=/dev/sda bs=1 count=512 | grep -aob GRUB。これにより、ブートセクター内のマーカーの位置が返されます。
アレッサンドロサンティーニ

16

ブートプロセスにはいくつかの手順があります(従来のPC BIOSについて説明しています)。

  1. BIOSは、ブートディスクの最初のセクター(512バイト)を読み取ります。
  2. この最初のセクターのコードは、BIOSインターフェイスを介して固定された場所でさらにデータとコードを読み取ります。このBIOSインターフェイスは2つのハードディスクのみを公開します。ディスク0は最初のセクターが読み取られた場所であり、ディスク1は別のディスクであり、2つ以上ある場合は簡単に予測できません。ブートセクタには、追加データがどのハードディスクにあるかを示すバイトが含まれています。これはを含むディスクです/boot/grub
  3. 前の段階でロードされたコードは、パーティション、ファイルシステム、およびその他の高レベルの概念を理解します。データには、Grubモジュールの(hd0)/boot/grub検索場所grub.cfgと追加のGrubモジュールを決定するファイルシステムの場所(などの文字列)が含まれます。
  4. grub.cfg 通常、メニューを表示してOSを起動するために実行されます。

ブートセクタはによって生成されgrub-setup、通常はを介して呼び出されますgrub-install。ブートセクターは、grub-installまたはgrub-setupコマンドラインで(Linux構文で)指定したディスクに配置されます。を実行して、ディスク上にブートセクタがあることを確認できますfile -s /dev/sda。新しいディスクを追加していて、そこから起動したいので、新しいディスクで実行する必要がありますgrub-installgrub-install同じディスクで複数回実行しても問題はありません。

難しい部分は上記のステップ2です。可能な限り、Grub(つまり/boot/grubディレクトリ)をBIOSブートディスクに配置します(または、これに反対方向から近づいたら、BIOSにディスクからブートするように指示します/boot/grub)。これは、device.map遊びに出てくるところです。がを(hd0)含むディスクにマップされていることを確認してから、そのディスクで/boot/grub実行grub-installします。

2つのディスクがソフトウェアRAID-1構成にある場合、ブートセクタは同じになります。これは望ましい動作です。BIOSブートディスクである1つのディスクに障害が発生した場合、他のディスクからのブートは機能します(同じ関連する場所に同じバイトが含まれているため)。特定のパーティションのみをミラーリングした場合、ブートセクターのインストールはディスクの1つにのみ影響します。の2番目のミラーコピーを含むディスクに関連付けるようgrub-installに変更device.mapした後、2番目のディスクで再度実行する必要が(hd0)あり/boot/grubます。

ステップ3はかなり複雑ですが、通常はそのまま使用できます。ステップ4で、GrubはUUIDでファイルシステムを検索するか、名前付きファイルを検索するため、ディスクを指定するさまざまな方法を心配する必要がなくなります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.