如何更改“保留區塊百分比”

如何更改“保留區塊百分比”

有沒有辦法告訴核心現在歸還可用磁碟空間?就像寫入 /proc/ 中的某些內容?使用帶有 ext4 的 Ubuntu 11.10。

這大概是一個老的以及非常重複的主題。在點擊 0 空間後,我只注意到我的編輯器無法保存我打開的源代碼文件,令我恐懼的是,這些文件現在在文件夾列表中的大小為 0 字節,我繼續瘋狂刪除。

我從用戶和 root 中刪除了 100 MB 的大文件,並且還做了一些硬連結。

就在我這樣做之前,apt-get clean/var/cache/apt/archives 中有超過 900MB,現在只有 108KB:

# du
108 /var/cache/apt/archives

一小時後仍然沒有可用空間,無法儲存在編輯器中開啟的珍貴文件,但請注意以下差異:

# 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/null進入 fd:

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 循環並對每個文件不輸出任何內容,並將它們設為空。

相關內容