独自のブートマネージャーなしでWindows 8.1をブートすることは可能ですか?


10

私はラップトップにWindowsとLinuxのデュアルブートをインストールする簡単な方法を考えましたが、必ずしもこの順序ではありません。通常、最初にWindowsをインストールし、次にlinuxをインストールして、GRUBでWindowsを処理できるようにする必要があります。

したがって、私が達成しようとしているのは、その厄介なインストールプロセス(Windows)をバイパスし、イメージを使用してドライブに直接コピーする方法を見つけることです。これにより、ブートマネージャー(GRUB)を保持することもできます。(後で復元することはできませんが、独占することはマイクロソフトのポリシーです。この場合、システム内の他のブートマネージャーの存在を拒否します)。

最初にWindows 8.1の合法的なコピーを入手し、次にVirtualBoxを使用して仮想マシンにインストールしました。次に、GPTパーティションハードドライブにNTFSパーティションを作成し、Windowsパーティションの内容を.vdiイメージから新しく作成したパーティションにコピーしました。

もちろん、まだ動作しません。bootmgrを置き換える方法がわかりません。それは与えます

File: \Boot\BCD
Status: 0xc000000e
Info: The Boot Configuration Data for your PC is missing or contains errors.

起動、システム回復などに使用される他のパーティションからそのファイルを見つけることができないためです。

ここで、bootmgrが最終的にwinload.exeを実行してWindowsを起動することを読みました。次に何をすべきかわかりません。

Windowsの実行に必要なすべてのファイルがあるので、理論的には機能するはずです。また、これを考えたのは私だけではないので、基本的なことは見当たらないかもしれません。多分それはすでに行われていますか?

ブートがどのように機能するのか私にはほとんどわかりません。私が理解できたのは、WindowsとLinuxをデュアルブートすると、WindowsブートローダーをLinuxにチェーン接続するということです。したがって、私が達成しようとしているのは、どういうわけかWindowsブートローダーを取り除くことです。

編集

私はバイナリファイルbootmgrとを見てきました\Boot\BCDbootmgrBCDファイルを読み取り、オプションをリストします。その中から選択して起動できます。

したがって、実行などの情報winload.exeはBCDファイルにあります。さて、bootmgrそれ自体はchain.c32モジュールを使用してsyslinuxによって実行されると思います。私がやろうとしているのは、どういうわけか、Windowsブートローダーを実行する、つまりwinload.exesyslinuxから直接(可能な場合)、またはBCDやその他を検索せずにそれ自体がbootmgr実行されるように変更することですwinload.exe(パスはbootmgr実行可能ファイルに直接あります)。

この段階では、休止状態(別の手順が必要)は私には関係ありません。

質問を編集して、ファームウェアタイプ、および(EFIの場合)ファームウェアのセットアップで互換性サポートモジュールを有効にしたかどうかをお知らせください

私のファームウェアはEFI(CSMが有効になっている)で、通常はGRUBを使用してArch Linuxを起動します。レガシーシステムとEFI でbootmgr実行されることを発見しました。System32\winload.exeSystem32\winload.efi

私は0.0ここから何をすべきかについて考えがあります。過去10日間、私はBCDに変更を加えようとしており、私は成功に近づいていると思います。しかし、それは無関係です。私が本当にやりたいことは、Windowsブートマネージャーを完全にバイパスすることだからです。

winload.efiEFIシェルから実行する方法(推測)があるか、チェーンローダーなしでWindowsをEFIモードで起動するようにGRUBに他の変更を加えているかどうかがわからない場合。

アドバイスは大歓迎です。

補遺

以下のフォーラム投稿は、いくつかの有用な洞察を提供する可能性があります。

http://reboot.pro/topic/19371-chainload-directly-to-winloadexe/

1。

現在、grub4dosはブートローダー(NTLDRやBOOTMGRなど)をチェーンロードできます。これは、grub4dosが「通常の」ブートセクター(つまり、300バイトのマシンコードなど)に含まれるコードの代わりとして機能できるためです。

このコードは、いくつかのパラメーターを設定し、ローダーを呼び出します。

それでも、異なるコードを理解して複製することはまったく簡単ではありませんでした。

