TL

ファイルシステム

ディスクはただのバイトの並び。それを「ファイル」と「ディレクトリ」という人間に扱える形へ翻訳するのがファイルシステム。メタデータ・inode・ブロックで中身と位置を管理する。

中級ファイルシステムinodeストレージOS最終更新: 2026-06-04
TL;DR要点だけ先に
  • 1.ファイルシステムは ストレージの抽象化層:生のブロックを「名前付きのファイル」と「階層ディレクトリ」に見せる。
  • 2.中身(データブロック)と 情報(メタデータ/inode)は別管理。ファイル名はメタデータ側にあり、実体とは分離されている。
  • 3.突然の電源断に備えるのが ジャーナリング。ext4・NTFS・APFS など実装で機能(CoW・スナップショット等)が異なる。

なぜ必要か:生のディスクは扱えない

HDD や SSD を OS から見ると、それは 固定サイズのブロックが連番で並んだ巨大な配列 にすぎません。「3番目のブロックから始まる、長さ12KBのまとまりが report.pdf だ」という対応づけは、ディスク自身は知りません。

この「どのブロックが、どのファイルの、何番目か」を管理し、人間に 名前・フォルダ・サイズ・更新日時 として見せる翻訳装置がファイルシステムです。

  • ファイル = 名前のついたバイト列(中身そのものは構造を問わない)
  • ディレクトリ = ファイル名と実体を結びつける「対応表」。それ自体も特殊なファイル

仕組み:ブロック・inode・メタデータ

多くの Unix 系ファイルシステムは、ファイルを 2つに分けて 管理します。

[ ディレクトリエントリ ]      [ inode ]              [ データブロック ]
  "report.pdf" → inode 1234 → サイズ/所有者/日時 → #305, #306, #307 ...
  "memo.txt"   → inode 2087 → 権限/リンク数 ...   → #842, #843 ...
  • データブロック:ファイルの中身そのもの。固定サイズ(例:4KB)の単位で格納する。
  • inode(アイノード):1ファイルにつき1つの メタデータの入れ物。サイズ・所有者・権限・タイムスタンプ・そして 中身がどのブロックにあるか を持つ。
  • メタデータ:データ「について」の情報。inode に入る情報の総称。

注目すべきは、ファイル名は inode に入っていない こと。名前は「ディレクトリエントリ」側にあり、inode 番号を指すだけです。この分離が、ハードリンク(同じ実体に複数の名前)やリネームの高速さ(実体は動かさず対応表だけ書き換える)を生みます。

ファイル名はファイル自身が持っていない

「ファイルの名前を変える」とき、中身(データブロック)は1バイトも動きません。ディレクトリの対応表を書き換えるだけ だからです。だから巨大ファイルのリネームも一瞬で終わります。

パスとマウント:1本の木にまとめる

ファイルへの住所が パス です。Unix 系は単一のツリーで、すべてが /(ルート)から始まります。

/home/alice/report.pdf   ← 絶対パス(ルートからたどる)
./report.pdf             ← 相対パス(今いる場所から)

複数のディスクやパーティション、USB メモリなどを、この1本の木の どこかの枝(ディレクトリ)に接ぎ木する 操作が マウント です。例えば外付けドライブを /mnt/usb にマウントすると、以降 /mnt/usb/... でその中身にアクセスできます。

  • Unix 系:すべてが1つのツリーに統合される(マウントポイント方式)
  • Windows:C:D: のように ドライブごとに別ツリー を持つ

ジャーナリング:電源断からの保護

ファイルの書き込みは、たいてい 複数の更新の組み合わせ(データブロック+inode+空き領域管理…)です。この途中で電源が落ちると、中途半端な状態=ファイルシステムの破損 になりかねません。

ジャーナリング は、本番の更新前に「これからこう書く」という計画を ジャーナル(ログ)領域に先に記録 する仕組みです。途中でクラッシュしても、再起動時にログを見て やり直す/取り消す ことで、矛盾のない状態に復旧できます。

ジャーナル=中身の保証ではない

多くのジャーナリングは既定で メタデータの整合性だけ を守ります(ext4 の data=ordered など)。「ファイルシステムは壊れないが、書きかけだったファイルの 中身 は失われる」ことは起こり得ます。確実に残したいなら、アプリ側で fsync を呼んでディスクへの書き込み完了を待つ必要があります。

代表例:ext4 / NTFS / APFS

同じ「ファイルシステム」でも、実装ごとに設計思想と機能が違います。

観点ext4NTFSAPFS
主な環境LinuxWindowsmacOS / iOS
管理方式inode+ブロック(エクステント)MFT(マスターファイルテーブル)コンテナ+CoW(コピーオンライト)
整合性ジャーナリングジャーナリングCoW で常に整合(上書きしない)
スナップショットなし(LVM等で代替)ボリュームシャドウコピーネイティブ対応(一瞬・省領域)
得意枯れた安定性・実績アクセス権・暗号化との統合SSD最適化・暗号化標準

ポイントは アプローチの違い。ext4 と NTFS は「上書きしながらジャーナルで守る」古典的な堅実派。一方 APFS や Btrfs/ZFS は CoW(コピーオンライト) =既存データを上書きせず別の場所に書いてから参照を切り替える方式で、スナップショットや破損耐性を得意とします。

フォーマット形式は OS をまたぐと読めないことがある

ext4 で初期化したドライブは、Windows では標準では認識できません(逆も同様)。OS をまたいで共有するなら、互換性の高い exFAT などを選ぶのが安全です。「ディスクが壊れた」のではなく「その OS がその形式を知らない」だけ、というケースは非常に多いです。

つまずきポイント

  • 削除=即消滅ではない:ファイルを消しても、多くの場合 ディレクトリエントリとinodeの参照を外すだけ で、データブロックの中身はしばらく残る。だから復元ツールが成立する。
  • 「容量はあるのに保存できない」:データブロックに空きがあっても、inode を使い切る と新規ファイルを作れない(小さなファイルが大量にあると起きやすい)。
  • ブロックサイズと無駄:1ブロックが4KBなら、1バイトのファイルでも 4KBを占有 する(内部断片化)。小さいファイルが大量だと「実サイズ<ディスク使用量」になる。

まとめ

  • ファイルシステムは、生のブロック配列 を「ファイル・ディレクトリ」という人間向けの抽象に翻訳する層。
  • 中身(データブロック)情報(メタデータ/inode) は分離されており、ファイル名は実体ではなく対応表側にある。
  • 電源断対策が ジャーナリング、近年は CoW 方式(APFS など)も主流に。ストレージそのものをどう見せるかは 仮想メモリ と同じく「OSが作る巧妙な抽象」の好例です。

OS Article

ファイルシステムを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

ファイルシステム

比較で見る軸

難易度: intermediate / カテゴリ: OS / タグ数: 4

導入後に効く点

中身(データブロック)と 情報(メタデータ/inode)は別管理。ファイル名はメタデータ側にあり、実体とは分離されている。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
intermediate
カテゴリ
OS
タグ数
4

判断チェックリスト

  • 自社の用途が「ファイルシステム / inode」に近いか確認する。
  • 強みである「ファイルシステムは ストレージの抽象化層:生のブロックを「名前付きのファイル」と「階層ディレクトリ」に見せる。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

ファイルシステムinodeストレージOSファイルシステムinodeストレージOS
参考: 公式情報