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

2021-09-24 22:20:59 字數 866 閱讀 5708

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

使用tail -f testfile命令一直檢視

刪除該檔案

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

上面命令出來的結果如下:

使用kill 命令來釋放檔案控制代碼從而釋放空間

你需要知道開啟檔案的程序號(pid)和檔案描述符(fd). 這些都可以通過lsof工具方便獲得, lsof的意思是」list open files, 列出(程序)開啟的檔案」. 然後你將可以從/proc拷貝出需要恢復的資料.

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

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 -l testfile.backup

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

檢視檔案描述符

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

使用上面的命令恢復後,我們需要最終確認一下檔案是否恢復,以及檔案內容是否正確:

然後把新舊的兩個檔案對比

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

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

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

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

如何使用lsof命令恢復刪除的檔案

在linux檔案系統中,檔名實際是指向索引節點 inode 的鏈結。linux建立檔案系統後,就會生成inode表,inode索引節點會包含檔案的屬性 block塊的指標等資訊關於inode介紹看我這篇博文。當使用 rm 命令刪除某檔案時,只是刪除了指向inode索引節點的鏈結,但是沒有刪除inod...