[FreeBSD-users-jp 95999] Re: UEFIモードでの起動パーティション切り替え
丸山直昌
maruyama @ ism.ac.jp
2016年 12月 13日 (火) 20:27:06 UTC
丸山です。
Sun, 11 Dec 2016 20:40:12 +0900
Naomichi Nonaka <nao @ enuenu.org> writes:
>野中です。
>
>時間が経ってしまいましたが、UEFIモードのGrub2からFreeBSDを起動する方法を
>私のblog
>
>http://blog.livedoor.jp/goldfish_and_laser/
>
>に纏めてみました。
有難うございました。ちょっとしたコメントを blog に書いておきましたが、と
もかくお陰様でだいぶ勉強になりました。
で、結局私の dynabookN51は
partition
1 bios-boot (1.0G)
2 efi (100M)
3 ms-reserved (128M)
4 ms-basic-data (78G) Windows8.1
- free - (3.5K)
7 freebsd-ufs (5.0G) PCBSD10.3(UFS)その1
8 freebsd-ufs (5.0G) PCBSD10.3(UFS)その2
9 freebsd-swap (4.0G)
10 freebsd-ufs (40G) PCBSD10.3(UFS)その1の/usr
11 freebsd-ufs (40G) PCBSD10.3(UFS)その2の/usr
20 freebsd-zfs (30G) TrueOS11.0(JUNE2016)
21 freebsd-zfs (30G) TrueOS11.0(JULY2016)
22 freebsd-zfs (45G) PCBSD10.3
23 freebsd-zfs (45G) PCBSD10.3
という状態で、 /boot/grub/custom.cfg はこのメールの末尾のようにしました。
ただし efi パーティションの中身は
[root @ surya{36}] ~# ls -alg /boot/efi/EFI/BOOT/
total 1235
drwxr-xr-x 1 root wheel 1024 5月 26 2016 .
drwxr-xr-x 1 root wheel 1024 8月 22 2015 ..
-rwxr-xr-x 1 root wheel 33811 8月 13 2015 BOOT102.EFI
-rwxr-xr-x 1 root wheel 74833 3月 31 2016 BOOT103.EFI
-rwxr-xr-x 1 root wheel 77824 7月 20 01:11 BOOT110.EFI
-rwxr-xr-x 1 root wheel 78674 11月 18 13:18 BOOTNONA.EFI
-rwxr-xr-x 1 root wheel 202752 12月 5 02:39 BOOTX64.EFI
-rwxr-xr-x 1 root wheel 196608 11月 25 01:18 GRUBP20.EFI
-rwxr-xr-x 1 root wheel 196608 11月 25 06:45 GRUBP21.EFI
-rwxr-xr-x 1 root wheel 196608 12月 1 11:35 GRUBP22.EFI
-rwxr-xr-x 1 root wheel 202752 12月 5 02:39 GRUBP23.EFI
という状況です。これで2つの UFSパーティションと4つの ZFSパーティション、
それに Windows8.1のどれでも grubメニューから起動できるだけではなく、4つ
のZFSパーティションにあるgrubの間の「はしご」、つまり一つの grubから別の
grubへの乗り移りができます。
これにはちょっと補足の説明が必要かも知れませんね。GRUBP20.EFI は ada0p20
を起動した状態で grubの設定をやった時にefiパーティションに作られる
BOOTX64.EFIをコピーしたのものです。GRUB21.EFIなども同様にして作ったもの
です。
PCBSD10.3 では grub関係の package は
# pkg info |grep grub
grub2-efi-2.02_15 Multiboot EFI boot loader
grub2-pcbsd-2.02q_8 Multiboot boot loader
ということになっていて、UEFIモードで起動した ZFS上のgrub の設定をやると、
grub.cfg と custom.cfg は/boot/grub の中に取られ、 efi パーティションの
中の/EFI/BOOT/BOOTX64.EFI が更新されます。ここらへんは grub2 とは言って
も、普通の設定ではないかも知れませんが、ともかく、PCBSD+上のパッケージ
ではそうなります。そのため、別のZFSパーティションにある grub とは、
grub.cfg とcustom.cfg については干渉せず、ただ BOOTX64.EFI は同じ場所を
使う設定になります。ですからそれぞれの設定で作成される BOOTX64.EFI を名
前を変えておいてchainload する仕掛けを作っておくと、それぞれの grub の間
で「はしご」ができてしまうわけです。(上記二つのpackages を UFS上の PCBSD
で設定するとどうなるか試していませんが、まあそんなに違わないでしょう。)
ついでに PCBSD10.2の /boot/boot1.efi(元祖FreeBSD10.2でも同じ)を
BOOT102.EFI という名前で efi パーティションに入れておいてchainload すれ
ば /boot/boot1.efi の動作確認もできます。野中さんパッチの boot1.efi も
BOOTNONA.EFI として入れました。
野中さんの blog には、「Ubuntu のGrub2-efi はFreeBSD11.0Rのzfsパーティショ
ンを認識しない」とありますが、私が上にようにして作った GRUBP20.EFIを
Ubuntuの grub から chainload して、そこからFreeBSDのZFSを起動することは
難なくできると思います(Ubuntuは使ったことないですが)。従ってUEFIマシンの
ディスク上に Ubuntu と FreeBSD zfs を共存させて grub で選択起動すること
はたいして難しくないように思います。
また「FreeBSDのGrub2にはUbuntuのupdate-grubのように設定ファイルをEFIパー
ティションにコピーする便利なコマンドがありません」とありますが、PCBSDで
は
# grub-mkconfig -o /boot/grub/grub.cfg
とやると
Generating grub configuration file ...
テーマを見つけました: /boot/grub/themes/pcbsd/theme.txt
完了
Installing GRUB to ada0
と表示されて、 grub.cfg と /EFI/BOOT/BOOTX64.EFI の更新をやってくれます。
/boot/grub/custom.cfg は手で編集しても大丈夫です。
以上、一般の UEFI モードのマシンでも通用する話と思います。
なお、 TOSHIBA dynabookN51で Windows以外の OSを起動するにはちょっとした
ワザが必要ですが、それは [FreeBSD-users-jp 95917] に書いたので、繰り返し
ません(今読み直すと間違った説明が混じってはいますが)。
---- 私が dynabookN51 で使っている custom.cfg
menuentry "loader.efi of ada0p7 (rfs0, PCBSD10.3 UFS)" {
insmod ufs2
insmod chain
set root=(hd0,7)
chainloader /boot/loader.efi
}
menuentry "loader.efi of ada0p8 (rfs1 PCBSD10.3 UFS)" {
insmod ufs2
insmod chain
set root=(hd0,8)
chainloader /boot/loader.efi
}
menuentry "loader.efi of ada0p20 (tank110, TrueOS11.0JUNE2016 zfs)" {
insmod zfs
insmod zfsinfo
insmod chain
set root=(hd0,20)
zfsinfo (hd0,20)
chainloader /ROOT/initial@/boot/loader.efi
}
menuentry "Chainload GRUB on ada0p20(PCBSD11.0JUNE2016)" {
insmod chain
set root='(hd0,2)'
chainloader /EFI/BOOT/GRUBP20.EFI
}
menuentry "Chainload GRUB on ada0p21(TrueOS11.0JULY2016)" {
insmod chain
set root='(hd0,2)'
chainloader /EFI/BOOT/GRUBP21.EFI
}
menuentry "Chainload GRUB on ada0p22(PCBSD 10.3)" {
insmod chain
set root='(hd0,2)'
chainloader /EFI/BOOT/GRUBP22.EFI
}
menuentry "Chainload GRUB on ada0p23(PCBSD 10.3)" {
insmod chain
set root='(hd0,2)'
chainloader /EFI/BOOT/GRUBP23.EFI
}
menuentry "Chainload boot1.efi of FBSD10.3 modified by Nonaka" {
insmod chain
set root='(hd0,2)'
chainloader /EFI/BOOT/BOOTNONA.EFI
}
menuentry "Chainload boot1.efi of FBSD10.2" {
insmod chain
set root='(hd0,2)'
chainloader /EFI/BOOT/BOOT102.EFI
}
menuentry "Chainload boot1.efi of FBSD10.3 modified by Nonaka" {
insmod chain
set root='(hd0,2)'
chainloader /EFI/BOOT/BOOTNONA.EFI
}
menuentry "Chainload boot1.efi of FBSD10.2" {
insmod chain
set root='(hd0,2)'
chainloader /EFI/BOOT/BOOT102.EFI
}
menuentry "Chainload boot1.efi of FBSD10.3" {
insmod chain
set root='(hd0,2)'
chainloader /EFI/BOOT/BOOT103.EFI
}
menuentry "Chainload boot1.efi of FBSD11.0" {
insmod chain
set root='(hd0,2)'
chainloader /EFI/BOOT/BOOT110.EFI
}
menuentry "Chainload bootmgfw.efi of Windows" {
insmod chain
set root='(hd0,2)'
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
--------
丸山直昌@統計数理研究所
freebsd-users-jp メーリングリストの案内