web-dev-qa-db-ja.com

削除されたファイルからスペースを解放するようにfsに指示する

カーネルにディスクの空き容量を返すように指示する方法はありますか?/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
74
Marcos

lsofをチェックして、開いたままのファイルがあるかどうかを確認します。スペースは閉じられるまで解放されません。

Sudo /usr/sbin/lsof | grep deleted

削除されたファイルが開いたままになっていることがわかります。

119

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)
38
BillQ

dfは、root用に予約されたスペースを表示しません(rootとして実行した場合でも):

# df -h
Filesystem            Size  Used Avail Use% Mounted on
...
/dev/optvol           625G  607G     0 100% /opt
...

「予約ブロック率」の変更方法

  1. 予約スペースを4%に減らす

    # tune2fs -m4 /dev/sda4

df -h現在、4,500万無料を示しています。

  1. ファイルをすばやく保存した
  2. 5%に戻します

    # tune2fs -m5 /dev/sda4

13
Marcos

Ubuntuでは、ごみ箱を使用してファイルを削除した場合、ファイルが完全に削除されなかった可能性が高くなります。

ゴミ箱を空にした後でも、ファイルは再起動するまで~/.local/share/Trash/expungedに残り、場合によってはさらに長くなります。

正当な理由はわかりませんが、スペースが足りなくなった場合は、削除したゴミ箱のファイルを常に手動でrm処理します。

8
kwarrick
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ループで各ファイルに何も出力せず、空に設定します。

6
Sepero

ここでsyncが役立つかどうか疑問に思いますが、ほとんどの(「多くの」?)システムではIIRCであるため、ファイルシステムは30秒ごとに同期されます。

カーネルログ(つまりdmesg)をチェックして、何か問題があるかどうかを確認し、lsofを実行して、大きな削除済みファイルがまだ開いているかどうかを確認します(実際には、削除済みファイルlsof出力でそのようにマークされます)。

削除されたファイルがスペースを解放しない原因となる2つの理由(リンクされた質問でこれらの1つが指摘されています)

  • 実際に削除されなかったファイル:他の場所にハードリンクされているファイルを削除した(より正確には、複数のリンクを持つファイルをunlink() edした)
  • まだ開いているファイル:開いているファイルは、ディレクトリエントリではなく、ファイル、inodes自体を使用してブックキープされています。エントリを削除しても、iノードはまだ開いている限り残ります。

しかし、私は特定のそれが非常に多くのファイルで発生する可能性がある理由を知りません...

5
njsg

また、CentOS 6.3は、実際には空にできないゴミ箱を空にすることができます。実行するまでスペースを取り戻す方法が見つかりませんでしたrm -rf ~/.local/share/Trash/expunged/。多くのひっかき傷を引き起こしました。

1
Biggles