分类: LINUX
2006-02-10 14:53:18
F.3. 利用 mdadm 設定 RAID 類與多路徑(Multipath)的儲存裝置
跟 raidtools 套件組中的工具一樣,mdadm 指令可以用來執行所有與管理多裝置組相關的功能。在本節中,我們將告訴您如何利用 mdadm 指令,以:
F.3.1. 使用 mdadm 指令建立 RAID 裝置
要建立 RAID 裝置,請編輯 /etc/mdadm.conf 檔案,設定適切的 DEVICE 與 ARRAY 值。
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: |
接下來,使用以上設定與 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. |
我的配置方法 分区,用fdisk,raid5要3个分区以上,用在fdisk内t命令把分区标识fd, 例如: Disk /dev/hdb: 62.9 GB, 62913208320 bytes 255 heads, 63 sectors/track, 7648 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hdb1 1 7648 61432528+ 5 Extended /dev/hdb5 1 1217 9775489+ fd Linux raid autodetect /dev/hdb6 1218 2434 9775521 fd Linux raid autodetect /dev/hdb7 2435 3651 9775521 fd Linux raid autodetect /dev/hdb8 3652 4868 9775521 fd Linux raid autodetect 配置命令: mdadm --create /dev/md0 --level=raid5 --chunk=8 --raid-devices=4 /dev/hdb5 /dev/hdb6 /dev/hdb7 /dev/hdb8 格式化 mkfs.ext3 /dev/md0 用mount /dev/md0 /mnt 测试看看是否可以挂上。 编辑mdadm.conf ,没有内容没有问题
man mdadm.conf EXAMPLE DEVICE /dev/sd[bcdjkl]1 DEVICE /dev/hda1 /dev/hdb1 # /dev/md0 is known by it's UID. ARRAY /dev/md0 UUID=3aaa0122:29827cfa:5331ad66:ca767371 # /dev/md1 contains all devices with a minor number of # 1 in the superblock. ARRAY /dev/md1 superminor=1 # /dev/md2 is made from precisey these two devices ARRAY /dev/md2 devices=/dev/hda1,/dev/hda2 # /dev/md4 and /dev/md5 are a spare-group and spares # can be moved between them ARRAY /dev/md4 uuid=b23f3c6d:aec43a9f:fd65db85:369432df spare-group=group1 ARRAY /dev/md5 uuid=19464854:03f71b1b:e0df2edd:246cc977 spare-group=group1 MAILADDR root@mydomain.tld PROGRAM /usr/sbin/handle-mdadm-events |
建立完成之後,您就可以隨時查詢該 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 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 檔,定義 DEVICE 與 ARRAY 兩行的值,以反映您的硬體設定。
注意 |
跟之前 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 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 # |
mdadm 使用参考
JesseLee 于 2004年 12月17日 发表
mdadm是linux下用于管理软件 raid 的工具
以下内容来自 manpage 页:
基本语法 :?mdadm [mode] [options]
[mode] ?有7种:
Assemble:将以前定义的某个阵列加入当前在用阵列。
Build:Build a legacy array ,每个device 没有 superblocks
Create:创建一个新的阵列,每个device 具有 superblocks
Manage: 管理阵列,比如 add 或 remove
Misc:允许单独对阵列中的某个 device 做操作,比如抹去superblocks 或 终止在用的阵列。
Follow or Monitor:监控 raid 1,4,5,6 和 multipath 的状态
Grow:改变raid 容量或 阵列中的 device 数目
可用的 [options]:
-A, --assemble:加入一个以前定义的阵列
-B, --build:Build a legacy array without superblocks.
-C, --create:创建一个新的阵列
-Q, --query:查看一个device,判断它为一个 md device 或是 一个 md 阵列的一部分
-D, --detail:打印一个或多个 md device 的详细信息
-E, --examine:打印 device 上的 md?superblock 的内容
-F, --follow, --monitor:选择 Monitor 模式
-G, --grow:改变在用阵列的大小或形态
-h, --help:帮助信息,用在以上选项后,则显示该选项信息
--help-options
-V, --version
-v, --verbose:显示细节
-b, --brief:较少的细节。用于 --detail?和?--examine 选项
-f, --force
-c, --config= :指定配置文件,缺省为 /etc/mdadm/mdadm.conf
-s, --scan:扫描配置文件或 /proc/mdstat以搜寻丢失的信息。配置文件/etc/mdadm/mdadm.conf
create?或 build 使用的选项:
-c, --chunk=:Specify chunk size of kibibytes.??缺省为 64.
--rounding=: Specify rounding factor for linear array (==chunk size)
-l, --level=:设定 raid level.
--create可用:linear, raid0, 0, stripe, raid1,1, mirror, raid4, 4, raid5, 5, raid6, 6, multipath, mp.
--build可用:linear, raid0, 0, stripe.
-p, --parity=:设定 raid5 的奇偶校验规则:
left-asymmetric, left-symmetric, right-asymmetric, right-symmetric, la, ra, ls, rs.缺省为left-symmetric
--layout=:类似于--parity
-n, --raid-devices=:指定阵列中可用? device 数目,这个数目只能由 --grow 修改
-x, --spare-devices=:指定初始阵列的富余device 数目
-z, --size=:组建RAID1/4/5/6后从每个device获取的空间总数
--assume-clean:目前仅用于 --build 选项
-R, --run:阵列中的某一部分出现在其他阵列或文件系统中时,mdadm会确认该阵列。此选项将不作确认。
-f, --force:通常mdadm不允许只用一个device创建阵列,而且创建raid5时会使用一个device作为missing drive。此选项正相反。
-a, --auto{=no,yes,md,mdp,part,p}{NN}:
1. mdadm 新增一個 hdd 請用
mdadm --manage /dev/md0 --add /dev/hdg1
主功能 MD Driver 副功能 副功能 function.
2. 新建一個 Raid 請用
mdadm --create /dev/md0 --chunk=32 --level=0 --raid-devices=4
/dev/hd[efgh]1
以上請接成一行
3. rebuild 上面那個 Raid
mdadm --build /dev/md0 --chunk=32 --level=0 [...]