ファイルシステム

ファイルシステム

執筆済 コンピュータOS

ブロックの列であるディスクの上に、 名前で辿れる階層構造を作る。

抽象#

生のディスク ファイルシステムの抽象
セクタ番号 ファイル名
連続したブロック 任意長のファイル
平坦な空間 ディレクトリの木

inode#

ファイルのメタデータを持つ構造体。

内容
種別、権限 通常ファイル、rw-r--r--
所有者 UID、GID
サイズ、時刻 atime、mtime、ctime
データブロックへのポインタ 直接・間接ブロック

ファイル名は inode に入っていない。 ディレクトリが「名前 → inode 番号」の対応表を持つ。

この分離により

  • 1 つの実体に複数の名前を付けられる(ハードリンク
  • 開いているファイルを削除しても、 閉じるまで実体が残る(リンクカウントが 0 になるまで)

ジャーナリング#

書き込みの途中で電源が落ちると、 メタデータが不整合になる。

先にやることをログに書いてから実際に書き込む。 再起動時にログを見て復旧できる。

1. ジャーナルに「これから何をするか」を書く
2. ジャーナルをコミットする
3. 実際のデータ・メタデータを書く
4. ジャーナルを消す

データベースの WAL とまったく同じ考え方。

主なファイルシステム#

FS 特徴
ext4 Linux の標準。ジャーナリング、エクステント
APFS macOS、iOS。コピーオンライト、スナップショット、暗号化
ZFS、Btrfs CoW、チェックサム、スナップショット
NTFS Windows

コピーオンライト方式は上書きせず新しい場所に書くので、 スナップショットが安価に取れる。

参考文献#

ノート一覧を閉じる