
有沒有辦法告訴核心現在歸還可用磁碟空間?就像寫入 /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
...
如何更改“保留區塊百分比”
將預留空間減少至 4%
# tune2fs -m4 /dev/sda4
df -h
現在顯示45M免費。
- 快速儲存我的文件
恢復到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 循環並對每個文件不輸出任何內容,並將它們設為空。