linux rm文件恢復總結

昨天意外刪除了一些重要文件,經過一天左右的時候恢復,成功實現rm恢復。在這裏總結一下方法。當然防範這種情況還是最重要的,可以參考之前寫過的linux rm安全

恢復條件和一些準備:
一、保護數據。
先提點刪除恢復常識:文件刪除後,雖然沒有清除文件內容,但是文件所佔的存儲空間已經允許被申請寫入,所以要恢復文件的話,必需保證不要再向文件所在分區寫數據,我的是虛擬機,直接kill進程了,非虛擬機可以umount分區,如果是主分區,直接斷電。對於主分區,安全起見用livecd將硬盤只讀掛載後操作。如果是虛擬機,即使是要恢復根分區,也可以不用livecd,通過複製硬盤鏡像的方式生成多份硬盤來實現還原。將複製的硬盤添加到虛擬系統裏,這樣系統裏就有兩份硬盤了。但是我在嘗試時發現,雖然可以正確識別爲a和b兩塊硬盤,但如論啓動哪個系統,都是從一塊硬盤加載的,可能是boot信息的問題。

二、linux LVM文件系統
這個是邏輯卷管理,不是像ntfs、ext3一樣的文件系統,所以不能直接掛載,因爲一個lmv下面可能對應着多個邏輯分區,我們一次只能掛載其中的一個。所以要根據lvm找到邏輯分區。
1.“fdisk -l”
查看連接的硬盤是不是lvm,如果不是,則可以跳過這一部分。

fdisk -l
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14        1044     8281507+  8e  Linux LVM
2.如果是,安裝lvm2
    自動安裝:“apt-get install lvm2”(可能不提供包),或者“yum install 包名”安裝(可能不提供包)
    直接下載:http://sources.redhat.com/lvm2/
3.“vgscan”,掃描邏輯分區

root@ubuntu:~# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "VolGroup00" using metadata type lvm2
4.“lvscan”, 查看邏輯分區,狀態未激活

root@ubuntu:~# lvscan
 inactive            '/dev/VolGroup00/LogVol00' [6.88 GiB] inherit
 inactive            '/dev/VolGroup00/LogVol01' [1.00 GiB] inherit
5.“vgchange -a y”  激活
6.“lvscan” 查看狀態

root@ubuntu:~# lvscan
  ACTIVE            '/dev/VolGroup00/LogVol00' [6.88 GiB] inherit
  ACTIVE            '/dev/VolGroup00/LogVol01' [1.00 GiB] inherit

現在就可以通過來掛載指定的分區了。
參考:http://apps.hi.baidu.com/share/detail/19631288
三、linux源碼安裝
1. ./configure 如果失敗,剛是缺少依賴庫,下載安裝所需庫即可。
2. make 編譯
3. make install 安裝

恢復方法
方法一:使用debugfs(不適用我的情況,沒有嚴格測試恢復,只列出了node值)
debugfs是調試文件系統的,可以查看文件的node值,根據文件系統Journal日誌找到數據所在的塊,將指定塊存放起來即可。
適用範圍:刪除後,未關機,因爲關機後Journal會丟失。
1。“umount 設備描述符文件”, 卸載指定分區
2。“debugfs 設備描述符文件”,啓動debugfs
3。“cd 目錄”,進入刪除文件所在指定的目錄
4。“ls -ld”,查看文件node值。如果沒有你要的文件,那麼很遺憾,它已經被破壞了。
5。“dumplog -i<node值>” 獲取日誌信息,找到塊信息,示例Blocks: (0+1): 10234
6。保存塊的數據,示例dd if=/dev/sda5 of=/tmp/test.txt bs=4096 count=1 skip= 10234
參考http://linux.net527.cn/Linuxwendang/xitongguanliyuan/16884.html

方法二:使用ext3grep
說明:使用方法網上有,但我在使用時並沒有成功,因爲它沒有識別出lvm邏輯分區。
適用:lmv分二個分區我失敗了,所以覺得沒有用lmv分多個邏輯分區的應該適用。不可以恢復目錄,只以恢復文件
提示:在要保存恢復文件的目錄操作,確保空間足夠,如果inode值爲2,則會將整體分區數據保存而不僅是已被刪的
1。下載安裝ext3grep
http://code.google.com/p/ext3grep/
2。如果是lvm,則按上面提到的方式激活邏輯分區。
3。ext3grep --ls --inode node值   (node值是你要恢復的文件所在目錄的node值,可以用debugfs查看,2則是分區根目錄)
3。恢復目錄裏面的一個文件
 ext3grep /home/sheng/file --restore-file del/1 (注:del在分區根目錄下)
 恢復所有文件
 ext3grep /home/sheng/file --restore-all
 參考:http://linux.chinaunix.net/techdoc/system/2009/07/07/1122061.shtml

方法三:使用extundelete (最有效方法
extundelete是基於ext3grep的軟件,提供方便的命令,可以恢復文件,而且對lmv邏輯分區也有效,我就是用這種方法還原的數據。
適用:刪除數據未被破壞的數據
提示:在要保存恢復文件的目錄操作,確保空間足夠,如果inode值爲2,則會將整體分區數據保存而不僅是已被刪的
1。下載安裝extundelete
   http://extundelete.sourceforge.net/
2。如果是lvm,用上面提到的方法激活邏輯分區。
3。extundelete 分區設備 參數
  常用參數:--restore-all     全恢復到當前目錄下
    --restore-inode 值 按inode恢復
 --restore-files filename
 --restore-directory path/of/directory
 參考:http://extundelete.sourceforge.net/


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章