丸山です。

Sun, 11 Dec 2016 20:40:12 +0900
Naomichi Nonaka <n...@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@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-users-jp
To unsubscribe, send any mail to "freebsd-users-jp-unsubscr...@freebsd.org"

メールによる返信