(轉載)刪除檔案後硬碟空間不釋放的問題

zhang41082發表於2019-06-14

轉載自:

很多人會遇到在作業系統上rm掉一個大的檔案,以解決檔案系統超標的問題,可是有的時侯檔案刪除掉了,而空間卻未釋放出來。論壇上也常常見這樣貼子,為什麼會這樣,如何解決呢?本文只侷限於Hp unix的作業系統。

原因其實很簡單,主要是因為被刪除的檔案在刪除的時侯還是程式在操作(開啟、訪問等)的緣故,rm只完成了在磁碟上檔案實體的釋放,而類似free list結構中相應的檔案系統因程式的操作相應的inode並未釋放。

[@more@]

這樣的問題解決起來也很簡單,找到操作的程式,kill掉就可以了,可是找到操作的程式恰恰是本問題的難點和關鍵。這樣的問題也可以透過重啟機器和nmount/mount檔案系統這樣的方式解決,但這樣的方法我是不提倡的,小小的問題就重啟機器,小題大做。

hp-unix作業系統
需要藉助uli這個內部工具,後面會詳細說。

linux及solaris
可以這樣做:
a、下載一個lsof軟體裝上,google上可以搜到
b、找到正在用被刪檔案的程式
lsof | grep deleted
c、kill掉相應的程式空間就釋放了

hp unix本問題的解決

問題重現

bdf一下/oracle檔案系統
# bdf /oracle
Filesystem kbytes used avail %used Mounted on
/dev/vg00/lv_oracle
8192000 5313813 2698313 66% /oracle

可見空餘2698313kb

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
#

以more命令檢視檔案,保持這個操作不動
# more yztest_ora_11026.trc

另開一個視窗,刪除檔案,空間未釋放
# 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檔案系統的可用空間並未發生改變。

問題解決
安裝uli工具
這個工具如果沒有,可以向hp supporter要一個。

ftp到主機,注意用以二進位制上傳
# ls -l
total 960
-rw-rw-rw- 1 root sys 487379 Apr 23 10:22 uli.bin

解壓縮,檔案是自解壓的
# sh ./uli.bin
Running install script. ./uli.install uli a 2

檢視一下
# ls -l
total 5520
-rwxrwxrwx 2 222 users 1160136 Dec 13 2006 uli
-rwxrwxrwx 2 222 users 1160136 Dec 13 2006 uli-a-2
-rw-rw-rw- 1 root sys 487379 Apr 23 10:22 uli.bin
-rwxrwxrwx 1 222 users 536 Dec 13 2006 uli.install

執行uli.install
# ./uli.install uli a 2
#

檢視一下uli的各個可用選項
# ./uli -h

4.2.2 執行uli,殺掉操作程式

# ./uli

libp4 (9.219): Opening /stand/vmunix /dev/kmem

Loading symbols from /stand/vmunix
Kernel TEXT pages not requested in crashconf
Will use an artificial mapping from a.out TEXT pages
Loading symbols from /stand/dlkm/mod.d/krm
Note: Consider P4_ELF_WARNING=2 to get more details
Note: No debug information for this module
Found 16 matching unlinked file table entries.

15128程式執行了more操作,影響了空間的釋放

殺掉15128
# kill 15128
#

再檢視一下/oracle的空間
# bdf /oracle
Filesystem kbytes used avail %used Mounted on
/dev/vg00/lv_oracle
8192000 5253045 2755283 66% /oracle

可見,可用空間已經由原來的2698313kb升為2755283kb。

解決問題的方法是很多的,對於複雜的問題也可能有很簡便的解決的方法,所以最好在用重啟機器這樣方法之前償試一下,看是否有更好的更方便的方法。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25016/viewspace-1004466/,如需轉載,請註明出處,否則將追究法律責任。

相關文章