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が無駄となる
    • => フラグメンテーションによる無駄が生じやすい

参考 : https://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%9E%E3%83%83%E3%83%97%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB

一般的なファイルシステム

ファイルシステム 特徴
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時間