Yabu.log

色々勉強するブログです。

ファイルシステムについて

Linuxの仕組みを読んでいますが、ファイルシステムについては初めて学ぶので、 精読してブログにまとめてみました。

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

ファイルシステム」について一部行幅が厳しいところは特に断りなくFSと略していますのでご了承ください。

ファイルシステムとは

Linuxファイルシステム

ファイルシステムの主な機能

メタデータでデータに関する情報を管理

ファイルシステムは「データ」と「メタデータ」を扱う メタデータはデータに付加された情報(データ種別、時刻、権限)などを扱う

  • 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の部分には以下のものが使える
    • ps,sar,top,freeなどのコマンドはprocfsから情報を取得している
  • sysfs

    • バイスやドライバの情報をファイルをアクセスするように閲覧できる

高機能なファイルシステムBtrfs

他のファイルシステム(ext4,XFS)と比べて高機能 以下の機能がある

  • マルチボリューム

    • LVMのような機能が使えるらしい*2
  • スナップショット

    • シャローコピーのようなスナップショットの採取ができる
    • 他のFSでは時間のかかるディープコピーしかできないものもある
  • RAID
  • 破損検知/修復機能
    • 上記のライドを使って復旧ができる
    • メタデータ+データの破損検出、破棄、修復ができるのは現段階でBtrfsのみらしい

*1:指定したのが実行したコンソールと同一の場合。違うコンソールを指定するとそこに文字出力になる。

*2:LVMとかこの辺は用語解説がなく何が書かれているかよくわからない