見出し画像

Ubuntu を ZFS でインストールしてみた

Linux での ZFS の利用を確認したかったので、Ubuntu を VirtualBox 上でインストールしてみました。

Linux で ZFS を正式サポートしているディストリビューションは少ないですが、Ubuntu はインストーラーで ZFS を選択できるため、手軽に試せます。

まず、普通にインストールします。
この画面では、Interactive installation を選びます。
この画面では、そのままだと ext4 でインストールされてしまうので、<Advanced features> で ZFS を選択します。
<Erase disk and use ZFS> を選んで OK を押せば、ZFS(暗号化なし)でインストールされます。
構成を再確認して、<Install> を押してインストールを開始します。

インストールが終わると、ファイルシステムが ZFS になった以外は普通の Ubuntu です。

ファイルシステムを確認してみました。

$ df -h
Filesystem                                        Size  Used Avail Use% Mounted on
tmpfs                                             390M  1.6M  389M   1% /run
rpool/ROOT/ubuntu_ddfqbe                           17G  2.7G   14G  17% /
rpool/ROOT/ubuntu_ddfqbe/srv                       14G  128K   14G   1% /srv
rpool/ROOT/ubuntu_ddfqbe/usr/local                 14G  128K   14G   1% /usr/local
rpool/ROOT/ubuntu_ddfqbe/var/games                 14G  128K   14G   1% /var/games
rpool/ROOT/ubuntu_ddfqbe/var/lib                   15G  956M   14G   7% /var/lib
rpool/ROOT/ubuntu_ddfqbe/var/lib/AccountsService   14G  128K   14G   1% /var/lib/AccountsService
rpool/ROOT/ubuntu_ddfqbe/var/lib/NetworkManager    14G  256K   14G   1% /var/lib/NetworkManager
rpool/ROOT/ubuntu_ddfqbe/var/lib/apt               14G  100M   14G   1% /var/lib/apt
rpool/ROOT/ubuntu_ddfqbe/var/lib/dpkg              14G   32M   14G   1% /var/lib/dpkg
rpool/ROOT/ubuntu_ddfqbe/var/log                   14G  3.0M   14G   1% /var/log
rpool/ROOT/ubuntu_ddfqbe/var/mail                  14G  128K   14G   1% /var/mail
rpool/ROOT/ubuntu_ddfqbe/var/snap                  14G  1.4M   14G   1% /var/snap
rpool/ROOT/ubuntu_ddfqbe/var/spool                 14G  128K   14G   1% /var/spool
rpool/ROOT/ubuntu_ddfqbe/var/www                   14G  128K   14G   1% /var/www
tmpfs                                             2.0G     0  2.0G   0% /dev/shm
tmpfs                                             5.0M  8.0K  5.0M   1% /run/lock
efivarfs                                          256K   16K  236K   7% /sys/firmware/efi/efivars
rpool/USERDATA/home_agpz85                         14G  2.2M   14G   1% /home
rpool/USERDATA/root_agpz85                         14G  128K   14G   1% /root
bpool/BOOT/ubuntu_ddfqbe                          1.8G  106M  1.7G   6% /boot
/dev/sda1                                         1.1G  6.2M  1.1G   1% /boot/efi
tmpfs                                             390M  124K  390M   1% /run/user/1000

ずいぶんと細かく dataset が刻まれています。万人向けだとこうなるのでしょうか? FreeBSD の dataset がずいぶんシンプルに感じられます。


Ubuntu/ZFS の起動プロセス

FreeBSD と比べると、ZFS での起動プロセスは少々複雑でトリッキーです。

UEFI

GRUB(ZFS 対応)

Linux カーネル + initramfs

initramfs 内で ZFS モジュール(zfs.ko)読み込み

zpool import -N

root データセットをマウント

/sbin/init 実行

ZFS root の Linux 起動プロセス

