1
0
mirror of https://github.com/tiyn/wiki.git synced 2025-04-16 21:17:46 +02:00
wiki/wiki/linux/mdadm.md

135 lines
4.5 KiB
Markdown

# MDADM
MDADM is a utility to create and manage raid devices.
For the rest of this entry `n` is the number of drives inside a raid device.
## Usage
### Get Information About a Raid
To get an info for a running raid (assuming it is `/dev/md0`) run
`mdadm -D /dev/md0`.
### Add Disk/Partition to Raid Device
You can add a disk or partition to a raid device by running the following.
It is assumed you are adding a partition called `/dev/sdd1` but it could also
be a whole drive and the mdadm drive is called `/dev/md0`.
`mdadm --add /dev/md0 /dev/sdd1`
This will add the disk as spare to the existing raid.
To make the disk active the raid needs to be grown as described in the
[regarding article](#growing-raid-device).
### Growing Raid Device
Growing a raid device will increase its number of active drives.
[Check the number of active drives](#get-information-about-a-raid).
Then change and run the following command accordingly.
```sh
mdadm --grow --raid-disks=5 /dev/md0
```
`/dev/md0` is the raid device.
`5` is the number of disks that should be active.
For adding disks view the [previous section](#add-diskpartition-to-raid-device).
In the [following section](#changing-reshape-speed) methods are described that
can be tried to affect the performance of the reshaping of a Raid array.
### Changing Reshape Speed
Reshaping can take a long time.
It can be useful to increase or decrease the speed of it depending on the usage
of the raid array while resizing.
The following section is based on a guide by
[nixCraft](https://www.cyberciti.biz/tips/linux-raid-increase-resync-rebuild-speed.html)
and addresses the temporary change of speed of the reshape process of a raid
array.
There are two values that can be temporarily changed to limit the reshape speed.
Those are `dev.raid.speed_limit_min` which defaults to `1000` and
`dev.raid.speed_limit_max` which defaults to `10000`.
```sh
sysctl -w dev.raid.speed_limit_min=100000
sysctl -w dev.raid.speed_limit_max=500000
```
Another value to change is the read-ahead.
The current value can be displayed with the following command.
```sh
blockdev --getra /dev/md0
```
And it can be set with the following command.
This commands sets the read-ahead to `32MB`.
```sh
blockdev --setra 65536 /dev/md0
```
For [Raid 5](#raid-5) the value `stripe_cache_size` can be important too.
It can be changed with the following command which sets it to `32 MiB`.
```sh
echo 32768 > /sys/block/md3/md/stripe_cache_size
```
However make sure not to set it too large, as this can result in a
"out of memory" condition.
The memory consumed can be calculated with the following formula.
```txt
memory_consumed = system_page_size * nr_disks * stripe_cache_size
```
### Raid 1
Raid 1 creates a mirror with even amount of drives.
For `n=2` [raid 5](#raid-5) and raid 1 are basically the same.
The space efficiency is `1/n` and the fault tolerance is `n-1` drive failure.
The read perfromance is `n` and the write performance `1`.
#### Create Raid 1 Device
You can create a Raid 1 device with
`mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sda /dev/sdb`
where `sda` and `sdb` are the disks you want to include in your raid.
You can increase the number of raid devices, but they have to be at least 2.
If it is an uneven amount of disks in the raid, a disk will act as a spare disk.
#### Convert Raid 1 to Raid 5
Assuming the raid 1 device is called `/dev/md0`.
All other drives are part of the `md0` raid device.
Note that mostly raid 1 devices consisting of 2 drives should be converted to
[raid 5](#raid-5).
- Remove all drives but 2 (if there are more drives than that) by running
`mdadm /dev/md0 --fail /dev/sda1` and `mdadm /dev/md0 --remove /dev/sda1`
where `sda1` is the drive to remove
- Make sure your raid 1 array has only 2 active drives by running
`mdadm --grow /dev/md0 -n 2`
- Now convert your raid 1 to a raid 5 device with `mdadm --grow /dev/md0 -l5`
- Add the disks you removed back to the raid with
`mdadm /dev/md0 --add /dev/sda1`
- Finally grow the active drive number to your needs (in this example 4)
`mdadm --grow /dev/md0 -n4`
- MDADM now reshapes the raid. You can monitor it by running
`watch cat /proc/mdstat`
### Raid 5
Raid 5 creates a raid device with distributed parity and is set to have at least
3 drives.
The space efficiency is `1-(1/n)` and the fault tolerance is `1` drive failure.
The read perfromance is `n` and the write performance `1/4` for single sector
and `n-1` for full stripe.
In the special case of 2 drives in a raid 5 it is functionally the same as
[raid 1](#raid-1).