[FreeBSD-users-jp 95583] Windows 8.x と PCBSDのマルチブート(geom と boot code)

丸山直昌 maruyama @ ism.ac.jp
2015年 8月 10日 (月) 04:46:32 UTC


統計数理研究所の丸山です。

Windows 8.x と PCBSDのマルチブートがうまくできなくて思案しております。こ
の件、今年3月にお尋ねして、

Date: Tue, 03 Mar 2015 21:01:48 +0900
From: Takanori Watanabe <takawata at init-main.com>
Subject: [FreeBSD-users-jp 95488] Re: geom と boot code

>ここにも前に投稿しましたけど、その内容ちょっとここに書きました。
>http://qiita.com/takawata19/items/3d1fb96cfde4f1626e3c

というお答えを頂いきましたが、最近やっと実験できる環境ができて、やってみ
ましたが、うまくできません。

ちょっと長くなりますが、状況を以下に説明します。

使ったマシンは

東芝 dynabook N51
型番: PN51NGP-NHA
Model No: PSKVLN-00300F

というノートパソコンで、工場出荷時には当然 UEFIブートの設定がされて
Windows8.1が動きました。PCBSDのインストーラーが UEFIブートには対応してい
ないため、起動設定をCSMブート(昔流のBIOSインターフェースを前提とする起動
方法)に一時的に変更する必要がありますが、そのための設定画面を表示させる
方法は

http://dynabook.com/assistpc/faq/pcdata2/015740.htm

に書いてありますのでここでは省略します。

インストール作業にはPCBSD10.2-RC1-08-04-2015-x64-DVD-USB.isoを使いました。
まず出荷時のdynabookのディスクの状態ですが、

# gpart show ada0
=>       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)

という状態でした。(これはインストーラーの emergency shell を起動して
gpart コマンドで見ました。)

Windows8.1のディスク管理機能を使って 399Gの Windows8.1領域を縮小します。
その方法は例えばPCBSDのハンドブック
(http://download.pcbsd.org/iso/10.1-RELEASE/amd64/docs/html/pcbsd.html)
の2.3節あたりに書いてあるので、ここでは省略します。ともかくPCBSDをインス
トールするための空きを作ります。

=>       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  416419840     4  ms-basic-data  (199G)
  418985984  419829760        - free -  (200G)
  838815744  104857600     5  ms-basic-data  (50G)
  943673344   33098475     6  !de94bba4-06d1-4d40-a16a-bfd50179d6ac  (16G)
  976771819       1316        - free -  (658K)

となり、この状態で、インストール作業を行います。「UEFI起動」の指定をして
インストールするのですが、現在PCBSD10.2-RC1-08-04-2015-x64-DVD-USB.isoが
デバッグ中で、ちょっとおかしな挙動もあり、ころころ修正されるので、ここで
はインストール方法の詳細は省略します。ともかくインストール作業を行って

=>       34  976773101  ada0  GPT  (466G)
         34       2014        - free -  (1.0M)
       2048    2097152     1  bios-boot  (1.0G)
    2099200     204800     2  efi  (100M)
    2304000     262144     3  ms-reserved  (128M)
    2566144  416419840     4  ms-basic-data  (199G)
  418985984  415498240     7  freebsd-zfs  (198G)
  834484224    4096000     8  freebsd-swap  (2.0G)
  838580224     235520        - free -  (115M)
  838815744  104857600     5  ms-basic-data  (50G)
  943673344   33098475     6  !de94bba4-06d1-4d40-a16a-bfd50179d6ac  (16G)
  976771819       1316        - free -  (658K)

となります。空き領域に p7(freebsd-zfs, 198G)とp8(freebsd-swap, 2G)が作ら
れます。またp1の名称がインストール作業前と変わっていることに注意してくだ
さい(多分grub がインストールされたものと思います)。

これで、一応 Windows8.1 と PCBSD9.2(RC1 2015/8/4)の両方がディスクに入り、
どちでも起動できるようになるのですが、面倒なことにこれだけでは、UEFI起動
モードではWindows8.1が立ち上がり、CSMブートモードではPCBSDが立ち上がる、
という状態になります。つまりWIndows8.1と PCBSDを切り替えるのにrebootの他
にBIOS設定変更によるブートモードの変更も必要ということになります。

で、ここからがこの記事の本題、 UFEIブートメニューの変更です。

From: Takanori Watanabe <takawata at init-main.com>
Subject: [FreeBSD-users-jp 95488] Re: geom と boot code

>ここにも前に投稿しましたけど、その内容ちょっとここに書きました。
>http://qiita.com/takawata19/items/3d1fb96cfde4f1626e3c

に書いてことを試みたのですが、うまくゆきません。

まず、

[Windows8.1上]
  mountvol e: /S

はできます。これは

[PCBSD上]
  mount_msdosfs /dev/ada0p2 (マウントポイント)

と同じことで、上記のPCBSDインストール直後の状態では

% glabel status
                        Name  Status  Components
gpt/Basic%20data%20partition     N/A  ada0p1
                label/efibsd     N/A  ada0p2
            ntfs/TI31362500C     N/A  ada0p4
                   ntfs/Data     N/A  ada0p5
               ntfs/Recovery     N/A  ada0p6
                 label/swap0     N/A  ada0p8

で /etc/fstab に

/dev/label/efibsd  /boot/efi msdosfs rw 0 0

という行があるので、つまりは /boot/efi にマウントされています。
で中身はどうなっているかというと

[pcadmin at surya] ~% ls -alg /boot/efi
total 5
drwxr-xr-x   1 root  wheel  1024  1月  1  1980 .
drwxr-xr-x  10 root  wheel    54  8月  9 19:24 ..
drwxr-xr-x   1 root  wheel  1024 12月 26  2014 EFI
[pcadmin at surya] ~% ls -alg /boot/efi/EFI
total 5
drwxr-xr-x  1 root  wheel  1024 12月 26  2014 .
drwxr-xr-x  1 root  wheel  1024  1月  1  1980 ..
drwxr-xr-x  1 root  wheel  1024 12月 26  2014 Boot
drwxr-xr-x  1 root  wheel  1024 12月 26  2014 Microsoft
drwxr-xr-x  1 root  wheel  1024 12月 26  2014 Toshiba
[pcadmin at surya] ~% ls -alg /boot/efi/EFI/Boot
total 194
drwxr-xr-x  1 root  wheel    1024 12月 26  2014 .
drwxr-xr-x  1 root  wheel    1024 12月 26  2014 ..
-rwxr-xr-x  1 root  wheel  196608  8月  7 23:20 bootx64.efi

で、この /EFI/Boot/bootx64.efi は /boot/grub/x86_64-efi/core.efiと完全に
同じものになっています。

[pcadmin at surya] ~% ls -alg /boot/grub/x86_64-efi/ |grep 196608
-rw-r--r--  1 root  wheel  196608  8月  8 08:20 core.efi
-rw-r--r--  1 root  wheel  196608  8月  8 08:20 grub.efi
[pcadmin at surya] ~% diff /boot/efi/EFI/Boot/bootx64.efi /boot/grub/x86_64-efi/core.efi
[pcadmin at surya] ~%

で、Takanori Watanabe さんの上記
http://qiita.com/takawata19/items/3d1fb96cfde4f1626e3c
に沿って話を進めると、

>   そして、EFIパーティションをmountして
>   /usr/obj/usr/src/sys/boot/amd64/boot1.efi/boot1.efiを
>   ${EFIMOUNT}/EFI/FreeBSD/Boot/bootx64.efi
>   にコピーします

ここは /boot/boot1.efi ってものが最近の distribution にはあるので、自分
でコンパイルする必要はないし、また上記の手順で PCBSDをインストールした場
合には /boot/efi/EFI/Boot/bootx64.efi があるので、これをこのまま使うべき
と判断しました。

>そして、Windowsでbcdedit /copy {bootmgr} /d "FreeBSD"
>   として、得られたUUIDをメモして
>
>   bcdedit /set {得られたUUID} path \EFI\FreeBSD\Boot\bootx64.efi
>   とします。
>
>   そのあと
>   bcdedit /set {fwbootmgr} displayorder {得られたUUID} /addlast
>   とします。
>   それで、リブートしてF12を押すとブートメニューにFreeBSDという
>   アイテムが出てきます。
>   これを選ぶとHDDのEFI上のboot1からFreeBSDがあがるはずです。

C:\Windows\system32>bcdedit /copy {bootmgr} /d "PCBSD"
エントリは {29e071aa-3dee-11e5-826b-d07e35754deb} に正常にコピーされまし
た。

C:\Windows\system32>bcdedit /set {29e071aa-3dee-11e5-826b-d07e35754deb} path \EFI\Boot\bootx64.efi
この操作を正しく終了しました。

C:\Windows\system32>bcdedit /set {fwbootmgr} displayorder {29e071aa-3dee-11e5-86b-d07e35754deb} /addlast
この操作を正しく終了しました。

となりましたが、何の変化もありませんでした。 /Boot/bootx64.efi を
/FreeBSD/bootx64.efi や /FreeBSD/Boot/bootx64.efi に変えたりして色々実験
しましたが、すべてうまくゆきません。だいたい

bcdedit /enum

の出力に何の変化もないのがどうも納得ゆきません。何か重要なステップが抜け
ているように思います。

どなたかお助けを!

--------
丸山直昌@統計数理研究所


freebsd-users-jp メーリングリストの案内