懶的更新到blogger了

本站2010年10月以後的,都更新到google docs上了:
連結在這裡

2006/05/25

[心得]硬碟的備份與還原

最近一直在找一些自由軟體,也在尋找有沒有類似GHOST的自由軟體,

先是在自由軟體技術交流網找到了一套 g4u (意思是 GHOST for UNIX)
http://freesf.tnc.edu.tw/modules/news/article.php?storyid=1630
它的方式是可以利用ftp,將本機的硬碟資料完整的傳到網路上的ftp server上,
也可以反過來還原(當然它也可以針對本機 硬碟/分割區 對拷)
試用了一下,其實是不錯的,因為它用 dd 去存取整顆硬碟的資料,
所以不管你硬碟上是什麼樣的檔案系統(ext2,fat32,ntfs.....)、作業系統 都沒差,
反正就從硬碟頭到硬碟尾完完整整的拷成一個檔案(可壓縮),再上傳。
但是相對的,所花的時間就多(因為它不能判硬碟的某部份有沒有資料,
而且有些硬碟上檔案看似刪除了,其實還留在原地(除非真的清空)。

為了時間與空間的考量,還是找一個認識不同檔案系統的軟體好了,

網路上找到一個叫 Partimage 的東西(應該是很出名吧,不過我是找了才知道的)
它可以處理大部份的檔案系統
stable:ext2fs/ext3fs,Reiser3,FAT16/32,HPFS,JFS,XFS
beta:UFS(Unix File System),HFS(MacOS File System)
experimental:NTFS (←網站上說,ntfs只要能成功做成image的,就能成功還原)
不過,它只能在 Linux/Unix 環境跑,但我想備分/還原的是windows分割區,不想為此重灌,
還好網路上也有人做了一片系統救援Live-CD,裡面已經包含Partimage了,真是太好了。

SystemRescueCd(Partimage網站上推薦這一個)
下載後燒錄後,是一片可開機的linux環境的救援光碟片,
裡面包含了許多工具(但我主要是用partimage,還有開機時可以打 freedos 可以進入freedos),
網路部份只要網卡設定好,ftp smbmount 都是可以用的,

使用SystemRescueCd裡的partimage做備份和還原
*光碟開機,直接按Enter進入就可以了(也可以先按F2,F3..看其他的選項設定)
*會停在設定鍵盤的畫面,我都是選英文鍵盤--41
*設定網卡
+開完機後,如果有DHCP的話,應該網卡已經設好了,先用 ifconifg 看一下
+如果沒有DHCP,手動設定參考如下:
-如果要手動設定以eth0為例, ifconfig eth0 192.168.0.xxx netmask 255.255.255.0
-如果會連到其他網段,請記得,route add default gw 192.168.0.xxx (其中xxx為gateway ip)
*mount放image的磁碟機,我是做一個叫 mnt 的目錄啦 (mkdir mnt)
+較新的版本好像可以用 ftpfs...但我用起來怪怪的,故不使用
+usb硬碟(接上去用dmesg應該可以看到它抓到什麼名字,我用的版本抓到 /dev/uba1)
-mount -t vfat /dev/uba1 mnt/
+網路上的芳鄰(假設分享名稱是abc)
-smbmount //192.168.0.xxx/abc mnt/ [ -o username=YourWindowsAccount ]
*這時 mnt 裡就可以 存/讀 硬碟image檔
*cd mnt 後,直接執行 partimage ,再來看是要備份或還原,就照該程式的說明了
因為有簡單的操作介面,應該是看得懂才對。
如果是作成 image 檔,假設檔名叫 hda1.gz,每600MB分割一個檔,則會生成
hda1.gz.000 , hda1.gz.001, hda1.gz.002.......
還原時,要打完整的第一個檔名,如 hda1.gz.000,接著它會自動依序處理 001 , 002....

Partimage也可以當server,讓10台電腦連進來做 備份/還原 ,一些記事如下
*程式名稱 partimaged
*該server的所在電腦,主要是提供 存/讀 images
*使用者名稱要加入 /etc/partimaged/partimagedusers (權限600)
*上述使用者名稱必須是系統的使用者(在/etc/passwd裡有名字的)
(不過,我執行遠端還原時也沒問我帳號密碼啊……是因為我用root嗎?)
*預設port是4025
*最好在「放images」的目錄裡才執行 partimaged ,因為它會把執行的目錄當成遠端連進來的預設目錄(算是為了方便起見)

題外話:關於備份 MBR 順便也做了實驗 (怕以後忘了,還是寫一下吧)
dd if=/dev/hda of=mbr count=1 bs=512
以上指令可以把hda(第一顆ide硬碟)前512bytes備份成一個叫 mbr 的檔案
反過來,如果要把mbr檔案寫回硬碟的指令是
dd if=mbr of=/dev/hda

後來網路上查了一些資料,發現其實mbr只有前 446 bytes
再來的 64 bytes是硬碟分割表... 446+64=510..那剩下兩個bytes呢?
是 55 AA 代表結束吧!?

做了簡單的實驗,先把分割狀態用紙筆抄起來,然後
dd if=/dev/zero of=/dev/hda count=1 bs=512 (小朋友不要學喔)
好,當然是毀了(連最後的 55 AA 都沒有 ^^),
用 fdisk /dev/hda 時會告訴你分割表有問題,它可以修復,ok就讓它修吧,
順便手動填入剛才抄下來的分割狀態,重新開機,退出光碟
………………慘了,c槽開不了機(我有設定可開機,果然mbr是不能亂玩的)
再把SystemRescueCd放進去重新開機
開機時進入 freedos,然後下 fdisk /mbr (早就想玩這個指令了)
再重開機,還是先進SystemRescueCd,把前512bytes拷成檔案來看
發現分割表還在…而前446bytes也有一些東西在裡面了,
所以,dos裡的 fdisk /mbr 這個動作,應該是把mbr(前446)還原掉。
(我以前一直以為這個動作會連分割表都清除……原來不會啊……呵)
再重新開機,退出光碟,又可以正常的從 c槽開機了(原來mbr要正常才會去找c開機)
--
g4u網站:http://www.feyrer.de/g4u/
Partimage網站:http://www.partimage.org/
SystemRescueCd網站:http://www.sysresccd.org/

沒有留言: