Linuxで見えないファイルにディスクが圧迫され、空き容量が少ない状況があります。
duで見つからない場合のファイルを探す方法と復旧する方法の紹介です。
Linuxでゾンビプロセスは見かけますが、ステルスファイル(ゾンビファイル)も存在します。
実行コマンド
以下のコマンドを順番に実行していきます。
df -h
du -h –max-depth=2 / | sort -h
lsof | grep deleted
ディスクの状態確認
ディスク系の操作コマンド duは、ファイルのI/O readが発生し、マシンに負荷がかかることがあります。
本番運用のサーバなどでは、影響がないタイミングで実施しましょう。
dfでディスクの使用率を確認
dfコマンドでディスクの状況を確認します。
/(root)の使用率(Use%)が 100%になっています。
# $ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 30G 30G 1.5M 100% / ★使用率100%
du -hc コマンドで実際に使用量を確認します。
13GBしか使っていません。
# $ du -hc / (略) 13.0G total
du –max-depth でサイズが大きいファイルを探す
du –max-depth でサイズが大きいファイルを探します。
“/”(root)から、探していくと確実ですが、この操作はサーバに負荷をかけます。
本番運用などでは影響が少ないタイミングで実施しましょう。
見つからない場合は、lsof で探しましょう。
■ du –max-depth の利用パターン
$ du -h –max-depth=1 / | sort -h
$ du -h –max-depth=1 /work | sort -h
$ sudo du -h –max-depth=2 / | sort -h
# $ sudo du -h --max-depth=2 / | sort -h : 25M /etc 58M /usr/sbin 79M /var/lib 130M /usr/libexec 205M /usr/bin 225M /boot 315M /var/cache 399M /var 644M /usr/lib 1.1G /usr/lib64 1.6G /usr/share 3.6G /usr 4.3G /
lsofでステルスファイル(ゾンビファイル)を探す
du で探せないファイル=「見えないファイル」があるということです。
ファイルシステム的には削除されているのに、プロセスがファイルを掴んだままになっているケースです。
lsofを使って、「deleted」となっているファイルを掴んでいるプロセスを探します。
「 lsof | grep deleted 」
# COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME testpro1 1655 user1 1056u REG 8,2 7870666000 35608710 /wk/30/3.dat (deleted) testpro1 1655 user1 1533u REG 8,2 5970605568 408276 /wk/40/4.dat (deleted)
# lsof | grep deleted
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
testpro1 1655 user1 1056u REG 8,2 7870666000 35608710 /wk/30/3.dat (deleted)
testpro1 1655 user1 1533u REG 8,2 5970605568 408276 /wk/40/d_4.dat (deleted)
「COMMAND 」が、ファイルを掴んでいるプロセス名です。この例の場合「testpro1」
「SIZE/OFF」の部分がファイルのサイズです。
7870666000 = 7,870,666,000 = 7.8GB
何度か上書きされて、現在のファイルサイズがゼロの場合もあります。
$ ls -lah /wk/40/
-rw-r–r– 1 user1 grp01 0 Nov 11 11:30 4.dat
対処方法
ファイルを掴んでいるプロセスを停止するしかありません。
OSを再起動するか、該当のプロセスをkillする必要があります。
原因は?
a)OSのバグやプログラムのバグの可能性
b)操作ミス
Linux のファイルシステムでは、rm コマンドなどでファイルを削除したとしても、削除したファイルをプロセスが使用中であった場合、
ファイルシステム上から削除されずに du や ls コマンドで表示されなくなるだけということがあります。
あとがき
Linuxも10年以上使っていますが、初めて遭遇しました。
あまり情報も存在せずに焦りました。