問題
Linux下檔案被删除後,空間沒有被釋放
原因
在Linux或者Unix系統中,通過rm或者檔案管理器删除檔案将會從檔案系統的目錄結構上解除連結(unlink).然而如果檔案是被打開的(有一個程序正在使用),那麼程序将仍然可以讀取該檔案,磁盤空間也一直被占用。
解決方法
首先我們獲得一個已經被删除但是仍然被應用程式占用的檔案清單:
1.$ /usr/sbin/lsof|grep deleted
2.ora 25575 data 33u REG 65,65 4294983680 31014933 /oradata/DATAPRE/UNDOTBS009.dbf (deleted)
從lsof的輸出中,我們可以發現pid為25575的程序持有着以檔案描述号(fd)為33打開的檔案/oradata/DATAPRE/UNDOTBS009.dbf。
在我們找到了這個檔案之後可以通過結束程序的方式來釋放被占用的空間。
通過截斷proc檔案系統中的檔案可以強制要求系統回收配置設定給正在使用的的檔案。這是一項進階技術,僅到管理者确定不會對運作中的程序造成影響時使用。應用程式對這種方式支援的并不好,當一個正在使用的檔案被截斷可能會引發不可預知的問題
1.$ echo > /proc/pid/fd/fd_number
例如,根據之前lsof的輸出:
1.$ file /proc/25575/fd/33
2./proc/25575/fd/33: broken symbolic link to `/oradata/DATAPRE/UNDOTBS009.dbf (deleted)'
3.$ echo > /proc/25575/fd/33