很多人會遇到在操作系統上rm掉一個大的文件,以解決文件系統超標的問題,可是有的時侯文件刪除掉了,而空間卻未釋放出來。論壇上也常常見這樣貼子,為什麼會這樣,如何解決呢?本文只局限於Hp unix的操作系統。
rm掉文件空間不釋放原因
原因其實很簡單,主要是因為被刪除的文件在刪除的時侯還是進程在操作(打開、訪問等)的緣故,rm只完成了在磁盤上文件實體的釋放,而類似free list結構中相應的文件系統因進程的操作相應的inode並未釋放。
解決的方法
這樣的問題解決起來也很簡單,找到操作的進程,kill掉就可以了,可是找到操作的進程恰恰是本問題的難點和關鍵。這樣的問題也可以通過重啟機器和nmount/mount文件系統這樣的方式解決,但這樣的方法我是不提倡的,小小的問題就重啟機器,小題大做。
1 Hp unix操作系統
需要借助uli這個內部工具,後面會詳細說。
2 linux及solaris
可以這樣做:
a、下載一個lsof軟件裝上,google上可以搜到
b、找到正在用被刪文件的進程
lsof | grep deleted
c、kill掉相應的進程空間就釋放了
Hp unix本問題的解決
1 問題重現
1.1 bdf一下/oracle文件系統
- # bdf /oracle
- Filesystem kbytes used avail %used Mounted on
- /dev/vg00/lv_oracle
- 8192000 5313813 2698313 66% /oracle
- 可見空余2698313kb
1.2 udump下有一文件占用了60多mb的空間
- # pwd
- /oracle/app/oracle/admin/yztest/udump
- #
- # ls -l yztest_ora_11026.trc
- -rw-rw-rw- 1 root sys 62217530 Apr 23 10:36 yztest_ora_11026.trc
- #
1.3 以more命令查看文件,保持這個操作不動
# more yztest_ora_11026.trc
1.4 另開一個窗口,刪除文件,空間未釋放
- # rm yztest_ora_11026.trc
- #
- # ls -l yztest_ora_11026.trc
- yztest_ora_11026.trc not found
- #
- # bdf /oracle
- Filesystem kbytes used avail %used Mounted on
- /dev/vg00/lv_oracle
- 8192000 5313813 2698313 66% /oracle
可見/oracle文件系統的可用空間並未發生改變。
這樣,我們對Hp unix中的問題就分析清楚了,解決問題的方法就浮出水面了。