2008年4月6日 星期日

捏把冷汗--reiserfs重建b*tree實戰

前幾天突發奇想,想要試試chroot的功能, 由於喜歡/習慣於Debian和Ubuntu,我想試試看能否用chroot來模擬多個linux的環境, 於是我的小筆記型的小硬碟只有60G, 必須先把我收藏很久的gnome的themes、wallpapers還有各distribution的設定文件給備份起來, 於是我就用家裏的一顆舊的60G Maxtor硬碟來裝這些東西,
dmesg | tail
確定這顆硬碟/by-path識別名稱之後,
fdisk /dev/sdb
新增一個linux的分割區,選擇成主要分割區,使用整顆硬碟。
mkreiserfs -l progs /dev/sdb1
建立reiserfs的檔案系統並標籤為progs。 經過了幾分鐘快樂的使用之後(我是用sata/ide轉usb介面) 突然間錯誤訊息出現"I/O error"! 心裡大驚:不會吧! 開始出現有一些檔案他的顯示有灰底, ls -l 顯示的資訊全為???? ???? ???????? 然後利用root去刪除也出現permission denied! 我知道終於發生了最不想發生的事情.... 最有可能是我superblock區域毀損了! 果然我umount之後再mount的結果, 告訴我bad filesystem or superblock broken...一般而言看到這訊息通常只是新手在/etc/fstab寫錯option或是filesystem罷了,唉我怎麼會這麼倒楣,我是用mv過去的耶!!!(失敗了就找不回來了) 真是不死心,再次remount之後的結果更慘:
"operation invalid"....
於是只好很小心的展開了無止盡的修復工作.... 1.由於他不是ext2/3系列的檔案系統,我沒有dump有關的指令給reiserfs來備援他的superblock, 我可能得去重建他的b*tree:
reiserfsck --check /dev/sdb1
*************************************************************
** If you are using the latest reiserfsprogs and  it fails **
** please  email bug reports to reiserfs-list@namesys.com, **
** providing  as  much  information  as  possible --  your **
** hardware,  kernel,  patches,  settings,  all reiserfsck **
** messages  (including version),  the reiserfsck logfile, **
** check  the  syslog file  for  any  related information. **
** If you would like advice on using this program, support **
** is available  for $25 at  www.namesys.com/support.html. **
*************************************************************

Will read-only check consistency of the filesystem on /dev/sdb1
Will put log info to 'stdout'

Do you want to run this program?[N/Yes] (note need to type Yes if you do):
我當然要答Yes羅!
###########
reiserfsck --check started at Sun Apr  6 11:21:50 2008
###########
Replaying journal..
Reiserfs journal '/dev/sdb1' in blocks [18..8211]: 0 transactions replayed
Checking internal tree..

Bad root block 0. (--rebuild-tree did not complete)

Aborted (core dumped)
真令人沮喪...看來是我沒有去rebuild b*tree的原因,
reiserfsck --rebuild-tree /dev/sdb1
經過漫長的rebuild,還是失敗,唉真的有如此的倒楣嗎?
sync && sync && sync && init 0
冷靜下來,一定有辦法的,大不了佈景主題重抓,設定的筆記自己重寫吧><||||||||| 我把硬碟電源線拔掉,發現他的jump竟然是在cable select的地方(一般而言應為master的位置) 可是心想,跟這個應該沒關係吧...可是我已經沒招了, 在這之前,我已經試圖重建superblock, 但都還是被終止,反正我已經沒招了,已經有一切從零開始的心理準備了, 把jump調到master之後,開機, 一樣執行
reiserfsck --rebuild-tree /dev/sdb1
一樣經歷漫長的等待,咦,有眉目了,一直不斷的替我flushing, 也不抱任何希望的整理我的書本,沒想到完成了,沒有之前被中斷的錯誤訊息, 我還不敢相信,把他mount起來眼見為憑:
mount -t reiserfs -o defaults,user,exec,noatime
令人感動得說不出話來:nautilus自動彈出了視窗,是我心愛的設定檔跟themes! 趁剛剛才修復好的硬碟還沒出差錯之前之前,趕快備份! 終於了解平時備份的重要性了!

沒有留言: