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