web-dev-qa-db-ja.com

セカンダリGPTドライブのGrubからMBRをチェーンロードできますか?また、セカンダリドライブでMSRを削除できますか?

したがって、UEFI対応のマザーボードと3台のハードドライブがあります。

  • / dev/sda-​​256G SSD(MBR)
  • / dev/sdb-230G HDD(MBR)
  • / dev/sdc-512G SSD(GPT)

歴史的な理由から、sdaとsdbにはMBRパーティションテーブルがあり、古いドライブです。 sdaドライブには動作中のWindows7インストールが含まれており、これは私が保持することに非常に熱心ですが、sdbには、私も保持することに熱心な大きなデータが含まれています...アーカイブやビデオなど。

Sdcドライブは、購入してWindowsディスクマネージャーを使用してパーティション分割した新しいドライブで、半分はWindows用、残りの半分は後でデュアルブートLinux用になります。パーティションを作成したときに注意を払っていなかったため、GPTパーティションテーブルとMicrosoft予約済みパーティションが作成されました。時間が経ち、sdcには、いじりたくないデータがたくさん含まれているので、そのデュアルブートLinuxをインストールします。

パーティションテーブルはGPTであるため、Grub2はドライブの先頭(MSRによって占有されている)にEFIシステムパーティション(ESP)を必要とし、実際にはインストールを拒否します。

だから私の質問は:

  1. MSRを軌道からESPそして多分/ boot)に挟むように動かすことはできますか?ハードドライブがインストールされる前にWin7が正常に起動したので、何に影響するかわかりません。
  2. UEFIを使用してsdcから起動するように起動順序を変更すると、grubがロードされますが、grubはsdaのMBRからチェーンロードできますか(sdaは変更されません)?

(明確化:MSRが使用するスペースについては気になりません、それは単にESP起動できるようにそこに入りたい)の邪魔になります)

4
Emily L.

私の問題は混乱と知識の欠如から生じました。誰かがそれが役に立つと思うことを願って、私がここで学んだことを要約しようと思います。

BIOSとUEFIハードウェア

コンピュータの電源を入れると、どこかでプログラムの実行を開始する必要があります。通常、これはプログラムを含むマザーボード上のROMです。長い間、このプログラムはBIOSと呼ばれ、特定の(ある程度)標準的な方法で機能しました。特にいくつかのハードウェア機能を制御していました。しかし、最も重要なことは、明確に定義された方法で、他のメディア上のOSに制御を渡すことです。

BIOSの「標準」プログラムは後に同じ目的(ほとんど)のUEFIに置き換えられ、他のメディア上のOSに制御を渡す方法もあります。

BIOSブート

BIOSが起動すると、ブートローダーが含まれていると想定されるプライマリブートデバイスから最初のセクターが読み取られ、実行が開始されます。この最初のセクターは、マスターブートレコード(MBR)と呼ばれます。ディスクはDOSパーティションスキームを使用していると想定されています。

古いDOSパーティションスキーム(MBRとも呼ばれる)では、なんと446バイトのプログラムスペースがMBRのブートローダー用に予約されています。誰が446バイト以上のアミライトを必要とするでしょうか?そのため、大規模なブートローダーは通常、DOSパーティションスキームの「機能」を利用します。この機能では、MBRの直後に約1〜2MB程度の未使用スペースがあります。ブートローダーには「ステージ1」と「ステージ2」があり、ステージ1はMBRに格納され、この「未使用」領域に格納されているステージ2をロードするだけです。

UEFIブート

UEFIが起動すると、プライマリブートデバイスがGPTを使用していると想定し、特定のタイプのパーティション、つまり「EFIシステムパーティション」を探します。このパーティションは、FAT 12,16または32と見なされます。見つかったら、.efiで終わる名前のファイルを探して、パーティションをスキャンしてブートローダーを探します。

Grubのインストールのコンテキストで、私が読んだテキストは、UEFIブート手順を単にUEFIと呼び、BIOSブート手順をBIOSと呼んでいることがわかりました。彼らがマザーボードROM上の実際のソフトウェアについて話していると思ったので、これは混乱を招きました。

いずれにせよ、UEFIマザーボードはBIOSブート手順を実行できます。これは通常、UEFI設定では「レガシーブート」またはCSMと呼ばれます。

GPTおよびDOS/MBR

GPTは、古いMBR/DOSパーティションスキームとは大きく異なりますが、MBRパーティションディスク上のブートローダーが存在する領域を予約しています。これは、「レガシー」ブートローダーをGPTのこの予約済みスペースにインストールして、BIOSブートを使用できることを意味します。ただし、注意点があります。ステージ1/2のことを覚えていますか?ええ、GPTにはその「機能」がなく、予約領域はまだ446バイトです。そのため、ブートローダーのステージ2を収容するために、特別なパーティションタイプ「bios_boot」が導入されました。したがって、ブートローダーは、GPTディスクにインストールされていることを認識し、「bios_boot」パーティションを見つけて、そこにステージ2を配置し、ステージ1にこのパーティションを何らかの方法で見つけさせる必要があります。

概要

したがって、起動するには3つの方法があります。

UEFIブート+ GPT

ブートローダーを保持するパーティションを作成します。100MB程度で十分です。タイプを「EFIシステムパーティション」に設定し、FAT 12,16または32でフォーマットします。通常は/boot/efiのどこかにマウントします。次に、grubにEFIローダーをインストールするように指示します:grub-install --efi-directory=/boot/efi

UEFIブートは、パーティションテーブルを調べてパーティションを見つける必要があります。

ESP '/ boot'にも使用できると言われていますが、試していません。

BIOSブート+ GPT

ローダーのステージ2(通常は1〜2 MB)を保持するパーティションを作成し、タイプを「bios_boot」に設定します。このパーティションにファイルシステムを配置したり、マウントしたりする必要はありません。grubは、必要な処理を実行するためにファイルシステムを「所有」します。ディスク上のこのパーティションの位置は関係ありません。次に、通常どおりgrub-install /dev/sdxとしてgrubをMBRにインストールします。 Grubは、それがGPTディスクであることを検出し、BIOSブートパーティションを見つけて(そうでない場合は文句を言う!)、適切なステージ1とステージ2をインストールする必要があります。

BIOSブート+ MBR

ディスク上にDOSパーティションスキームを作成し、grub-install /dev/sdxを使用してMBRを書き込むだけで、BIOSブートパーティションは必要ありません。

GPTを使用したプライマリドライブからMBRを使用したセカンダリドライブのチェーンロード

そのため、grubでは、何らかの理由でUEFIブートローダーからBIOSブートローダーをチェーンロードできないことがわかりました。個人的にはそれが不可能な理由はわかりませんが、少なくともgrubはそれをサポートしていないようです。

そのため、問題を解決するために、UEFI設定でGPTドライブをプライマリブートデバイスとして設定し、BIOSブートを使用して上記のようにGPTデバイスからgrubをロードします。これは、最初のディスクのMBRからWin7をチェーンロードできることを意味します。

5
Emily L.