1. 程式人生 > 其它 >linux xfs檔案誤刪除恢復_面試官:如何在Linux上恢復誤刪除的檔案或目錄

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選項引數說明,當前恢復所有的操作完成。


程式設計師求職面試

e320660fc89bf2d3a8005e9130a312a8.png

分享程式設計師找工作經驗

程式設計師筆試、面試題