Ubuntu で ZFS を使おう!
以前私は、この記事で
「デスクトップで ZFS を使うメリットはない」
と書いてしまいましたが、改めて調べてみると大きな思い違いをしていたことがわかりました。Linux での ZFS 開発に多大な努力を注いでいる OpenZFS チームの開発者の方々の取り組みを無にするような不適切な記述でした。
申し訳ありませんでした。
本記事で、その点をはっきりと修正しておきたいと思います。
よくある誤解① 「ZFS はカーネルに組み込めない」
Linux での ZFS 使用を紹介する記事では、ほぼ必ずといってよいほど次のような記載があります。
「ZFS が GPL ではなく CDDL ライセンスであるため、カーネル本体に組み込むことができない」
これは、勘違い、あるいは勘違いを誘発するおそれのある表現です。あまりにも多くの人が Web 上でこの記述をしているため、AI ですらそのように回答するほどです。
しかし、これは正確ではありません。
そもそも OpenZFS は、カーネルの外部モジュールとして独立して動くことを前提に設計されています。そのおかげで、さまざまな OS で ZFS を利用できるのです。FreeBSD においても kmod(カーネルモジュール)として実装されています。
btrfs などとの違いは、単にカーネル本体のソース tarball に同梱されているかどうかの違いにすぎません。そして、カーネルと切り離されていることには、むしろメリットもあります。
それは「Linuxカーネルの激しい内部変更の嵐から、ZFSの堅牢なコードベースを守るための最強の防波堤」になっていることです。カーネルへの追従は、むしろカーネルに統合されている btrfs の方が不利かもしれません。
ARC(Adaptive Replacement Cache)の優位性
ZFS には ARC(Adaptive Replacement Cache) という非常に優れたキャッシュシステムがモジュールに組み込まれています。CoW(Copy on Write)方式には、
フラグメントしやすい
小ファイルのランダムアクセスに弱い
といった弱点がありますが、ARC はその優れたアルゴリズムとメカニズムでこの弱点を補っています。
一方、btrfs は従来の ext4 などに最適化されたカーネル固有の Page Cache を流用しているため、CoW の弱点を克服できていません。私の以前の実験記事でも、このことをはっきりと確認できました。
ZFS をサポートするのはカーネル側ではなく、ディストリビューション(OS)側です。 残念ながら現時点では ZFS をデフォルトのファイルシステムに採用しているディストリビューションはないようですが、Ubuntu や Debian ではインストール時に ZFS を選択できるようになっています。これらのディストリビューションを使えば、よく言われるような「カーネルと OpenZFS のバージョン管理が難しい」という問題もなく、ディストリビューション側できちんと面倒を見てくれるので、安心して使用できると思います。
ディストリビューションはそのままに、最新カーネルだけ自分でビルドして使うようなケースはほとんどないでしょう(昔はそれが当たり前でしたが)。そうであれば、カーネルと OpenZFS のバージョン整合性が問題になることはまずありません。整合性の問題といっても、カーネルの ABI 変更に伴う再コンパイルが必要になる程度の話です。
よくある誤解② 「Linux では ARC とカーネルのメモリ連携が弱い」
もう一つの誤解が、
「FreeBSD では OS と統合されているため ARC とカーネルが協調してメモリをうまく使えるが、Linux ではその連携が弱い」
というものです。長らく私もそう思い込んでいたのですが、これも大きな間違いでした。
この「協調」とは、ARC が空きメモリを最大限キャッシュとして確保し、メインメモリが不足した場合は確保したメモリを解放して不足を解消する、という動作を指します。
FreeBSD の方が優れていると思い込んでいたのですが、実は Linux の方がより細かく調整できる ことを知りました。
Linux では shrinker や mmu_notifier などの内部 API を駆使することで、「外部モジュールでありながら Page Cache 以上に空きメモリ状況を正確に把握する」仕組みになっているそうです。OpenZFS には Linux のカーネル開発者も少なからず参加しており、こういった機能をカーネル側にもうまく取り込んでいます。
OpenZFS のメインストリームは Linux であり、ZFS は Linux ネイティブなのです。 決してよそ者ではありません。
まとめ
「ZFS はカーネルに取り込まれていないから使わない」という短絡的な考えはあまりにももったいないです。ZFS は非常に魅力的なファイルシステムです。「ZFS が使いたいなら他の OS に行け」など乱暴なことを言う人もいますが、ぜひ一度考え直してみてほしいと思います。
このことを知り、私は実運用環境で ZFS を使いたくなりました。現在のスーパーサブマシンには Ubuntu 24.04 LTS がインストールされており、システムディスクとデータディスクの SSD×2 構成になってます。このうち、データディスクだけ ZFS に変更しました。
次回は実際にデータディスクを ext4 → ZFS に変更した様子を記事にしたいと思います。乞うご期待!
