uefi-dualboot
update 2020-12-01
環境
Win10
fedora
マルチHDD環境
fedora-uefi からWindows-uefi を起動する
※fedoraはHDD1(/dev/sda)、WindowsはHDD2(/dev
/sdb)にインストールしているものとする。

WindowsデバイスのEFIパーティションを確認する。
# gdisk -l /dev/sdb
EFIパーティションを確認したらパーティションのUUIDを確認する
# blkid /dev/sdb2
※UUIDは grub2-probe --target=fs_uuid
コマンドで知ることができる。
※bootmgfw.efi が/dev/sdb2 にあり、mount /dev/sdb2 /mytemp
でマウントされているものとする。
# grub2-probe --target=fs_uuid
/mytemp/EFI/Microsoft/Boot/bootmgfw.efi
※hdX, gptY といった hints_string
を確認するには次のようにする。
# grub2-probe --target=hints_string
/mytemp/EFI/Microsoft/Boot/bootmgfw.efi
確認したUUIDを --set=root XXXXX
の部分にUUIDのみを記述する。
ダブルクオテーション(" ")は不要。
menuentry "Win10" -class win10 {
insmod part_gpt
insmod fat
insmod search_fs_uuid
insmod chain
search --fs-uuid
--no-floppy --set=root XXXXX
chainloader
(${root})/efi/Microsoft/Boot/bootmgfw.efi
}
※UUID指定ではなく、次のようにデバイスを指定してもいい。
UEFI-GPTモードでは /dev/sda1 は (hd0,gpt1)、/dev/sda2 は (hd0,gpt2)
のように(デバイス,gptパー
ティション番号)を記述する。
set root= に指定する(デバイス,パーティション)は 実行する状態での(デバイス,gptパーティション番号)を指定することになる。
下記の例の set root=(hd0,gpt2) は set root='(hd0,gpt2)' または set
root='hd0,gpt2' と記述してもいい。
menuentry "Windows (hd0,gpt2)" {
insmod part_gpt
insmod chain
set root=(hd0,gpt2)
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
grub2設定ファイルを更新する。
grub2-mkconfig -o
/boot/efi/EFI/fedora/grub.cfg
ブートメニュー例

マルチHDD環境
fedora-uefi
とWindows-bios のブート切り替えを行なう。(BIOSベースのOSを起動する)
ブートマネージャから抜けると(Exitすると)、ブート優先順 2番目のデバイスが起動する。
UEFIベースのfedoraとBIOSベースのWindowsといった2台のHDD環境で次のような {exit} のみのブートエントリを作成して exit
を実行すれば、優先順 2番目のOSを起動することになる
たとえば/dev/sdaにfedoraがあり、/dev/sdbにWindowsがあり、Windowsが2番目のboot順になっている環境
であるものとする。
grub.cfg にて menuentry
"Windows-exit" -class win-exit {exit} を設定しておく。
これを利用すればfedora-uefi と Windows-bios のブート切り替えが可能になる。
マルチHDD環境
Windows10-uefi
と Windows8-bios のブート切り替えを行なう。(BIOSベースのOSを起動する)
または
Windows10-uefi と
Windows8-uefi のブート切り替えを行なう。(UEFIベースのOSを起動する)
※どちらの方法も2台のHDDが BIOSブートのマルチHDD環境で、別のHDDをブートする方法と同じである。
Windows10-uefi にWindows8-bios のブートエントリ(またはWindows8-uefi
のブートエントリ)を作成し、デュアルブート構成を作成するものとする。
bcdedit /copy {current} /d "Win-Legacy" 新規に{GUID}が作成される。
※uefiの場合は bcdedit /copy {current} /d "Win-UEFI"とする。
bcdedit /set {GUID} device partition=K:
Win8の\Windowsフォルダのあるパーティションを指定する。(Win8のインストールしてある場所)
bcdedit /set {GUID} osdevice partition=K:
Win8の\Windowsフォルダのあるパーティションを指定する。(Win8のインストールしてある場所)
※ path は修正する必要はない。
再起動するとデュアルブートのブートマネージャが表示されるので、
uefi ベースと bios ベース(またはuefiベース)のブート切り替えができることになる。
※どちらを起動しても msinfo32の「BIOSモード」の表示はUEFIになっている。
UEFIベースのPCを起動した場合のブートマネージャは下記のようになっている。
※ブートマネージャでBIOSベースのデバイスのパーティションを指定して起動できるようになっている。
Windows ブート マネージャー
--------------------------------
identifier
{bootmgr}
device
partition=\Device\HarddiskVolume6
path
\EFI\Microsoft\Boot\bootmgfw.efi
description
Windows Boot Manager
locale
ja-JP
inherit
{globalsettings}
integrityservices Enable
resumeobject
{e4adf817-8425-11e3-bb21-ee2c86b3e3ea}
displayorder
{current}
{e4adf819-8425-11e3-bb21-ee2c86b3e3ea}
toolsdisplayorder {memdiag}
timeout
30
Windows ブート ローダー
--------------------------------
identifier
{current}
device
partition=C:
path
\windows\system32\winload.efi
description
Windows 10
locale
ja-JP
inherit
{bootloadersettings}
integrityservices Enable
isolatedcontext Yes
allowedinmemorysettings 0x15000075
osdevice
partition=C:
systemroot
\windows
resumeobject
{e4adf812-8425-11e3-bb21-ee2c86b3e3ea}
nx
OptIn
bootmenupolicy
Standard
detecthal
Yes
Windows ブート ローダー
--------------------------------
identifier
{e4adf819-8425-11e3-bb21-ee2c86b3e3ea}
device
partition=K:
path
\windows\system32\winload.efi
※pathはwinload.efi のままとなっている。
description
Win-legacy
※ uefiの場合はWin-UEFI
locale
ja-JP
inherit
{bootloadersettings}
integrityservices Enable
isolatedcontext Yes
allowedinmemorysettings 0x15000075
osdevice
partition=K:
systemroot
\windows
resumeobject
{e4adf812-8425-11e3-bb21-ee2c86b3e3ea}
nx
OptIn
bootmenupolicy
Standard
detecthal
Yes
マルチHDD環境
Windows-uefi から fedora-uefi を起動する
方法1
Windows Boot Managerを fedora Boot Managerに置き換える。
※すでにfedora Boot Managerが動作しているので、他のBoot Managerをインストールしないですぐ実現できる。
※EFIブートのHDDとBIOSブートのHDDが存在しているデュアルブートにも対応できる。
※fedora環境で作業すると簡単に行なうことができる。
fedora EFI は /dev/sda1 パーティション、Windows EFI は /dev/sdb2
パーティションであるものとする。

1.
/dev/sda1、/dev/sdb2をマウントする。
2.
/dev/sda1の\EFI\fedoraフォルダを丸ごと /dev/sdb2 の \EFI フォルダにコピーする。
これでfedoraのブート情報がWindows環境にコピーできたことになる。
3.
Windowsを起動して bcdedit コマンドで {bootmgr} を変更する。
bcdedit /set {bootmgr} path
\EFI\fedora\grubx64.efi
bcdedit /set {bootmgr} description
"fedora"
4.
PC再起動すると fedora Boot Managerが起動する。
5.
Windows Boot Managerに戻すには当初の状態に設定し直せばいい。
bcdedit /set {bootmgr} path
\EFI\Microsoft\Boot\bootmgfw.efi
bcdedit /set {bootmgr} description
"Windows Boot Manager"
PC再起動すれば"Windows Boot Manager"で起動する。
運用上の留意事項
この方法はfedoraのブート情報をWindows環境にコピーしただけなので、双方のBoot Managerが同期しているわけではない。
したがってfedoraのブート情報を更新した場合は(grub2-mkconfigでgrub.cfgを更新した場合)Windows環境にも
コピーしておく必要がある。
別の使い方としては、同期していないことを利用してWindowsだけに適用するBoot Managerを作成する、ということもできる。
当初のWindows ブート
マネージャーの状態
Windows ブート マネージャー
--------------------------------
identifier
{bootmgr}
device
partition=\Device\HarddiskVolume2
path
\EFI\Microsoft\Boot\bootmgfw.efi //この部分を\EFI
\fedora\grubx64.efiに置き換える。
description Windows Boot Manager //fedoraに置き換える。
locale
ja-JP
以下省略
fedora ブート
マネージャー使用時の状態
Windows ブート マネージャー
--------------------------------
identifier
{bootmgr}
device
partition=\Device\HarddiskVolume2
path
\EFI\fedora\grubx64.efi
description
fedora
locale
ja-JP
以下省略
方法2
Windows環境に rEFInd Boot Managerをインストールして使用する。
※ rEFIndは UEFI対応 Boot Managerである。(WindowsおよびFedoraともに対応している)
自動的にEFI環境を判定してEFI対応OSを起動できるようになる。(BIOS/MBRのOS起動には対応していない)

The rEFInd Boot Manager
http://www.rodsbooks.com/refind/
ダウンロード
http://www.rodsbooks.com/refind/getting.html
A binary zip file をクリックしてrefind-bin-0.12.0.zipをダウンロード、展開。
インストール作業は Win10動作中の環境(オンライン)で行なう。
1.
コマンドプロンプト(管理者)実行。
2.
EFIシステムパーティション(/S オプション)をドライブ M にマウントするものとする。
※パラメータなしで mountvol とだけ実行すると現在のマウント状況を確認できる。
/S オプション:EFI システム パーティションを与えられたドライブにマウントする。
mountvol M: /S
※ここでdir M:\ コマンドで確認すると次のようにマウントされている。
EFI システム パーティションが M:\ にマウントされている。
dir M:\ で見るとEFIフォルダ内のMicrosoft、Bootフォルダ、およびフォルダ内のファイルを確認することができる。
※mountポイントを削除するには mountvol M: /d
3.
rEFIndフォルダに移動して作業する。
※refindフォルダが D:\refind-bin-0.12.0フォルダ内にあるものとする。
cd /d D:\refind-bin-0.12.0
dirコマンドでサブフォルダ refind が照会できる。
4.
空のフォルダ(/E オプション)もコピーする
xcopy /E refind M:\EFI\refind\
5.
M: と入力してドライブ Mに移動する。
6.
cd \EFI\refind でフォルダに移動する
7.
del refind_ia32.efi
で使用しないファイルを削除する。
8.
rd /s drivers_ia32 で
サブフォルダも含めて(/s)削除する。
9.
ファイル名変更
rename refind.conf-sample
refind.conf
10.
ブートマネージャ作成
bcdedit /set {bootmgr} path
\EFI\refind\refind_x64.efi
※bcdedit 情報(変更前および変更後)は下記参照
11.
descriptionを変更
bcdedit /set {bootmgr} description
"rEFInd"
12.
この時点で再起動すれば、新しいbootプログラム rEFInd が起動する。
※エクスプローラやdiskpartのvolume表示では Mドライブはどこにも表示されず、何も変化が無い。
※{bootmgr}のpathとdescriptionが変更になっただけである。
元の"Windows Boot Manager"の状態に戻すには変更前の情報に戻せばいい。
bcdedit /set {bootmgr} path
\EFI\Microsoft\Boot\bootmgfw.efi
bcdedit /set {bootmgr} description
"Windows Boot Manager"
PC再起動すれば"Windows Boot Manager"で起動する。
再度"rEFInd"に切り替える場合は
bcdedit /set {bootmgr} path
\EFI\refind\refind_x64.efi
bcdedit /set {bootmgr} description
"rEFInd"
PC再起動すれば"rEFInd"で起動する。
rEFInd の環境
"rEFInd" boot managerはEFIシステムpartitionの
EFI\refindフォルダに作成されていて、\EFI\refind\refind_x64.efi や
refind.confなどのファイルが在る。
※Windows EFI managerは \EFI\Microsoft\Boot\bootmgfw.efi である。

当初のWindows ブート
マネージャーの状態
Windows ブート マネージャー
--------------------------------
identifier
{bootmgr}
device
partition=\Device\HarddiskVolume2
path
\EFI\Microsoft\Boot\bootmgfw.efi //この部分を\EFI
\refind\refind_x64.efiに置き換える。
description Windows Boot Manager //rEFIndに置き換える。
locale
ja-JP
以下省略
rEFInd ブート
マネージャー使用時の状態
Windows ブート マネージャー
--------------------------------
identifier
{bootmgr}
device
partition=\Device\HarddiskVolume2
path
\EFI\refind\refind_x64.efi
description
rEFInd
locale
ja-JP
以下省略
マルチHDD環境
電源スイッチでブート
HDDを切り替えて起動する方法でのNVRAMブートマネージャ名変更。
※この方法は電源を切り替えたHDDだけを起動させる方法なのでデュアルブートではない。
独立してブート可能な複数のHDDのWindowsのUEFIブートマネージャ名は「Windows Boot Manager」となっている。
同じ名前なのでファームウェアにて識別が付かないので使いにくい。
HDDを取り外すとファームウェアが識別できない場合はシステムが起動できなくなるので、毎回ブートデバイスを選択することになる。
これを解消するにはbcdeditコマンドでブートマネージャの表示を変更すれば解りやすくなる。
ファームウェアも識別するので電源がオンになっているHDDが起動するようになる。
下記の作業はオンラインで(現在起動しているwindowsで)作業すればいい。(オフラインで作業する必要はない)
(1)bcdeditにて{bootmgr}エントリのdescriptionを次のように変更する。
bcdedit
/set {bootmgr} description "Win10 Boot Manager"

(2)変更後のブートマネージャは次のようになる。

(3)ファームウェアのNVRAMの表示は次のようになる。

シングルHDD環境
win10-uefi
環境にwin8-uefi をインストール

「インストールの場所選択」時にOSインストール順が推奨順(OSバージョン順)ではないという、下記のアラームが表示される。
「インストール用に選択されたディスクのパーティションが推奨
される順序になっていません。インストールを続行しますか?」
構わずに進行すればインストールは正常に完了する。
PCを起動するとwin8ブートマネージャー(テキスト表示)のwin8、win10のデュアルメニューが表示される。
win10ブートマネージャー(グラフィカル表示)に変更するには、win10起動状態のコマンドプロンプト(管理者)で次のようにブート情報を
書き換える。
bcdboot c:\windows /l ja-JP
再起動するとwin10ブートマネージャーのwin10、win8のデュアルメニューが表示される。
Windows ブート マネージャー
--------------------------------
identifier
{bootmgr}
device
partition=\Device\HarddiskVolume2
path
\EFI\Microsoft\Boot\bootmgfw.efi
description
Windows Boot Manager
locale
ja-JP
以下省略
シングルHDD環境
win10-uefi
環境にfedora-uefi をインストール
インストール前のHDD

インストール後はfedora Boot Manager で起動する。
fedoraは自動的に下記のようなメニューエントリ「Windows Boot Manager」を追加してくれるので「Windows
Boot Manager」を選択すればWin10が起動する。
### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Windows Boot Manager' {
chainloader
/EFI/Microsoft/Boot/bootmgfw.efi
boot
}
### END /etc/grub.d/30_os-prober ###
インストール後のHDD

