LPIC Level1 復習ラジオ 23:ファイルシステム総復習

投稿日:2026-07-11

音声

※ AI音声で読み上げます

目次

  1. ファイルシステムの全体像
  2. inode
  3. ファイル名とディレクトリエントリ
  4. inodeの確認と枯渇
  5. UUID・LABEL・PARTUUID
  6. ブロックデバイスと識別情報の確認
  7. /etc/fstab
  8. mount・umount・findmnt
  9. ハードリンク
  10. シンボリックリンク
  11. 30秒チェック
  12. 要約

ファイルシステムの全体像

ファイルシステムは、ストレージ上のデータをファイルやディレクトリとして管理する仕組みです。単にデータ本体を保存するだけでなく、所有者、パーミッション、時刻、サイズ、配置情報なども管理します。

要素主な役割確認例
ブロックデバイスディスクやパーティションなど、ファイルシステムを置く土台lsblk
ファイルシステムファイル、ディレクトリ、メタデータを管理するext4、XFS、vfatなど
inodeファイルの種類、所有者、権限、サイズ、時刻などのメタデータを保持するstatls -li
ディレクトリエントリファイル名とinode番号を対応付けるls -i
マウントポイントファイルシステムをディレクトリツリーへ接続する場所findmnt
UUID・LABELファイルシステムを識別するために使うlsblk -fblkid

ファイルを開く大まかな流れ

  1. パスをディレクトリごとにたどる
  2. ディレクトリエントリから、名前に対応するinode番号を得る
  3. inodeからファイルの種類、権限、データの位置などを確認する
  4. 権限があれば、ファイルのデータを読み書きする

Linuxでは、複数のファイルシステムを一つのディレクトリツリーへマウントして利用します。利用者からは一つのツリーに見えても、//boot/homeなどが別々のファイルシステムになっている場合があります。

inode

inodeは、ファイルシステム内のファイルやディレクトリを管理するための情報です。inode番号は、そのファイルシステム内でinodeを識別します。

inodeに含まれる主な情報

  • ファイルの種類
  • パーミッション
  • 所有者のUIDとグループのGID
  • ファイルサイズ
  • ハードリンク数
  • アクセス時刻、更新時刻、状態変更時刻など
  • データブロックを参照するための情報

inodeに通常含まれないもの

  • ファイル名
  • ファイルが表示される完全なパス名
stat report.txt
ls -li report.txt

statでは、inode番号、ファイルサイズ、ブロック数、リンク数、UID、GID、パーミッション、各種時刻などを確認できます。

inode番号の範囲

inode番号が一意なのは、そのファイルシステムの中だけです。別のファイルシステムでは、同じinode番号が使われることがあります。

stat -c 'device=%d inode=%i links=%h name=%n' report.txt

ファイルを厳密に区別するときは、inode番号だけでなく、どのファイルシステムやデバイスに属しているかも考える必要があります。

ファイル名とディレクトリエントリ

ディレクトリは、名前とinode番号の対応を持ちます。この対応をディレクトリエントリと考えると、リンクの仕組みを理解しやすくなります。

ファイル名 report.txt
        ↓
ディレクトリエントリ
        ↓ inode番号 12345
inode 12345
        ↓
データ本体

ファイル名を変更した場合

mv report.txt report-old.txt
ls -li report-old.txt

同じファイルシステム内で単純に名前を変更した場合、一般にディレクトリエントリの名前が変わり、inodeとデータ本体は同じままです。

ファイルを削除した場合

rm report-old.txt

rmは、基本的にはファイル名とinodeの対応を取り除きます。最後のハードリンクが削除され、さらにそのファイルを開いているプロセスもなくなると、inodeやデータ領域が再利用可能になります。

開いたまま削除されたファイル

プロセスがファイルを開いたまま、そのファイル名が削除されることがあります。この場合、名前からは見えなくても、プロセスが閉じるまでデータ領域が解放されないことがあります。

lsof +L1

dfでは使用量が多いのに、duで大きなファイルが見つからない場合は、削除済みのファイルをプロセスが開いたままにしていないか確認する方法があります。

