[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 メーリングリストの案内