留意事項
この環境で安易に win10 ブートマネージャ(BCDストア)を再作成してはいけない。 ( 安易に bcdboot c:\windows
/l ja-JP を実行してはいけない)
fedora-uefi ブートになった状態で win10-uefi ブートに戻すと fedora-uefi を起動できなくなる。
起動できなくなった場合は fedora-uefi をrescue モードで起動して efibootmgr
コマンドでfedoraブートマネジャで起動するように作成し直す。
シングルHDD環境
fedora-uefi 環境にwin10-uefi をインストール
インストール前のHDD

Win10-uefi は fedora-uefi のブートを考慮しないので、インストール後はWin10-uefi
だけしかブートできなくなる。
Win10-uefi のBoot Manager を書き換えて fedora-uefi を起動できるようにするとWin10-uefi
が起動できなくなる。
インストール後のHDD

この場合はrEFInd Boot Manager を使用して fedora-uefi 、Win10-uefi
を起動できるようにすればいい。
シングルHDD環境
fedora-uefi 環境に別バージョンのfedoraX-uefi
をインストール
インストール前のHDD

あとからインストールするfedoraXのインストール時に 3つのパーティション( /Boot 、/boot/efi 、/
)を作成して、先にインストールしたfedoraとブートローダを区別できるように領域を分けてインストールするものとする。
※すでに存在する /boot/efi を使用すると \EFI\fedoraという名前が同じなので、grubx64.efi
が上書きされてしまう。
インストール後のHDD

あとからインストールしたfedoraXによってgrub.cfgが更新される。
以前にインストールした fedoraの menuentry が linuxefi 、initrdefi
のように efi
が指定されているかどうか grub.cfg を確認する。
シングルHDD環境
fedora-uefi 、openSUSE-uefi 、
ubuntu-uefi をイ
ンストール
インストール時に自動まかせにしないで、カスタム設定で同じEFI パーティション使用するように指定した場合の例である。

作業時のメモ
※EFI partitionのファイルシステムはFAT32である。
diskpart 使用時に EFI partitionをドライブ Bにマウントして照会するには、
diskpart //diskpartを起動
list volume //ボリューム情報を確認
select volume N // N はEFI volumeの番号
assign letter=b //ドライブレター B
// 解除はremove letter=b
exit
---partition を指定してもいい
diskpart //diskpartを起動
list partition //パーティションを確認
select partition N // N はEFI partitionの番号
assign letter=b //ドライブレター B
// 解除はremove letter=b
exit
end of list