Ubuntu 22.04を運用していると、
- アプリが書き込み中のログファイルを誤って削除してしまった
- ファイルを消したのにディスク容量が減らない
- サービスを再起動しないと容量が戻らない
といったトラブルが発生することがあります。
これは 削除されたファイルをアプリがまだ掴んでいる(ファイルハンドルが残っている)状態 が原因です。
この記事では、Ubuntu22で
- 削除済みだが使用中のファイルを確認する方法
- そのファイルに書き込まれている内容を確認する方法
を解説します。
■ なぜ削除しても容量が減らないのか?
Linuxでは、
- rmするとディレクトリエントリは削除される
- しかしプロセスがファイルを開いたままだと
- 実体は解放されない
という仕組みになっています。
つまり、
見えないが中身は存在している状態
になります。
■ lsofコマンドで削除済みファイルを確認する
削除済みファイルを検索する
lsof | grep deleted
表示例
java 1234 user 5w REG 8,1 104857600 123456 /var/log/app.log (deleted)
確認ポイント
(deleted)が表示されている- PID → プロセス番号
- FD → ファイルディスクリプタ番号(例:5w)
このFD番号が重要になります。
■ 削除済みファイルの中身を見る方法
削除されたファイルは通常のパスでは参照できません。
しかし Linux には /proc という仕組みがあります。
/proc経由で中身を確認する
構文:
cat /proc/PID/fd/FD番号
例:
cat /proc/1234/fd/5
これで、削除されたファイルの現在の内容を確認できます。
リアルタイムで内容を確認する(ログ監視)
tail -f /proc/1234/fd/5
ログファイルのように追跡できます。
バックアップとして保存する
cp /proc/1234/fd/5 /tmp/recovered.log
これで削除済みファイルの内容を復元できます。
■ ディスク容量が減らない場合の確認
df -h
du -sh /var/log
差がある場合は削除済みファイルが疑われます。
■ 対処方法
安全な方法(推奨)
sudo systemctl restart サービス名
プロセス終了
kill 1234
※本番環境では注意
■ まとめ
| コマンド | 確認できる内容 | 用途 |
|---|---|---|
| lsof | grep deleted | 削除済みで使用中のファイル確認 | 全体確認 |
| lsof -p PID | 特定プロセス確認 | 個別確認 |
| cat /proc/PID/fd/FD | 削除済みファイルの中身確認 | 内容確認 |
| tail -f /proc/PID/fd/FD | リアルタイム監視 | ログ追跡 |
| cp /proc/PID/fd/FD | 内容復元 | バックアップ |
| systemctl restart | ハンドル解放 | 安全対処 |
✔ 実務で重要なポイント
- 削除しても即座に容量は戻らない
- /proc経由で内容確認・復元可能
- 本番では安易にkillしない
- ログローテーション設定を見直す
まずはこのコマンドで確認しましょう。
lsof | grep deleted

コメント