FreeBSD gmirror 實作筆記

最近為我們家的郵件主機做mirror,之前為了怕出狀況, 所以先在virtual machine中實作一次, 情況很正常。主要的作法如FreeBSD HandBook, 及以下文章所述:
Using Software RAID-1 with FreeBSD

之後在正式機器上做時, 卻出包了! 重新開機時, 出現如下訊息:
Mounting root from ufs:/dev/gm0s1a
setrootbyname failed
ffs_mountroot: can't find rootvp
Root mount failed: 6

Manual root filesystem specification:
: Mount using filesystem
e.g. ufs:da0s1a
? List valid disk boot devices
Abort manual input
mountroot>

正式機器那容我們慢慢找問題, 所幸之前已經準備一台virtual machine, 並將所有使用者帳號及郵件資料都備份過去了, 所以當下先切換機器給使用者使用。幾日下來, 備用機器運作也很順, 使用者應該沒發覺, 其實郵作主機已經換了一台。:-)
接下來, 就是思考問題出在那了。其實正如ONLAMP那篇文章的使用者留言, 有人提到, 文章使用的範例是將ad0, ad2兩顆實體硬碟做成mirror/gm0; 如果實作的環境不一樣時, 很容易在修改/etc/fstab檔時, 弄錯。我就是弄錯了!!
原本的/etc/fstab如下:
# Device Mountpoint FStype Options Dump Pass#
/dev/ad4s1b none swap sw 0 0
/dev/ad4s1a / ufs rw 1 1
/dev/ad4s1g /home ufs rw,userquota 2 2
/dev/ad4s1e /tmp ufs rw 2 2
/dev/ad4s1f /usr ufs rw 2 2
/dev/ad4s1d /var ufs rw 2 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0
應該要改成如下:
# Device Mountpoint FStype Options Dump Pass#
/dev/mirror/gm0s1b none swap sw 0 0
/dev/mirror/gm0s1a / ufs rw 1 1
/dev/mirror/gm0s1g /home ufs rw,userquota 2 2
/dev/mirror/gm0s1e /tmp ufs rw 2 2
/dev/mirror/gm0s1f /usr ufs rw 2 2
/dev/mirror/gm0s1d /var ufs rw 2 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0
也就是要把ad4改成mirror/gm0(因為我之前建置gmirror的磁碟為gm0: # gmirror label -vb round-robin gm0 /dev/ad4)不過HandBook的範例中說可以在vi中下指令%s/da/mirror\/gm/g, 這在實體硬碟為da0時,是正確的; 但是我的情況為ad4時就不對了。一時沒注意, 在vi下了%s/ad/mirror\/gm/g(應該改為%s/ad4/mirror\/gm0/g)。當然, 在重開機後就出現上述錯誤。以下談如何解救:
-----------------------------------------------

首先在 mountroot> 後面打?, 就會出現可用的分割區, 然後要系統使用正確的分割區啟動
mountroot> ufs:/dev/mirror/gm0s1a
Mounting root from /dev/mirror/gm0s1a
結果真的會開始由該分割區進行啟動動作, 但不久會出現很多錯誤訊息, 不用擔心! 只要出現#提示號, (應該有提示進入單一使用者模式)就可以開始救援了!
先列出/etc/fstab的內容, 再依其內容手動把分割區mount起來:
# cat /etc/fstab
# mount /dev/mirror/gm0s1f /usr
# mount /dev/mirror/gm0s1e /tmp
# mount -f /
# vi /etc/fstab
...修改...
:wq!
# sync;sync;sync
# reboot
為什麼不直接修改/etc/fstab呢? 因為此時我們只有mount /, 沒錯/etc/fstab是在根目錄下, 但是要用什麼程式來修改它呢?用vi或ee都可以, 但這兩個程式都放在/usr目錄下, 所以才要先mount /usr. 另外, 不管vi或ee都需要/tmp做暫存, 所以也要先mount.
還有/現在是在唯讀模式下, 這樣沒有辦法修改/etc/fstab, 所以要將/改為可讀寫的模式(mount -f /).
一旦改好, 再重開, 就正常了。

留言

這個網誌中的熱門文章

D-BUS學習筆記

關於藍牙裝置找尋(inquiry, scan)兩三事

Cisco Switch學習筆記: EtherChannel