當前位置:才華齋>IT認證>Linux認證>

Linux下extun軟體的應用

Linux認證 閱讀(2.14W)

作為一名運維人員,保證資料的安全是根本職責,所以在維護系統的時候,要慎之又慎,但是有時難免會出現資料被誤刪除的情況,在這個時候改如何快速、有效地恢復資料呢?下面一起和小編來看看吧。

Linux下extun軟體的應用

  一、如何使用“rm -rf”命令

在Linux系統下,通過命令“rm -rf”可以將任何資料直接從硬碟刪除,並且沒有任何提示,同時Linux下也沒有與Windows下回收站類似的功能,也就意味著,資料在刪除後通過常規的手段是無法恢復的,因此使用這個命令要非常慎重。在使用rm命令的時候,比較穩妥的方法是把命令引數放到後面,這樣有一個提醒的作用。其實還有一個方法,那就是將要刪除的東西通過mv命令移動到系統下的/tmp目錄下,然後寫個指令碼定期執行清除操作,這樣做可以在一定程度上降低誤刪除資料的危險性。

其實保證資料安全最好的方法是做好備份,雖然備份不是萬能的,但是沒有備份是萬萬不行的。任何資料恢復工具都有一定侷限性,都不能保證完整地恢復出所有資料,因此,把備份作為核心,把資料恢復工具作為輔助是運維人員必須堅持的一個準則。

  二、extun與ext3grep的異同

在Linux下,基於開源的資料恢復工具有很多,常見的有debugfs、R-Linux、ext3grep、extun等,比較常用的有ext3grep和extun,這兩個工具的恢復原理基本一樣,只是extun功能更加強大,本文重點介紹extun的使用。

  三、extun的恢復原理

在介紹使用extun進行恢復資料之前,簡單介紹下關於inode的知識。在Linux下可以通過“ls –id”命令來檢視某個檔案或者目錄的inode值,例如檢視根目錄的inode值,可以輸入:

[root@cloud1 ~]# ls -id /

2 /

由此可知,根目錄的inode值為2。

在利用extun恢復檔案時並不依賴特定檔案格式,首先extun會通過檔案系統的inode資訊(根目錄的inode一般為2)來獲得當前檔案系統下所有檔案的資訊,包括存在的和已經刪除的檔案,這些資訊包括檔名和inode。然後利用inode資訊結合日誌去查詢該inode所在的block位置,包括直接塊,間接塊等資訊。最後利用dd命令將這些資訊備份出來,從而恢復資料檔案。

  四、 安裝extun

extun的官方的網站是 ,其目前的穩定版本是extun-0.2.4。,在安裝extun之前需要安裝e2fsprogs和e2fsprogs-libs兩個依賴包。

e2fsprogs和e2fsprogs-libs安裝非常簡單,這裡不做介紹。下面是extun的編譯安裝過程:

[root@cloud1 app]#tar jxvf 2

[root@cloud1 app]#cd extun-0.2.4

[root@cloud1 extun-0.2.4]#./configure

[root@cloud1 extun-0.2.4]#make

[root@cloud1 extun-0.2.4]#make install

成功安裝extun後,會在系統中生成一個extun可執行檔案。extun的使用非常簡單,讀者可以通過“extun --help”獲得此軟體的使用方法。

  五、extun用法詳解

extun安裝完成後,就可以執行資料恢復操作了,本節詳細介紹下extun每個引數的含義。extun用法如下:

extun --help

命令格式:

1

extun [options] [action] device-file

其中引數(options)有:

--version, -[vV],顯示軟體版本號。

--help,顯示軟體幫助資訊。

--superblock,顯示超級塊資訊。

--journal,顯示日誌資訊。

--after dtime,時間引數,表示在某段時間之後被刪的檔案或目錄。

--before dtime,時間引數,表示在某段時間之前被刪的檔案或目錄。

動作(action)有:

--inode ino,顯示節點“ino”的資訊。

--block blk,顯示資料塊“blk”的資訊。

--restore-inode ino[,ino,...],恢復命令引數,表示恢復節點“ino”的檔案,恢復的檔案會自動放在當前目錄下的RESTORED_FILES資料夾中,使用節點編號作為副檔名。

--restore-file 'path',恢復命令引數,表示將恢復指定路徑的檔案,並把恢復的檔案放在當前目錄下的RECOVERED_FILES目錄中。

--restore-files 'path',恢復命令引數,表示將恢復在路徑中已列出的所有檔案。

--restore-all,恢復命令引數,表示將嘗試恢復所有目錄和檔案。

-j journal,表示從已經命名的檔案中讀取擴充套件日誌。

-b blocknumber,表示使用之前備份的超級塊來開啟檔案系統,一般用於檢視現有超級塊是不是當前所要的檔案。

-B blocksize,表示使用資料塊大小來開啟檔案系統,一般用於檢視已經知道大小的檔案。

  六、實戰:extun恢復資料的過程

在資料被誤刪除後,第一時間要做的是解除安裝被刪除資料所在的磁碟或磁碟分割槽,如果是系統根分割槽的資料遭到誤刪除,就需要將系統進入單使用者,並且將根分割槽以只讀模式掛載。這樣做的原因很簡單,因為將檔案刪除後,僅僅是將檔案的inode結點中的扇區指標清零,實際檔案還儲存在磁碟上,如果磁碟以讀寫模式掛載,這些已刪除的檔案的資料塊就可能作業系統重新被分配出去,在這些資料塊被新的資料覆蓋後,這些資料就真的丟失了,恢復工具也回力無天。所以,以只讀模式掛載磁碟可以儘量降低資料塊中資料被覆蓋的風險,以提高恢復資料成功的比率。

6.1通過extun恢復單個檔案

1.模擬資料誤刪除環境

在演示通過extun恢復資料之前,我們首先要模擬一個數據誤刪除環境,這裡我們以ext3檔案系統為例,在ext4檔案系統下的恢復方式與此完全一樣。簡單的模擬操作過程如下:

[root@cloud1 ~]#mkdir /data

[root@cloud1 ~]#3 /dev/sdc1

[root@cloud1 ~]#mount /dev/sdc1 /data

[root@cloud1 ~]# cp /etc/passwd /data

[root@cloud1 ~]# cp -r /app/ganglia-3.4.0 /data

[root@cloud1 ~]# mkdir /data/test

[root@cloud1 ~]# echo "extun test" > /data/test/

[root@cloud1 ~]#cd /data

[root@cloud1 data]# md5sum passwd

0715baf8f17a6c51be63b1c5c0fbe8c5 passwd

[root@cloud1 data]# md5sum test/

eb42e4b3f953ce00e78e11bf50652a80 test/

[root@cloud1 data]# rm -rf /data/*

2.解除安裝磁碟分割槽

在將資料誤刪除後,立刻需要做的就是解除安裝這塊磁碟分割槽:

[root@cloud1 data]#cd /mnt

[root@cloud1 mnt]# umount /data

3.查詢可恢復的資料資訊

通過extun命令可以查詢/dev/sdc1分割槽可恢復的資料資訊:

[root@cloud1 /]# extun /dev/sdc1 --inode 2

......

File name | Inode number | Deleted status

. 2

.. 2

lost+found 11 Deleted

passwd 49153 Deleted

test 425985 Deleted

ganglia-3.4.0 245761 Deleted

根據上面的輸出,標記為Deleted狀態的是已經刪除的檔案或目錄。同時還可以看到每個已刪除檔案的inode值,接下來就可以恢復檔案了。

4.恢復單個檔案

執行如下命令開始恢復檔案:

[root@cloud1 /]# extun /dev/sdc1 --restore-file passwd

Loading filesystem metadata ... 40 groups loaded.

Loading journal descriptors ... 54 descriptors loaded.

Successfully restored file passwd

[root@cloud1 /]# cd RECOVERED_FILES/

[root@cloud1 RECOVERED_FILES]# ls

passwd

[root@cloud1 RECOVERED_FILES]# md5sum passwd

0715baf8f17a6c51be63b1c5c0fbe8c5 passwd

extun恢復單個檔案的引數是“--restore-file”,這裡需要注意的是,“--restore-file”後面指定的是恢復檔案路徑,這個路徑是檔案的相對路徑。相對路徑是相對於原來檔案的儲存路徑而言的,比如,原來檔案的儲存路徑是/data/passwd,那麼在引數後面直接指定passwd檔案即可,如果原來檔案的儲存路徑是/data/test/,那麼在引數後面通過“test/”指定即可。

