F.3. 利用 mdadm 設定 RAID 類與多路徑(Multipath)的儲存裝置

raidtools 套件組中的工具一樣,mdadm 指令可以用來執行所有與管理多裝置組相關的功能。在本節中,我們將告訴您如何利用 mdadm 指令,以:

F.3.1. 使用 mdadm 指令建立 RAID 裝置

要建立 RAID 裝置,請編輯 /etc/mdadm.conf 檔案,設定適切的 DEVICEARRAY 值。

DEVICE /dev/sd[abcd]1
ARRAY /dev/md0 devices=/dev/sda1,/dev/sdb1,/dev/sdc1,/dev/sdd1

在本例中,DEVICE 一行使用的是傳統檔名的 glob 指令(請參閱 glob(7) man page 獲得更多訊息),以定義以下的 SCSI 裝置:

ARRAY 一行則定義了 DEVICE 行中,組成 RAID 的裝置(/dev/md0)。

在建立或使用任何 RAID 裝置前,/proc/mdstat 檔案顯示目前系統並無任何 RAID 裝置運作中:

Personalities :
read_ahead not set
Event: 0
unused devices: <none>

接下來,使用以上設定與 mdadm 指令,以建立 RAID 0 陣列:

mdadm -C /dev/md0 --level=raid0 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 \
/dev/sdd1
Continue creating array? yes
mdadm: array /dev/md0 started.

建立完成之後,您就可以隨時查詢該 RAID 裝置,獲得狀態資訊。底下的範例顯示了使用 mdadm --detail /dev/md0 指令的結果:

/dev/md0:
Version : 00.90.00
Creation Time : Mon Mar  1 13:49:10 2004
Raid Level : raid0
Array Size : 15621632 (14.90 GiB 15.100 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Mon Mar  1 13:49:10 2004
State : dirty, no-errors
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0

Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
         0       8        1        0      active sync   /dev/sda1
         1       8       17        1      active sync   /dev/sdb1
         2       8       33        2      active sync   /dev/sdc1
         3       8       49        3      active sync   /dev/sdd1
           UUID : 25c0f2a1:e882dfc0:c0fe135e:6940d932
         Events : 0.1

F.3.2. 使用 mdadm 指令建立多路徑(multipath)裝置

除了建立 RAID 陣列外,只要硬體支援,mdadm 指令也可以透過多個 I/O 路徑,連到每個 SCSI LUN (磁碟機)去。即使硬體失效,或是某個路徑的容量過於飽和,多路徑儲存也能繼續提供服務。由於這設定包括多條路徑(每條路徑都以獨立的虛擬控制卡來運作)存取一個共同的 SCSI LUN (磁碟機),所以 Linux 核心會「透過」每條路徑偵測每個磁碟機。換句話說,視為 /dev/sda 的 SCSI LUN (磁碟機)也可以透過 /dev/sdb/dev/sdc 等等來存取,端看設定而定。

要在 I/O 路徑失效或過度飽和時,單一裝置還是可以提供服務,mdadm––level 選項提供了額外的參數。這參數 — multipath — 會指向 Linux 核心的 md 層,在一條 I/O 路徑失效時,將 I/O 需求引導到另一條路徑去。

要建立多路徑裝置,請編輯 /etc/mdadm.conf 檔,定義 DEVICEARRAY 兩行的值,以反映您的硬體設定。

注注意
 

跟之前 RAID 的範例不同(在 RAID 範例中,每個 /etc/mdadm.conf 中的磁碟都代表不同的實體磁碟機),這檔案中的每個裝置都指向同一台分享磁碟機。

這用於建立多路徑裝置的指令跟建立 RAID 裝置的指令類似;不同之處在於將 RAID 等級的參數改為 multipath 參數:

mdadm -C /dev/md0 --level=multipath --raid-devices=4 /dev/sda1 /dev/sdb1  
 /dev/sdc1 /dev/sdd1
Continue creating array? yes
mdadm: array /dev/md0 started.

由於 mdadm 指令的長度關係,我們把它分成兩行來顯示。

在這例子裡,包括一個 SCSI LUN 的硬體代表四個獨立的 SCSI 裝置,每組裝置都使用不同的路徑存取同一個儲存空間。一旦建立路徑裝置 /dev/md0 之後,所有參照 /dev/md0 的 I/O 都會導向到 /dev/sda1/dev/sdb1/dev/sdc1、或 /dev/sdd1 (視目前哪一條路徑在運行中,並且是可用的)。

您可以使用 mdadm --detail /dev/md0 指令,查詢/dev/md0 的細部設定,以確定它的確是多路徑裝置:

/dev/md0:
Version : 00.90.00
Creation Time : Tue Mar  2 10:56:37 2004
Raid Level : multipath
Array Size : 3905408 (3.72 GiB 3.100 GB)
Raid Devices : 1
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Tue Mar  2 10:56:37 2004
State : dirty, no-errors
Active Devices : 1
Working Devices : 4
Failed Devices : 0
Spare Devices : 3

    Number   Major   Minor   RaidDevice State
       0       8       49        0      active sync   /dev/sdd1
       1       8       17        1      spare   /dev/sdb1
       2       8       33        2      spare   /dev/sdc1
       3       8        1        3      spare   /dev/sda1
           UUID : 4b564608:fa01c716:550bd8ff:735d92dc
         Events : 0.1

另一個 mdadm 的特點是能從操作設定中,強迫移除裝置(不管是 RAID 陣列或多路徑設定的裝置皆可)。在接下來的例子中,/dev/sda1 已經被標示為發生錯誤,然後將被移除,最後在加回設定中。對多路徑的設定來說,這些動作不會對 I/O 活動產生任何衝擊:

# mdadm /dev/md0 -f /dev/sda1
mdadm: set /dev/sda1 faulty in /dev/md0
# mdadm /dev/md0 -r /dev/sda1
mdadm: hot removed /dev/sda1
# mdadm /dev/md0 -a /dev/sda1
mdadm: hot added /dev/sda1
#