LPIC Level1 復習ラジオ 04:ファイルシステム
音声
目次
ファイルシステムとは
ファイルシステムは、ストレージ上のデータを、ファイルやディレクトリとして保存・管理するための仕組みです。
ファイルの中身だけでなく、所有者、グループ、パーミッション、ファイルサイズ、更新日時、データの保存場所なども管理します。
同じSSDやHDDでも、どのファイルシステムを作成するかによって、データの管理方法や利用できる機能が異なります。
| 要素 | 役割 |
|---|---|
| ストレージ | SSDやHDDなど、データを保存する装置 |
| パーティション | ストレージを論理的に分割した領域 |
| ファイルシステム | ファイルやディレクトリを管理する仕組み |
| マウントポイント | ファイルシステムを接続するディレクトリ |
ストレージを利用するまでの流れ
新しいストレージをLinuxで利用するときは、一般に次のような流れで準備します。
- Linuxがストレージをブロックデバイスとして認識する
- 必要に応じてパーティションを作成する
- パーティションなどにファイルシステムを作成する
- ファイルシステムをディレクトリへマウントする
- そのディレクトリを通してファイルを読み書きする
ストレージ
↓
パーティション
↓
ファイルシステム
↓
マウントポイント
↓
ファイルの読み書き
例えば、/dev/sdb1にext4を作成し、/dataへマウントすると、利用者は/dataを通してそのファイルシステムを利用します。
ext4
ext4は、Linuxで広く利用されているジャーナリングファイルシステムです。ext3を発展させ、より大きなファイルシステムへの対応や信頼性、性能に関する改善が加えられています。
多くのLinux環境で利用されており、汎用的なファイルシステムとして覚えておくとよいでしょう。
ジャーナリング
ジャーナリングは、主にファイルシステムの更新に関係する情報をログへ記録し、障害後の整合性回復を助ける仕組みです。
突然の電源断が起きても、すべての問題を必ず防げるわけではありませんが、ファイルシステムの復旧に必要な処理を減らすことができます。
作成コマンドの例
sudo mkfs.ext4 /dev/sdb1
mkfs.ext4は、指定したデバイスへext4ファイルシステムを作成します。既存データがあるデバイスへ実行すると失われる可能性があるため、対象の確認が必要です。
XFS
XFSは、高性能なジャーナリングファイルシステムです。大きなファイルや大規模なファイルシステムを扱えるよう設計され、並列的な処理や拡張性を重視しています。
Red Hat系のLinux環境などで標準的に採用されることがあり、サーバー用途でもよく見かけます。
ext4との大まかな整理
| ファイルシステム | 大まかな特徴 |
|---|---|
| ext4 | 幅広いLinux環境で使われる汎用的なファイルシステム |
| XFS | 大規模なデータや高い並列性を意識したファイルシステム |
作成コマンドの例
sudo mkfs.xfs /dev/sdb1
LPIC Level1の復習では、どちらも代表的なLinux向けジャーナリングファイルシステムであることと、環境によって標準採用が異なることを押さえます。
inode
inodeは、ファイルやディレクトリを管理するための情報です。ファイルシステム内では、それぞれのinodeがinode番号によって識別されます。
inodeが管理する主な情報
- ファイルの種類
- 所有者のUIDとグループのGID
- パーミッション
- ファイルサイズ
- アクセス時刻や更新時刻など
- ハードリンク数
- データの保存場所を参照するための情報
inodeに通常含まれないもの
ファイル名は、inodeそのものではなく、ディレクトリ側でinode番号と対応付けて管理されます。
ファイル名
↓
ディレクトリエントリ
↓
inode番号
↓
inode
↓
データ本体
確認コマンド
ls -li report.txt
stat report.txt
df -i
ls -i:inode番号を表示するstat:inode番号、サイズ、権限、時刻などを詳しく表示するdf -i:ファイルシステム全体のinode使用状況を表示する
空き容量が残っていても、利用可能なinodeがなくなると新しいファイルを作成できないことがあります。小さなファイルが大量に作成された環境では、容量だけでなくinode使用率も確認します。
UUID
UUIDは、Universally Unique Identifierの略です。ファイルシステムなどを識別するために使われる識別子です。
/dev/sdb1のようなデバイス名は、機器の追加や認識順序によって変わる可能性があります。そのため、/etc/fstabなどではUUIDを使って対象を指定することがあります。
UUID=8c12a0d5-0000-0000-0000-000000000000
UUIDの確認
lsblk -f
sudo blkid
| 指定方法 | 例 | 特徴 |
|---|---|---|
| デバイス名 | /dev/sdb1 |
分かりやすいが、認識順序で変わる可能性がある |
| UUID | UUID=... |
特定のファイルシステムを安定して指定しやすい |
| LABEL | LABEL=DATA |
人が意味を理解しやすい名前を付けられる |
マウントとアンマウント
マウントは、ファイルシステムをLinuxのディレクトリツリーへ接続する操作です。接続先となるディレクトリをマウントポイントと呼びます。
マウントの例
sudo mkdir -p /data
sudo mount /dev/sdb1 /data
この例では、/dev/sdb1上のファイルシステムを/dataへ接続します。
アンマウントの例
sudo umount /data
マウントを解除するコマンドはunmountではなく、umountです。
アンマウントできない場合
マウントポイントをプロセスが使用している場合は、target is busyなどと表示され、アンマウントできないことがあります。
findmnt /data
lsof +D /data
fuser -vm /data
自分のシェルのカレントディレクトリが/data内にある場合も使用中になります。まず別のディレクトリへ移動し、どのプロセスが使用しているかを確認します。
/etc/fstab
/etc/fstabは、ファイルシステムをどこへ、どの種類とオプションでマウントするかを記述する設定ファイルです。
起動時の自動マウントや、mountコマンドで省略指定を行うために利用されます。
基本形式
UUID=8c12a0d5-0000-0000-0000-000000000000 /data ext4 defaults 0 2
| フィールド | 例 | 意味 |
|---|---|---|
| 1 | UUID=... |
マウントするデバイスやファイルシステム |
| 2 | /data |
マウントポイント |
| 3 | ext4 |
ファイルシステムの種類 |
| 4 | defaults |
マウントオプション |
| 5 | 0 |
dumpによるバックアップ対象の指定 |
| 6 | 2 |
起動時のファイルシステムチェック順序 |
設定の確認
findmnt --verify
sudo mount -a
findmnt --verifyは、/etc/fstabの内容を検査するときに利用できます。mount -aは、通常/etc/fstabに記述された対象を実際にまとめてマウントするため、実行前に対象と影響を確認します。
マウントポイントの不存在、UUIDの入力間違い、ファイルシステム種別の間違いなどがあると、マウントに失敗する可能性があります。
確認コマンド
| コマンド | 主な確認内容 |
|---|---|
lsblk |
ディスク、パーティション、LVMなどのブロックデバイス構成 |
lsblk -f |
ファイルシステム種別、UUID、LABEL、マウント先 |
blkid |
デバイスのUUID、LABEL、ファイルシステム種別 |
findmnt |
現在のマウント関係や指定パスの所属先 |
df -h |
マウント済みファイルシステムの容量使用状況 |
df -i |
inodeの使用状況 |
stat |
ファイルのinode番号、権限、所有者、時刻など |
mount |
ファイルシステムをマウントする |
umount |
マウントを解除する |
確認の流れ
lsblk -f
findmnt
df -h
df -i
lsblk -fで、デバイスとファイルシステムの全体像を見るfindmntで、どこへマウントされているかを見るdf -hで、容量の使用状況を見る- 必要に応じて
df -iで、inodeの使用状況を見る
コマンドの詳細は、man mount、man fstab、man lsblk、man blkid、man findmntなどで確認できます。
30秒チェック
- ファイルシステムは、何を管理する仕組みでしょうか。
- ext4とXFSに共通する大きな特徴は何でしょうか。
- ファイル名は、通常inodeの中に保存されるでしょうか。
- inode使用量を確認するコマンドは何でしょうか。
- UUIDを利用する主な理由は何でしょうか。
- ファイルシステムをディレクトリへ接続する操作を何と呼ぶでしょうか。
- マウント解除に使うコマンドは何でしょうか。
- 自動マウント設定を記述する代表的なファイルは何でしょうか。
答え
- ストレージ上のデータを、ファイルやディレクトリとして保存・管理する仕組みです。
- どちらも代表的なジャーナリングファイルシステムです。
- 通常は保存されません。ディレクトリがファイル名とinode番号を対応付けます。
df -iです。- デバイス名の認識順序が変わっても、対象を安定して識別しやすいためです。
- マウントです。
umountです。/etc/fstabです。
要約
- ファイルシステムは、ファイル、ディレクトリ、所有者、権限、時刻、データ配置などを管理します。
- ext4は幅広く使われる汎用的なジャーナリングファイルシステムです。
- XFSは、大規模なデータや高い並列性を意識したジャーナリングファイルシステムです。
- inodeはファイルのメタデータを管理しますが、ファイル名は通常ディレクトリ側で管理されます。
df -hは容量、df -iはinode使用状況を確認します。- UUIDは、ファイルシステムを安定して識別するために利用されます。
- mountで接続し、umountで切り離します。
/etc/fstabには、マウント対象、マウントポイント、種類、オプションなどを記述します。
参考資料
- Linux Kernel Documentation:Filesystems in the Linux kernel
- Linux Kernel Documentation:ext4 General Information
- Linux Kernel Documentation:ext4 Data Structures and Algorithms
- Linux Kernel Documentation:ext4 Index Nodes
- Linux Kernel Documentation:ext4 Directory Entries
- Linux Kernel Documentation:XFS Filesystem Documentation
- Linux Kernel Documentation:The SGI XFS Filesystem
- fstab(5) — Linux manual page
- mount(8) — Linux manual page
- umount(8) — Linux manual page
- lsblk(8) — Linux manual page
- blkid(8) — Linux manual page
- findmnt(8) — Linux manual page
- df(1) — Linux manual page
- stat(1) — Linux manual page