
t0mmy
2020年12月30日に参加
学習履歴詳細
Linuxのしくみ 増量改訂版 7章 ファイルシステム 読了
やったこと
- Linuxのしくみ 増量改訂版 7章 ファイルシステム 読了
学んだこと
Linuxのしくみ 増量改訂版 7章 ファイルシステム
学び
- 「メモリマップトファイル」という機能
- ファイルを、system call 経由ではなく、メモリ上にマッピングして扱う
- ファイルシステムの特徴
- ファイルシステムにアクセスする関数はPOSIX 準拠
- これにより、ファイルシステム毎に異なるお作法を吸収できる
- Btrfs の機能(特にスナップショット)
- 特殊なファイルシステム関連
- /proc や /sys は、特殊なファイルシステムを使用してマウントしている
- メモリ上にファイルシステムを構築する tmpfs
- メモリ上に構築するため、揮発性
気付き
- コピーオンライトは、「コピー時は参照を共有して、更新要求時に更新箇所だけコピーを取る」といった挙動全般を指す、汎用的な概念
- /tmp ディレクトリは、 tmpfs を使用することで、「PCをシャットダウンすると、ディレクトリ内のファイルが全消去される」という挙動を実現している
- 万能なファイルシステムは存在しない
- ユースケース、目的によって、適したファイルシステムは異なる
- ext4 ... ext2,ext3 から迅速に移行したい場合
- xfs ... inode を気にせずファイルを作成したい場合
- Brtfs ... マルチボリューム管理、復旧といった、Brtfs の機能でしか解決できない課題を抱えている場合
メモ
冒頭
ファイルシステムは、以下を請け負ってくれる。
- データを、ディスク上の何処に保存するか
- ディスク空き領域の管理
- データ書き込み時、データを壊さずに書き込むために必要
- ディスクに書き込んである情報の記憶
- ディスクからデータを読み込む際に必要
言い換えると、ファイルシステムが存在しない場合、上記をユーザが自分で管理する必要がある。
ファイルへのアクセス方法
ファイルシステムへのアクセスは、POSIX準拠の関数を使用する。
POSIX準拠の関数を使用することで、ファイルシステムの違いを吸収できる。
メモリマップトファイル
ファイルの内容をメモリに読み出しつつ、読みだしたメモリ領域を仮想アドレス空間にマップする機能。
通常、ファイルの読み書きは system call 経由で行うが、メモリマップトファイルで読みだしたファイルは、メモリを操作する感覚で読み書きする。
これにより、以下の利点がある。
- 読み書き速度向上(system call 経由の処理は重い)
- ページキャッシュの仕組みを活用出来る
- ユーザ空間にコピーを作成する必要がない
- デマンドページングの手法を用いて、大きなファイルでも「一部分を扱う」といった効率的な運用が可能
巨大なファイルを扱う際に、上記利点の恩恵が大きくなる。
- 言い換えると、小さなファイルを扱う場合は利点が少ない
- これは、ページサイズ(4KiB)でデータを扱うため
- 例)5KiBのファイルをマッピングすると8KiBが割り当てられ、3KiBが無駄となる
- => フラグメンテーションによる無駄が生じやすい
一般的なファイルシステム
ファイルシステム | 特徴 |
---|---|
ext4 | ext2,ext3という、昔からLinuxでよく使用されてきたファイルシステムから移行しやすい |
XFS | スケーラビリティに優れる |
Btrfs | 高機能 |
ファイルシステムの差別化点として、大きく以下の観点がある。
- 容量制限(クォータ)
- 特定のユーザ/プログラムが、ストレージ容量を使い過ぎないように、制限する機能
- 「重要な処理実行時に容量が足りない」といった事態を防ぐ措置。以下の種類が存在する
- ユーザクォータ : ファイルの所有者となるユーザ毎に容量を制限
- ディレクトリクォータ : 特定のディレクトリに容量を制限する
- サブボリュームクォータ : ファイルシステム内のサブボリュームという単位ごとに容量を制限
- ファイルシステムの整合性保持
- ファイルシステムの不整合発生(電源ダウンなど)を防止する仕組み。以下の仕組みが主流
- ジャーナリング : ジャーナリング領域という、特殊なメタデータ領域を用意して、整合性を保持する
- ext4とXFSにて採用
- コピーオンライト : バージョン管理のような感覚で更新情報を保存し、問題が発生したら作りかけのデータを破棄することで整合性を保持する
- Brtfs にて採用
- 最強の整合性保持手段は「定期的なバックアップ」
Btrfs が提供するファイルシステムの高度な機能
- スナップショット
- データを参照するメタデータを作成する
- マルチボリューム
- 複数のストレージデバイス/パーティションをまとめて一つの仮想的なストレージプールを構成し、そこからマウント可能なサブボリュームを切り出す
- ファイルシステム + LVMのような、ボリュームマネージャーと考えると分かりやすい(RAID構成も組める)
- データ破壊の検知と修復
- 全データについて、それぞれチェックサムを持つことで、データ破壊を検知
- RAID1 構成と組み合わせることで、復旧も可能
その他のファイルシステム
- tmpfs
- メモリ上にファイルシステムを構築する
- メモリアクセスのみ(≒ストレージアクセスが発生しない)のため、読み書きが非常に高速
- 電源を落とすと消えてしまう
- 残す必要のない、 /tmp や /var/run で活用できる
- デマンドページングのように、メモリ領域が必要になった時に、必要な分だけ、ページ単位でメモリを獲得する
[t0mmy@ ~]$ mount | grep tmpfs none on /mnt/wsl type tmpfs (rw,relatime) none on /mnt/wslg type tmpfs (rw,relatime) ...
ネットワークファイルシステム(NFS)
- 同一ネットワークに存在する、リモートホストのデータに、ファイルシステムI/Fでアクセスする仕組み
- リモート上のファイルシステムを、手元のマシンで(ファイルシステムを扱う感覚で)操作できる
- 複数マシンのストレージデバイスを束ねて、大きなファイルシステムを構成するCephFSのような仕組みも存在する
procfs
- OSの統計データを保存するファイルシステム
- 統計関連のコマンドは、procfsをマウントしている /proc 配下から情報を取得している
sysfs
- procfs に配置しないような、雑多な情報を配置するfs
- /sys/ にマウントされる
linux
2023年04月09日(日)
2.0時間