Ubuntu Weekly Topics

2015年10月9日号 ZFSとUbuntu・UWN#436

この記事を読むのに必要な時間:およそ 5 分

ZFSとUbuntu

UbuntuにZFSがやってくる,かもしれません。snappy-app-develメーリングリストで行われた,Mark Shuttleworthのコメントを含むやりとりが話題になっています。

やりとりとしては,⁠Snappyベースのストレージアプライアンスを作りたいんだけど,ZFSを使いたいんだ。カーネルモジュールをビルドして組み込めるフレームワークはないの?」⁠意訳)というものが発端です。⁠そもそもここアプリケーション開発のためのメーリングリストなのでは」という疑問はいったん脇に置いて,どのようなやりとりがあったのか見ていきましょう。

この質問へは「モジュールとしてロードできるように準備するしかないね」という回答が行われました。ここまではごく普通のやりとりです。……が,この回答に対してMark Shuttleworthがおもむろに,⁠そのモジュールがきちんとできあがったら,そのうちUbuntuに標準で含められるようになるよ」⁠If it's ZFS you're after, it will be included in Ubuntu as standard in due course)というコメントをしたので妙におおごとになっています。いわく,⁠UbuntuにZFSが含められる」⁠Ubuntuの標準ファイルシステムがZFSになる」などなど。ただし,これらを適切に解釈するには,相応の前提知識が必要です。

まず,そもそもZFSのソースコードは旧SunのCDDLに基づいてリリースされています。CDDLはGPLとは互換性がなく(+他のライセンスで配布されているソースコードと混ぜると再配布ができなくなるため)⁠⁠あらかじめ動くようにマージした状態」での配布は行えません。CDDL側の配布のための要件を満たさなくなる上に,GPL違反の状態に陥ってしまうことになります。

この状態を迂回するためのアプローチとして,⁠ユーザーが自分の意思でZFSのソースコードを改変してLinuxカーネルに組み込むこと」です。こうすることでCDDLにもGPLにも抵触せず,それなりに妥当な状態にすることが可能です。もちろんこの環境は再配布できませんが,個人の環境で利用する分には問題ありません。ここまでを前提として,⁠Linux向けに」ZFSをポーティングしているプロジェクトがZFS on Linux(ZOL)です。

しかし,これをLinuxディストリビューションとして標準的にサポートすると,多方面にグレーゾーンを発生させます。これはNVIDIAやAMDのバイナリドライバの組み込み問題よりもさらに複雑で,⁠ユーザーの意思に基づいて」ZFSを構成した,と主張できる条件を整える必要があります。

この問題を解決するには,⁠任意のカーネルモジュールのソースコードをダウンロードし,それを適切にコンパイルしてカーネルに組み込む」という仕組み注1『Snappy Ubuntuに』取り込む必要があります。UbuntuにはDKMSがすでに存在するため,ライセンス上の問題さえ解決すればUbuntuの標準パッケージとして利用できるようになる可能性があります。Markが示唆しているのはこうした意味です。

ライセンス問題を完璧に解決するにはユーザーの「ZFSを使いたい」という脳波を検知してソースコードを入手し,なんとなくマージ可能にしてしまう機構を開発することですが,さすがにそのようなものを開発する意図ではないと考えられるため,なんらかの「意思を確認する」ための機構を備えるか,⁠snappy installはユーザーの意思に基づくものである」という理論武装を行うことになります。

注1
現行の実装としては,Dellが開発したDKMSという「ソースコードで配布されているドライバモジュールを起動時にコンパイルしてロードする」フレームワークが存在します。

また,ここで注意すべきことは,⁠標準として」⁠as standard)という表現の解釈には,⁠標準ファイルシステムとして」「標準パッケージとして」という2通りがありえることです。

もともとのやりとりが「Snappyで動くストレージアプラインスとして,ZFSを使えるようにしたいんだけどカーネルモジュールをビルドして組み込めるフレームワークはないの?」という質問から始まっていることからすれば,ここでの「標準として」というのは「標準パッケージとして」Ubuntuに含められるだろう,という話でしかありません。

ZFSは他のファイルシステムに比べると異常なまでにメモリを消費する傾向が強く(大したI/Oを行わないデスクトップ環境であっても十分に安定させるには8GB程度は必須)⁠また,無視できないオーバーヘッドをI/Oにもたらすため,汎用のファイルシステムとして使うには不向きです。⁠標準ファイルシステム」にこれほど向かないものもありません注2)⁠

ということで,⁠UbuntuでZFSが使えるようになる(か?)⁠ぐらいの話でした。もしUbuntuでのZFS採用がもう少し本格的な話の場合,今月後半ぐらいにはUOS 15.11のblueprintsで観測できるようになるでしょう。興味がある場合はこのページを確認してみてください。

注2
btrfsと同程度に不向きです。

なお,少し話は変わりますが,この件で「LinuxでもZFSを利用できる」という人に向けた注意は次の通りです。

