[FreeBSD-users-jp 95917] Dual boot on dynabookN51(その1 -- BOOTX64.EFI)
丸山直昌
maruyama @ ism.ac.jp
2016年 8月 9日 (火) 11:28:50 UTC
統計数理研究所の丸山です。
Toshiba dynabookN51 上での Windows8.1 と PC-BSDの dual boot。
まずPC-BSD10.3のインストーラーが作成する BOOTX64.EFI が適切なものなのか
どうか。
この点について昨年このMLでは多くの方から疑問が呈されましたが、今回の私の
経験から、この点ではPC-BSD10.3は問題ない、と断言できます。以下今の私の
dynabookN51の状況を書きます。
内臓diskは500G、 Windows8.1 プリインストール状態では GPTスキームになって
いて、それを Windows の領域縮小ユーティリティなどを使って、結局のとろ現
在は次のような状態になっています。
[maruyama at surya{41}] ~% gpart show ada0
=> 34 976773101 ada0 GPT (466G)
34 2014 - free - (1.0M)
2048 2048 1 bios-boot (1.0M)
4096 2095104 - free - (1.0G)
2099200 204800 2 efi (100M)
2304000 262144 3 ms-reserved (128M)
2566144 164506897 4 ms-basic-data (78G)
167073041 213909504 7 freebsd-zfs (102G)
380982545 7 - free - (3.5K)
380982552 209577984 8 freebsd-zfs (100G)
590560536 4096000 9 freebsd-swap (2.0G)
594656536 10485760 10 freebsd-ufs (5.0G)
605142296 83886080 11 freebsd-ufs (40G)
689028376 10485760 12 freebsd-ufs (5.0G)
699514136 83886080 13 freebsd-ufs (40G)
783400216 55416825 14 freebsd-ufs (26G)
838817041 104857600 5 ms-basic-data (50G)
943674641 33098480 6 !de94bba4-06d1-4d40-a16a-bfd50179d6ac (16G)
976773121 14 - free - (7.0K)
工場出荷時にこの disk は
=> 34 976773101 ada0 GPT (466G)
34 2014 - free - (1.0M)
2048 2097152 1 !de94bba4-06d1-4d40-a16a-bfd50179d6ac (1.0G)
2099200 204800 2 efi (100M)
2304000 262144 3 ms-reserved (128M)
2566144 836249600 4 ms-basic-data (399G)
838815744 104857600 5 ms-basic-data (50G)
943673344 33098475 6 !de94bba4-06d1-4d40-a16a-bfd50179d6ac (16G)
976771819 1316 - free - (658K)
という状態で、一度Recovery diskを使ってまるまるWindowsを入れ直して、さら
に PC-BSD10.3のインストール作業をなるなど、色々やった挙句現状は上のよう
な状態です。途中経過の詳細は省略しますが、ともかく現状ada0p1には gnu
grub が、ada0p4には Windows8.1本体、ada0p7 にはPC-BSD10.3が入っています。
ada0p2 はご存知のとおり FAT16 の UEFI 用領域で、
[maruyama at surya{46}] /boot/efi% ls -alg
total 5
drwxr-xr-x 1 root wheel 1024 Jan 1 1980 .
drwxr-xr-x 10 root wheel 56 Aug 10 02:55 ..
drwxr-xr-x 1 root wheel 1024 Aug 22 2015 EFI
[maruyama at surya{47}] /boot/efi% ls -alg EFI
total 5
drwxr-xr-x 1 root wheel 1024 Aug 22 2015 .
drwxr-xr-x 1 root wheel 1024 Jan 1 1980 ..
drwxr-xr-x 1 root wheel 1024 May 26 20:07 BOOT
drwxr-xr-x 1 root wheel 1024 Aug 22 2015 Microsoft
drwxr-xr-x 1 root wheel 1024 Aug 22 2015 Toshiba
[maruyama at surya{48}] /boot/efi% ls -alg EFI/BOOT
total 194
drwxr-xr-x 1 root wheel 1024 May 26 20:07 .
drwxr-xr-x 1 root wheel 1024 Aug 22 2015 ..
-rwxr-xr-x 1 root wheel 196608 Aug 1 07:56 BOOTX64.EFI
EFI/Microsoft と EFI/Toshiba はプリインストールで元々あるもの、
EFI/BOOT/BOOTX64.EFI は PC-BSD10.3インストーラーが
grub-install --efi-directory=/boot/efi --removable --target=x86_64-efi --force /dev/ada0
で作成したものです。 grub のバージョンは
% pkg info |grep -i grub
grub2-efi-2.02_15 Multiboot EFI boot loader
grub2-pcbsd-2.02q_8 Multiboot boot loader
です。 grub-install は同時に ada0p1 の bios-boot partition にも何か書き
込みます。(bios-boot partition がないと、ここでエラーになることからわか
る)。
EFI ブート環境設定を確認するため、Windows を立ち上げて bcdedit /enum all
の出力をこのメールの末尾に付けます。
この状態で dynabookN51 の電源を入れると(Windows の 高速起動モードは無効に
してあります)
1. 「Windowsブートマネージャー」と題するラインモードのメニューが現れ、
(Windows8.1 を選択すればWindows8.1が立ち上がるが) ESCキーを押すと
2. 画面が一度消えて、その後一瞬同じ「Windowsブートマネージャー」が表示さ
れるがすぐに消えて
3. 「 >> Start PXE over IPv6 」と表示されて、十数秒でタイムアウト
4. 「 >> Start PXE over IPv4 」と表示されて、十数秒でタイムアウト
5. 何故かもう一度「 >> Start PXE over IPv4 」と表示されて、十数秒でタイ
ムアウト
6. gnu grub が立ち上がり、grubが正常に動いてPC-BSDが起動できる
という経過をたどります。ネットワークの UTPケーブルを抜いた状態で電源を入
れると 3,4,5 は飛ばして 6に入ります。
この状況から、PC-BSD10.3のインストール過程で grub-install が作成する
BOOTX64.EFI は適切なものであると断言致します。
内臓ディスクではなく、外付け USB デバイスにPC-BSD10.3をインストールする
実験をしてみても、例えば8GB USBメモリスティックでやると
% gpart show da1
=> 34 15124925 da1 GPT (7.2G)
34 6 - free - (3.0K)
40 2048 1 bios-boot (1.0M)
2088 204800 2 efi (100M)
206888 13633536 3 freebsd-zfs (6.5G)
13840424 1048576 4 freebsd-swap (512M)
14889000 235959 - free - (115M)
という結果を得ることができ、この USB 使って dynabookN51を起動すると、何
の苦労もなく素直に gnu grub が立ち上がり、最終的に PC-BSD10.3は起動しま
す。インストール作業から立ち上げまで、legacy biosモードを使わずに、すべ
て UEFI モードだけでできます。
通常 FreeBSD を UEFI ブートマシンにインストールする場合、/boot/boot1.efi
をefi パーティション(FAT16)にコピーしておいてこの boot1.efi が FreeBSDを
起動するという仕掛けですが、PC-BSDのデフォルトのインストールは ZFS上にイ
ンストールしたシステムを gnu-grub 経由で起動するというもので、bios-boot
パーティション上にあるgnu-grubを起動するための BOOTX64.EFIが必要です。そ
れは/boot/boot1.efi とは違うのもです。
勿論 PC-BSDを UEFI のマシンの UFSパーティションにインストールすることは
できて、その場合通常の /boot/boot1.efi で起動することはできるはずですが、
多分 /boot/loader.conf の修正が必要でしょう。grub経由の起動の場合に行わ
れるカーネル環境変数の設定が boot1.efi では行われないでしょうから。この
場合の検証は私は今のところできていません。
今日はここまで。
-- bcdedit /enum all の出力
ファームウェアのブート マネージャー
--------------------------------
identifier {fwbootmgr}
displayorder {bootmgr}
{dc984317-4850-11e5-beab-ca77328079f8}
{dc984318-4850-11e5-beab-ca77328079f8}
{e97bf818-4850-11e5-beab-ca77328079f8}
timeout 0
Windows ブート マネージャー
--------------------------------
identifier {bootmgr}
device partition=\Device\HarddiskVolume2
path \EFI\Microsoft\Boot\bootmgfw.efi
description Windows Boot Manager
locale ja-JP
inherit {globalsettings}
bootdebug Yes
default {current}
resumeobject {dc984315-4850-11e5-beab-ca77328079f8}
displayorder {current}
{e97bf812-4850-11e5-beab-ca77328079f8}
{e97bf811-4850-11e5-beab-ca77328079f8}
toolsdisplayorder {memdiag}
timeout 0
displaybootmenu Yes
Windows ブート マネージャー
--------------------------------
identifier {e97bf818-4850-11e5-beab-ca77328079f8}
device partition=\Device\HarddiskVolume2
path \EFI\BOOT\BOOTX64.EFI
description GnuGrub
locale ja-JP
displaybootmenu Yes
ファームウェア アプリケーション (101fffff
--------------------------------
identifier {10d18537-533f-11e5-8268-806e6f6e6963}
description UEFI: IP6 Realtek PCIe FE Family Controller
ファームウェア アプリケーション (101fffff
--------------------------------
identifier {10d18538-533f-11e5-8268-806e6f6e6963}
description UEFI: IP4 Realtek PCIe FE Family Controller
ファームウェア アプリケーション (101fffff
--------------------------------
identifier {dc984317-4850-11e5-beab-ca77328079f8}
description EFI Network
ファームウェア アプリケーション (101fffff
--------------------------------
identifier {dc984318-4850-11e5-beab-ca77328079f8}
description EFI USB Device
Windows ブート ローダー
--------------------------------
identifier {current}
device partition=C:
path \Windows\system32\winload.efi
description Windows 8.1
locale ja-JP
inherit {bootloadersettings}
recoverysequence {e97bf811-4850-11e5-beab-ca77328079f8}
recoveryenabled Yes
isolatedcontext Yes
allowedinmemorysettings 0x15000075
osdevice partition=C:
systemroot \Windows
resumeobject {dc984315-4850-11e5-beab-ca77328079f8}
nx OptIn
bootmenupolicy Standard
detecthal Yes
Windows ブート ローダー
--------------------------------
identifier {e97bf811-4850-11e5-beab-ca77328079f8}
device ramdisk=[unknown]\Recovery\WindowsRE\Winre.wim,{e97bf812-4850-11e5-beab-ca77328079f8}
path \windows\system32\winload.efi
description Windows Recovery Environment
locale ja-jp
inherit {bootloadersettings}
displaymessage Recovery
displaymessageoverride Recovery
osdevice ramdisk=[unknown]\Recovery\WindowsRE\Winre.wim,{e97bf812-4850-11e5-beab-ca77328079f8}
systemroot \windows
nx OptIn
bootmenupolicy Standard
winpe Yes
休止状態からの再開
--------------------------------
identifier {dc984315-4850-11e5-beab-ca77328079f8}
device partition=C:
path \Windows\system32\winresume.efi
description Windows Resume Application
locale ja-JP
inherit {resumeloadersettings}
recoverysequence {e97bf811-4850-11e5-beab-ca77328079f8}
recoveryenabled Yes
isolatedcontext Yes
allowedinmemorysettings 0x15000075
filedevice partition=C:
filepath \hiberfil.sys
bootmenupolicy Standard
debugoptionenabled No
Windows メモリ テスター
--------------------------------
identifier {memdiag}
device partition=\Device\HarddiskVolume2
path \EFI\Microsoft\Boot\memtest.efi
description Windows Memory Diagnostic
locale ja-JP
inherit {globalsettings}
badmemoryaccess Yes
EMS 設定
--------------------------------
identifier {emssettings}
bootems No
デバッガー設定
--------------------------------
identifier {dbgsettings}
debugtype Serial
debugport 1
baudrate 115200
RAM 不良
--------------------------------
identifier {badmemory}
グローバル設定
--------------------------------
identifier {globalsettings}
inherit {dbgsettings}
{emssettings}
{badmemory}
ブート ローダー設定
--------------------------------
identifier {bootloadersettings}
inherit {globalsettings}
{hypervisorsettings}
ハイパーバイザー設定
-------------------
identifier {hypervisorsettings}
hypervisordebugtype Serial
hypervisordebugport 1
hypervisorbaudrate 115200
再開ローダー設定
--------------------------------
identifier {resumeloadersettings}
inherit {globalsettings}
デバイス オプション
--------------------------------
identifier {e97bf812-4850-11e5-beab-ca77328079f8}
description Windows Recovery
ramdisksdidevice unknown
ramdisksdipath \Recovery\WindowsRE\boot.sdi
--------
丸山直昌@統計数理研究所
freebsd-users-jp メーリングリストの案内