inodeの確認と枯渇

ファイルシステムには、データを保存する領域だけでなく、inodeを管理するための資源があります。空き容量が残っていても、利用可能なinodeがなくなると、新しいファイルを作成できないことがあります。

容量とinode使用量

df -h
df -i
コマンド主な確認内容
df -hファイルシステムのデータ領域の使用量
df -iinodeの総数、使用数、空き数、使用率
du -sh ディレクトリ指定したディレクトリ以下のファイルが使用する容量

inode枯渇が起きやすい例

  • 非常に小さなログや一時ファイルが大量に作られた
  • メールキューやキャッシュに小さなファイルが蓄積した
  • アプリケーションが不要なセッションファイルを削除していない

inode番号から探す

find /var -xdev -inum 12345 2>/dev/null

-inumはinode番号で検索します。-xdevを付けると、検索開始地点とは異なるファイルシステムへ降りないようにできます。

同じinodeを持つ名前を確認する

find /data -xdev -samefile /data/report.txt

ハードリンクが複数ある場合は、同じinodeを参照する複数のパスが表示されます。

UUID・LABEL・PARTUUID

ストレージを指定するとき、/dev/sdb1のようなデバイス名だけでなく、UUIDやLABELなどの識別子を利用できます。

識別子主な対象
UUIDファイルシステムUUID=8c12a0d5-...
LABELファイルシステムに付けた人間向けの名前LABEL=DATA
PARTUUIDパーティションテーブル上のパーティションPARTUUID=1a2b3c4d-...
PARTLABELGPTなどのパーティションに付けた名前PARTLABEL=LinuxData
デバイス名カーネルが認識したデバイスノード/dev/sdb1

なぜUUIDを使うのか

/dev/sdb1のような名前は、機器の追加や認識順序の変化によって変わる可能性があります。UUIDを使うと、特定のファイルシステムをより安定して指定できます。

UUIDとPARTUUIDの違い

  • UUIDは、ext4やXFSなどのファイルシステムに付く識別子
  • PARTUUIDは、パーティションテーブルのパーティションに付く識別子
  • ファイルシステムを作り直すと、そのUUIDが変わる場合がある
  • パーティションを作り直すと、PARTUUIDが変わる場合がある

UUIDやLABELは実用上便利ですが、複製したディスクなどでは重複する可能性があります。絶対に重複しないと決めつけず、必要に応じて確認します。

ブロックデバイスと識別情報の確認

デバイス、ファイルシステム種別、UUID、LABEL、マウント先を確認する代表的なコマンドは、lsblkblkidfindmntです。

lsblk

lsblk
lsblk -f
lsblk -o NAME,SIZE,FSTYPE,UUID,PARTUUID,LABEL,MOUNTPOINTS

lsblkは、利用可能なブロックデバイスをツリー状に確認するのに向きます。-fでは、ファイルシステム種別、UUID、LABEL、マウント先などを表示します。

blkid

sudo blkid
sudo blkid /dev/sdb1
blkid -s UUID -o value /dev/sdb1

blkidは、デバイスからファイルシステム種別やUUIDなどの属性を確認します。一般ユーザーではキャッシュされた情報が表示される場合があるため、直接確認したいときは権限にも注意します。

findmnt

findmnt
findmnt /home
findmnt --target /var/log
findmnt --source UUID=8c12a0d5-0000-0000-0000-000000000000

findmntは、現在マウントされているファイルシステムを表示したり、特定のパスがどのファイルシステムに属するかを確認したりできます。

役割の違い

コマンド向いている確認
lsblkディスク、パーティション、ファイルシステム、マウント先の全体像
blkid指定デバイスのUUID、LABEL、TYPEなどの属性
findmnt現在のマウント関係や、指定パスが属するファイルシステム

/etc/fstab

/etc/fstabは、通常どのファイルシステムを、どこへ、どのオプションでマウントするかを記述する設定ファイルです。

基本形式

UUID=8c12a0d5-0000-0000-0000-000000000000 /data ext4 defaults 0 2
フィールド意味
1UUID=...マウントするデバイスやファイルシステム
2/dataマウントポイント
3ext4ファイルシステム種別
4defaultsマウントオプション
50dumpによるバックアップ対象の指定
62起動時のファイルシステムチェック順序

