Oracle Solaris ZFS 管理ガイド

ZFS の概要

ZFS ファイルシステムは、ファイルシステムの管理方法を根底から変える革命的な新しいファイルシステムであり、現在利用できるほかのファイルシステムにはない機能と特長を備えています。ZFS は堅牢で、スケーラブルで、管理が容易です。

プールされた ZFS ストレージ

ZFS では、物理ストレージを管理するために、「ストレージプール」という概念を使用します。従来のファイルシステムは、1 つの物理デバイス上に構築されていました。複数のデバイスへの対応とデータの冗長性を実現するために、「ボリュームマネージャー」の概念が導入されました。ファイルシステムを変更しなくても複数のデバイスが利用できるように、1 つのデバイスの表現を使用しています。このファイルシステムの設計は、仮想化したボリューム上の物理的なデータの配置を制御する手段を用意していないため、ファイルシステムをより複雑にし、ある面でのファイルシステムの進化を阻んできました。

ZFS では、ボリューム管理は一切不要です。ZFS では、仮想化されたボリュームを作成する代わりに、デバイスをストレージプールに集約します。ストレージプールは、ストレージの物理特性 (デバイスのレイアウト、データの冗長性など) を記述したもので、ファイルシステムを作成できる任意のデータストアとして機能します。ファイルシステムが個々のデバイスに制約されなくなり、デバイスのディスク領域をプール内のすべてのファイルシステムで共有することができます。ファイルシステムのサイズを事前に決定する必要はなくなりました。ファイルシステムのサイズは、ストレージプールに割り当てられたディスク領域内で自動的に拡張します。新しいストレージを追加すると、何も操作しなくても、プール内のすべてのファイルシステムで追加したディスク領域をすぐに使用できます。ストレージプールは多くの点で、仮想メモリーシステムと同様に機能します。DIMM メモリーをシステムに追加するとき、メモリーを構成するコマンドを実行したり、個別のプロセスにメモリーを割り当てたりすることをオペレーティングシステムによって強制されるわけではありません。追加したメモリーは、システムのすべてのプロセスによって自動的に使用されます。

トランザクションのセマンティクス

ZFS はトランザクションファイルシステムです。つまり、ファイルシステムの状態がディスク上で常に一定であることを意味します。従来のファイルシステムは、データをその場所で上書きします。このため、たとえば、データブロックが割り当てられてからディレクトリにリンクされるまでの間にシステムの電源が切断された場合、ファイルシステムは不整合な状態のままになります。従来、この問題は fsck コマンドを使用して解決されていました。このコマンドの機能は、ファイルシステムの状態を確認および検証し、処理中に不整合が見つかった場合はその修復を試みることでした。このようなファイルシステムの不整合の問題は管理者を大いに苦労させ、fsck コマンドを使ってもすべての問題が修正されるとは限りませんでした。最近では、ファイルシステムに「ジャーナリング」の概念が導入されました。ジャーナリングプロセスでは各処理がそれぞれのジャーナルに記録されるため、システムのクラッシュが発生したときに処理を安全に「再現」できます。このプロセスでは、不必要な負荷が発生します。これはデータを 2 回書き込む必要があるためで、多くの場合、ジャーナルを正しく再現できないなどの新しい問題が発生します。

トランザクションファイルシステムでは、データは「コピーオンライト」セマンティクスを使用して管理されます。データが上書きされることはなく、一覧の処理が完全に確定されるか、完全に無視されます。そのため、電源が突然切断されたりシステムがクラッシュしても、ファイルシステムが破壊されることはありません。直近に書き込まれたデータが失われることがあっても、ファイルシステム自体の整合性は常に保持されます。また、O_DSYNC フラグを使用して書き込まれる同期データは、書き込まれてから戻ることが常に保証されているため、失われることがありません。

チェックサムと自己修復データ

ZFS では、すべてのデータおよびメタデータが、ユーザーが選択したチェックサムアルゴリズムを使って検証されます。チェックサム検証の機能を持つ従来のファイルシステムでは、ボリューム管理層および従来のファイルシステムの設計のために、強制的にブロック単位でチェックサムが計算されていました。従来の設計では、完全なブロックを誤った位置に書き込むといった特定の障害の結果として、データは不正だがチェックサムエラーにならないという状況が生じる可能性があります。ZFS のチェックサムはそのような障害を検出し、障害モードから正常に回復できるような方法で格納されます。すべてのチェックサム検証とデータの回復は、ファイルシステム層でアプリケーションに透過的に実行されます。

また、ZFS は自己修復データも備えています。ZFS は、さまざまなレベルのデータ冗長性を備えたストレージプールをサポートします。不正なデータブロックが検出されると、ZFS は別の冗長コピーから正しいデータを取得し、不正なデータを正しいデータで置き換えて修復します。

優れたスケーラビリティー

ZFS ファイルシステムの重要な設計要素はスケーラビリティーです。ファイルシステム自体は 128 ビットで、25 京 6000 兆 (256 クアデリリオン) ゼタバイトの記憶域に対応しています。すべてのメタデータは動的に割り当てられるため、i ノードを事前に割り当てたり、初回作成時にファイルシステムのスケーラビリティーを制限する必要はありません。すべてのアルゴリズムは、スケーラビリティーを考慮して記述されています。ディレクトリには、248 (256 兆) のエントリを格納することができ、ファイルシステムの数およびファイルシステムに格納できるファイル数の制限はありません。

ZFS スナップショット

スナップショット」とは、ファイルシステムまたはボリュームの読み取り専用コピーのことです。スナップショットは、短時間で簡単に作成できます。最初のスナップショットのために、プール内のディスク領域が余分に消費されることはありません。

有効なデータセット内のデータが変更されると、スナップショットは古いデータを参照し続けるためのディスク領域を消費します。その場合、スナップショットのため、古いデータの領域は解放されずプールに戻されません。

簡素化された管理

ZFS の重要な特長として、管理モデルが大幅に簡素化されていることが挙げられます。ZFS では、階層構造のファイルシステムレイアウト、プロパティーの継承、およびマウントポイントと NFS 共有セマンティクスの自動管理により、複数のコマンドを使用したり、構成ファイルを編集したりしなくても、ファイルシステムを簡単に作成できます。割り当て制限や予約を設定したり、圧縮の有効/無効を切り替えたり、大量のファイルシステムのマウントポイントを管理したりする操作を、1 つのコマンドだけで簡単に実行することができます。デバイスの検査や交換のために、一連のボリュームマネージャーコマンドを別途学習する必要はありません。ファイルシステムスナップショットのストリームを送受信できます。

ZFS では、ファイルシステムを階層構造で管理するので、割り当て制限、予約、圧縮、マウントポイントなどのプロパティーを簡単に管理できます。この管理モデルでは、ファイルシステムが重要な役割を果たします。ファイルシステム自体は新しいディレクトリの作成と同じようにとても簡単に操作できるので、ユーザー、プロジェクト、ワークスペースなどのために個別のファイルシステムを作成することをお勧めします。この設計を利用して、きめの細かい管理ポイントを定義できます。