ZOLは「Solaris由来のZFSをLinuxに完全に移植するのは困難なので,まずLinuxの上にSolaris互換レイヤーを作ってシステムコールに互換性を確保してしまおう」というアプローチを選択しています注3)⁠この表現がどのようなことか分からない場合,手を出さない方が安全です。

意味が分かる場合,GitHubのissueを確認し,十分なハードウェアを手配できるかを検討してください。ほとんど場合,⁠十分すぎるぐらいの容量を手配すればZFSの柔軟な割り当て機能は必要ない」という方針でHDDを大量に購入したほうが安価で安定した環境を手にできるでしょう。

issueを読んである程度覚悟が決まったら,ハードウェアの準備のためにFAQ『Basic Requirements』を確認することをお勧めします。一般的なデスクトップやノート環境では「ECC memory. This isn't really a requirement, but it's highly recommended.」という推奨条件を満たせないはずです。この条件を満たさずにZFSを使うと大変に恐ろしいことが起きるので注4)⁠推奨条件を満たし(そしてメモリが十分に搭載された)環境で使うことを強くお勧めします注5)⁠

注3
他のOSで動作しているファイルシステムを移植する場合の常套手段ではありますが,これをやったファイルシステムはいつか互換レイヤを捨てるために大手術をするまで,互換性維持のためのメンテナンスコストを永久に支払いつつ,互換レイヤ特有のバグに悩まされるという莫大な負の遺産を背負い込むことになります。どうせファイルシステムは職人にしか直せないので直せる人が少ないのは仕方ないものの,職人の手にすら余るような不可解な現象を引き起こすことが多々あり,設計レベルの大変更を迂回したツケを支払いきれずに頓挫,という不幸な展開につながることがほとんどです。XFSはこのツケを10年ほどかけて支払っています。
注4
Linuxにおける「ストレージへの書き込み処理」は最初にメモリを経由するので,メモリが化ける=ストレージに格納しているデータの壊滅,という問題を引き起こします。この意味ではそもそもECCの利用できない環境で大容量ストレージを使うのは自殺行為なのですが,ZFSはすでに書かれているデータを再配置するため,この問題の被害範囲がさらに大きくなります。他のファイルシステムであれば「最近書いたファイルが壊滅」で済むところで,⁠知らない間に最近書いていないファイルまでまとめて壊滅。もちろん壊滅した場所は,ZFSを熟知している人が人類の限界を突破してZFSの気持ちにならない限りは予測しきれないので,事実上全部壊れたものとして捨てるしかない」という凄絶な事態を引き起こすからです。
注5
きちんとした環境であっても,ZOLにランダムアクセス負荷やページ枯渇状態でのライトをかけるとかなりの確率で死にます。重要なことなのでもう一度示しますが,GitHubのissueをタイトルだけでも確認の上人生についてよく考えてから利用してください。

UWN#436

Ubuntu Weekly Newsletter #436がリリースされています。

その他のニュース

  • OpenStack Liberty RC1の14.04 LTSと15.10向けのパッケージが準備されています。15.10向けの作業はすでにほぼ完了しており,あとはOpenStack側のリリースにあわせてパッケージをアップデートするだけ,という状態です。
  • FlashなしでTwitchの配信を閲覧できる,GNOME Twitchについて。

今週のセキュリティアップデート

usn-2759-1:Linux kernelのセキュリティアップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2015-October/003133.html
  • Ubuntu 12.04 LTS用のアップデータがリリースされています。CVE-2015-5707, CVE-2015-6252, CVE-2015-6526を修正します。
  • 対処方法:アップデータを適用の上,システムを再起動してください。
  • 備考:ABIの変更を伴いますので,カーネルモジュールを自分でコンパイルしている場合は再コンパイルが必要です。カーネルモジュール関連のパッケージ(標準ではlinux-restricted-modules, linux-backport-modules, linux-ubuntu-modulesなど)は依存性により自動的にアップデートされるため,通常はそのままアップデートの適用を行えば対応できます。
usn-2760-1:Linux kernel (OMAP4)のセキュリティアップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2015-October/003134.html
  • Ubuntu 12.04 LTS用のアップデータがリリースされています。CVE-2015-5707, CVE-2015-6252, CVE-2015-6526を修正します。
  • 対処方法:アップデータを適用の上,システムを再起動してください。
  • 備考:ABIの変更を伴いますので,カーネルモジュールを自分でコンパイルしている場合は再コンパイルが必要です。カーネルモジュール関連のパッケージ(標準ではlinux-restricted-modules, linux-backport-modules, linux-ubuntu-modulesなど)は依存性により自動的にアップデートされるため,通常はそのままアップデートの適用を行えば対応できます。
usn-2743-4:Firefoxの再アップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2015-October/003135.html
  • Ubuntu 15.04・14.04 LTS・12.04 LTS用のアップデータがリリースされています。
  • Firefox 41.0.1のUbuntuパッケージ版です。特定の環境や起動時にクラッシュが発生する問題を修正します。
  • 対処方法:アップデータを適用の上,Firefoxを再起動してください。
usn-2757-1:Oxideのセキュリティアップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2015-October/003136.html
  • Ubuntu 15.04・14.04 LTS用のアップデータがリリースされています。CVE-2015-1303, CVE-2015-1304を修正します。
  • 悪意ある加工を含んだWebサイトを開いた際に,same-originポリシーが機能しない問題がありました。
  • 対処方法:通常の場合,アップデータを適用することで問題を解決できます。
usn-2754-1:Thunderbirdのセキュリティアップデート
usn-2761-1:Linux kernelのセキュリティアップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2015-October/003138.html
  • Ubuntu 14.04 LTS用のアップデータがリリースされています。CVE-2015-7613を修正します。
  • 対処方法:アップデータを適用の上,システムを再起動してください。
  • 備考:ABIの変更を伴いますので,カーネルモジュールを自分でコンパイルしている場合は再コンパイルが必要です。カーネルモジュール関連のパッケージ(標準ではlinux-restricted-modules, linux-backport-modules, linux-ubuntu-modulesなど)は依存性により自動的にアップデートされるため,通常はそのままアップデートの適用を行えば対応できます。
usn-2762-1:Linux kernelのセキュリティアップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2015-October/003139.html
  • Ubuntu 15.04用のアップデータがリリースされています。CVE-2015-7613を修正します。
  • 対処方法:アップデータを適用の上,システムを再起動してください。
  • 備考:ABIの変更を伴いますので,カーネルモジュールを自分でコンパイルしている場合は再コンパイルが必要です。カーネルモジュール関連のパッケージ(標準ではlinux-restricted-modules, linux-backport-modules, linux-ubuntu-modulesなど)は依存性により自動的にアップデートされるため,通常はそのままアップデートの適用を行えば対応できます。
usn-2763-1:Linux kernel (Trusty HWE)のセキュリティアップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2015-October/003140.html
  • Ubuntu 12.04 LTS用のアップデータがリリースされています。CVE-2015-7613を修正します。
  • 対処方法:アップデータを適用の上,システムを再起動してください。
  • 備考:ABIの変更を伴いますので,カーネルモジュールを自分でコンパイルしている場合は再コンパイルが必要です。カーネルモジュール関連のパッケージ(標準ではlinux-restricted-modules, linux-backport-modules, linux-ubuntu-modulesなど)は依存性により自動的にアップデートされるため,通常はそのままアップデートの適用を行えば対応できます。
usn-2764-1:Linux kernel (Utopic HWE)のセキュリティアップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2015-October/003141.html
  • Ubuntu 14.04 LTS用のアップデータがリリースされています。CVE-2015-7613を修正します。
  • 対処方法:アップデータを適用の上,システムを再起動してください。
  • 備考:ABIの変更を伴いますので,カーネルモジュールを自分でコンパイルしている場合は再コンパイルが必要です。カーネルモジュール関連のパッケージ(標準ではlinux-restricted-modules, linux-backport-modules, linux-ubuntu-modulesなど)は依存性により自動的にアップデートされるため,通常はそのままアップデートの適用を行えば対応できます。
usn-2765-1:Linux kernel (Vivid HWE)のセキュリティアップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2015-October/003142.html
  • Ubuntu 14.04 LTS用のアップデータがリリースされています。CVE-2015-7613を修正します。
  • 対処方法:アップデータを適用の上,システムを再起動してください。
  • 備考:ABIの変更を伴いますので,カーネルモジュールを自分でコンパイルしている場合は再コンパイルが必要です。カーネルモジュール関連のパッケージ(標準ではlinux-restricted-modules, linux-backport-modules, linux-ubuntu-modulesなど)は依存性により自動的にアップデートされるため,通常はそのままアップデートの適用を行えば対応できます。
usn-2753-3:LXCの再アップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2015-October/003143.html
  • Ubuntu 14.04 LTS用のアップデータがリリースされています。LP#1501491を修正します。
  • usn-2753-1の修正に問題があり,bind mountを行う設定で,かつ,⁠/./」をパスに含んだコンテナが起動できない状態になっていました。
  • 対処方法:通常の場合,アップデータを適用することで問題を解決できます。
usn-2766-1:Spiceのセキュリティアップデート
  • https://lists.ubuntu.com/archives/ubuntu-security-announce/2015-October/003144.html
  • Ubuntu 15.04・14.04 LTS用のアップデータがリリースされています。CVE-2015-5260, CVE-2015-5261を修正します。
  • SPICEで接続したゲストOSが特定のふるまいをした場合,SPICEクライアント側で任意のコードの実行が可能な問題がありました。
  • 対処方法:アップデータを適用の上,QEMUゲストマシンを再起動してください。

著者プロフィール

吉田史(よしだふみひと)

Ubuntu Japanese Team Member株式会社創夢所属。システム管理を中心にWindows/PC Unixを併用している。Ubuntu Japanese Teamではパッケージサーバの管理や翻訳などの作業を担当。

コメント

コメントの記入