昨夜の予想よりも多くの出力データを生成するいくつかのプログラムを実行しましたが、最終的にルートext4パーティションがいっぱいになりました。問題のプロセスを終了し、不要になった外部データの削除を開始しましたが、次のような結果が出ました。
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 3.4G 0 3.4G 0% /dev
tmpfs 690M 11M 680M 2% /run
/dev/sda4 810G 806G 0 100% /
tmpfs 3.4G 0 3.4G 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 3.4G 0 3.4G 0% /sys/fs/cgroup
/dev/sda1 476M 26M 450M 6% /boot/efi
tmpfs 690M 0 690M 0% /run/user/1000
ご覧のとおり、「Used」が「Size」より4GB少ないにもかかわらず、空き容量はありません。これがいくつかのプロセスによって開かれた削除されたファイルであると仮定し、lsofを使用して最大のファイルが64MB /memfd:pulseaudioであることを確認しました。
混乱してシステムを再起動しましたが、問題が解決されるとほぼ確信していました。ただし、df の出力は変更されません。
どうやってこれができますか?どうすれば解決できますか?
$ uname -a
Linux ... 4.16.0-1-amd64 #1 SMP Debian 4.16.5-1 (2018-04-29) x86_64 GNU/Linux
$ cat /etc/issue
Debian GNU/Linux buster/sid \n \l
答え1
ext4
ルートとして実行されるプロセスによってのみ埋められる「予約済みブロック」という概念があります。出力ではdf
これを考慮できます。
たとえば、あるシステムでは、次のようにdf
表示されます。
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 30626752 14557916 14490036 51% /
ここで、30626752 - 14557916 - 14490036は1578800に等しく、これは予約ブロックのデフォルト数の合計の約5%に相当します。予約済みブロック率を0に変更2fs調整(tune2fs -m 0 /dev/sda1
)表示されている数字が変更されましたdf
。
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 30626752 14557924 16052444 48% /
(数字はまだ正確に一致しません。16384個の1kブロックが計算されていませんが、これは何らかの理由で「使用済み」と計算されないいくつかの内部ファイルシステム構造のためだと思います。)