Linux

Linux 見えないファイルで空き容量不足。duで見つからないファイルをlsofで探す

*記事内に商品プロモーションを含む場合があります

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  Nov 11 11:30 4.dat

対処方法

ファイルを掴んでいるプロセスを停止するしかありません。

OSを再起動するか、該当のプロセスをkillする必要があります。

原因は?

a)OSのバグやプログラムのバグの可能性

b)操作ミス

Linux のファイルシステムでは、rm コマンドなどでファイルを削除したとしても、削除したファイルをプロセスが使用中であった場合、
ファイルシステム上から削除されずに du や ls コマンドで表示されなくなるだけということがあります。

あとがき

Linuxも10年以上使っていますが、初めて遭遇しました。
あまり情報も存在せずに焦りました。