第6フィールドの基本

  • 0:起動時のチェック対象にしない
  • 1:通常はルートファイルシステム
  • 2:その他のチェック対象ファイルシステム

代表的なマウントオプション

オプション主な意味
defaultsカーネルやファイルシステムの標準的なオプションを使う
ro / rw読み取り専用 / 読み書き可能
auto / noautomount -aの対象にする / 対象にしない
user一般ユーザーによるマウントを許可する
nofailデバイスが存在しない場合でも、失敗を致命的に扱わない
exec / noexec実行ファイルの実行を許可 / 制限する
suid / nosuidSUID・SGIDの効果を許可 / 無効化する
dev / nodevデバイスファイルを解釈 / 解釈しない

変更後の確認

sudo cp /etc/fstab /etc/fstab.bak
findmnt --verify
sudo mount -a
findmnt /data

mount -aは、noautoを除く/etc/fstabの対象をマウントします。誤った設定は起動障害につながることがあるため、バックアップを取り、再起動前に検証します。

systemdを使う環境では、/etc/fstabの内容がマウントユニットへ変換されます。変更後に必要であれば、systemctl daemon-reloadでsystemdの設定を再読み込みします。

mount・umount・findmnt

マウントは、ファイルシステムをLinuxのディレクトリツリーへ接続する操作です。アンマウントは、その接続を外す操作です。

一時的にマウントする

sudo mkdir -p /mnt/data
sudo mount /dev/sdb1 /mnt/data
findmnt /mnt/data

ファイルシステム種別やオプションを指定する

sudo mount -t ext4 -o ro /dev/sdb1 /mnt/data
sudo mount -o remount,rw /mnt/data

/etc/fstabを利用する

sudo mount /data
sudo mount -a

/etc/fstabに登録済みなら、デバイスまたはマウントポイントだけを指定してマウントできます。

アンマウントする

sudo umount /mnt/data
sudo umount /dev/sdb1

コマンド名はunmountではなく、umountです。

busyでアンマウントできない場合

findmnt /mnt/data
lsof +f -- /mnt/data
fuser -vm /mnt/data
  • シェルのカレントディレクトリがマウントポイント内にないか
  • プロセスがファイルを開いていないか
  • 別のファイルシステムがその下へマウントされていないか

マウントポイントの下に元からあるファイル

空でないディレクトリへ別のファイルシステムをマウントすると、元のファイルは削除されませんが、マウント中は見えなくなります。アンマウントすると再び見えるようになります。

ハードリンク

ハードリンクは、同じinodeを参照する別のファイル名です。元の名前と新しい名前のどちらが本物という区別はなく、どちらも同じファイルを表します。

作成と確認

echo 'Linux' > original.txt
ln original.txt hardlink.txt
ls -li original.txt hardlink.txt
stat original.txt hardlink.txt

二つの名前は同じinode番号を持ち、リンク数が増えます。一方の名前から内容を書き換えると、もう一方から見ても同じ内容が変化します。

元の名前を削除する

rm original.txt
cat hardlink.txt

original.txtを削除しても、hardlink.txtが残っていればinodeへの参照は残るため、データへアクセスできます。

主な制約

  • 異なるファイルシステムをまたいで作成できない
  • 通常、ディレクトリに対するハードリンクは作成できない
  • 同じinodeを共有するため、所有者やパーミッションも共通する

異なるファイルシステムをまたげない理由

inode番号はファイルシステム内でのみ一意です。ハードリンクは同じinodeを直接参照するため、別のファイルシステムにあるinodeを参照できません。

操作結果
一方の名前で内容を変更同じinodeとデータを参照するため、他方から見ても変わる
一方の名前を削除リンク数が減る。別のハードリンクがあればデータは残る
別ファイルシステムへ作成作成できない

シンボリックリンク

シンボリックリンクは、別のファイルやディレクトリのパス名を内容として持つ、独立した特殊ファイルです。ソフトリンクとも呼ばれます。

