「予約ブロック率」を変更する方法

「予約ブロック率」を変更する方法

今カーネルに空きディスク容量を返すように指示する方法はありますか? /proc/に何かを書くのが好きですか? ext4でUbuntu 11.10を使用します。

これはおそらく古いそして非常に反復的なトピック。スペースがゼロになった後、編集者が私が開いたソースコードファイルを保存できないことがわかりました。

ユーザーとルートから100MBの大容量ファイルを削除し、ハードリンクも作成しました。

これを行う直前は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

答え1

lsof開いているファイルがあることを確認してください。スペースは閉じるまで解放されません。

sudo /usr/sbin/lsof | grep deleted

削除されたファイルがまだ開いているかどうかを知らせます。

答え2

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)

ここでcat /dev/nullfdと入力してください。

cat /dev/null > /proc/3446/fd/128

inodeはまだ開いていますが、長さは0です。

chrome     3446       user  128u      REG              253,2         0    2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)

答え3

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これで45M無料が表示されます。

  1. 私のファイルをすばやく保存
  2. 5%に復元

    # tune2fs -m5 /dev/sda4

答え4

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

注:
Greplsof出力は削除されたファイルのみを抽出します。 sedは各行からプロセスIDとファイル記述子IDを抽出し、フォーマットの文字列を生成します{pid}/fd/{fid}。 whileループを実行し、各ファイルに何も出力せずに空白に設定します。

関連情報