web-dev-qa-db-ja.com

ハイブリッドMBR / GPT上のWindows

ようやくWindowsを仮想マシン内での生活に任せようと思ったのですが、alas、勝っただけのゲームを見つけましたそのセットアップでは行いません。 Windowsが最後にディスクの指定されたチャンクを占有してから数日間、さまざまなOSやLinuxディストリビューションを何度も試しましたが、空き領域はありましたが、サポートされているパーティションの最大数に達していました。 MBRパーティションテーブル 。それで、21世紀のJustWork®であるはずだと信じて、それが機能することを示すGoogleのざっと調べた結果、 GUIDパーティションテーブル(GPT) に変換してインストールしようWindows 7なんと、Windows 7はEFIシステムのGPTでのみ機能し、私の場合はBIOSを使用しています。私は以前の調査でこれに気づいたはずですが、それは簡単すぎたでしょう。

そのため、MBRに変換し直して、Windows用に作成できるようにパーティションレイアウトを調整するか、 ハイブリッドMBR を使用するかを選択する必要があります。後者はより魅力的に聞こえます。残念ながら、インターネット上のハイブリッドMBRについては恐ろしい警告がたくさんあるので、いくつか質問があります。

Windowsは実際にはGPTに対応しているため、ブートローダーに対して醜いことをしますが、MBRは表示されますか? LiveCDから起動してgrub-installを実行するよりも多くの修復が必要ですか? Windowsのパーティション分割ツールに触れないようにする以外に、避ける必要があることはありますか?コンピュータは爆発しますか? MBRに切り替えただけで、多くの頭痛の種が節約されますか? (MacがBoot CampでハイブリッドMBRを使用していることを理解しているので、これが私が考えているほど難しくないことを願っています。)

10
Patches

MBRパーティショニングスキームに回帰する必要はなく、「ハイブリッドMBR」パーティショニングスキームも必要ありません。 (私は自分のマシンの1つにそのようなものを持っており、それらが気弱な人向けではないことを証明します。)

Windows 7はEFIパーティションディスクを問題なく使用できます。EFI以外のマシンではディスクからブートストラップすることはできません 、および(Microsoftの方法で、自分自身から保護するために)ディスクへのインストールを拒否します。最初の場所。あなたの場合、あなたの問題はファームウェアの根本的な欠陥であり、実際にはWindowsの問題ではありません。あなたのファームウェアはEFIパーティションテーブルを理解していません。

このような理解は、オペレーティングシステムを変換する場合に必要ですbootstrap EFIパーティションディスク上にあります。ファームウェアは EFI Boot Managerメニューを表示してからロードするために)を知る必要があります。 EFIシステムパーティションから選択されたオペレーティングシステムローダープログラムただし、ファームウェアはあまりスマートではなく、ロードする以上のことを行う方法がわかりません。 「マスターブートレコード」を実行し、そのbootstrapコードを実行します。EFIパーティションディスクでは、「マスターブートレコード」に残りのEFIブートプロセスを実行するコードがありません。

せいぜい、現時点では、MBR bootstrapコードは、ファームウェアと同じようにEFIパーティションテーブルスキームを無視しており、MBRパーティションテーブルを見つけて処理することを期待しています。 2つのことです。

  • mBR bootstrap EFIパーティションテーブルの読み取り方法を知っているコードを取得し、第2ステージを見つけるbootstrap EFI-partition-table-対応しており、オペレーティングシステムのブートローダーを順番にロードして実行できます。
  • eFIパーティションディスクにインストールするようにWindows7を説得する何らかの方法

最初は不可能ではありません。このようなEFIパーティション対応MBRブートストラップには2つのソースがあります。

  • 私は1つを書き、公開しました (実際、この回答が最初に書かれた後)。
  • H. PeterAnvinによって書かれたSYSLINUXのいわゆる「GPT」MBRブーストラップは別のものです。

