HP-UX下刪除文件無法釋放空間

1 引言

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

2 rm掉文件空間不釋放原因

原因其實很簡單,主要是因爲被刪除的文件在刪除的時侯還是進程在操作(打開、訪問等)的緣故,rm只完成了在磁盤上文件實體的釋放,而類似free list結構中相應的文件系統因進程的操作相應的inode並未釋放。
3 解決的方法
這樣的問題解決起來也很簡單,找到操作的進程,kill掉就可以了,可是找到操作的進程恰恰是本問題的難點和關鍵。這樣的問題也可以通過重啓機器和nmount/mount文件系統這樣的方式解決,但這樣的方法我是不提倡的,小小的問題就重啓機器,小題大做。

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

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


4 hp unix本問題的解決

4.1 問題重現

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

可見空餘2698313kb

4.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
#

4.1.3 以more命令查看文件,保持這個操作不動
# more yztest_ora_11026.trc

4.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文件系統的可用空間並未發生改變。

4.2 問題解決
4.2.1 安裝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.
PID PPID COMMAND INODE DEVICE SIZE(bytes)
15128 13937 more 20177 /dev/vg00/lv_oracle 62217530
9619 1 GWTDOMAIN 4119 /dev/vg00/lvapp 131072
9618 1 GWADM 4119 /dev/vg00/lvapp 131072
9617 1 GWTDOMAIN 4110 /dev/vg00/lvapp 131072
9616 1 GWADM 4110 /dev/vg00/lvapp 131072
9611 1 GWTDOMAIN 3988 /dev/vg00/lvapp 131072
9610 1 GWADM 3988 /dev/vg00/lvapp 131072
9608 1 GWTDOMAIN 3884 /dev/vg00/lvapp 131072
9607 1 GWADM 3884 /dev/vg00/lvapp 131072
9604 1 GWTDOMAIN 3856 /dev/vg00/lvapp 131072
9603 1 GWADM 3856 /dev/vg00/lvapp 131072
2775 1 swagentd 3936 /dev/vg00/lvol7 141
2209 1 java 28778 /dev/vg00/lvol7 13
2209 1 java 960 /dev/vg00/lvol7 3215
2209 1 java 960 /dev/vg00/lvol7 3215
2209 1 java 10180 /dev/vg00/lvol7 3215

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

殺掉15128
# kill 15128
#
4.2.3 再查看一下/oracle的空間
# bdf /oracle
Filesystem kbytes used avail %used Mounted on
/dev/vg00/lv_oracle
8192000 5253045 2755283 66% /oracle

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

5 結篇

解決問題的方法是很多的,對於複雜的問題也可能有很簡便的解決的方法,所以最好在用重啓機器這樣方法之前償試一下,看是否有更好的更方便的方法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章