BOOTMGRのようなNTシステムローダーは、単一の.exeに多かれ少なかれ「リアルモード」オペレーティングシステム(DOSとは完全に異なるわけではありません)とプレーンテキストとレジストリハイブの両方を解析するための機能/ツールを備えています。ゼロから簡単に書ける。

良い人@ReactOSは、YEARS以来、FREELDR(より単純なNTLDRの代替となることを目的としています)の作成に取り組んでいます(そして、ReactOSプログラマーの中には、本当に優秀な人がいると信じています)。

そうです、彼らはNTLDRと実験Server 2003を起動するために管理していること(それが明確に文書化されていません)。

2。

(U)EFIのサポートの導入により、BootMgrはBIOSと(U)EFIの違いを抽象化するのに役立ちます。たとえば、次の2つのシーケンスがあります。

BIOS (PCAT) -> BootMgr { BootMgr stub -> embedded BootMgr.exe } -> WinLoad.exe -> Windows
64-bit (U)EFI -> BootMgFw.efi -> BootMgr.efi -> WinLoad.efi -> Windows

WinLoadは、特定の環境(APIを含む)が存在することを期待しています。BootMgrがこれを処理するので、[ほぼ]同じWinLoadプログラムがどちらの環境でも機能します。

実際、(U)EFIはブートパラメータを格納およびフェッチする方法を定義しているため、BIOS /(U)EFIに関係なく、BootMgrのBCDは同じ目的をカバーしています。

しかし、BIOSと(U)EFIの違いを超えて、BootMgrは「ブートの選択」を可能にしますが、WinLoadは、ブート方法を知っている特定のオペレーティングシステムをブートします。

WinLoadが存在すると想定する環境の量によっては、WinLoadを直接呼び出すことができる場合があります。マイケルブラウンのwimbootはBootMgr PE [1]を直接呼び出すため、WinLoadがおそらくより多くの環境を必要とする場合を除いて、WinLoadを直接呼び出すことができます。あなたはそれを試すことができます!

[1] GRUB4DOSおよびSyslinuxのchain.c32が呼び出すことができるBootMgrと混同しないでください。そのBootMgrには、埋め込まれたBootMgr PEを呼び出す方法を知っているスタブが含まれています。


1
十分な情報がまだ提供されていません。 質問を編集して、このマシンにEFIファームウェアまたは古いPC / ATスタイルのファームウェアがあるかどうかを回答者に伝えます。現在、EFIパーティションディスク上のMBRブートストラッププログラムについて話しています。これは(私のプログラムまたはH. Peter Anvinのいずれかを使用している場合を除いて)ナンセンスであり、マシンのブートストラップ方法とは異なる 可能性があります
JdeBP 2014年

あなたが説明するポリシーはMicrosoftを出ません。デュアルブートシステムからのだれも防ぎません
Ramhound

@JdeBPあなたは正しいです。ある時点で、実際には両方を使用していました。pc \ atメソッドでsyslinuxを使用していました。次に、GRUBをEFIパーティションにインストールしました。私のラップトップは両方をサポートしていますが、毎回同じ結果が得られました。とりあえず自分に伝えようと思います。一方、私が達成しようとしていることを理解していますか?私が以前に説明したことを忘れて、多分あなたはそれが実行可能であるかどうかについてアドバイスを与えることができます。
osolmaz 14年

ファームウェアの種類をぼんやりと尋ねたのではありません。これは、提供しなければならない重要なデータです。それがなければ、人々は適切な答えを出すことすらできません。質問を編集して、ファームウェアタイプと、ファームウェアのsetupユーティリティで互換性サポートモジュールを有効にしたかどうか(EFIの場合)をお知らせください。
JdeBP 2014年

@JdeBP質問を編集しました。
osolmaz 14年

回答:


5

元の質問に答えるには、いいえ。Windowsは、独自のブートローダー(UEFIインストールの場合はbootmgfw.efi)を経由しないとロードできません。これは、Windowsがそのbootmanagerが存在し、winload.efiを呼び出すことを期待しているためです。それが起こらない場合、問題を修正するまでWindowsはクラッシュします。これには多くの理由があります(実用的で無知)。ほとんどの場合、Microsoftがすべての処理(OSのロード、リカバリ環境のロード、疑似pre-os環境のロードなど)を処理するようにブートマネージャを作成したためです。正気の類似を現在達成する唯一の方法は、Grub-efiを使用して負荷をチェーンすることです。


