ext4ファイルシステムはどのような姿をしているのか?
- 空のドライブで
mkfs.ext4 コマンドを実行すると、ドライブ上に ext4 ファイルシステムが構成される。
- この過程で、0x00 だけで構成された「何もない」状態から、ext4 ファイルシステムの目的を持ったバイト配列へと変化する。
- 小さな補助ドライブを仮想マシンに追加するか、ループデバイスとして構成した通常のファイルを使うことで作業を単純化している。
ループデバイスを使った実験
- ループデバイスの利用は簡単で、
losetup を使わなくても mount -o loop <foo_file> <bar_dir> と umount <bar_dir> だけでマウントおよびアンマウントできる。
dd コマンドを使い、/dev/zero からデータを読み込んで、64x1024 バイトサイズのブロックを 8 個持つファイルを作成する。
ext4ファイルシステム作成後の変化
mkfs.ext4 実行後のブロックファイルは、od コマンドの出力を通じて構造を確認できる。
- この出力から ext4 ファイルシステムの構造的な特徴を見ることができる。
可視化による ext4構造の理解
- 各ブロックを 1024x64 ピクセルとし、各ピクセルが 1 バイトを表す可視化画像を作成する。
- ext4 ファイルシステム作成後の画像では、
mkfs.ext4 によって追加された構造とデータの位置を確認できる。
- ext4 データと「ユーザー」データを区別するため、
/dev/urandom で生成した 1024 バイトのファイルをループデバイスにコピーし、可視化コードでこれを判別して色分け表示する。
ユーザーデータ追加後の可視化
- ユーザーデータがドライブにコピーされた後の画像では、ext4 データとユーザーデータを区別できる。
- さらに、ユーザーデータのファイルをドライブに 3 回コピーして、アニメーション GIF を作成する。
ext4とext2の比較
- ext4 ファイルシステムのアニメーションと比較するため、ext2 ファイルシステムのアニメーションも作成する。
GN⁺の意見
- この記事は、ext4 ファイルシステムが実際にどのようにドライブ上へ構成されるのかを視覚的に理解するのに役立つ。
- ユーザーデータとシステムデータを区別する可視化手法は、ファイルシステムの動作原理を学ぶうえで非常に有益である。
- ext4 と ext2 の比較を通じて、ファイルシステム間の違いを直感的に理解する機会を提供している。
1件のコメント
Hacker Newsのコメント
数年前のFOSDEMで、ext4ファイルシステムの本格的なグラフィカル可視化が行われていた。可視化は20分ごろから始まる動画がある。プロジェクターが使われていた淡い青色をうまく表現できていないため分かりにくいかもしれないが、ブログには正しくレンダリングされた動画がある。
コンピューターの利用を単純化しようとする多くの人たちの目標は、教育的な価値を持ちうるものを生み出してきた。たとえば、ハードドライブの活動を示す赤いランプのようなものは、ユーザーの好奇心を刺激し、情報を与えてくれる。高度な表示は隠しつつ、好奇心のある人のために残しておくのが良い折衷案かもしれない。
pixdというコマンドラインユーティリティが似たようなデータ可視化を提供しているが、時間に沿ったファイルシステムの変化を示すアニメーションGIFほどクールではない。ピクセルを行ごとに描くよりも、Hilbert曲線を使って配置するほうが役に立つかもしれない。ファイルシステムIOを可視化するnbdkitデモを興味深く見た。
ファイルシステムを可視化する実験を行った。成果物である
a.pngは逆変換可能で、有効な.ext4ファイルを再び得ることができる。データ可視化は、ディスクフォーマットが実際にディスク上へどのようにデータを配置しているのかという複雑さを理解する助けになる。たとえば、最小限の使用のために事前割り当てされたメタデータなどがある。空き容量が不足する状況で何が起きるのか気になるが、アニメーションはその前に止まってしまう。
もし作者がこのコメントを見ているなら、GIFを動画に変換して転送バイト数を節約し、ユーザーに動画コントロール(一時停止、スクラブ、速度調整など)を提供できる。
ffmpeg -i ext4.gif -pix_fmt yuv420p -c:v libx264 ext4.mp4innodb_rubyというツールセットは、InnoDB構造を可視化して学ぶのにとても役立つ。Kaitai IDEを使えば、各バイト(またはビット)ごとにさまざまなバイナリ形式を可視化できる。ext4向けの定義ファイルがあるのを覚えている。
この図を見て、メタデータを別のデバイスに保存できるファイルシステムがあるのか気になった。たとえば、データはHDDに、メタデータは関連するSSDドライブに保存するようなものだ。メタデータはメモリにキャッシュしやすいため、複雑さを増やしてまで得られる利点は大きくないのかもしれない。