Disk-Usage

告訴 fs 立即從已刪除文件中釋放空間

  • May 8, 2017

有沒有辦法告訴核心現在歸還可用磁碟空間?就像在 /proc/ 中寫東西一樣​​?使用帶有 ext4 的 Ubuntu 11.10。

這可能是一個古老且非常重複的主題。當我的編輯器無法保存我打開的原始碼文件時,只有在點擊 0 空間後才注意到,令我恐懼的是,現在文件夾列表中的字節大小為 0,我開始大肆刪除。

我從使用者和根目錄中刪除了 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

檢查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)

現在,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)

引用自:https://unix.stackexchange.com/questions/34140