drop表空間以及對應的資料檔案後空間不釋放的問題

lwitpub發表於2012-10-25
執行drop tablespace PSGLOG INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;後,
在磁碟上可以看到對應的datafile已經不存在了,但是df -h發現空間仍未釋放,
但是如果直接rm 是可以釋放的,為什麼呢?
出現這樣的情況一般是由於有程式在向檔案中寫資料或有程式正在訪問檔案,即有程式在用這個檔案而引起作業系統認為這個檔案未實質釋放,從而df或bdf空間統計不正確。
這一類問題的解決方法一般說來可以重啟作業系統,重新umount及mount那個檔案系統,這並不是一個好方法。

建議的操作方法如下:
1、下載一個lsof軟體裝上,
2、找到正在用被刪檔案的程式
lsof | grep deleted
3、kill掉相應的程式空間就釋放了
其它建議:
1、清理alert.log listerner.log這些日誌檔案時最好用">檔案"這樣的操作方式,不要用rm。
2、清理歸檔日誌最好用backup ... delete input這樣的方式。
3、如果你的作業系統總出現rm不釋放空間的問題,該請sa好好查查系統問題了,同時可以在rm前用lsof看一下有無程式在用這個檔案。
4、解決問題的方法很多,最好不要用重啟資料庫或重啟作業系統這樣的方法。

二、恢復刪除的檔案
當Linux計算機受到入侵時,常見的情況是日誌檔案被刪除,以掩蓋攻擊者的蹤跡。管理錯誤也可能導致意外刪除重要的檔案,比如在清理舊日誌時,意外地刪除了資料庫的活動事務日誌。有時可以透過lsof來恢復這些檔案。

當系統中的某個檔案被意外地刪除了,只要這個時候系統中還有程式正在訪問該檔案,那麼我們就可以透過lsof從/proc目錄下恢復該檔案的內容。 假如由於誤操作將/var/log/messages檔案刪除掉了,那麼這時要將/var/log/messages檔案恢復的方法如下:
首先使用lsof來檢視當前是否有程式開啟/var/logmessages檔案,如下:
# lsof |grep /var/log/messages
syslogd 1283 root 2w REG 3,3 5381017 1773647 /var/log/messages (deleted)

從上面的資訊可以看到 PID 1283(syslogd)開啟檔案的檔案描述符為 2。同時還可以看到/var/log/messages已經標記被刪除了。因此我們可以在 /proc/1283/fd/2 (fd下的每個以數字命名的檔案表示程式對應的檔案描述符)中檢視相應的資訊,如下:

# head -n 10 /proc/1283/fd/2
Aug 4 13:50:15 holmes86 syslogd 1.4.1: restart.
Aug 4 13:50:15 holmes86 kernel: klogd 1.4.1, log source = /proc/kmsg started.
Aug 4 13:50:15 holmes86 kernel: Linux version 2.6.22.1-8 (root@everestbuilder.linux-ren.org) (gcc version 4.2.0) #1 SMP Wed Jul 18 11:18:32 EDT 2007
Aug 4 13:50:15 holmes86 kernel: BIOS-provided physical RAM map:
Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 0000000000000000 - 000000000009f000 (usable)
Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 000000000009f000 - 00000000000a0000 (reserved)
Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 0000000000100000 - 000000001f7d3800 (usable)
Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 000000001f7d3800 - 0000000020000000 (reserved)
Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 00000000e0000000 - 00000000f0007000 (reserved)
Aug 4 13:50:15 holmes86 kernel: BIOS-e820: 00000000f0008000 - 00000000f000c000 (reserved)

從上面的資訊可以看出,檢視 /proc/8663/fd/15 就可以得到所要恢復的資料。如果可以透過檔案描述符檢視相應的資料,那麼就可以使用 I/O 重定向將其複製到檔案中,如:
cat /proc/1283/fd/2 > /var/log/messages

對於許多應用程式,尤其是日誌檔案和資料庫,這種恢復刪除檔案的方法非常有用。

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

相關文章