作成と確認

ln -s /var/log/syslog syslog-link
ls -l syslog-link
readlink syslog-link
readlink -f syslog-link

ls -lでは、syslog-link -> /var/log/syslogのように参照先が表示されます。シンボリックリンク自身は、参照先とは異なるinodeを持ちます。

シンボリックリンクの特徴

  • ファイルにもディレクトリにも作成できる
  • 異なるファイルシステムをまたげる
  • 参照先が存在しなくてもリンク自体は作成できる
  • 参照先が削除または移動されると、リンク切れになることがある

絶対パスと相対パス

ln -s /opt/app/config.yml config-absolute
ln -s ../config/config.yml config-relative

絶対パスのリンクはルートディレクトリから参照先をたどります。相対パスのリンクは、シンボリックリンクが置かれているディレクトリを基準に解決されます。

リンク切れを確認する

ls -l config-relative
readlink config-relative
namei -l config-relative
find . -xtype l

find -xtype lは、参照先をたどれないシンボリックリンクを探す用途に使えます。

リンク自体を削除する

rm syslog-link
unlink syslog-link

リンク名を削除しても、通常は参照先のファイルそのものは削除されません。末尾のスラッシュを付けるとコマンドの解釈が変わることがあるため、リンク自体を操作するときは表示を確認します。

ハードリンクとの比較

項目ハードリンクシンボリックリンク
参照するもの同じinode別のパス名
inode番号元の名前と同じ参照先とは異なる
別ファイルシステム不可可能
ディレクトリへの作成通常不可可能
参照先削除後他のハードリンクから利用可能リンク切れになる
作成コマンドln TARGET LINKln -s TARGET LINK

30秒チェック

  1. inodeに通常保存されていない情報は、ファイル名とパーミッションのどちらでしょうか。
  2. inode番号は、システム全体とファイルシステム内のどちらで一意でしょうか。
  3. 空き容量があるのに新しいファイルを作成できない場合、何の枯渇を確認するでしょうか。
  4. df -hdf -iは、それぞれ何を確認するでしょうか。
  5. UUIDとPARTUUIDは、主に何を識別するでしょうか。
  6. /etc/fstabの第2フィールドは何でしょうか。
  7. /etc/fstabの第6フィールドで、ルートファイルシステムに通常指定する値は何でしょうか。
  8. ハードリンク同士のinode番号は同じでしょうか、異なるでしょうか。
  9. 異なるファイルシステムをまたげるのは、ハードリンクとシンボリックリンクのどちらでしょうか。
  10. シンボリックリンクの参照先が削除された場合、そのリンクはどうなるでしょうか。
答えを表示
  1. ファイル名。パーミッションはinodeの情報です。
  2. ファイルシステム内
  3. inodeの枯渇
  4. df -hはデータ領域の容量、df -iはinode使用量
  5. UUIDはファイルシステム、PARTUUIDはパーティション
  6. マウントポイント
  7. 通常は1
  8. 同じ
  9. シンボリックリンク
  10. リンク切れ、またはdangling symlinkになる

要約

  • ファイルシステムは、データ本体だけでなく、inodeやディレクトリエントリなどを使ってファイルを管理します。
  • inodeはファイルの種類、所有者、権限、サイズ、時刻、リンク数などを持ちますが、通常ファイル名は持ちません。
  • ディレクトリエントリが、ファイル名とinode番号を対応付けます。
  • inode番号が一意なのは、そのファイルシステム内です。
  • df -hは容量、df -iはinode使用量を確認します。
  • UUIDはファイルシステム、PARTUUIDはパーティションを主に識別します。
  • lsblk -fは全体像、blkidは属性、findmntはマウント関係の確認に向きます。
  • /etc/fstabは、デバイス、マウントポイント、種別、オプション、dump、チェック順序の六つのフィールドで記述します。
  • ハードリンクは同じinodeを参照し、別ファイルシステムをまたげません。
  • シンボリックリンクはパス名を保持し、別ファイルシステムやディレクトリも参照できます。
  • ハードリンクはinodeへ、シンボリックリンクはパスへつながると整理します。

参考資料