FreeBSD 使用手冊
Prev | Chapter 18 儲存設備篇 | Next

# 18.4 RAID

## 18.4.1 軟體 RAID

### 18.4.1.1 連接式磁碟裝置驅動程式(CCD, Concatenated Disk Driver) 設定

Original work by Christopher Shumway. Revised by Jim Brown.

對大容量儲存設備而言，最關鍵的要素乃是速度、可靠性及價格。 然而這三者往往難以兼顧：快速可靠的設備通常很貴； 而降低成本通常也犧牲了速度或可靠性。

接下來要介紹的系統，價格是最重要的考量，接下來是速度， 最後才是可靠性。 順序如此是因為資料傳輸的速度最終取決於網路， 而儘管可靠性十分重要，卻有簡單的取代方案： 將資料完整備份於 CD-R 中。

選擇大容量儲存設備方案時，首先要定義您的需求。 如果您重視速度或可靠性甚於價格，接下來的介紹恐非您所需。

#### 18.4.1.1.1 安裝硬體

除了系統磁碟外，下面介紹的 CCD 磁碟陣列將使用到三顆 30GB、 5400 RPM 的 Western Digital IDE 磁碟，以提供約 90GB 的儲存空間。 最理想的情況是每個磁碟由獨立使用的排線連接獨立使用的 IDE 控制器， 不過為了降低成本，利用 jumper 設定磁碟，使每個 IDE 控制器可連接 一個主磁碟加一個副磁碟，如此可不必加裝額外的 IDE 控制器。

開機後，BIOS 應該設定成自重偵測磁碟。更重要的是 FreeBSD 應該 要偵測到它們：

    ad0: 19574MB <WDC WD205BA> [39770/16/63] at ata0-master UDMA33
    ad1: 29333MB <WDC WD307AA> [59598/16/63] at ata0-slave UDMA33
    ad2: 29333MB <WDC WD307AA> [59598/16/63] at ata1-master UDMA33
    ad3: 29333MB <WDC WD307AA> [59598/16/63] at ata1-slave UDMA33

> Note: 如果 FreeBSD 沒有偵測到所有磁碟，請確認 jumper 都設定正確。 許多 IDE 磁碟可以設定成 “Cable Select” (根據排線位置決定)，這並非 master(主磁碟) 或 slave(副磁碟)。 請參閱磁碟的說明文件以正確設定 jumper 。

接下來，考慮如何將它們變成檔案系統的一部份。您可以參考 vinum(8)(Chapter 20) 及 ccd(4)。 在此我們選擇 ccd(4)。

#### 18.4.1.1.2 設定 CCD

ccd(4) 可以將多個磁碟接起來成為一個大磁碟。要使用 ccd(4)，您的 kernel 需要支援 ccd(4)。將這行加入到 kernel 設定檔，並重編、重安裝 kernel：

    device   ccd

也可以載入 kernel 動態模組來支援 ccd(4)。

使用 ccd(4) 請先用 bsdlabel(8) 來初始磁碟：

    bsdlabel -r -w ad1 auto
    bsdlabel -r -w ad2 auto
    bsdlabel -r -w ad3 auto

上述指令會建立 `ad1c`， `ad2c` 和 `ad3c`， 這些 bsdlabel 都使用了整個磁碟。

下一步是修改 label type，同樣用 bsdlabel(8) 來處理：

    bsdlabel -e ad1
    bsdlabel -e ad2
    bsdlabel -e ad3

這個指令會打開一個編輯器(預設是 vi(1)，可以用 `EDITOR` 環境變數來指定其它編輯器)，並將目前磁碟的 label 資訊顯示在該編輯器裡。

一個還未變動過的磁碟 label 資訊看起來會像這樣：

    8 partitions:
    #        size   offset    fstype   [fsize bsize bps/cpg]
      c: 60074784        0    unused        0     0     0   # (Cyl.    0 - 59597)

在此我們要新增一個 `e` partition 給 ccd(4) 使用。 通常複製 `c` partition 那一行， 再把 `fstype` 那一行改成 `4.2BSD` 就可以了。 改完之後看起來應該會像這樣：

    8 partitions:
    #        size   offset    fstype   [fsize bsize bps/cpg]
      c: 60074784        0    unused        0     0     0   # (Cyl.    0 - 59597)
      e: 60074784        0    4.2BSD        0     0     0   # (Cyl.    0 - 59597)

#### 18.4.1.1.3 建立檔案系統

現在所有的磁碟都已經建好 bsdlabel 了，可以開始建立 ccd(4)。 用 ccdconfig(8) 來建立 ccd(4)，參考下面的指令：

    ccdconfig ccd0 32 0 /dev/ad1e /dev/ad2e /dev/ad3e

每個參數的作用如下：

  第一個參數是要設定的裝置名稱，在這個例子裡是 `/dev/ccd0c`。其中 `/dev/` 可有可無。
  「interleave」的大小。所謂 interleave 是指一排磁碟區塊 (disk block)的大小，通常以 512 bytes 為單位，所以 interleave 設為 32 即為 16,384 bytes。
  ccdconfig(8) 設定模式的參數。如果您打算啟用磁碟鏡設 (drive mirroring)，您可以在此指定參數。這個例子沒有使用鏡設， 所以設成 0。
  ccdconfig(8) 最後的參數是要加入到陣列的所有磁碟。 請使用完整的路徑。