どちらも 「アクティブな」パーティションを探し、そのVBRをロードして実行し、古いPC/ATおよびPC98の方法で効果的にブートストラップします ただし、EFIパーティションテーブルを使用します。これらの2つに失敗した場合、今すぐ入手できる最善の選択肢は次のとおりです。

  • GRUB 2:残念ながら、これはまだハードワイヤード番号をMBRに突き刺すことに依存していますbootstrapコードは、どこにあるかを指示しますローダーの次の部分ですが、2番目のステージがロードされて実行されると、EFIパーティションテーブルを理解し、パーティション内からオペレーティングシステムのブートローダーをブートストラップできます。 EFIオペレーティングシステムのブートローダーを実行する方法を知っていますが、VBRまたはLinuxとBSDのいずれかに対処する方法しか知りません。
  • UEFI DUET:Rod Smithがこれについて詳しく説明します。 )残念ながら、これはボリュームにインストールされ、完全に機能するEFIブートマネージャーとEFIシェルですが、そもそもVBRをロードして実行するために何か他のものが必要です。そして今、何か他のものはGRUB2のようなものでなければならず、それ自体がMBRコードのハードワイヤードセクター番号、SYSLINUX、または実際に私のEFIパーティション対応MBRブートストラップに依存しています。ただし、適切なEFIオペレーティングシステムbootstrapローダーを実行できます。

2番目(EFIパーティションディスクにインストールするようにWindows 7を説得)は、少なくともWindows 7のx86-64フレーバーで実現可能です。これは複雑で、Microsoftによって正式にサポートされていないため、MicrosoftのBoot ManagerのEFIバージョンを使用して効果的に独自のWindowsインストールディスクを作成し、それを何らかの方法でEFIブート環境内から実行する必要があります。 (もちろん、UEFI DUETがインストールされている場合、これはかなり簡単です。)しかし、インストーラーがEFIシステムでブートストラップされたことをWindows 7に納得させます。この基準を使用して、インストーラーはWindowsをインストールできるかどうかを判断します。 EFIパーティションハードディスク。

もちろん、一度インストールすると、Windows 7を日々ブートストラップするという追加の最終的な複雑性があります。 EFIファームウェアがあることを知っているインストーラーは、MicrosoftのブートマネージャーのEFIバージョンをインストールするからです。したがって、次のいずれかが必要になります。

  • pC/ATバージョンのMicrosoftBoot Managerをインストールし、GRUB2を使用している場合は、GRUB2がどこにあるかを認識できるようにします。または
  • 常にUEFIDUETを起動し、そこからMicrosoft BootManagerのEFIバージョンを実行します。

このナンセンスのほとんどallは、そもそもEFIファームウェアがインストールされている場合はなくなります。 Windows 7(x86-64)は問題なくインストールされます およびEFIパーティションテーブルを理解し、Microsoftのブートマネージャー(およびその他のEFIブート可能オペレーティングシステム)をロードして実行するEFIブートマネージャーEFIシステムパーティション内の通常のプログラムイメージファイルから直接、ファームウェアが付属しています。

9
JdeBP

この問題にはいくつかの解決策があります。要約すると、多かれ少なかれ私の好みの順序で:

  • マザーボードをアップグレードします-UEFIブート機能を備えたマザーボードを入手した場合は、WindowsをUEFIモードでインストールできるため、設定が完了します。 IntelのSandyBridgeをベースにしたほとんど(おそらくすべて)のボードはUEFI対応ですが、この事実を宣伝していないボードもあります。多くの新しいAMDボードもUEFI対応です。実際、あなたはすでにそのようなボードを持っている可能性があります。過去数年間に販売されたIntelブランドのボードの多くは、UEFIブートオプションがCMOS=設定画面に埋め込まれています。そのようなオプションを検索してみてください。すべてに対してUEFIモードを使用する必要がある場合があります。ただし、Linuxは変換が非常に簡単であり、どちらの方法で起動するように設定されていても、再構成することなく前後に切り替えることができます。Windowsをインストールするには、64ビットバージョンのVistaまたは7が必要です。 UEFIモード。
  • 2台目のハードディスクを使用します-WindowsをMBRディスクにインストールし、LinuxをGPTディスクに保持できます。必要に応じて、WindowsデータパーティションをGPTディスクに配置することもできます(Vistaまたは7を使用している場合)。 WindowsブートディスクのみがMBRにある必要があります。古い20 GBドライブがあっても、おそらくWindows C:パーティションを保持するだけで十分です。Vistaまたは7を使用している場合は、WindowsプログラムファイルをGPTパーティションに配置できます。
  • MBRに変換する- GPT fdisk(gdisk) を使用してこれを実行できますが、特定の警告があります。特に、作成する各論理パーティションの前に少なくとも1つの空きセクターが必要であり、すべての論理パーティションが連続している必要があります。現在のディスクがこれらの仕様を満たしていない場合、変換でパーティションが失われるか、必要なギャップを作成するためにいくつかのパーティションのサイズを変更する必要があります。特にパーティションのサイズを変更する必要がある場合は、データ損失のリスクもあります。
  • Use UEFI DUET-JdeBPが提案したように(そして 件名のマイページ にリンクされています)、UEFI DUETが可能です。私見ですが、このアプローチの欠点はJdeBPが示唆するほど大きくはありません、[〜#〜] if [〜#〜]UEFIDUETはシステムで起動します。 (オッズは、64ビットのIntel CPUを持っている場合は適切ですが、64ビットのAMD CPUではあまり効果がなく、32ビットのCPUではまったく機能しません。)ただし、これを試すための技術的なトラブルシューティングに注意してください。 USBフラッシュドライブを使用して、予備的な調査を行うことができます。 UEFI DUETをインストールして、起動できるかどうかを確認します。この件に関する私のページに記載されているように、落とし穴はありますが、起動すれば、定期的にでもWindowsをインストールして起動できる可能性があります。セットアップが完了すると、UEFI DUETは、基本的に、Windows用のかなり大きなGPTブートローダーになります。
  • 仮想化を使用する-それはあなたが求めているものではありませんが、Windowsは仮想マシンで許容できるように機能すると考えられます。ゲームに関しては、必要なパフォーマンスが得られるかどうかについては少し懐疑的ですが、試してみる価値があるかもしれません。
  • ハイブリッドMBR-これを設定して、ハイブリッドパーティションにWindowsをインストールできます。 Windowsは現在のMBR常駐ブートローダーを一掃するので、再インストールする準備をしてください。個人的には、ハイブリッドMBRは危険なので、このソリューションはお勧めしません。ただし、他のすべてのオプションが失敗した場合は、Windowsではあきらめている可能性があります。

また、いくつかの誤解を解消したいと思います。

  • BIOSベースのコンピューターでGPTからWindowsを起動できないことは、ファームウェア(BIOS)の制限ではなく、間違いなくWindowsの制限です。 Linux、FreeBSD、およびその他の一部のOSは、BIOSベースのコンピューターのGPTディスクから正常に起動できます。マイクロソフトがBIOSベースのコンピューターでのGPTからのWindowsの起動をサポートしたくない理由はわかりませんが、必要に応じて実行できます。他に何もないとしても、彼らはUEFI実装を採用し、それを本質的に取り除き、ブートローダーとして使用することができます。
  • SYSLINUXのGPTローダーはハードコードされたセクター値を使用しません。 GPTを読み取り、レガシーBIOSブート可能フラグが設定されているパーティションにジャンプするのに十分な機能があります。セクター値のハードコーディングに問題があるわけではありません。GRUB 2のように、2つのソリューションには長所と短所が異なります。
6
Rod Smith

smallMBRドライブをお持ちの場合でも、ハッキングせずに実行できます。 Windows 32ビットでも動作します。フロッピーまたはUSBスティックで十分です。

Windowsインストール/修復ディスクを起動します。スティックにシステムドライブを作成し、bcdbootを使用してブートファイルをスティックに配置します。 bootsectを使用してブートセクターを追加します。変更 {bootmgr}deviceboot。スティックから起動します。

手順の詳細 こちら

2
Milind R