從保持打開的已刪除文件中釋放磁碟空間的最佳方法
嗨,我有許多文件已被刪除,但由於某種原因,與已刪除文件關聯的磁碟空間無法使用,直到我明確終止佔用磁碟空間的文件的程序
$ lsof /tmp/ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME cron 1623 root 5u REG 0,21 0 395919638 /tmp/tmpfPagTZ4 (deleted)
上面刪除的文件佔用的磁碟空間會導致問題,例如嘗試使用 tab 鍵自動完成文件路徑時出現錯誤
bash: cannot create temp file for here-document: No space left on device
但是在我執行
kill -9 1623
該 PID 的空間後,我不再收到錯誤消息。我的問題是:
- 為什麼第一次刪除文件時沒有立即釋放這個空間?
- 取回與已刪除文件關聯的文件空間的最佳方法是什麼?
並請讓我知道我使用的任何不正確的術語或與這種情況有關的任何其他相關資訊。
在 unice 上,文件名只是指向文件所在記憶體的指針(inode)(可以是硬碟驅動器,甚至是 RAM 支持的文件系統)。每個文件記錄指向它的連結數:連結可以是文件名(複數,如果有多個指向同一個文件的硬連結),也可以是每次打開文件時,程序實際上持有指向的“連結”同一個空間。
只有在沒有剩餘連結的情況下,空間才會被物理釋放(因此,不可能到達它)。這是唯一明智的選擇:當文件被使用時,如果其他人不能再訪問它並不重要:你正在使用它,直到你關閉它,你仍然可以控制它——你甚至不會注意到文件名消失或移動或其他。這甚至用於臨時文件:一些實現創建一個文件並立即取消連結它,因此它在文件系統中不可見,但創建它的程序正在正常使用它。Flash 外掛特別喜歡這種方法:所有下載的影片文件都保持打開狀態,但文件系統不顯示它們。
所以,答案是,雖然程序仍然打開了文件,但您不應該期望收回空間。它沒有被釋放,它正在被積極使用。這也是應用程序在使用完文件後應該真正關閉文件的原因之一。在正常使用中,您不應該認為該空間是免費的,而且這也不應該很常見 - 除了故意取消連結的臨時文件之外,您不應該真的有任何文件考慮未使用,但仍處於打開狀態。嘗試查看是否有一個過程經常這樣做,並考慮如何使用它,或者只是找到更多空間。