ファイルシステムには様々な機能がありますが、本記事では以下を紹介します。
ファイルシステムの機能 | 説明 |
---|---|
ファイル割り当て方法 | ファイルの内容をストレージのブロックに割り当てる方法 |
シンボリックリンク | ファイルのショートカット |
スナップショット | 任意の時点でのストレージのデータを記録 |
パーミッション | ファイルのアクセス許可 |
ジャーナリング | ファイルとストレージのデータの整合性を保つ |
Linux カーネルの機能 | |||
---|---|---|---|
ファイルシステムの種類
Linux の主なファイルシステムは、以下のとおりです。
ファイルシステムの種類 | 説明 |
---|---|
ext4 | RHEL6/CentOS6 のデフォルト。安定してる |
XFS | RHEL7,8/CentOS7,8 のデフォルト。断片化に対する影響がない |
NFS | 同じネットワーク間でファイル共有に使用 |
SMB | Windows とのファイル共有に使用 |
以降では、多くのファイルシステムに共通する機能を紹介します。
ファイル割り当て方法
ファイル割り当て方法には以下の3つが存在します。
- 連続割り当て
- 連結リスト割り当て
- インデックス割り当て
上記の mai ファイル (6ブロック分のデータ) で、連続割り当てを説明します。
連続割り当ての特徴
- メリット○: ストレージのアクセス速度が速い(1度ブロックを探すと順番に読み込むだけ)
- デメリット✗: ストレージでフラグメンテーションが発生
上図の jeep ファイルで、連結リスト割り当てを説明します。
連結リスト割り当ての特徴
- メリット○:
- ストレージのフラグメンテーションの影響を受けない
- デメリット✗:
- 読み込み速度が遅い(アクセスするブロックのアドレスを毎回探す必要がある)
- ダイレクトアクセスできない (前からポインターを順番に辿る必要がある)
上図の jeep ファイルで、インデックス割り当てを説明します。
- インデックスブロックのアドレスを 19 番に決定 (index block)
- 空いてるブロックにデータを割り当てる
- 2のブロックのアドレスをインデックスブロックに記録
- 全てのデータを割り当てるまで、2と3を繰り返す
インデックス割り当ての特徴
まとめ:割り当て方法の比較
シンボリックリンク
シンボリックリンクは ln -s <リンク元> <リンク先> で作成できます。
symbolic_test
lrwxrwxrwx 1 ec2-user ec2-user 7 7月 23 10:40 symbolic_test -> /bin/ls
bin boot dev etc home... var
スナップショット
バックアップと似てますが、スナップショットは取得時点でポインタを取得するだけです。
データブロックをコピーしないため、バックアップより短時間で取得可能です。
スナップショットの種類
スナップショットの種類には以下の2つが存在します。
- Copy on Write (CoW)
- Redirect on Write (RoW)
- スナップショットを取得 = ブロックのポインタを取得
- スナップショットを取得したブロックを更新する時、更新前のブロックをコピーして退避
- スナップショットのポインタを「スナップショット予約済みスペース」に変更
ちなみに Windows では VSS(ボリュームシャドウコピー)と呼ばれてます。
- スナップショットを取得 = ブロックのポインタを取得
- スナップショットを取得したブロックを更新する時、更新後のデータは「スナップショット予約済みスペース」に書き込む
- 元のデータのポインタを「スナップショット予約済みスペース」に変更
パーミッション
Linux は複数のユーザーが同時に操作することを想定されているため、ユーザーごとにファイルのアクセス権限を設定できます。
パーミッションについては、以下の記事にまとめています。
ジャーナリングファイルシステム
ジャーナリングの動作
ジャーナリングは、以下の手順でファイルを更新します。
以降では、mv (ファイルを移動するコマンド) を用いてジャーナリングの動作を説明します。
1. メインメモリのメタデータを更新
/hoge ディレクトリに、foo, bar のファイルが存在すると仮定します。
まず、メインメモリ上のメタデータを更新するため、ストレージのデータに変化はありません。
この時点で電源が落ちると、ストレージに書き込まれていないので mv 実行前に戻るだけです。
2. メタデータの更新内容をストレージ上のジャーナルログに書き出す
/hoge/bar を /bar に移動させるメタデータをジャーナルログに書き込みます。
この時点で電源が落ちると、次の2パターンに分かれます。
- ジャーナルログ書き込みが途中の場合:ジャーナルログの内容を全て廃棄します
- ジャーナルログ書き込みが完了した場合:問題ないので、以下の3に進みます
実際にファイルを更新
ジャーナルログに従って、ファイルを更新のトランザクション処理を行います。
この時点で電源が落ちると、次の2パターンに分かれます。
ジャーナルログを廃棄
この時点で電源が落ちると、ジャーナルログが残っている場合は破棄します。
関連情報
Linux カーネルの機能 | |||
---|---|---|---|