drop表空間以及對應的資料檔案後空間不釋放的問題
執行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
對於許多應用程式,尤其是日誌檔案和資料庫,這種恢復刪除檔案的方法非常有用。
在磁碟上可以看到對應的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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 解決linux下刪除檔案或oracle表空間後空間不釋放的問題LinuxOracle
- (轉載)刪除檔案後硬碟空間不釋放的問題硬碟
- 刪除正在使用的檔案,空間不釋放的問題
- hpux刪除檔案後空間不釋放UX
- Oracle delete資料後的釋放表空間問題的解決 --轉Oracledelete
- Linux下資料檔案刪除檔案系統空間不釋放的問題Linux
- delete不釋放表空間delete
- Linux 刪除檔案後空間不釋放Linux
- 截斷表後空間不釋放的原因分析
- Sqlserver delete表部分資料釋放資料檔案空間SQLServerdelete
- 解決刪除檔案後 WSL2 磁碟空間不釋放的問題
- oracle刪除(釋放)資料檔案/表空間流程Oracle
- Linux檔案刪除但空間不釋放問題篇Linux
- 處理Linux刪除檔案後空間未釋放的問題Linux
- MySQL 5.7的表刪除資料後的磁碟空間釋放MySql
- ORACLE表空間、資料檔案離線問題Oracle
- MongoDB Drop集合不釋放磁碟空間的解決辦法MongoDB
- Oracle 刪除資料後釋放資料檔案所佔磁碟空間Oracle
- Linux rm掉檔案空間不釋放原因Linux
- MySQL innodb共享表空間新增表空間資料檔案方法MySql
- 解決linux刪除檔案後空間沒有釋放問題Linux
- linux下檔案刪除之後,空間沒有釋放問題Linux
- 新建的表空間(或資料檔案)丟失以及控制檔案丟失,有新建表空間(或資料檔案)前的控制文
- 移動資料檔案、系統表空間檔案、臨時表空間檔案
- 表空間和資料檔案的管理
- 資料檔案,表空間的移動
- 表空間新增資料檔案的疑惑
- 刪除表空間和表空間包含的檔案
- 表空間中有資料也可以壓縮表空間(資料檔案)大小
- 檢視Oracle資料庫表空間大小,是否需要增加表空間的資料檔案Oracle資料庫
- 水煮orale22——查詢表空間使用資訊以及表空間中的每個資料檔案資訊
- Oracle 表空間與資料檔案Oracle
- 表空間和資料檔案管理
- oracle 資料檔案表空間管理Oracle
- oracle 回收表空間的資料檔案大小Oracle
- 錯誤新增表空間的資料檔案
- 關於如何釋放表空間的問題(About Reclaimable Unused Space)AI
- Mysql InnoDB刪除資料後釋放磁碟空間的方法MySql