前々回の投稿に引き続き前回の投稿も評判良かったので調子に乗ってやりました。後悔はしていないが公開はしてる。
Filename | zfs-xenial-fbsd11r-20170215.ova |
---|---|
Size | 4,050,796,544B (3.77GiB) |
md5 | 612eba98ccc4d33ab9b6a7f822d23f4e |
sha1 | 41ade4c475ffd8a5a2d12ea180f165c15ed98e1b |
なんぞこれ?
事実上パーティションが一つしかないのに、UbuntuだけではなくFreeBSDもブートできます。Debian kFreeBSDとかではなく正真正銘The FreeBSD Project謹製のFreeBSD 11-RELEASEです。
FreeBSDの方は起動時はCLIのみですが、
- Username: freebsd
- Password: zfs
でログイン後にstartx
するとgnome3が立ち上がります。
ubuntuの方は前回の投稿と同様です。というかそれが材料になってます。
作り方
- すでにubuntuがインストール済みのVMを用意
- FreeBSD-11-RELEASEのインストールディスクイメージをCDに指定してそこから起動
- shellに入る
- FreeBSD用のデータセットを追加。こんな感じで。
# zpool import -f -N -R /mnt rpool
# zfs create -o mountpoint=/ rpool/ROOT/freebsd
# zfs mountpoint=/usr -o canmount=off rpool/usr
# zfs create -o mountpoint=/usr/local -o canmount=off rpool/usr/local
# zfs mountpoint=/var -o canmount=off rpool/var
# zfs create -o mountpoint=/var/db -o canmount=off rpool/var/db
# zfs mount rpool/ROOT/freebsd
# zfs mount -a
- FreeBSDのtarballをぶちまけ。baseとkernelだけでおk
# cd /usr/freebsd-dist/
# tar zxvf base.tzx -C /mnt
# tar zxvf kernel.tzx -C /mnt
-
FreeBSDのインストールCDイメージを外してubuntuで再起動
-
grubにFreeBSDのブートのしかたを教えてあげる。
/boot/grub/custom.cfg
というファイルを以下の通り作成
menuentry "FreeBSD" --class freebsd --class bsd --class os {
insmod zfs
search --no-floppy --set=root --label rpool --hint hd0,gpt1
echo 'Booting FreeBSD...'
kfreebsd /ROOT/freebsd@/boot/kernel/kernel
kfreebsd_module_elf /ROOT/freebsd@/boot/kernel/opensolaris.ko
kfreebsd_module_elf /ROOT/freebsd@/boot/kernel/zfs.ko
set kFreeBSD.vfs.root.mountfrom=zfs:rpool/ROOT/freebsd
}GRUB_HIDDEN_TIMEOUT=0````
-
grubのメニューを必ず表示するように設定。
-
/etc/default/grub
のGRUB_HIDDEN_TIMEOUT=0
をコメントアウトしてから update-grub
-
-
再起動後に上記の画面が出たらFreeBSDを選択
-
我輩はFreeBSDである。root passwordはまだない;-)
-
のであとはあれこれ設定。今回の.ovaでは
freebsd
という初期ユーザーあり、root login不能というubuntu的設定にしてある
注意点
-
zpool upgrade
はしてはいけません。ZFS on Linuxのfeaturesの方がFreeBSDよりも古いので - それ以外であれば、ubuntuもFreeBSDも普通にアップデートをかけられます。
- VMWareでvmmouseを使うには以下の通りにしてください。(cf. http://qiita.com/dankogai/items/fd76333876b5f8a89e21)
$ sudo -i
# cd /etc/X11/etc/X11/xorg.conf.d
# mv input.conf.vmmouse input.conf
- ZFS on Linuxはシャットダウン前にpoolをexportするけど、FreeBSDはしないという重要な違いがあります。そのためそのままだとFreeBSDの後にubuntu起動すると、initramfsで止まっちゃいます。そのため
/usr/share/initramfs-tools/scripts/zfs
を以下のようにパッチして、root roolを問答無用でマウントするようにしています。
--- zfs.orig 2016-04-13 19:43:25.000000000 +0900
+++ zfs 2017-02-15 00:55:15.744039000 +0900
@@ -54,7 +54,7 @@
# At this point, the pool either imported cleanly, or we ran out of the
# allowed time (rootdelay). Perform the read-write import.
- ZFS_STDERR=$(zpool import -N "$ZFS_RPOOL" 2>&1)
+ ZFS_STDERR=$(zpool import -f -N "$ZFS_RPOOL" 2>&1)
ZFS_ERROR=$?
if [ "$ZFS_ERROR" -ne 0 ]
もうちょいエレガントなやり方、緩募。
Boot Environmentという発想
要はこれ、Boot Environmentという発想をそのままマルチOSブートに反映させたものなんですね。
- https://docs.oracle.com/cd/E26924_01/html/E25778/index.html
- http://yskwkzhr.blogspot.jp/2013/03/use-boot-environments-on-freebsd.html
難しいことは何もなくて、OSごとのパーティションがOSごとのデータセットになっただけ。しかしプールは共有しているので、/home
などはどのOSからも見えますし、他のOSのパーティションの空きが使いたくても使えないということもありません。
まあbeadm
とか使ってないので、あくまで「なんちゃってBE」ではあるのですが、やってることは同じです。
仮想マシンでこれやっても自己満足以上のご利益はほとんどありませんが、これでUSBメモリーを作っておくと、万能に近い rescue drive になります。UEFI対応にしておくと、MacにすらOKでした。
というかおそるべきことに、macOS boot on ZFSはすでに実現しているようなのです。ようなのです、と書いたのは残念ながら手元では再現できなかったから。
とはいってもubuntuやFreeBSDと異なり、ヴェンダーサポートは現状期待しようがありませんが。Apple、OpenZFS Projectサポートしてくんないかなあ。Microsoftがサポートしてくれたりして:-)。Windows 10 on ZFSだってありえなくはないはず…
勇者はぜひ上記に macOS と illumos も加えたクアッドブートディスクをこさえてみてください。
Dan the Unofficial ZFS Evangelist
追記
macOS boot on ZFS できちゃいまいした。VMWare Fusion上ではありますが、Terminal.appの画面に注目。O3XのWikiどおりとはちょっと行きませんでしたが。もしかしたら別記事にレシピ書くかも。