ファイルシステム
ブロックの列であるディスクの上に、 名前で辿れる階層構造を作る。
抽象#
| 生のディスク | ファイルシステムの抽象 |
|---|---|
| セクタ番号 | ファイル名 |
| 連続したブロック | 任意長のファイル |
| 平坦な空間 | ディレクトリの木 |
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 |
コピーオンライト方式は上書きせず新しい場所に書くので、 スナップショットが安価に取れる。
参考文献#
- Remzi H. Arpaci-Dusseau, Andrea C. Arpaci-Dusseau. Operating Systems: Three Easy Pieces. Arpaci-Dusseau Books, 2018.(全文公開) https://pages.cs.wisc.edu/~remzi/OSTEP/
- Andrew S. Tanenbaum, Herbert Bos. Modern Operating Systems, 4th ed. Pearson, 2014.
- Apple. Apple File System Reference. https://developer.apple.com/support/downloads/Apple-File-System-Reference.pdf