問題
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