これを答えとして受け入れる前に、次のことを尋ねる必要があります。主にプロセスに関係するプログラムをだますために必要な低レベルのハッキングの量が原因で、タスクを達成するのが退屈なほど難しいでしょうか。Windowsはそれ自体が独自のブートマネージャで起動されたとまだ思っているが、実際にはそれは何か別のものであるというだましだ。Windowsのすべてのバージョンで個別の作業が必要になると思う。しかし、これはタスクを不可能にしないわけではなく、本当に難しいでしょう?
osolmaz 2014年

3
プログラミングでは完全に不可能だとは言えませんが、bootmgfw.efiがWindows OSに対して行う呼び出しをリバースエンジニアリングする必要があります。OSローダーへの低レベルのブートプロトコル呼び出しをリバースエンジニアリングする必要がある場合の低レベルのハッキングの量は、時間に関して非常に高価です。Windowsをだまして、bootmgfw.efiが存在したと信じ込ませるだけでなく、BCDが存在し、BCDが独自のツールなどによって作成されたと信じ込ませる必要があります。
ChrisR。

2

UEFIファームウェアのブートオプションのリストにWindows EFIブートローダーを追加する必要があります。これにより、次のいずれかを選択できます。

  1. GRUB2をロードするか、
  2. Windowsブートローダーをロードする必要があります

その時点で、DVDドライブ、外付けハードドライブ、ネットワークブートなどの追加オプションも表示されます。UEFIブートローダーは通常\EFI/boot/efi/)パーティションにあります。Windowsを正しくインストールせずにWindowsハードドライブイメージをコピーしたばかりなので、現在のマシンのEFIパーティションに適切なブートローダーが含まれていない可能性があります。したがって、

  1. ブートローダーをEFIパーティションにコピーする
  2. WindowsをGRUB2と共にブートオプションとして追加する

BIOSでブート順序を変更するだけで、どのOSをブートするかを選択できるはずです。私のラップトップでは、を押すF12と、ロードするブートローダーを選択するためのメニューが表示されます。

これらの手順についてefibootmgrは、このチュートリアルの手順を使用および実行します。

bootmgfw.efi\EFI\Microsoft\Boot\bootmgfw.efi、または/boot/efi/Microsoft/Boot/bootmgfw.efiLinuxを使用している場合は、対応するファイルをEFIパーティションにコピーする必要があります。

# mkdir -p /boot/efi/EFI/Microsoft
# cp -r Microsoft /boot/efi/EFI/Microsoft

どこMicrosoftWindowsのバージョンのオリジナルEFIファイルを含むフォルダです。

次に.efi、次のコマンドを使用して、ファイルをUEFIブートエントリに追加する必要があります。

# efibootmgr -c -d /dev/sda -p 1 -l \\EFI\\Microsoft\\Boot\\bootmgfw.efi -L "Windows Boot Manager"

もちろん、あなたは変更する必要がある場所/dev/sda-p 1ディスク・デバイスとパーティション番号の正しい値に。

Lenovoラップトップを使用している場合は、次の点に注意してください。

また、少なくとも1つの製造元(Lenovo)が、ブートローダーの名前が「Windows Boot Manager」または「Red Hat Enterprise Linux」でない限り、システムが起動を拒否する既知のバグがある製品を出荷しています。

PCを起動すると、次のように表示されます(ブートプロセス中に対応するキーを押した場合)。

Windows Boot Manager
ubuntu
USB CD
USB FDD
ATAPI CD
ATA HDD2

(etc.)

そしてbcdeditWindowsではこれを示しています:

C:\WINDOWS\system32>bcdedit /enum firmware

Firmware Boot Manager
---------------------
identifier              {fwbootmgr}
displayorder            {bootmgr}
                        {bb086763-b111-11e2-bf8e-806e6f6e6963}
                        {8e7fb978-8bc8-11e2-bf2f-806e6f6e6963}
