ファイルシステム

データの組織化と管理

ファイルシステムとは

ファイルシステムは、データをファイルとディレクトリの階層構造で管理する仕組みです。 ブロックデバイス上のデータの配置、メタデータの管理、アクセス制御を担当します。

主要なファイルシステム

ext4

  • • Linuxの標準ファイルシステム
  • • 最大ファイルサイズ: 16TB、最大ボリューム: 1EB
  • • ジャーナリング対応で信頼性が高い
  • • エクステントベースのブロック管理

XFS

  • • 大容量・高性能向け
  • • RHEL/CentOS 7以降のデフォルト
  • • 並列I/Oに強い
  • • オンラインでの拡張が可能

Btrfs

  • • 次世代ファイルシステム
  • • スナップショット、RAID内蔵
  • • チェックサム検証
  • • 実験的機能あり(本番は注意)

ZFS

  • • 高信頼性、エンタープライズ向け
  • • スナップショット、圧縮、重複排除
  • • Linuxではカーネルモジュールで対応
  • • メモリ使用量が多い

inode

inodeは、ファイルのメタデータ(サイズ、権限、タイムスタンプ、データブロックの位置など)を 格納するデータ構造です。ファイル名はディレクトリエントリに保存され、inodeを指します。

inodeに含まれる情報

  • • ファイルタイプ
  • • パーミッション
  • • 所有者/グループ
  • • サイズ
  • • タイムスタンプ(atime, mtime, ctime)
  • • データブロックへのポインタ

inodeに含まれないもの

  • • ファイル名
  • • ファイルの内容

→ ハードリンクで同じinodeを複数の名前で参照可能

1# inode確認
2ls -i filename
3
4# inode詳細
5stat filename
6
7# inode使用状況
8df -i
9
10# 特定inodeのファイル検索
11find / -inum 12345

ジャーナリング

ジャーナリングは、メタデータの変更を先にジャーナル領域に記録し、 その後実際のファイルシステムに反映する仕組み。クラッシュ時の整合性を保護します。

data=journal

データとメタデータ両方をジャーナル。最も安全だが遅い

data=ordered

デフォルト。データ書き込み後にメタデータ

data=writeback

メタデータのみジャーナル。最も速いが危険

マウントオプション

1# マウント
2mount -t ext4 /dev/sdb1 /mnt
3mount -o ro /dev/sdb1 /mnt # 読み取り専用
4
5# 重要なマウントオプション
6# noatime - アクセス時刻を更新しない(パフォーマンス向上)
7# nodiratime - ディレクトリのatime更新なし
8# noexec - 実行不可
9# nosuid - setuidビット無効
10# nodev - デバイスファイル無効
11
12# /etc/fstab 例
13# /dev/sdb1 /data ext4 defaults,noatime 0 2
14
15# マウント確認
16findmnt
17cat /etc/mtab
18
19# ファイルシステム作成
20mkfs.ext4 /dev/sdb1
21mkfs.xfs /dev/sdb1

SRE/インフラ観点

ファイルシステム選択

  • 一般用途: ext4(安定性重視)
  • 大容量・高I/O: XFS
  • スナップショット必要: Btrfs/ZFS

トラブルシューティング

  • fsckでファイルシステムチェック(マウント解除必要)
  • tune2fs -lでext4のパラメータ確認
  • xfs_repairでXFSの修復