web-dev-qa-db-ja.com

grub2-gptを使用して非EFIMS-DOS Windows7パーティションを起動します

私は次の設定をしています:

Ubuntu11.10からgrub2を使用してWindows7パーティションを起動しようとしています。

私のWindowsの「システム予約済み」は/dev/sda3

[〜#〜] grub [〜#〜] Windowsエントリは(標準)です:

menuentry "Windows 7 (loader) (on /dev/sda3)" --class windows --class os {
        insmod part_msdos
        insmod ntfs
        set root='(hd0,msdos3)'
        search --no-floppy --fs-uuid --set=root 644C5AC04C5A8CA4
        chainloader +1
}

別れ 出力:

Disk /dev/sda: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type      File system  Flags
 1      32.3kB  296MB   296MB   primary   ext2
 2      296MB   423GB   423GB   extended
 5      296MB   20.3GB  20.0GB  logical   ext4
 6      20.3GB  363GB   342GB   logical   ext4
 7      363GB   423GB   60.1GB  logical   ntfs
 3      423GB   423GB   105MB   primary   ntfs         boot
 4      423GB   500GB   77.2GB  primary   ntfs


Disk /dev/sdb: 1500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name  Flags
 1      17.4kB  20.0MB  20.0MB  fat16                 boot
 2      20.0MB  50.9GB  50.9GB  ext4
 4      50.9GB  1103GB  1052GB  btrfs
 5      1103GB  1156GB  52.7GB  ext4
 6      1156GB  1233GB  77.2GB  ntfs
 7      1233GB  1233GB  105MB   ntfs
 3      1496GB  1500GB  4271MB  linux-swap(v1)

Grub2からWindowsを起動しようとすると、次のメッセージが表示されます。

エラー:無効なEFIファイルパス

4
dzift

それをしてはいけない。

オペレーティングシステムのブートローダープログラムなど、ブート前のアプリケーションがマシンのファームウェアに緊密に結合されていることは明白です。通常のアプリケーションプログラムが、サービスを使用するオペレーティングシステムに関連付けられているのと同じです。 EFIブートローダープログラムは、そのマシンがEFIファームウェアサービスを提供しない限り、そのマシンで実行することはできません。古いPC/ATスタイルbootstrapローダープログラムは、そのマシンが古いPC/ATファームウェアサービスを提供しない限り実行できません。

GRUBのchainloader動詞はこれを具体化しています。文書化されていませんが、GRUBのホスト方法、つまりどのマシンかによって異なります。ファームウェアGRUBは(実行される予定です)で実行されています。古いPC/ATシステムでホストされているGRUBのバージョンでは、ディスクブロックが与えられると予想されます。セットまたはファイル、および古いPC/AT VBR bootstrapプログラムの方法で与えられたもの(の最初のセクター)をロードして実行します。GRUBのEFIホストバージョンでは、ファイル名が与えられることを期待し、通常のEFIアプリケーションとしてファイルをロードして実行します。

EFIでホストされているバージョンのGRUBがあります。合格しました+1からchainloaderをファイル名として使用しますが、これは単に起動前のEFIアプリケーションイメージファイルへの有効なパスではありません。 GRUBは、構文的に指定したため、イメージファイルのEFIデバイスパスを構築できませんでしたパスが正しくないため、エラーメッセージが表示されます。

EFIでホストされるGRUB)でchainloaderを正しく使用すると、ファイルに名前が付けられます。MicrosoftWindowsNT 6.1の場合、これはBCDと共存するMicrosoftのBootManagerのEFIバージョンになります。 EFIシステムパーティションに保存します。

チェーンロード(hd1、gpt1)/EFI/Microsoft/Boot/bootmgfw.efi

もちろん、このマシンにWindows NT 6.1をインストールしなかった(ただし、他のマシンにハードディスクを転送した)か、EFIブートストラップ可能なバージョンをインストールしなかったため、これは機能しません。 、どういうわけか、Windows NT 6.1に、EFIマシンで非EFIバージョンのインストールユーティリティを実行するように説得しました。どうすればわかりますか? MicrosoftはEFIマシン上のEFIパーティション化されていないハードディスクにインストールすることを許可しなかったでしょう あなたが行ったように、そしてあなたは両方とも適切なEFIシステムパーティション(2番目のハードディスクのFATパーティション)および その貧乏人の同等物 そうでなければ前者のみが必要だった場合。

そのため、Windows NT6.1はMicrosoftのBootManagerのEFIホストバージョンとともにインストールされておらず、BCDストアが間違った場所にあり、他にもいくつかの問題があります。WindowsNTが1つのハードウェア/ファームウェアの組み合わせを想定していることとそのための適切なドライバと設定で構成され、後で別のハードウェア/ファームウェアの組み合わせで突然ブートストラップされました。

7
JdeBP