ファイルシステムについて
Linuxの仕組みを読んでいますが、ファイルシステムについては初めて学ぶので、 精読してブログにまとめてみました。
[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識
- 作者: 武内覚
- 出版社/メーカー: 技術評論社
- 発売日: 2018/02/23
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
「ファイルシステム」について一部行幅が厳しいところは特に断りなくFSと略していますのでご了承ください。
ファイルシステムとは
- ファイル実態の配置場所(アドレス)やディスクの空き容量の状況などを管理する
- ファイルシステムはカーネルモードで動作する
- ファイルシステム用のシステムコールを仲介し、ディスクアクセスを行う
- create,open,close,read,lseek,writeなど
- ストレージアクセスへのラッパーのようなもの
Linuxのファイルシステム
- ディレクトリを扱う機構がある
- ツリー構造である
- ツリーの根はファイルシステムルートなどと呼ばれる
- ツリー構造である
ファイルシステムの種類は複数ある
- ex4
- XFS
- Btrfs
- ReiserFS
システムコールは以下の順序で処理される
ファイルシステムの主な機能
メタデータでデータに関する情報を管理
ファイルシステムは「データ」と「メタデータ」を扱う メタデータはデータに付加された情報(データ種別、時刻、権限)などを扱う
- dfコマンドで出てくる容量にはメタデータの容量も含まれている。
クォータでファイルの使用容量を制限
不整合への対策
ジャーナリング
データ更新中に障害が起きた場合
この機構によりアトミック性が保証される
コピーオンライト
コピーオンライト方式のFS(Btrfsなど)はファイル編集するごとに ディスクの元のアドレスではなく、新しいアドレスに書き込む
- 障害発生時に古いアドレスへのリンクがバックアップの役割を果たす
デバイスファイル
Linuxではデバイスもファイルと同様のシステムコールで扱うことができる デバイスファイルにはキャラクタデバイスとブロックデバイスの2種類がある。
ls -lの実行結果の最初の文字がcであればキャラクタデバイス、bであればブロックデバイスらしい。
キャラクタデバイス
キャラクタデバイスは読み出しと書き込みができるがシークはできない。
- 端末
- キーボード
- マウス
確かにそれらしいものはls -lの頭文字がcになっている。
ファイル書き込みっぽいデバイスの扱いとしてこんな実験ができる
echo hello >/dev/pts/0
※>
の先はps aux
で出てくる起動中のコンソールを指定すること。
これの結果はecho hello
と同じ。*1
普通は>
の先に出力結果を書き込む先のファイル名がくるが、ここにコンソールが指定できる。
ブロックデバイス
ファイルの読み書き以外にランダムアクセス(シーク)ができる。
他のファイルシステム
いずれもファイルシステムなので同じAPIで呼び出せることが特徴。
仮装ファイルシステム
procs
- プロセスの状態をファイルにアクセスするように閲覧できる
cat /proc/<pid>/XXXX
- XXXの部分には以下のものが使える
- maps:メモリマップ
- cmdline:コマンドライン引数
- などなど
- ps,sar,top,freeなどのコマンドはprocfsから情報を取得している
sysfs
- デバイスやドライバの情報をファイルをアクセスするように閲覧できる