ハードドライブ上のgrubブートローダの正確な場所を知りたいです。 grubをインストールするにはgrub-install /dev/sdaを知っていますが、これはハードドライブ全体にgrubをインストールすることを意味しますか?
答え1
答えは次のとおりです。状況によって異なります。既存のMBRディスクでは、最初の部分(boot.img
)がブートセクタに書き込まれ、次の部分は通常ブートセクタと最初のパーティションの間のセクタに書き込まれます。通常、最初のパーティションの前には、未使用スペースが少なくとも63セクターあります。 GRUBの残りの部分は/boot/grub
GPT(GUIDパーティションテーブル)ディスクに保存されますが、UEFI(=BIOS)以外のファームウェアを使用している場合は、GRUBの2番目の部分を保存するためにBIOSブートパーティションが使用されます。 UEFIシステムでは、GRUBはgrubx64.efi
ESP(EFIシステムパーティション)のファームウェアによってロードされます。
答え2
コンテキストを設定するために、Linuxブートプロセスの最初のステップについて説明します。最終的にこの段階で、GRUBはブートパーティションを見つけてアクセスするための最小限の作業を実行し、カーネルをロードし、オペレーティングシステムの重要な内容を含む初期のRAMディスクイメージ(initrd)を指すようにします。
MBRシステムのMBRディスク(クラシックシナリオ)の場合、セクタ0の最初の440バイトはブートコード専用です。最初のセクタの尾には、パーティションテーブルなどの他のコンテンツが含まれています。 GRUBには小さなコードセクションがありますが、基本的には、より多くのコードを得るためにセクタ1以上にジャンプします。
この領域は通常パーティションに含まれません。従来の理由(CHSアドレス指定、LBAより前)のため、システムは通常、最初のパーティションをセクタ63に配置します。その後、システムはすべてのセクタが同じであると仮定するのではなく、プライマリメディアに合わせてパーティションをより最適に整列しようとし始めました。最初はRAIDアレイ用であり、後にはAF HDDおよびSSDのページ/ブロックサイズ用であり、一般的に1MiBになりました。
要点は、一般的に使用されていないこの領域がGRUBで使用されることです。今日のディスクにGRUBのi386-pcインストールを実行している場合は、可能であれば次の109セクタを使用してコードを保存します。つまり、セクター 0 の最初の 440 バイト + セクター 1 ~ 110 の合計で使用する正確なセクターの数は GRUB ごとに異なり、そこで必要なモジュール (ブートパーティションなど) によって異なります。 。
EFIシステムのGPTディスクの場合、GRUBはセクタ0にまったく存在する必要はありません。多くの場合、「保護」MBRが存在しますが、システムがますます一般化されているオペレーティングシステムで実行されている場合、システムは起動中にそれを使用しません。純粋なEFIモード。代わりに、システムのBIOS(間違った名前ですが理解しやすい)は、アクセス方法を知っているすべてのディスクを見つけ、GPTパーティションテーブルがあることを確認し、パーティションにESPフラグが設定されているディスクを確認します。 ESPパーティションは、ファイルシステムでフォーマットして解析する方法を知っています。 FAT32のサポートは必須ですが、BIOSにNTFSなどの他の形式のオプションのドライバが含まれることもあります。
読み取り可能なESPパーティションを見つけたら、一部のEFIブートファイルを含むサブフォルダを確認します。存在する場合は、ブート順序リストでそのフォルダ名のエントリを見つけることができます。 BIOSはそのフォルダのブートローダを実行します。ファイルシステムのファイルであるため、メディア内のブートローダの物理的な場所に関する詳細はもはや重要ではありません。