執行 ccdconfig(8) 之後，ccd(4) 已設定完成可供建立檔案系統。 請參考 newfs(8) 或輸入：

    newfs /dev/ccd0c

#### 18.4.1.1.4 讓一切自動完成

通常您會希望每次開機時都能自動掛上(mount) ccd(4)。 用下面的指令將您目前的設定寫入 `/etc/ccd.conf` ：

    ccdconfig -g > /etc/ccd.conf

如果 `/etc/ccd.conf` 存在，每次開機時 `/etc/rc` 都會執行 `ccdconfig -C` 。 如此便可自動設定 ccd(4) 以便之後掛上(mount)檔案系統。

> Note: 如果您開機時選擇進入單人模式(single mode)，在掛上 (mount(8)) ccd(4) 的檔案系統之前您得先執行設定的指令：

>     ccdconfig -C

要在每次開機時自動掛上(mount) ccd(4)，請在 `/etc/fstab` 加入 ccd(4)：

    /dev/ccd0c              /media       ufs     rw      2       2

### 18.4.1.2 Vinum 容量管理系統

Vinum 容量管理系統(以下簡稱 Vinum) 可視為一種虛擬磁碟。 它將區塊裝置(block device) 的介面與對應資料的方式切割開來，比起原本 slice 劃分的磁碟，Vinum 可增加了彈性、效能和穩定度 [1] vinum(8) 實作了 RAID-0、RAID-1 和 RAID-5 等模組， 它們都可以單獨使用，也可以互相搭配使用。

請見 Chapter 20 以參考更多關於 vinum(8) 的資訊。

## 18.4.2 硬體 RAID

FreeBSD 也支援許多硬體 RAID 控制器。 這些控制器自行掌控一個小型的 RAID 系統， 因此不需要特定軟體來管理。

透過控制器上的 BIOS 幾乎能控制所有的操作。 接下來將簡單介紹如何設定 Promise IDE RAID 控制卡。首先確認控制卡已安裝，接著開機。 它應該會提示一些資訊[2]。依指示進入控制卡的設定畫面， 從這裡您可以將全部的硬體結合成一個大磁碟。完成之後，FreeBSD 將只會看到這個大磁碟。當然您也可以使用其它的 RAID 模式。

## 18.4.3 重建(rebuild) ATA RAID1 陣列

FreeBSD 允許您熱插拔磁碟陣列裡壞掉的磁碟， 當然在重開機前就得先發現。

也許您會在 `/var/log/messages`(或 dmesg(8) 的輸出) 看到類似下面的訊息：

    ad6 on monster1 suffered a hard error.
    ad6: READ command timeout tag=0 serv=0 - resetting
    ad6: trying fallback to PIO mode
    ata3: resetting devices .. done
    ad6: hard error reading fsbn 1116119 of 0-7 (ad6 bn 1116119; cn 1107 tn 4 sn 11)\\
    status=59 error=40
    ar0: WARNING - mirror lost

請用 atacontrol(8) 來得到更多資訊：

    # atacontrol list
    ATA channel 0:
        Master:      no device present
        Slave:   acd0 <HL-DT-ST CD-ROM GCR-8520B/1.00> ATA/ATAPI rev 0

    ATA channel 1:
        Master:      no device present
        Slave:       no device present

    ATA channel 2:
        Master:  ad4 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
        Slave:       no device present

    ATA channel 3:
        Master:  ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
        Slave:       no device present

    # atacontrol status ar0
    ar0: ATA RAID1 subdisks: ad4 ad6 status: DEGRADED

1. 首先您得將損壞磁碟所在的 ata channel 卸載(detach)， 如此才能安全地移除：

       # atacontrol detach ata3

2. 用好的磁碟換下損壞的。

3. 重新載入(re-attach) ata channel：

       # atacontrol attach ata3
       Master:  ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
       Slave:   no device present

4. 將新的磁碟加入原本的磁碟陣列成為備援(spare) 磁碟：

       # atacontrol addspare ar0 ad6

5. 重建磁碟陣列：

       # atacontrol rebuild ar0

6. 可以用下面指定來確認重建的進度：

       # dmesg | tail -10
       [output removed]
       ad6: removed from configuration
       ad6: deleted from ar0 disk1
       ad6: inserted into ar0 disk1 as spare

       # atacontrol status ar0
       ar0: ATA RAID1 subdisks: ad4 ad6 status: REBUILDING 0% completed

7. 等重建完就完成了。

### Notes

[1] | 譯註：原文這裡是用「和」，但要視實際使用方式而定。 例如用 RAID-0 就不會增加穩定度 :)。
[2] | 譯註：例如按 F1 可以進入控制卡 BIOS 之類的資訊。

Prev | Home | Next
新增磁碟 | Up | USB 儲存裝置

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

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