したがって、UEFI対応のマザーボードと3台のハードドライブがあります。
歴史的な理由から、sdaとsdbにはMBRパーティションテーブルがあり、古いドライブです。 sdaドライブには動作中のWindows7インストールが含まれており、これは私が保持することに非常に熱心ですが、sdbには、私も保持することに熱心な大きなデータが含まれています...アーカイブやビデオなど。
Sdcドライブは、購入してWindowsディスクマネージャーを使用してパーティション分割した新しいドライブで、半分はWindows用、残りの半分は後でデュアルブートLinux用になります。パーティションを作成したときに注意を払っていなかったため、GPTパーティションテーブルとMicrosoft予約済みパーティションが作成されました。時間が経ち、sdcには、いじりたくないデータがたくさん含まれているので、そのデュアルブートLinuxをインストールします。
パーティションテーブルはGPTであるため、Grub2はドライブの先頭(MSRによって占有されている)にEFIシステムパーティション(ESP)を必要とし、実際にはインストールを拒否します。
だから私の質問は:
(明確化:MSRが使用するスペースについては気になりません、それは単にESP起動できるようにそこに入りたい)の邪魔になります)
私の問題は混乱と知識の欠如から生じました。誰かがそれが役に立つと思うことを願って、私がここで学んだことを要約しようと思います。
コンピュータの電源を入れると、どこかでプログラムの実行を開始する必要があります。通常、これはプログラムを含むマザーボード上のROMです。長い間、このプログラムはBIOSと呼ばれ、特定の(ある程度)標準的な方法で機能しました。特にいくつかのハードウェア機能を制御していました。しかし、最も重要なことは、明確に定義された方法で、他のメディア上のOSに制御を渡すことです。
BIOSの「標準」プログラムは後に同じ目的(ほとんど)のUEFIに置き換えられ、他のメディア上のOSに制御を渡す方法もあります。
BIOSが起動すると、ブートローダーが含まれていると想定されるプライマリブートデバイスから最初のセクターが読み取られ、実行が開始されます。この最初のセクターは、マスターブートレコード(MBR)と呼ばれます。ディスクはDOSパーティションスキームを使用していると想定されています。
古いDOSパーティションスキーム(MBRとも呼ばれる)では、なんと446バイトのプログラムスペースがMBRのブートローダー用に予約されています。誰が446バイト以上のアミライトを必要とするでしょうか?そのため、大規模なブートローダーは通常、DOSパーティションスキームの「機能」を利用します。この機能では、MBRの直後に約1〜2MB程度の未使用スペースがあります。ブートローダーには「ステージ1」と「ステージ2」があり、ステージ1はMBRに格納され、この「未使用」領域に格納されているステージ2をロードするだけです。
UEFIが起動すると、プライマリブートデバイスがGPTを使用していると想定し、特定のタイプのパーティション、つまり「EFIシステムパーティション」を探します。このパーティションは、FAT 12,16または32と見なされます。見つかったら、.efi
で終わる名前のファイルを探して、パーティションをスキャンしてブートローダーを探します。
Grubのインストールのコンテキストで、私が読んだテキストは、UEFIブート手順を単にUEFIと呼び、BIOSブート手順をBIOSと呼んでいることがわかりました。彼らがマザーボードROM上の実際のソフトウェアについて話していると思ったので、これは混乱を招きました。
いずれにせよ、UEFIマザーボードはBIOSブート手順を実行できます。これは通常、UEFI設定では「レガシーブート」またはCSMと呼ばれます。
GPTは、古いMBR/DOSパーティションスキームとは大きく異なりますが、MBRパーティションディスク上のブートローダーが存在する領域を予約しています。これは、「レガシー」ブートローダーをGPTのこの予約済みスペースにインストールして、BIOSブートを使用できることを意味します。ただし、注意点があります。ステージ1/2のことを覚えていますか?ええ、GPTにはその「機能」がなく、予約領域はまだ446バイトです。そのため、ブートローダーのステージ2を収容するために、特別なパーティションタイプ「bios_boot」が導入されました。したがって、ブートローダーは、GPTディスクにインストールされていることを認識し、「bios_boot」パーティションを見つけて、そこにステージ2を配置し、ステージ1にこのパーティションを何らかの方法で見つけさせる必要があります。
したがって、起動するには3つの方法があります。
ブートローダーを保持するパーティションを作成します。100MB程度で十分です。タイプを「EFIシステムパーティション」に設定し、FAT 12,16または32でフォーマットします。通常は/boot/efi
のどこかにマウントします。次に、grubにEFIローダーをインストールするように指示します:grub-install --efi-directory=/boot/efi
。
UEFIブートは、パーティションテーブルを調べてパーティションを見つける必要があります。
ESP '/ boot'にも使用できると言われていますが、試していません。
ローダーのステージ2(通常は1〜2 MB)を保持するパーティションを作成し、タイプを「bios_boot」に設定します。このパーティションにファイルシステムを配置したり、マウントしたりする必要はありません。grubは、必要な処理を実行するためにファイルシステムを「所有」します。ディスク上のこのパーティションの位置は関係ありません。次に、通常どおりgrub-install /dev/sdx
としてgrubをMBRにインストールします。 Grubは、それがGPTディスクであることを検出し、BIOSブートパーティションを見つけて(そうでない場合は文句を言う!)、適切なステージ1とステージ2をインストールする必要があります。
ディスク上にDOSパーティションスキームを作成し、grub-install /dev/sdx
を使用してMBRを書き込むだけで、BIOSブートパーティションは必要ありません。
そのため、grubでは、何らかの理由でUEFIブートローダーからBIOSブートローダーをチェーンロードできないことがわかりました。個人的にはそれが不可能な理由はわかりませんが、少なくともgrubはそれをサポートしていないようです。
そのため、問題を解決するために、UEFI設定でGPTドライブをプライマリブートデバイスとして設定し、BIOSブートを使用して上記のようにGPTデバイスからgrubをロードします。これは、最初のディスクのMBRからWin7をチェーンロードできることを意味します。