lsof處理檔案恢復 控制代碼以及空間釋放問題

2021-09-11 07:34:21 字數 2975 閱讀 5319

**:

曾經在生產上遇到過乙個df 和 du出現的結果不一致的問題,為了排查到底是哪個程序占用了檔案控制代碼,導致空間未釋放,首先在linux上面,一切皆檔案,這個問題可以使用lsof這個bt的命令來處理(這個哈還可以來查詢檔案控制代碼洩露問題,應用程式的程序未關閉檔案控制代碼)

你建立乙個檔案testfile

touch testfile
然後使用tail命令一直檢視

tail testfile
這個時候另外乙個同事使用rm命令來刪除了該檔案

rm testfile
如果你知道檔名,那就可以直接使用如下命令

lsof |grep  testfile
但是如果你不知道是哪個檔案,或者是很多檔案都有這樣的情況,那你需要使用如下命令

lsof |grep deleted 注:這個deleted表示該已經刪除了的檔案,但是檔案控制代碼未釋放,這個命令會把所有的未釋放檔案控制代碼的程序列出來
注:有些系統你沒有配置環境變數的話,直接lsof是會報錯沒有該命令,你可以直接/usr/bin/lsof 或者是/usr/sbin/lsof,根據你的系統環境自己檢視

然後上面命令出來的結果會出來如下結果

root 123 12244 0 14:47 pts/1 01:02:03  tail testfile
然後你可以使用kill 命令來釋放檔案控制代碼從而釋放空間

kill 123

/proc/程序號/fd/檔案描述符
touch testfile

cp testfile testfile.backup.2014

stat testfile

file: 'testfile'

size: 343545 blocks: 241 io block: 4096 regular file

device: fd00h/64768d inode: 361579 links: 1

access: (0664/-rw-rw-r–) uid: ( 505/ zhaoke) gid: ( 505/ zhaoke)

access: 2014-11-09 15:00:38.000000000 +0800

modify: 2014-11-09 15:00:34.000000000 +0800

change: 2014-04-09 15:00:34.000000000 +0800

沒問題, 繼續下面工作:

rm testfile

ls -l testfile

ls: testfile: no such file or directory

stat testfile

stat: cannot stat 'testfile': no such file or directory

testfile檔案刪除了,但不要終止仍在使用檔案的程序, 因為一旦終止, 檔案將很難恢復.

lsof | grep testfile

tail 5317 root 4r reg 253,0 343545 361579 /root/testfile (deleted)

ls -l /proc/5317/fd/4

lr-x—— 1 root root 64 09 15:00 /proc/5317/fd/4 -> /root/testfile (deleted)

使用cp -a命令測試恢復

cp -a /proc/5317/fd/4 testfile.backup
使用ls命令來檢視

ls -l testfile.backup

lrwxrwxrwx 1 root root 29 09 15:02 testfile.backup -> /roor/testfile (deleted)

通過上面的命令我們發現,使用cp -a命令,其恢復的是乙個指向被刪除檔案的符號鏈結

使用file命令分別檢視檔案和檔案描述符

file testfile.backup

testfile.backup: broken symbolic link to '/root/testfile (deleted)'

file /proc/5317/fd/4

/proc/5317/fd/4: broken symbolic link to '/root/myfile (deleted)'

根據上面的file結果,可以使用cp拷貝出檔案描述符資料到乙個檔案中,如下:

cp /proc/5317/fd/4 testfile.new
使用上面的命令恢復後,我們需要最終確認一下檔案是否恢復,以及檔案內容是否正確:

ls -l testfile.new
然後把新舊的兩個檔案對比

diff testfile.new myfile.backup

使用lsof處理檔案恢復 控制代碼以及空間釋放問題

曾經在生產上遇到過乙個df 和 du出現的結果不一致的問題,為了排查到底是哪個程序占用了檔案控制代碼,導致空間未釋放,首先在linux上面,一切皆檔案,這個問題可以使用lsof這個bt的命令來處理 這個哈還可以來查詢檔案控制代碼洩露問題,應用程式的程序未關閉檔案控制代碼 使用tail f testf...

通過linux控制代碼恢復刪除檔案

ibd 檔案被刪除了,該往哪個方向逃跑?實驗 先來建乙個測試庫 我們在這裡開啟了 innodb file per table,但這個引數並非本實驗所必須,只是為了演示方便。然後模擬乙個業務壓力 現在刪掉相關的表檔案 檢視一下 mysql 占用的控制代碼 找到被刪除的表 可以看到,除了臨時表,被我們手...

使用lsof恢復rm rf刪除後的檔案

在linux系統中使用rm rf刪除檔案後,其實檔案只是從磁碟中移除,檔案內容還是在系統後台等待 此時可以使用系統程序號將檔案考貝出來,內容不會有更改。1.刪除乙個檔案 root iz62f427er8z logs ll access.log rw r r 1 root root 11723908 ...