プレゼンテーション
ファイルシステムは、現代のコンピューターの基盤のひとつです。どのようなオペレーティング・システムにも不可欠な部分であるため、気づかれないことがよくあります。しかし、Btrfs のような最新のファイルシステムは、コンピュータをより使いやすくする多くの素晴らしい機能を提供します。例えば、無意味にファイルを圧縮したり、増分バックアップのための信頼できるベースを作成したりできます。
この記事では、Btrfs ファイルシステムがどのように動作し、どのような機能を持っているのかについて、ハイレベルな概要を説明します。この記事では技術的な詳細には触れませんし、基本的な実装にも触れません。
ファイルシステムとは
簡単に言えば、ファイルシステムによって、PCはディスクに保存されたデータを見つけることができます。これは些細なことのように聞こえるかもしれませんが、実際には、さまざまな種類の不揮発性ストレージ・デバイスは、1970年代にPCが発明されたときと本質的には変わっていません。
は、アドレス指定可能な最小の記憶単位です。PC上の各ファイルの内容は、複数のブロックに格納されています。ブロックのサイズは通常4096バイトです。これはハードウェアとその上のソフトウェアに依存します。
ファイルシステムは、いわゆるinodeによって、多数の記憶ブロックからファイルの内容を見つけることができます。inodeは、ファイルに関する情報を特別にフォーマットされたブロックに記録します。これには、ファイルのサイズ、ファイルの内容を構成するブロックの場所、アクセス規則などが含まれます。
以下にinodeの図を示します:
inodeの構造はファイルシステムの機能に大きな影響を与えるため、様々なファイルシステムの重要なデータ構造の1つです。このため、各ファイルシステムは独自の inode 構造を持っています。もっと詳しく知りたい方は、Btrfs ファイルシステムの inode 構造について、次の リンク ください。 各フィールドが何を意味するか、より詳しく見るには ext4 ファイルシステムの inode 構造をご覧ください。
コピーオンライトファイルシステム
Btrfs が ext4 よりも優れている点のひとつは、ファイルシステムであるということです。ファイルが変更されてディスクに書き戻されるとき、意図的に元の場所に書き戻すのではなく、コピーされてディスクの新しい場所に保存されます。この意味で、Cowは、ファイルの書き込みがストレージの別のブロックにリダイレクトされることから、単純に「リダイレクト」の一種と考えることができます。
これは無駄のように聞こえますが、そうではありません。というのも、ファイルシステムがどのように動作しようとも、変更されたデータはディスクに書き込まれるからです。btrfs は単に、データが占有されていないブロックに書き込まれるようにするだけなので、古いデータはそのまま残ります。唯一の本当の欠点は、この動作によってファイルが他のファイルシステムよりも速く断片化することです。日々のコンピュータの使用でその違いに気づくことはほとんどないでしょう。
ファイル履歴の保存に加えて、CoWファイルシステムは、例えば停電のためにファイルシステムのトランザクションが完了しなかったとしても、常に一貫した状態にあります。これは、ファイルシステムのメタデータの更新も書き込み時に複製されるためです。ファイルシステム自体が上書きされることはないため、割り込みによって部分的に書き込まれた状態になることはありません。
ファイルの書き込み時間コピー
ファイル名は inode へのポインタと考えることができます。ファイルに書き込むとき、Btrfs は変更されたファイルの内容のコピーと新しい inode を作成し、古い inode は変更せずにファイル名を新しい inode を指すようにします。以下はこの点を説明するための仮想的な例です:
ここでは、myfile.txtに3バイトが追加されています。従来のファイル・システムは、新しいコンテンツを含むように真ん中のデータ・ブロックを更新しますが、CoWファイル・システムは古いデータ・ブロックを変更せず、変更されたデータとメタデータを新しい場所に書き込みます。ファイル全体ではなく、変更されたデータ・ブロックだけがコピーされることに注意してください。
新しいコンテンツを書き込むための空きブロックがない場合、Btrfs は古いファイル・バージョンが占有していたデータ・ブロックから領域を取り戻します。
ディレクトリのコピーオンライト
ファイルシステムから見ると、ディレクトリはファイルの特殊なタイプにすぎません。通常のファイルとは異なり、ファイルシステムはデータブロックの内容を直接解釈します。ディレクトリには、アクセス権や変更時間を記録するための独自のメタデータがあります。最も単純な形では、ディレクトリに存在するデータは inode 参照のリストで、それぞれが別のファイルやディレクトリです。しかし、最近のファイルシステムは、少なくとも1つのファイル名と対応するinode参照をディレクトリエントリに格納します。
ファイルに書き込むとinodeのコピーが作成され、それに応じてその内容が変更されることはすでに述べました。本質的に、これは無関係な新しいinodeを作成します。変更されたファイルをファイルシステムから見えるようにするために、このファイルへの参照を含むすべてのディレクトリエントリが更新されます。
これは再帰的な処理です!ディレクトリはそれ自体がinodeを持つファイルだからです。ディレクトリ内の項目を変更すると、そのディレクトリファイルの新しい inode が作成されます。これは再帰的にファイルシステムのルートまでファイルシステムツリーをたどります。
ですから、古いディレクトリへの参照が保持され、それらのディレクトリが削除されたり上書きされたりしない限り、古い状態のファイルシステム・ツリーをたどることが可能です。これがスナップショットです。
続報をお楽しみに
Btrfsは単なる牛のファイルシステムではありません。耐障害性、修復、管理のしやすさに焦点を当てながら、先進的な機能を実装することを目指しています。本シリーズの今後の記事は、これらの機能に特化します。
- サブボリューム - ファイルシステム内のファイルシステム
- スナップショット
- 圧縮 - トランスペアレントにストレージスペースを節約
- クォータ・グループ - ファイル・システム・サイズの制限
- RAID - mdadm の代替設定
これは Btrfs の機能を網羅したものではありません。もし利用可能な機能の包括的な概要が知りたければ、 や チェックしてください。
概要