この initramfs というのは、メモリで小さな RAM Disk を作り、その中に小さな Linux 環境を構築するというものです。これにより、zfs.ko というカーネルモジュールを読み込んでフルサービスを開始するまでの間、最小限の ZFS サポートを可能にします。

initramfs(圧縮アーカイブ)

RAM 展開

仮 root として起動

本当の root へ switch

initramfs の起動時の働き

これは、FreeBSD のローダーが ZFS の完全な機能を活用できるのに対し、GRUB の ZFS 機能が限定(暗号化されたものなどは直接読み込めない)されているための処置です。

ちなみに FreeBSD の起動プロセスは次のようにシンプルです。

UEFI

loader.efi

ZFS 直接読み込み

カーネル起動

FreeBSD/ZFS のブートプロセス

Linux でも、GRUB を使わないさまざまなアプローチが試行されています。ZFS用 のブートマネージャーに ZFSBootMenu があります。これを使えば、起動プロセスが FreeBSD のようにシンプルになりますが、導入は茨の道です。

インストーラーが使えず、ほぼ Linux ディストリビューションをスクラッチから組み上げるような作業になります(でも、ext4 と比較すると、この作業は楽です)。git clone で取ってきて、EFI に ZFSBootMenu を置き、pool を作り、dataset を作り、ディストリビューションを展開するという流れです。NetBSD に詳しい方なら「NetBSD install without sysinst」に近い感覚といえるかもしれません。


FreeBSD の Boot Environment(BE)機能を再現する

FreeBSD では、freebsd-update install で自動的に BE が保存されたり、bectl create で手動作成できますが、Ubuntu では少し手間がかかります。OS レベルでは仕組みがないため、ZFS の機能を使って手作業で行います。ただし、それほど難しくはありません。

zfs snapshot rpool/ROOT/ubuntu@pre
zfs clone rpool/ROOT/ubuntu@pre rpool/ROOT/ubuntu-test
zpool set bootfs=rpool/ROOT/ubuntu-test rpool

これで、bectl create と bectl activate と同等の機能が実現できます。shell script にすれば良いでしょう。

試してはいませんが、ZFSBootMenu を導入した場合は、上記の作業がメニューから簡単にできるそうです。

もし ZFS をデフォルトに据えるディストリビューションが現れたとしたら、この ZFSBootMenu がブートマネージャーとして採用されることになるでしょう。


まとめ

今回 Ubuntu に ZFS をインストールしてみましたが、気軽に試せるというメリット以外に、デスクトップで ZFS を使う積極的な理由は見当たりませんでした。Linux における ZFS は、どうしてもこの魅力的なファイルシステムを使いたいというサーバー用途での需要を満たす、という位置づけにとどまっていると思います。

その根本的な理由は、ZFS が GPL ではなく CDDL ライセンスであるため、カーネル本体に組み込めず、あくまで外部モジュールという扱いになっているからです。

おそらく信頼性・安定性の観点から、カーネルと基本ユーティリティは ext4 に置かれ、データ領域だけ ZFS という使い方が主流になっていると思われます。

お試しではなく、本格的に ZFS のメリットをフルに享受したいのであればFreeBSD をおすすめします。その理由は次のとおりです。

  • ZFS がベース OS と一体設計されている

  • ブートローダーが ZFS を直接理解している

  • bectl が標準搭載されている

  • カーネルと ZFS の整合性が保たれている

  • /boot も同一プールに置ける

次回は、Linux における ZFS対抗馬である次世代ファイルシステムの Btrfs について調べてみたいと思います。

訂正記事について

当記事において、

「デスクトップで ZFS を使うメリットはない」

と書いてしまいましたが、改めて調べてみると大きな思い違いをしていたことがわかりました。Linux での ZFS 開発に多大な努力を注いでいる OpenZFS チームの開発者の方々の取り組みを無にするような不適切な記述でした。

申し訳ありませんでした。

以下の記事において訂正させていただきましたので、是非ご覧ください。


いいなと思ったら応援しよう!