Mdadm is the modern tool most Linux distributions use these days to manage software RAID arrays; in the past raidtools was the tool we have used for this. This cheat sheet will show the most common usages of mdadm to manage software raid arrays; it assumes you have a good understanding of software RAID and Linux in general, and it will just explain the commands line usage of mdadm. The examples bellow use RAID1, but they can be adapted for any RAID level the Linux kernel driver supports.
1. Create a new RAID array
Create (mdadm –create) is used to create a new array:
1 | # mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdX1 /dev/sdY2 |
or using the compact notation:
1 | # mdadm -Cv /dev/md0 -l1 -n2 /dev/sd[XY]1 |
2. Save of configuration – mdadm.conf
mdadm.conf -is the main configuration file for mdadm. After we create our RAID arrays we add them to this file using:
1 | # mdadm --detail --scan >> /etc/*/mdadm.conf |
3. Remove a disk from an array
We can’t remove a disk directly from the array, unless it is failed, so we first have to fail it (if the drive it is failed this is normally already in failed state and this step is not needed):
Мы не можем удалить диск непосредственно из массива, если только он не уже отказал, поэтому сначала нам нужно его отключить (если диск не работает, обычно он уже находится в состоянии отказа, и этот шаг не требуется):
1 | # mdadm --fail /dev/md0 /dev/sdX1 |
and now we can remove it:
1 | # mdadm --remove /dev/md0 /dev/sdX1 |
This can be done in a single step using:
1 | # mdadm /dev/md0 --fail /dev/sdX1 --remove /dev/sdX1 |
4. Add a disk to an existing array
We can add a new disk to an array (replacing a failed one probably):
1 | # mdadm --add /dev/md0 /dev/sdX1 |
5. Seeking of arrays
The result of the section research by the command ‘mdadm –examine’ “
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | # mdadm --examine /dev/sda1 /dev/sda1: Magic : a92b4efc Version : 0.90.00 UUID : 6d1679c1:31d4919b:a3bab061:9112c3c7 (local to host RIPLinuX) Creation Time : Thu Jan 30 10:47:24 2014 Raid Level : raid1 Used Dev Size : 524224 (512.02 MiB 536.81 MB) Array Size : 524224 (512.02 MiB 536.81 MB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 0 Update Time : Wed Jan 10 14:30:11 2018 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Checksum : 2a2c227f - correct Events : 309 Number Major Minor RaidDevice State this 0 8 1 0 active sync /dev/sda1 0 0 8 1 0 active sync /dev/sda1 1 1 8 17 1 active sync /dev/sdb1 # |
6. Auto assembly
When –assemble is used with –scan and no devices are listed, mdadm will first attempt to assemble all the arrays listed in the config file. If no arrays are listed in the config (other than those marked
If mdadm finds a consistent set of devices that look like they should comprise an array, and if the superblock is tagged as belonging to the given home
host, it will automatically choose a device name and try to assemble the array. If the array uses version-0.90 metadata, then the minor number as recorded
in the superblock is used to create a name in /dev/md/ so for example /dev/md/3. If the array uses version-1 metadata, then the name from the superblock is
used to similarly create a name in /dev/md/ (the name will have any ‘host’ prefix stripped first).
1 2 3 4 5 | # mdadm --assemble --scan mdadm: /dev/md/2 has been started with 2 drives. mdadm: /dev/md/1 has been started with 2 drives. mdadm: /dev/md/0 has been started with 2 drives. # |
This behaviour can be modified by the AUTO line in the mdadm.conf configuration file. This line can indicate that specific metadata type should, or should
not, be automatically assembled. If an array is found which is not listed in mdadm.conf and has a metadata format that is denied by the AUTO line, then it
will not be assembled. The AUTO line can also request that all arrays identified as being for this homehost should be assembled regardless of their meta-
data type. See mdadm.conf(5) for further details.
Note: Auto assembly cannot be used for assembling and activating some arrays which are undergoing reshape. In particular as the backup-file cannot be
given, any reshape which requires a backup-file to continue cannot be started by auto assembly. An array which is growing to more devices and has passed
the critical section can be assembled using auto-assembly.
7. Verifying the status of the RAID arrays
We can check the status of the arrays on the system with:
1 | # watch -n 5 cat /proc/mdstat |
or
1 | # mdadm --detail /dev/md0 |
8. Stop and delete a RAID array
If we want to completely remove a raid array we have to stop if first and then remove it:
1 2 | # mdadm --stop /dev/md0 # mdadm --remove /dev/md0 |
and finally we can even delete the superblock from the individual drives:
1 | # mdadm --zero-superblock /dev/sdX |
Finally in using RAID1 arrays, where we create identical partitions on both drives this can be useful to copy the partitions from sda to sdb:
1 | # sfdisk -d /dev/sdX | sfdisk /dev/sdY |
(this will dump the partition table of sda, removing completely the existing partitions on sdb, so be sure you want this before running this command, as it will not warn you at all).
9. If you got – Auto-read-only status
If we in process of creation or after of booting got status of array – active (auto-read-only), then, probably need check status of some member:
1 2 3 4 | md127 : active (auto-read-only) raid1 sdg2[0] 16777216 blocks super 1.2 [2/1] [U_] what is wrong with sdh2? |
and finally we can try command with key —-readwrite:
1 | # mdadm --readwrite /dev/md127 |
When an array is initially assembled, it is placed in “auto-read-only” mode. But not alwyas in different versions.
However, auto-read-only isn’t an error, nor is it anything to worry about. The basic idea behind it is to make –assemble (and, apparently now, even –create) safer: Nothing is written to the disks until the array goes read-write. The array will automatically switch from auto-read-only to read-write when it receives its first write. So, if you went ahead and created a filesystem on the device, or a LVM physical volume, or whatever, it would have switched to read-write, and started the sync. The only reason you’d need to run mdadm –readwrite on it is if you want it to sync before you perform any writes.