テクノロジー · 実用ガイド

Linuxで「No space left on device」なのにdfに空きがある?失敗した正確なパスから調べる

ENOSPC は、見ているファイルシステムが満杯だという証明ではありません。失敗したパスを実際の mount と storage backend に結び付け、block、inode、削除済み open file、quota、overlay、固有制限を順に確認します。

Linuxで「No space left on device」なのにdfに空きがある?失敗した正確なパスから調べる
オリジナルイラスト:df に正確な path を問い合わせる Watch at Ease

「No space left on device」は一つの失敗した操作が返した error です。引数なしの df で見た filesystem が失敗対象だとも、足りない資源が byte だけだとも証明しません。

正確な失敗 path を保存し、それを含む mount、filesystem type、storage boundary を特定します。同じ path で block と inode を確認し、証拠に応じて open-deleted file、hidden mount、quota、container layer、filesystem allocation に分岐します。

cleanup 前に失敗 path を保存

完全な error、command、timestamp、destination path を保存します。application が path を隠す場合は通常の diagnostic log を増やすか、一度だけ限定再現します。

write が host、container、bind mount、CI workspace、別 storage service のどこで起きたかを記録します。同じ名前でも backend が異なる場合があります。

df に正確な path を問い合わせる

失敗 path または存在する親に対して df を実行し、Filesystem、Type、Size、Avail、Mounted on を保存します。同じ path で inode も確認します。

path が未作成なら最も近い既存の親まで戻り、mount view も保存して、別 /var、bind mount、overlay、network filesystem を / と混同しないようにします。

block capacity と inode capacity を分離

block が尽きた場合は対象 filesystem 内だけで大きな consumer を探し、retention と owner を確認してから削除します。意図なく別 mount を scan しません。

inode が尽きて block が残る場合は、大量の small file を作る directory を特定します。byte capacity の追加が inode を増やすとは限りません。

証拠を失わず df と du の差を説明

df の allocation が directory scan より大きい場合、process が保持する deleted file を確認します。PID、service、fd、size を保存してから restart、reload、truncate を判断します。

mount point の下に以前の file が隠れていないかも確認します。production unmount は service を止めるため、maintenance window または安全な namespace を使います。

quota・container・filesystem 固有 limit を確認

block と inode が正常なら、実際の writer の user/group/project quota と reserved allocation を確認します。container は storage root、driver、writable layer、host filesystem を保存します。

その後、metadata、snapshot、copy-on-write reservation、pool capacity を filesystem 固有 tool で確認します。ext4 の判断を XFS、Btrfs、ZFS などへ流用しません。

証明した一分岐だけ修復して同じ write を検証

policy に沿う expiry、log rotation、確認済み open file の解放、正しい volume の拡張、根拠ある quota 変更、documented migration から最小で可逆な手段を選びます。

元の write を一度だけ再試行し、同じ target path で capacity、inode、quota headroom を確認します。一時的な減少と持続的回復を区別します。

Linuxで「No space left on device」なのにdfに空きがある?失敗した正確なパスから調べる
オリジナルイラスト:quota・container・filesystem 固有 limit を確認 Watch at Ease