22.3. Using mdadm to Configure RAID-Based and Multipath Storage
raidtoolspackage set, the
mdadmcommand can be used to perform all the necessary functions related to administering multiple-device sets. This section explains how
mdadmcan be used to:
- Create a RAID device
- Create a multipath device
22.3.1. Creating a RAID Device With
/etc/mdadm.conffile to define appropriate
DEVICE /dev/sd[abcd]1 ARRAY /dev/md0 devices=/dev/sda1,/dev/sdb1,/dev/sdc1,/dev/sdd1
DEVICEline is using traditional file name globbing (refer to the
glob(7) man page for more information) to define the following SCSI devices:
ARRAYline defines a RAID device (
/dev/md0) that is comprised of the SCSI devices defined by the
/proc/mdstatfile shows no active RAID devices:
Personalities : read_ahead not set Event: 0 unused devices: none
mdadmcommand to create a RAID 0 array:
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.
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
22.3.2. Creating a Multipath Device With
mdadmcan also be used to take advantage of hardware supporting more than one I/O path to individual SCSI LUNs (disk drives). The goal of multipath storage is continued data availability in the event of hardware failure or individual path saturation. Because this configuration contains multiple paths (each acting as an independent virtual controller) accessing a common SCSI LUN (disk drive), the Linux kernel detects each shared drive once "through" each path. In other words, the SCSI LUN (disk drive) known as
/dev/sdamay also be accessible as
/dev/sdc, and so on, depending on the specific configuration.
mdadmincludes an additional parameter to its
leveloption. This parameter
multipathdirects the md layer in the Linux kernel to re-route I/O requests from one pathway to another in the event of an I/O path failure.
/etc/mdadm.conffile to define values for the
ARRAYlines that reflect your hardware configuration.
/etc/mdadm.confmust represent different physical disk drives), each device in this file refers to the same shared disk drive.
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.
/dev/md0is created, all I/O operations referencing
/dev/md0are directed to
/dev/sdd1(depending on which path is currently active and operational).
/dev/md0can be examined more closely using the command
mdadm --detail /dev/md0to verify that it is, in fact, a multipath device:
/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
mdadmis the ability to force a device (be it a member of a RAID array or a path in a multipath configuration) to be removed from an operating configuration. In the following example,
/dev/sda1is flagged as being faulty, is then removed, and finally is added back into the configuration. For a multipath configuration, these actions would not affect any I/O activity taking place at the time:
# 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 #