Table of Contents
Introduction to mdadm command
RAID is the short form for Redundant Array of Independent Disks. RAID is used to store data across multiple devices. It helps to prevent data loss if a drive has failed.
mdadm command is used for building, managing, and monitoring Linux md devices (aka RAID arrays). RAID devices are made up of multiple storage devices that are arranged in a specific way to increase performance and, in some cases, fault tolerance.
How to install mdadm in Linux
mdadm is not pre-installed in the Linux system. You can use the following command to install mdadm according to your Linux distributions.
To install mdadm on CentOS, Fedora and RHEL
$ sudo yum install mdadm
To install mdadm on Ubuntu and Debian
$ sudo apt install mdadm
Modes of mdadm operation:
mdadm command has the following modes of operation.
- Assemble: To assemble the components of a pre-existing array into an active array.
- Build: To build an array that doesn't have per-device metadata (superblocks).
- Create: To create a new array with per-device metadata (superblocks).
- Follow or Monitor: To monitor one or more md devices and act on any state changes.
- Grow: To grow (or shrink) an array, or otherwise reshape it in some way.
- Incremental Assembly: To add a single device to an appropriate array.
- Manage: This is for doing things to specific components of an array such as adding new spares and removing faulty devices.
- Misc: This is an 'everything else' mode that supports operations on active arrays, operations on component devices such as erasing old superblocks, and information gathering operations.
- Auto-detect: This mode does not act on a specific device or array, but rather it requests the Linux Kernel to activate any auto-detected arrays.
Syntax for mdadm command
The syntax for using the mdadm command is as follows:
$ mdadm [mode] <raiddevice> [options] <component-devices>
The mode-specific option is used before the non-mode-specific option. The options that are not mode-specific are:
- -h, --help: Displays the help message. If used after the mode-specific option, it displays the help message of that mode.
- -v, --verbose: Be more verbose about what is happening. It can be used twice to be extra-verbose.
- -q, --quiet: Don't print unnecessary messages in the output.
- -V, --version: Print version information for mdadm.
- -s, --scan: Scan the config file or /proc/mdstat for missing information. When using
--scantells mdadm to get a list of array devices from /proc/mdstat.
Configure Software RAID in Linux
Below are certain steps that you must follow before creating a software RAID device on your Linux node. Since I have already performed those steps in my older article, I will share the hyperlinks here.
Important Rules of Partitioning
Partitioning with fdisk
Now we have our partitions available with us which we can validate using
root@ubuntu-PC:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 60G 0 disk ├─sda2 8:2 0 1K 0 part └─sda5 8:5 0 59.5G 0 part / sdb 8:16 0 10G 0 disk └─sdb1 8:17 0 10G 0 part sdc 8:32 0 10G 0 disk └─sdc1 8:33 0 10G 0 part sr0 11:0 1 58.4M 0 rom /media/golinux/VBox_GAs_6.1.32
Different examples to use mdadm command
1. Create RAID 0 array using mdadm command
RAID 0 is usually referred to as "striping". In the RAID 0 array, data is separated into blocks that are scattered across the storage devices like hard disks. This means that each disk contains a portion of data and several disks will be referenced to access the data. The RAID 0 array requires a minimum of 2 storage devices.
You can create an md array using the
mdadm --create command. You will need to specify the md name, raid level, number of devices, and their names.
For example, the following command creates a RAID 0 array
md0 using two storage devices
# mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1
root@ubuntu-PC:~# mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb1 /dev/sdc1 mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
You can verify whether the RAID array was successfully created by checking the
root@ubuntu-PC:~# cat /proc/mdstat Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] md0 : active raid0 sdc1 sdb1 20951040 blocks super 1.2 512k chunks unused devices: <none>
For more information you can read Step-by-Step Tutorial: Configure Software RAID 0 in Linux
2. mdadm command to query an md device
--query flags of mdadm command examine a device to check if it is an md device or a component of an md array.
# mdadm -Q /dev/md0
# mdadm --query /dev/md0
root@ubuntu-PC:~# mdadm --query /dev/md0 /dev/md0: 19.98GiB raid0 2 devices, 0 spares. Use mdadm --detail for more detail.
3. Print detail of md devices
--detail options print the detailed description of the array. The device should be an active md device.
# mdadm -D /dev/md0
# mdadm --detail /dev/md0
root@ubuntu-PC:~# mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Mon Apr 4 22:21:40 2022 Raid Level : raid0 Array Size : 20951040 (19.98 GiB 21.45 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Mon Apr 4 22:21:40 2022 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Layout : -unknown- Chunk Size : 512K Consistency Policy : none Name : ubuntu-PC:0 (local to host ubuntu-PC) UUID : 6bab41ea:41b69079:b4b7fa0e:59873349 Events : 0 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 33 1 active sync /dev/sdc1
4. Add RAID to mdadm configuration file
/etc/mdadm.conf is the configuration file for management of Software RAID. The following command adds the RAID arrays to the configuration file.
# mdadm -D -s > /etc/mdadm.conf
# mdadm --detail --scan > /etc/mdadm.conf
root@ubuntu-PC:~# mdadm --detail --scan > /etc/mdadm.conf root@ubuntu-PC:~# cat /etc/mdadm.conf ARRAY /dev/md0 metadata=1.2 name=ubuntu-PC:0 UUID=6bab41ea:41b69079:b4b7fa0e:59873349
Array: Actual arrays are identified by the ARRAY lines. The second word on the line is the name of the device where the array is normally assembled, such as
- metadata: Specify the metadata format that the array has.
- name: This is a simple textual name given to mdadm when the array was created.
- uuid: The value should be a 128-bit uuid in hexadecimal, with punctuation interspersed if desired. It must match the uuid stored in the superblock.
5. Create a file system on a RAID drive
It is required to build a filesystem on the RAID device before using it. The following mkfs command creates an ext3 filesystem on the /dev/md0.
# mkfs.ext4 /dev/md0
root@ubuntu-PC:~# mkfs.ext4 /dev/md0 mke2fs 1.45.5 (07-Jan-2020) Creating filesystem with 5237760 4k blocks and 1310720 inodes Filesystem UUID: 283d9eb9-93a4-48e6-9139-59578966a120 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
6. Mount the RAID device
Now, let's create a mount point for the RAID device.
# mkdir /mnt/raid
Then mount the RAID device using the
# mount /dev/md0 /mnt/raid
root@ubuntu-PC:~# mkdir /mnt/raid root@ubuntu-PC:~# root@ubuntu-PC:~# mount /dev/md0 /mnt/raid root@ubuntu-PC:~# root@ubuntu-PC:~# df -h /mnt/raid Filesystem Size Used Avail Use% Mounted on /dev/md0 20G 45M 19G 1% /mnt/raid
The RAID device is ready to be used now.
7. Deactivate or delete a RAID array
--stop options deactivate or shut down the given array. If the raid array is mounted, you have to unmount it first.
# mdadm -S /dev/md0
# mdadm --stop /dev/md0
root@ubuntu-PC:~# umount /dev/md0 root@ubuntu-PC:~# mdadm --stop /dev/md0 mdadm: stopped /dev/md0
The superblock for the devices can be deleted using the
--zero-superblock option. By using this option, you can re-use the partitions for creating new RAID arrays.
# mdadm --zero-superblock /dev/sdb1 /dev/sdc1
--stop option is used with
--scan option, it shut down all arrays that can be shut down (i.e. are not currently in use).
# mdadm --stop --scan
8. Assemble and start all arrays listed in the standard config file
--assemble options assemble a previously create array. When it is used with
--scan option, it will assemble and start all arrays listed in the standard config file.
# mdadm -A -s
# mdadm --assemble --scan
root@ubuntu-PC:~# mdadm --assemble --scan mdadm: /dev/md/0 has been started with 2 drives.
9. Create RAID 1 array with mdadm command
RAID 1 is usually referred to as "mirroring". In the RAID 1 array, it is required to mirror data between two or more devices. The data is written on each device in the group. As a result, each disk has the exact copy of the data.
The RAID 1 array requires a minimum of 2 storage devices. The following command creates a RAID 1 array
/dev/md1 using two disks
# mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
root@ubuntu-PC:~# mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1 mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 Continue creating array? y mdadm: Defaulting to version 1.2 metadata
Verify the changes using the following command.
root@ubuntu-PC:~# cat /proc/mdstat Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] md1 : active raid1 sdc1 sdb1 10475520 blocks super 1.2 [2/2] [UU] [===============>.....] resync = 78.2% (8202496/10475520) finish=0.1min speed=206497K/sec unused devices: <none>
root@ubuntu-PC:~# cat /proc/mdstat Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] md1 : active raid1 sdb2 sdb1 4876288 blocks super 1.2 [2/2] [UU] unused devices: <none>
For more information you can read Step-by-Step Tutorial: Configure Software RAID 1 in Linux
10. Create RAID 5 array with mdadm command
In the RAID 5 array, the parity information is distributed across all drives in the array. The RAID 5 array requires a minimum of 3 storage devices. If one drive in the array fails, it will cause a loss of data.
The following command creates a RAID 5 array
/dev/md5 using three disks
# mdadm --create /dev/md5 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sde
For more information you can read Step-by-Step Tutorial: Configure Software RAID 5 in Linux
11. Create RAID 10 array (striping mirror)
The RAID 10 array does both works of mirror and striping. It is the most widely used, and effective, hybrid array which is the combination of RAID 0 and RAID 1. The RAID 10 array also requires a minimum of 3 storage devices.
# mdadm --create /dev/md2 --level=10 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sde
For more information you can read Step-by-Step Tutorial: Configure Hybrid Software RAID 10 in Linux
This tutorial teaches you to manage and configure software RAID devices in Linux. We also showed how you can create various types of RAID arrays using the mdadm command. If you have any questions, let us know in the comment section below.