ファイルシステム
どこにどんなファイルが記録されているか管理する仕組み
データアクセスのためのもの
アクセス制御のためのもの
HDDのようなデータを記録する装置には
ファイルシステムの領域
どのクラスタにどのデータを記録したかなどを管理
ファイルシステムが壊れるとデータが残っていても読み出すことができなくなる
HDDのデータを削除しても消えるのはファイルシステムの記録のみ
ファイルシステムのindexを削除している
ファイル復元ソフトを使うと、クラスタ領域のデータを調べて復元できる
全部ちゃんと消すのは「データ抹消ソフト」
クラスタの領域
データを保存するための領域
どんなに小さなファイルでも必ず1つのクラスタを使用するので、一つ一つのクラスタサイズが大きいとHDDが無駄になりやすい
一つのフォルダの中に沢山のファイルをいれると、検索の際に遅くなる
1000以上あるとだいぶ多い
サブフォルダを作って分類すべき
ジャーナル機能
UNIXでは1990年代初頭
更新に係る処理が完了したかどうかのフラグをココのファイルごとに持っている
ファイルシステムが壊れたときに全ファイルのインデックスとデータの照合をしなくても、フラグがないところだけを走査するだけで済む
アロケーション方式
エクステントアロケーション方式
1つのファイルを連続したハードディスク領域に配置する
ファイルを最初から最後まで順にアクセスしていくシーケンシャルアクセスでは速い
代わりに、追加や削除を繰り返すと分散してしまう
ABC連続してたところにABCを消して、DEFGを追加しようとなるとGはどこか別のところに置かないといけなくなる
ブロックアロケーション方式
複数のハードディスク領域に分散して配置する
シーケンシャルアクセスでは遅いが、ファイルの作成や追加や更新を繰り返してもパフォーマンスの劣化がない
ディレクトリ(マウントポイント)に自分のツリーを付け加える(syspafo p99)
df コマンド
df -T 現在マウントされているファイルタイプを確認する
参考
ファイルシステムのない世界
ストレージデバイスの機能は「ストレージデバイス内の指定したアドレスに対して所定のサイズのデータを読み書きする」のみ
自分でストレージデバイスのどの部分にどのデータを置いていたかを覚えていないといけない
そしてそこに対して書き込んだり、そこから読み出したりする必要がある
ストレージデバイスの空き領域も意識しないといけない
ファイルシステム
どの場所にどういうファイルを配置するかなどのデータ構造を仕様として決めておく
ファイルシステムの仕様
0GB地点からファイルのリストを記録
1つのファイルに対して、名前、場所、サイズを記録
手順
1. カーネル内の全ファイルシステム共通処理が捜査対象のファイルシステムを判別
2. そのファイルシステムが動作
3. 読み書きがある場合はデバイスドライバに処理を依頼
4. どのファイルシステムだとしてもデバイスドライバがデータの読み書きをする
ファイルシステムのデータ
データ
文書、画像、動画、プログラムなどの内容
メタデータ
補助的な情報
ファイルの名前、ストレージで場以上の位置、サイズ、種類、時刻情報、権限情報など
用途ごとに使用できるファイルシステムの容量を制限する機能
種類
ユーザクォータ
ファイルの所有者となるユーザごとに容量を制限
例えば、特定のユーザーのせいで/homeがいっぱいになることを防ぐ
ext4,XFSは使える
ディレクトリクォータ
特定のディレクトリごとに容量を制限
ext4, XFSは使える
サブボリュームクォータ
ファイルシステム内のサブボリュームという単位ごとに容量を制限
不整合に対する対策
ユーザーには認識で泣きないジャーナル領域を用いる
ext4, XFS
手順
1. 更新に必要なアトミックな処理の一覧(ジャーナルログ)をジャーナル領域に書き出す
2. ジャーナル領域の内容に基づいてファイルシステム内の内容を更新
3. 更新が終わればジャーナルログを削除する
途中で強制終了された場合、ジャーナルログを参照することで↑2からやり直すことができる
コピーオンライト
手順(図がないとわかりにくい)
https://gyazo.com/d27fad67b928a572a79acd7992a537e1
1. 更新後のリンクが貼られた新しいファイルを作成
2. rootからのリンクを張り替える
3. もともとあったファイルを削除
ファイルシステムの整合性のある状態を復元する
不整合が起きたデータが削除されたりするので、あまり良くない
ハードウェア上のデバイスをファイルとして表現したもの
アクセスできるのはrootのみ
/dev以下にある
種類
キャラクタデバイス
$ ls -lの最初文字がc
読み書きはできるが、シークはできない
例えば
ターミナル
キーボード
マウス
ブロックデバイス
$ ls -lの最初文字がb
単なるファイルの読み書き以外に、ランダムアクセスができる
ストレージの所定の位置の所定のデータにアクセスできる
例えば
HDD
SSD
Catalinaのfs
参考