linux xfs檔案誤刪除恢復_面試官:如何在Linux上恢復誤刪除的檔案或目錄
技術標籤:linux xfs檔案誤刪除恢復
作者:21運維
連結:http://www.21yunwei.com/archives/6030
Linux不像windows有那麼顯眼的回收站,不是簡單的還原就可以了。linux刪除檔案還原可以分為兩種情況,一種是刪除以後在程序存在刪除資訊,一種是刪除以後程序都找不到,只有藉助於工具還原,這裡分別檢查介紹下。
一、誤刪除檔案程序還在的情況。
這種一般是有活動的程序存在持續標準輸入或輸出,到時檔案被刪除後,程序PID還是存在。這也就是有些伺服器刪除一些檔案但是磁碟不釋放的原因。比如當前舉例說明:通過一個shell終端對一個測試檔案做cat追加操作:
[[email protected]_backup ~]# echo [[email protected]_backup ~]# cat >> testdelete.py hello
另外一個終端檢視這個檔案可以清楚看到內容:
[[email protected]_backup ~]# cat testdelete.py hello pyhello
此時,在當前伺服器刪除檔案rm -f ./testdelete.py
命令檢視這個目錄,檔案已經不存在了,那麼現在我們將其恢復出來。
1、lsof檢視刪除的檔案程序是否還存在。
這裡用到一個命令lsof,如沒有安裝請自行yum或者apt-get。類似這種情況,我們可以先lsof檢視刪除的檔案 是否還在:
[[email protected]_backup ~]# lsof | grep deletedmysqld cat
幸運的是這種情況程序還存在 ,那麼開始進行恢復 操作。
2、恢復。
恢復命令:
cp /proc/pid/fd/1/指定目錄/檔名
進入 程序目錄,一般是進入/proc/pid/fd/,針對當前情況:
[[email protected]_backup ~]# cd /proc/[[email protected]_backup fd]# lltotal lrwx------ l-wx------ lrwx------
恢復操作:
cp 1/tmp/testdelete.py
檢視檔案:
[[email protected]_backup fd]# cat /tmp/testdelete.pyhello pyhello
恢復完成。
二、誤刪除的檔案程序已經不存在,藉助於工具還原。
建立準備刪除的目錄並echo一個 帶有內容的檔案:
[[email protected]_backup .├── deletetest│ └── mail│ └── test.py├── lost+found└── passwd3[[email protected]_backup hello [[email protected]_backup haproxy:x:tcpdump:x:
執行刪除操作:
[[email protected]_backup [[email protected]_backup total
現在開始進行誤刪除檔案的恢復。這種情況一般是沒有守護程序或者後臺程序對其持續輸入,所以刪除就刪除了,lsof也看不到。就要藉助於工具。這裡我們採用的工具是extundelete第三方工具。恢復步驟如下:
1.停止對當前分割槽做任何操作,防止inode被覆蓋。inode被覆蓋基本就告別恢復了。比如停止所在分割槽的服務,解除安裝目錄所在的裝置,有必要的情況下都可以斷網。2.通過dd命令對當前分割槽進行備份,防止第三方軟體恢復失敗導致資料丟失。適合資料非常重要的情況,這裡測試,就沒有備份,如備份可以考慮如下方式:
dd if=/path/filename of=/dev/vdc1
1.通過umount命令,對當前裝置分割槽解除安裝。或者fuser 命令。
umount /dev/vdb1 或者 umount /21yunwei
如果提示裝置busy,可以用fuser命令強制解除安裝:
fuser -m -v -i -k /21yunwei
1.下載第三方工具extundelete安裝,搜尋誤刪除的檔案進行還原。
wget http:tar jxvf extundelete-cd extundelete-./configure makemake install
掃描誤刪除的檔案:
[[email protected]_backup extundelete-NOTICE: LoadingGroupContents..省略N行File. .. lost+found deletetest passwd
通過掃描發現了我們刪除的資料夾,現在執行恢復操作。
1、恢復單一檔案passwd
[[email protected]_backup /]# extundelete /dev/vdb1 --restore-file passwd NOTICE: LoadingLoadingSuccessfully
恢復檔案是放到了當前目錄RECOVERED_FILES。檢視恢復的檔案:
[[email protected]_backup /]# tail -mysql:x:nginx:x:zabbix:x:haproxy:x:tcpdump:x:
2、恢復目錄deletetest
[[email protected]_backup /]# extundelete /dev/vdb1 --restore-directory deletetest NOTICE: LoadingLoadingSearching5Looking[[email protected]_backup /]# cat RECOVERED_FILES/deletetest/mail/test.py hello
3、恢復所有
[[email protected]_backup /]# extundelete /dev/vdb1 --restore-allNOTICE: LoadingLoadingSearching5Looking0[[email protected]_backup /]# cd RECOVERED_FILES/[[email protected]_backup RECOVERED_FILES]# tree.├── deletetest│ └── mail│ └── test.py└── passwd2
4、恢復指定inode
[[email protected]_backup /]# extundelete /dev/vdb1 --restore-inode NOTICE: LoadingLoading[[email protected]_backup /]# tail -mysql:x:nginx:x:zabbix:x:haproxy:x:tcpdump:x:
注意恢復inode的時候,恢復 出來的檔名和之前不一樣,需要單獨進行改名。內容是沒問題的。
更多的extundelete用法請參考extundelete –help選項引數說明,當前恢復所有的操作完成。
程式設計師求職面試
分享程式設計師找工作經驗
程式設計師筆試、面試題