19.4 RAID1 - 鏡射(Mirroring)

許多企業或個人用戶用鏡射(mirroring) 來不中斷系統進行備份。 鏡射簡單來說就是在 B 磁碟上重覆一份 A 磁碟的資料, 或者 C+D 磁碟重覆 A+B 磁碟的資料。不論設定如何, 最重要的是所有磁碟或分割區(partition) 上的資料都會被複製, 之後可在不中斷服務的情況下復原、備份資料,使儲存的資料更安全。

開始之前,請先確定系統上有兩個容量相同的磁碟, 後面的範例假設這兩顆磁碟是 direct access(da(4)) SCSI 磁碟。

首先我們假設 FreeBSD 安裝在第一個磁碟上,且只有兩個分割區(partition)。 其中一個是交換分割區(swap partition,大小為 RAM 的兩倍),而剩下的全用於根目錄(即 /, root file system)。當然要在不同掛載點(mount point) 切出更多分割區 (partition) 也可以,不過難度會大幅提升,因為必須手動操作 bsdlabel(8)fdisk(8) 工具。

重開機並等到系統完全初始化完畢,用 root 登入。

建立 /dev/mirror/gm 裝置並以 /dev/da1 連結:

# gmirror label -vnb round-robin gm0 /dev/da1

這時系統應該會回應:

Metadata value stored on /dev/da1.
Done.

初始化 GEOM,這動作會自動載入 /boot/kernel/geom_mirror.ko kernel module:

# gmirror load

Note: 這動作應該會在 /dev/mirror 下建立 gm0 裝置結點(device node)。

在這個新建的 gm0 裝置上安置一般的 fdisk label 和開機磁區:

# fdisk -vBI /dev/mirror/gm0

接著安置 bsdlabel 資訊:

# bsdlabel -wB /dev/mirror/gm0s1

Note: 如果存在多個 slice 和分割區(partition), 記得修改上兩指令的參數,且另一個磁碟上的 slice 和分割區(partition) 大小必須相同。

newfs(8) 工具在 gm0s1a 裝置結點建立預設的檔案系統:

# newfs -U /dev/mirror/gm0s1a

系統會印出許多資訊和一大堆數字,這是正常的。 確認是否有認何錯誤,接著就可以將這個裝置掛載到 /mnt 掛載點(mount mount):

# mount /dev/mirror/gm0s1a /mnt

接著將原本開機磁碟的資料搬移到新的檔案系統 (/mnt)。範例是用 dump(8)restore(8) ,不過用 dd(1) 也可以。

# dump -L -0 -f- / |(cd /mnt && restore -r -v -f-)

執行上述指令時,只要將恰當的檔案系統掛在正確的位置,應該就能成功。

接著編輯 /mnt/etc/fstab 檔將 swap file 那行移除或註解起來。 [1]請參考下面範例,並根據新磁碟修改其它的檔案系統資訊:

# Device                Mountpoint      FStype  Options         Dump    Pass#
#/dev/da0s2b             none            swap    sw              0       0
/dev/mirror/gm0s1a       /               ufs     rw              1       1

在目前的根目錄及新的根目錄建立 boot.conf 檔案, 這個檔案可以『幫助』系統 BIOS 開機:

# echo "1:da(1,a)/boot/loader" > /boot.config
# echo "1:da(1,a)/boot/loader" > /mnt/boot.config

Note: 在兩個根目錄上都新增檔案是為了安全起見, 如果因為某些原因新的根目錄無法開機,至少還可用原本的根目錄。

接著在 /boot/loader.conf 新增兩行:

# echo 'geom_mirror_load="YES"' >> /mnt/boot/loader.conf

這會指示 loader(8) 在開機時載入 geom_mirror.ko kernel module。

重開機:

# shutdown -r now

如果一切順利,系統應該會從 gm0s1a 裝置開機, 接下來出現 login 提示畫面。如果出錯了, 請參閱下面 Troubleshooting 那一節。 現在可以將 da0 磁碟加入 gm0 裝置:

# gmirror configure -a gm0
# gmirror insert gm0 /dev/da0

其中 -a 旗標告訴 gmirror(8) 使用「自動同步(automatic synchronization)」,例如自動同步寫入磁碟的動作。 manual 說明了如何重建、取代磁碟等,不過 manual 裡的範例是用 data 而不是 gm0

19.4.1 Troubleshooting

19.4.1.1 系統無法開機

如果開機提示類似這樣:

ffs_mountroot: can't find rootvp
Root mount failed: 6
mountroot>

請用機器面板上的 Power 按鈕或 reset 按鈕來重開機,並在開機選單選 (6), 這樣子,系統就會進入 loader(8) 交談模式。這時候,請照下面指令來手動載入所需的 kernel module ,也就是 geom_mirror.ko

OK? load geom_mirror.ko
OK? boot

如果這樣成功了的話,表示因為某些原因無法自動載入 kernel module。 請將:

options    GEOM_MIRROR

加入到核心設定檔(kernel configuration file),重編並安裝核心。 這應該能解決這個問題。

Notes

[1]

請注意,將 fstab 的 swap file 那行註解起來,通常表示:您得用別的方法來重建 swap。詳情請參考 Section 11.14

本文及其他文件,可由此下載:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/

若有 FreeBSD 方面疑問,請先閱讀 FreeBSD 相關文件,如不能解決的話,再洽詢 <questions@FreeBSD.org>。
關於本文件的問題,請洽詢 <doc@FreeBSD.org>。