カーネルにディスクの空き容量を返すように指示する方法はありますか?/proc /の何かへの書き込みのように? ext4でUbuntu 11.10を使用する。
これはおそらく old で、非常に繰り返されるテーマです。私が開いたソースコードファイルをエディターが保存できなかったときにのみ、スペースが0になったことに気づきました。恐らく、フォルダーリストのサイズが0バイトになりました。
ユーザーとルートの両方から数百MBの大きなファイルを削除し、ハードリンクも行いました。
やる直前apt-get clean
/var/cache/apt/archivesに900MB以上ありましたが、現在は108KBしかありません:
# du
108 /var/cache/apt/archives
1時間後もまだ空き容量がなく、エディターで開いた貴重なファイルを保存できませんが、以下の違いに注意してください。
# sync; df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda4 13915072 13304004 0 100% /
助言がありますか?一部のサービス/プロセスを停止しましたが、ディスク領域をアクティブに消費している可能性があるユーザーを確認する方法がわかりません。
より詳しい情報
# dumpe2fs /dev/sda4
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 884736
Block count: 3534300
Reserved block count: 176715
Free blocks: 422679
Free inodes: 520239
First block: 0
Block size: 4096
Fragment size: 4096
lsof
をチェックして、開いたままのファイルがあるかどうかを確認します。スペースは閉じられるまで解放されません。
Sudo /usr/sbin/lsof | grep deleted
削除されたファイルが開いたままになっていることがわかります。
lsof
を使用して、スペースを消費しているが削除されたが開いているファイルを見つけます。
lsof | grep deleted | grep etilqs_1IlrBRwsveCCxId
chrome 3446 user 128u REG 253,2 16400 2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)
ファイルハンドルに対応する/proc/<pid>/fd/
のエントリを見つけます。
ls -l /proc/3446/fd/etilqs_1IlrBRwsveCCxId
lrwx------. 1 user unix 64 Feb 11 15:31 128 -> /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)
ここで、fdにcat /dev/null
を追加します。
cat /dev/null > /proc/3446/fd/128
Iノードはまだ開いているが、現在は長さが0であることに注意してください。
chrome 3446 user 128u REG 253,2 0 2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)
df
は、root
用に予約されたスペースを表示しません(root
として実行した場合でも):
# df -h
Filesystem Size Used Avail Use% Mounted on
...
/dev/optvol 625G 607G 0 100% /opt
...
予約スペースを4%に減らす
# tune2fs -m4 /dev/sda4
df -h
現在、4,500万無料を示しています。
5%に戻します
# tune2fs -m5 /dev/sda4
Ubuntuでは、ごみ箱を使用してファイルを削除した場合、ファイルが完全に削除されなかった可能性が高くなります。
ゴミ箱を空にした後でも、ファイルは再起動するまで~/.local/share/Trash/expunged
に残り、場合によってはさらに長くなります。
正当な理由はわかりませんが、スペースが足りなくなった場合は、削除したゴミ箱のファイルを常に手動でrm
処理します。
Sudo lsof | grep "(deleted)$" | sed -re 's/^\S+\s+(\S+)\s+\S+\s+([0-9]+).*/\1\/fd\/\2/' | while read file; do Sudo bash -c ": > /proc/$file"; done
説明:
Grep lsof
出力。削除されたファイルのみを抽出します。 Sed各行からプロセスIDとファイル記述子IDを抽出し、{pid}/fd/{fid}
の形式で文字列を作成します。Whileループで各ファイルに何も出力せず、空に設定します。
ここでsync
が役立つかどうか疑問に思いますが、ほとんどの(「多くの」?)システムではIIRCであるため、ファイルシステムは30秒ごとに同期されます。
カーネルログ(つまりdmesg
)をチェックして、何か問題があるかどうかを確認し、lsof
を実行して、大きな削除済みファイルがまだ開いているかどうかを確認します(実際には、削除済みファイルlsof
出力でそのようにマークされます)。
削除されたファイルがスペースを解放しない原因となる2つの理由(リンクされた質問でこれらの1つが指摘されています)
unlink()
edした)しかし、私は特定のそれが非常に多くのファイルで発生する可能性がある理由を知りません...
また、CentOS 6.3は、実際には空にできないゴミ箱を空にすることができます。実行するまでスペースを取り戻す方法が見つかりませんでしたrm -rf ~/.local/share/Trash/expunged/
。多くのひっかき傷を引き起こしました。