19.4. RAID1 - 鏡射(Mirroring)
前一頁 | 章 19. GEOM: Modular Disk Transformation Framework | 下一頁

## 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

### 注意:

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

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

    # fdisk -vBI /dev/mirror/gm0

接著安置 `bsdlabel` 資訊：

    # bsdlabel -wB /dev/mirror/gm0s1

### 注意:

如果存在多個 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 那行移除或註解起來。 [24]請參考下面範例，並根據新磁碟修改其它的檔案系統資訊：

    # 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

### 注意:

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

接著在 `/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)，重編並安裝核心。 這應該能解決這個問題。

[24] 請注意，將 `fstab` 的 swap file 那行註解起來，通常表示：您得用別的方法來重建 swap。詳情請參考 節 11.14, “Adding Swap Space”。

前一頁 | 上一層 | 下一頁
19.3. RAID0 - 分散連結(striping) | 起始頁 | 章 20. The Vinum Volume Manager

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

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