簡單版:
1. dd 做備份
2. 在備份上面做 reiserfsck
3. mount 這個備份
4. 把備份 mount 起來的目錄裡面的資料 copy 出來。
5. 恢復正常
---
這兩天手癢,所以把自已的 Ubuntu 昇級到 Ubuntu 8.10 beta 的版本玩兒。
都說了是 Beta 了,所以自然有些東西要整理會不見。
我在檢視 HOME 目錄的時候看到一些已經沒在用的東西,很自然的就給它 rm -fr $name 下去,只是這一次,腦袋不靈光,竟然刪掉了近日才整理過的照片,裡頭最重要的東西,就是跟小猴子在西班牙的照片.... (!!!!!) 這樣,知道有多重要了吧?
---
廢話不多說,馬上就開始反刪除作業:為了避免影響到待救援資料的完整性,所以要馬上關掉這個使用 reiserfs 格式的 partition。還好,我當初規畫 partition 的時候,就把 HOME 跟 rootfs (/) 切開來了,所以,我可以臨時使用 root 來操作救援的動作(註);
不然就只能 用 LiveCD 或著 init 1 同時 remount ro 來做了。所以我用 root 登入之後,首先做的,就是打開一個 Terminal ,同時下達:
umount /home
可能會遇到一些困難,像是一些應用程式尚未關閉之類的,可以用 ps -ef|grep 使用者 ID 或著用 lsof 來看。
接著,我需要一個足夠存放 home 的 parition 的地方,所以拿出了隨身硬碟,把資料挪了一下,騰出 70G 的空間,接著下達
dd if=/dev/sda7 of=reiserfs.dd bs=100M conv=noerror
會下 100M 的原因是因為我記得 USB 2.0 high speed 好像是 100M 的理論值(忘了,不確定)
這個動作要做很久,做完已經是快一個小時半之後的事情了,接著要下達:
reiserfsck --rebuild-tree --scan-whole-partition reiserfs.dd
讓 reiserfsck 對這個備份檔案下達 rebuild-tree 的動作。
這個動作也會花上很多時間,約莫一個小時後,才會完成。
完成之後,我們下
mount reiserfs.dd /media/recovery -o loop
把這個檔案 mount 起來
當然,上面會有一堆垃圾跟著被復原了,幸運的話,可以在原來的位置找到我們想要的東西,不然也會在 lost+found/ 底下找到。我的例子是用
find . -iname "*.jpg"
找到我誤刪了的照片檔案, 它整個目錄都在一起,所以我的資料很快的還原了。
現在想起來還在抖~
重要的資料還是要養成備份的好習慣。
--
註: Ubuntu 上面 gdm 如果要 root 可以登入的話,預設要用 gdmsetup 打開 allow administrator to login 的選項。
參考來源:
Reiserfs FIle Undelete HowTO Ext2/3 上的反刪除救援方式 Linux 底下劃分一堆 partition 到底有什麼好處?