FreeBSD zfsboot

[華語, cmn-Hant-TW]

安裝

想要把一台 FreeBSD 8.0 機器硬碟升級,想說乾脆換成 GPT 弄個純 zfs 的環境來用看看。在官網的 wiki 有提到在這裡可以下載安裝光碟,裡面有一個 zfsinstall 的 script 可以幫忙把 FreeBSD 安裝到一顆乾淨的硬碟裡面,直接下載附有包好一份 FreeBSD/amd64 dist 的 special edition 比較方便,不然就得自己包一份餵給 zfsinstall 吃。

安裝過程很快,不過重開機後怪事就發生了,開機居然會卡在開機硬碟掃瞄的畫面?!一開始推測是 GPT 的問題,把硬碟清掉之後果然就不卡了,這實在沒啥道理,後來把硬碟拿去用 Mac 的磁碟工具程式分割成 GUID 分割表 (即 GPT),一試居然也不會卡,那問題是在哪? 再深入交叉測試發現原來只要用 gpart create -s GPT 指令做出來的分割表開機的時候就會卡住,就算裡面是空的也一樣,Mac 的則不會。所以結論就是用 FreeBSD 的 gpart 在 WD 6400AAKS 上產生的 GPT 會讓 MSI K8N Neo4-FI 主機板卡在硬碟掃瞄畫面,至於問題是誰造成的我就不知道了。

既然 Mac OS X 產生出來的 GPT 沒問題,那就用 Mac OS X 做一個空殼。因為 Mac 在分割的時候會很貼心的順便塞 EFI 之類的東西進去,所以在安裝前要先用 gpart delete 指令把所有分割區砍掉只留 GPT。然後 zfsinstall 也需要修改,因為他一開始會檢查確認硬碟是否為全空,要把那段註解掉或是讓他檢查沒過時不會跳出,然後 gpart create 的部份也要註解掉,因為事先已用 Mac 之工具做好 GPT 了,一切順利的話,安裝完重新開機就可以進去整顆都是 zfs 的系統了。

移動

要把舊的系統移到新的系統問題不大,用舊硬碟開機下手動將新硬碟的 zfs dataset ( /root /var /tmp /usr ) 掛載上去後直接用 rsync 把既有資料蓋到新硬碟上的相對位置即可,蓋完之後要再修改兩處

/boot/loader.conf
zfs_load="YES"
vfs.root.mountfrom="zfs:data/root"
/etc/fstab
/dev/gptid/78e0d9bd-1fac-11df-bc9c-0210dc9db087 none swap sw 0 0
data/usr /usr zfs rw 0 0
data/var /var zfs rw 0 0
data/tmp /tmp zfs rw 0 0

data 是 zfs pool 的名字,zfsinstall 時可以下參數指定,/etc/fstab 中 swap 的 gptid 可以用 zfs status 查到,事實上這兩個檔案在 zfsinstall 安裝時都會設定好,不過把舊硬碟資料複製到新硬碟時很有可能會被蓋掉,所以要再確認修改。

一切順利的話用新硬碟重開機應該可以看到原來的系統又跑起來了,差別只是硬碟變大、根目錄變 zfs 而已 (輕描淡寫貌)。

update: (2011-12-01)
補充一下,root partition 不要用 gzip,不然會開不了機,zfsv28 的 dedup 倒是沒差可以直接在 root 開
http://www.freebsd.org/cgi/query-pr.cgi?pr=153173

update: (2012-02-02)
試過另一顆 SSD 在原來那台機器上一樣會卡,看來是這張主機板會挑。還有就是後來的版本可以不用 legacy 模式掛載 /usr /var 等,再搭配直接在 zfs volume 上開 swap 的話那就可以完全不用 /etc/fstab ,這樣就更有 zfs 的味道了。

Leave a Reply

Your email address will not be published. Required fields are marked *