timeout                 0

Windows Boot Manager
--------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\Microsoft\Boot\bootmgfw.efi
description             Windows Boot Manager
locale                  en-US
inherit                 {globalsettings}
integrityservices       Enable
default                 {current}
resumeobject            {ec215a09-8bc4-11e2-bf2b-0024d7eb75a4}
displayorder            {current}
toolsdisplayorder       {memdiag}
timeout                 2

(...)

Firmware Application (101fffff)
-------------------------------
identifier              {bb086763-b111-11e2-bf8e-806e6f6e6963}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\ubuntu\grubx64.efi
description             ubuntu

1
とてもうまく説明してくれてありがとう。数日前、私は同じことを成功させましたが、それでもWindows EFIブートマネージャー用に別のパーティションを使用し、GRUBを使用したチェーンロードを行いました。今では、オリジナルのEPSも使用できることを学びました。また、bcdeditを使用する代わりに、hivexを使用してBCDを修正しました。LinuxでBCDファイルを操作できるようにするための無料ツールのコレクションを書くつもりです。しかし、私が達成しようとしていることは何か違うものです。bootmgfw.efiが何らかの方法でwinload.efiを実行する場合、なぜGRUBから直接winload.efiを実行できないのですか?
osolmaz 14年

ああなるほど。Windowsブートマネージャー(bootmgfw.efi)の読み込みをスキップし、BCDシステムストアを読み取ってWindowsブートローダー(winload.efi)を直接読み込みますか?(ここからの定義に従ってください。)興味深いのですが、誰かがそうしているのを聞いたことがありません。あなたの動機は何ですか、なぜwinload.efiを直接ロードする必要があるのですか?また、\EFI\Boot\Microsoftテスト用のフォルダの完全なコピーはありますか(そこにいくつかのファイルがあります)?
jmiserez 2014年

まあ、私がそれを達成するのであれば、BCDを読み取る必要すらありません。パーティションのエントリをGRUBに追加するだけです。(ここでは休止状態とシステム回復を除外しています)私の動機は、後で修正する必要があることを心配せずにWindowsをインストールする方がはるかに簡単だということです。システム管理者、バッチインストールなどに便利です(私にとっても^^)。なぜwinload.efiを直接ロードするのかについては、クローズドスペックのWindowsレジストリファイル(バイナリ)を扱う方が、GRUBのようなプレーンテキストの構成ファイルを扱うよりもずっと面倒です。仲介者を排除する方が簡単です。
osolmaz 14年

1
私はあなたが何を意味するかを理解しています、はいそれは非常に便利でしょう。1)起動時にwinmgfw.efiがwinload.efiに渡される変数があるか、2)セキュアブートに問題があり、何らかの証明書チェーンが必要になるかどうか疑問に思っています。inherit {bootloadersettings}BCDストアのが実際に何を意味するのか知っていますか?
jmiserez 2014年

1
3)hivexを使用したので、対応するオブジェクトを推測できます。ハイブには「グローバル」設定オブジェクトがあり、他のすべてのオブジェクトはそれへの参照を持っています。私が言えることは、Windowsで起動するには2つのオブジェクトで十分です。実際のWindowsルートの場合。最も難しいのは、パーティションを指定するバイナリデータ構造を理解することでした。これは主にwodny:bitbucket.org/wodny/libbcd/srcによって行われました
osolmaz 2014年

0

インストールは任意の順序で行うことができます。つまり、GNU / LinuxをインストールしてからWindowsをインストールするか、その逆です。

すべてのオペレーティングシステムをインストールしたら、次の手順を実行してください。

  1. ここから「ブートリペアディスク」を取得します。http://sourceforge.net/projects/boot-repair-cd/

  2. そのライブブータブルUSBペンドライブを作成します(pendrivelinux.comの手順)

  3. または、ISOファイルをCDに書き込みます。

  4. これを起動して、画面の指示に従います。インストールされたすべてのオペレーティングシステムを含む再インストールされたGRUBがあります。

ではごきげんよう。


1
私はそれを知っています、私が欲しいのは何か違うものです。チェーンロードせずにWindowsを直接起動できるかどうかを尋ねています。
osolmaz 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.