在檔案恢復成功後,extun命令預設會在執行命令的當前目錄下建立一個RECOVERED_FILES目錄,此目錄用於存放恢復出來的檔案,所以執行extun命令的`當前目錄必須是可寫的。

根據上面的輸出,通過md5sum命令校驗,校驗碼與之前的完全一致,表明檔案恢復成功。

6.2通過extun恢復單個目錄

extun除了支援恢復單個檔案,也支援恢復單個目錄,在需要恢復目錄時,通過 “--restore-directory”選項即可恢復指定目錄的所有資料。

繼續在上面模擬的誤刪除資料環境下操作,現在要恢復/data目錄下的ganglia-3.4.0資料夾,操作如下:

[root@cloud1 mnt]# extun /dev/sdc1 --restore-directory /ganglia-3.4.0

Loading filesystem metadata ... 40 groups loaded.

Loading journal descriptors ... 247 descriptors loaded.

Searching for recoverable inodes in directory /ganglia-3.4.0 ...

781 recoverable inodes found.

Looking through the directory structure for d files ...

4 recoverable inodes still lost.

[root@cloud1 mnt]# ls

RECOVERED_FILES

[root@cloud1 mnt]# cd RECOVERED_FILES/

[root@cloud1 RECOVERED_FILES]# ls

ganglia-3.4.0

可以看到之前刪除的目錄ganglia-3.4.0已經成功恢復了,進入這個目錄檢查發現:所有檔案內容和大小都正常。

6.3 通過extun恢復所有誤刪除資料

當需要恢復的資料較多時,一個個地指定檔案或目錄將是一個非常繁重和耗時的工作,不過,extun考慮到了這點,此時可以通過“--restore-all”選項來恢復所有被刪除的檔案或資料夾。

仍然在上面模擬的誤刪除資料環境下操作,現在要恢復/data目錄下所有資料,操作過程如下:

[root@cloud1 mnt]# extun /dev/sdc1 --restore-all

Loading filesystem metadata ... 40 groups loaded.

Loading journal descriptors ... 247 descriptors loaded.

Searching for recoverable inodes in directory / ...

781 recoverable inodes found.

Looking through the directory structure for d files ...

0 recoverable inodes still lost.

[root@cloud1 mnt]# ls

RECOVERED_FILES

[root@cloud1 mnt]# cd RECOVERED_FILES/

[root@cloud1 RECOVERED_FILES]# ls

ganglia-3.4.0 passwd test

[root@cloud1 RECOVERED_FILES]# du -sh /mnt/RECOVERED_FILES/*

15M /mnt/RECOVERED_FILES/ganglia-3.4.0

4.0K /mnt/RECOVERED_FILES/passwd

8.0K /mnt/RECOVERED_FILES/test

可以看到所有資料全部完整地恢復了。

6.4通過extun恢復某個時間段的資料

有時候刪除了大量的資料量,其中很多資料都是沒用的,我們僅需要恢復其中的一部分資料,此時,如果採用恢復全部資料的辦法,不但耗時,而且浪費資源,在這種情況下,就需要採用另外的一種恢復機制有選擇地恢復,extun提供了“—after”“和”--before“引數,可以通過指定某個時間段,進而只恢復這個時間段內的資料。

下面通過一個簡單示例,描述下如何恢復某個時間段內的資料。

我們首先假定在/data目錄下有個剛剛建立的壓縮檔案,然後刪除此檔案,接著解除安裝/data分割槽,開始恢復一小時內的檔案,操作如下:

[root@cloud1 ~]#cd /data/

[root@cloud1 data]# cp /app/ /data

[root@cloud1 data]# date +%s

1379150309

[root@cloud1 data]# rm -rf

[root@cloud1 data]# cd /mnt

[root@cloud1 mnt]# umount /data

[root@cloud1 mnt]# date +%s

1379150340

[root@cloud1 mnt]# extun --after 1379146740 --restore-all /dev/sdc1

Only show and process d entries if they are d on or after 1379146740 and before 9223372036854775807.

Loading filesystem metadata ... 40 groups loaded.

Loading journal descriptors ... 247 descriptors loaded.

Searching for recoverable inodes in directory / ...

779 recoverable inodes found.

[root@cloud1 mnt]# cd RECOVERED_FILES/

[root@cloud1 RECOVERED_FILES]# ls

可以看到,剛才刪除的檔案,已經成功恢復,而在/data目錄下還有很多被刪除的檔案卻沒有恢復,這就是”--after“引數控制的結果,因為/data目錄下其他檔案都是在一天之前刪除的,而我們恢復的是一個小時之內被刪除的檔案,這就是沒有恢復其他被刪除檔案的原因。

在這個操作過程中,需要注意是“--after”引數後面跟的時間是個總秒數。起算時間為“1970-01-01 00:00:00 UTC”,通過“date +%s”命令即可將當前時間轉換為總秒數,因為恢復的是一個小時之內的資料,所以“1379146740”這個值就是通過“1379150340”減去“60*60=3600”獲得的。