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

注意:

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

接下來,考慮如何將它們變成檔案系統的一部份。您可以參考 vinum(8)(章 20, The Vinum Volume Manager) 及 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

上述指令會建立 ad1cad2cad3c, 這些 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 ccd01 322 03 /dev/ad1e4 /dev/ad2e /dev/ad3e

每個參數的作用如下:

1

第一個參數是要設定的裝置名稱,在這個例子裡是 /dev/ccd0c。其中 /dev/ 可有可無。

2

「interleave」的大小。所謂 interleave 是指一排磁碟區塊 (disk block)的大小,通常以 512 bytes 為單位,所以 interleave 設為 32 即為 16,384 bytes。

3

ccdconfig(8) 設定模式的參數。如果您打算啟用磁碟鏡設 (drive mirroring),您可以在此指定參數。這個例子沒有使用鏡設, 所以設成 0。

4

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)檔案系統。

注意:

如果您開機時選擇進入單人模式(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 可增加了彈性、效能和穩定度 [21] vinum(8) 實作了 RAID-0、RAID-1 和 RAID-5 等模組, 它們都可以單獨使用,也可以互相搭配使用。

請見 章 20, The Vinum Volume Manager 以參考更多關於 vinum(8) 的資訊。

18.4.2. 硬體 RAID

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

透過控制器上的 BIOS 幾乎能控制所有的操作。 接下來將簡單介紹如何設定 Promise IDE RAID 控制卡。首先確認控制卡已安裝,接著開機。 它應該會提示一些資訊[22]。依指示進入控制卡的設定畫面, 從這裡您可以將全部的硬體結合成一個大磁碟。完成之後,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. 等重建完就完成了。



[21] 譯註:原文這裡是用「和」,但要視實際使用方式而定。 例如用 RAID-0 就不會增加穩定度 :)。

[22] 譯註:例如按 F1 可以進入控制卡 BIOS 之類的資訊。

All FreeBSD documents are available for download at http://ftp.FreeBSD.org/pub/FreeBSD/doc/

Questions that are not answered by the documentation may be sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.