FreeBSD
相信一些朋友也曾經想過如何快捷安全遷移數據,遷移數據可能有多種原因,一種是想增加一塊硬盤,把原來一些空間不夠的分區遷移過來;另一種是硬盤復制,舊的硬盤容量可能太小了,又或者已經出現了問題,想用新的硬盤代替。蔥頭就分別舉例說明怎樣遷移數據,具體方法可能和你的硬盤的實際情況有所不同,這裡只是作一個指引。
無論是那種方法,都必須先將新硬盤裝上並讓系統正確識別。為了不用設硬盤跳線(硬盤缺省為Master),這裡舉例安裝一個新的IDE硬盤到IDE1接口,即與舊硬盤使用不同的數據線,系統識別為ad2;如果你想和舊硬盤接在同一數據線線上,即IDE0接口,則必須將跳線設為client,系統識別為ad1。
1、關機,將新硬盤裝上,重新開機。
2、開機後查看是否系統是否已經識別到新硬盤了:
hpserver# dmesg | grep ad2
成功的話會顯示
ad2: 9765MB
[19841/16/63] at ata1-master UDMA33
等信息,否則你要檢查是否接錯線,或者硬件兼容問題。
新硬盤已經安裝成功,下面舉例說一下兩種數據遷移的方法。
一、增加一個硬盤,將原來硬盤/var數據轉移到新硬盤
在系統已經建立之後,FreeBSD不能像PQMagic那樣自由調整分區空間而不破壞分區數據,所以,如果/var空間已經不夠,需要增加一塊硬盤增加空間,原來的數據也必須遷移過來。
2、對新硬盤進行分區
可以使用sysinstall或者命令行方式分區。雖然fdisk有更多靈活性,但我建議還是采用sysinstall較好。分區完之後再用sysinstall裡面的Label建立文件系統相關文件系統。
3、將文件系統掛載到/mnt
hpserver# mount /dev/ad1s1e /mnt
4、將數據遷移,這裡也有兩種方法,一種是使用tar,另一種是使用dump,我分別介紹,大家可以根據需要而選擇備份方式。
(1) 使用tar備份並還原數據。
hpserver# cd /var
hpserver# tar cf - * | (cd /mnt; tar xf -)
(2) 使用dump備份並用restore還原數據。就我個人而言,我推薦使用這種方法,因為我曾經試過用tar備份var目錄的時候,出現了錯誤並自動停止,我分析了一下原因,一些正在使用的文件或者臨時文件可能不能備份,但dump不是以文件為單位,而是而block為單位的,應該不存在這樣的情況,所以這是我推薦使用dump和restore的原因。
hpserver# cd /mnt
hpserver# dump -f- /var | restore -f- -r
在過程中和結束會出現類似以下信息:
DUMP: Date of this level 0 dump: Wed Jan 14 23:44:35 2004
DUMP: Date of last level 0 dump: the epoch
DUMP: Dumping /dev/ad0s1e (/var) to standard output
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 305 tape blocks.
DUMP: dumping (Pass III) [directories]
DUMP: dumping (Pass IV) [regular files]
DUMP: DUMP: 361 tape blocks
DUMP: finished in less than a second
DUMP: DUMP IS DONE
5、有一點提醒的是,你要確保備份後沒有數據寫入原來的/var,否則,這些數據沒有備份到新分區中。結束後別忘了檢查一下結果,並卸載/mnt。
hpserver# ls /mnt
hpserver# umount /mnt
6、編輯/etc/fstab文件,將原來指向/var的文件系統改為/dev/ad1s1e,重新啟動就可生效。
二、硬盤復制
如果舊的系統盤出現了一些毛病,或者容量不夠,你想更換一個新硬盤,那可以把舊硬盤數據復制到新硬盤,然後把舊硬盤摘下。按照上面的步驟,我們假定已經將硬盤安裝好。
這裡有一個小tips,就是先記下舊硬盤文件系統所對應的mount點,新硬盤分區次序按照舊的一樣,這樣免去我們下面容易混淆的步驟,我們查看/etc/fstab對照就知道了。不然搞了幾下,自己都忘記了ad2s1e到底是用來掛載那個目錄的。
1、使用sysinstall把新硬盤分區,設置好MBR,並一一對照原來的次序創建文件系統,假設原來的文件系統/dev/ad0s1g 對應/usr,那你新硬盤/dev/ad2s1g就用來做/usr,原來的文件系統/dev/ad0s1e 對應/var,那你新硬盤/dev/ad2s1e就用來做/var。按M分別清空所有文件系統的mount點,因為我們還沒有建立臨時的mount的目錄,不清空會和系統原來的mount沖突的。
2、創建臨時的目錄用來作臨時mount點並掛載這些文件系統。
hpserver# cd /mnt
hpserver# mkdir root
hpserver# mkdir usr
hpserver# mkdir var
用cat /etc/fstab查看原來的文件系統的對應關系,我們只要看最後面的一個字母就可以了,這樣避免我們忘記了什麼對應什麼,這就是我剛才為什麼讓新硬盤的文件系統的名稱對應以前的原因。
hpserver# mount /dev/ad2s1a /mnt/root
hpserver# mount /dev/ad2s1g /mnt/usr
hpserver# mount /dev/ad2s1e /mnt/var
3、復制硬盤最好用dump,盡量不用tar,因為你備份根分區的時候,如果不加參數排除一些目錄,它會把全部東西備份到你新的分區的,這肯定不是我們想看到的。
hpserver# cd /mnt/root
hpserver# dump -f- / | restore -f- -r
hpserver# cd /mnt/var
hpserver# dump -f- /var | restore -f- -r
hpserver# cd /mnt/usr
hpserver# dump -f- /usr | restore -f- -r
4、到這裡為止,數據備份和還原已經結束,檢查一下有沒有錯漏,然後分別umount這些分區。
hpserver# umount /mnt/root
hpserver# umount /mnt/usr
hpserver# umount /mnt/var
5、最後,關機,摘掉原來的硬盤,把新硬盤掛到舊硬盤原來的位置,這步不要省略了,如果你不換位置,系統還是認為新硬盤是ad2,由於你的/etc/fstab裡面是對應ad0的,所以啟動會找不到/usr和/var等文件系統。啟動看看,如果沒有什麼異常,那恭喜你,數據遷移已經成功,否則,請再看看有什麼操作錯誤或者忘記做哪一步了。無論怎樣,都別那麼著急把舊硬盤內容清空,最好讓新的系統運行幾天觀察有什麼異常再動手。
切記,數據遷移的是一件比較危險的事情,操作過程中不能有差錯,否則可能導致你原來的數據丟失,所以必須非常謹慎。