Поднять программный рейд на сервере Linux с зеркалированием для более безопасного хранения данных.

Есть: сервер и 2 ssd диска.

Несмотря на то, что программный RAID будет работать медленнее аппаратного, у него есть и свои преимущества: не так дорог и не нужно менять аппаратное обеспечение. К тому же, если аппаратный контроллер прекратит свою работу, найти точно такой же через 3-4 года будет сложнее, что не сказать о программном.

Создаём разделы для RAID

С помощью fdisk -l уточняем названия дисков. Предположим, диски sdc и sdd. С помощью cfdisk создаём на них одинаковые разделы с типом fd, которые в будущем будем зеркалировать.

Создание RAID (зеркалирование)

1
 mdadm --create /dev/md0 --verbose -l 1 -n 2 /dev/sdc1 /dev/sdd1

где -l 1 означает зеркало (RAID-1), а n 2 - количество дисков. Можно использовать не RAID-1, а RAID-0. В таком случае размер дисков суммируется, скорость возрастет пропорционально количеству дисков. Однако если хотя бы один диск выйдет из строя, вы потеряете все.

Всё, теперь у вас есть /dev/md0, с которым вы можете работать как угодно, создавая разделы и так далее.

Просмотр деталей RAID

1
 mdadm --detail /dev/md0

Получим примерно такое

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 /dev/md0:
         Version : 0.90
   Creation Time : Mon Jun 28 15:30:46 2010
      Raid Level : raid1
      Array Size : 521984 (509.84 MiB 534.51 MB)
   Used Dev Size : 521984 (509.84 MiB 534.51 MB)
    Raid Devices : 2
   Total Devices : 2
   Preferred Minor : 0
     Persistence : Superblock is persistent

     Update Time : Sun Oct 28 04:22:08 2012
           State : clean
  Active Devices : 2
 Working Devices : 2
  Failed Devices : 0
   Spare Devices : 0

            UUID : b702e1ae:9a12f687:b29b51fd:2840a617
          Events : 0.256

     Number   Major   Minor   RaidDevice State
        0       8        1        0      active sync   /dev/sdc1
        1       8       17        1      active sync   /dev/sdd1

Добавим данные в mdadm.conf

1
mdadm -D -s >> /etc/mdadm.conf

Ещё вариант просмотра данных

1
 cat /proc/mdstat

Получаем

1
2
3
 Personalities : [raid1]
 md0 : active raid1 sdd1[1] sdc1[0]
      521984 blocks [2/2] [UU]

Подключение RAID на новой системе

Например, вы загрузили систему с LiveCD и вам нужно подключить массив. Делаем так:

1
2
mknod /dev/md0 b 9 1
 mdadm --assemble /dev/md0 /dev/sdc1 /dev/sdd1

Запускаем все массивы

1
 mdadm --assemble --scan

Массив внезапно перешёл в состояние inactive

Задаём cat /proc/mdstat и видем примерно это

1
 md0 : inactive....

Решение

останавливаем массив

1
mdadm --stop /dev/md0

пересобираем

1
mdadm --assemble --scan --force

Следует напомнить, что массив просто так в неактив не свалится, проверяйте состояние компонентов!

Смотрим, насколько прошло зеркалирование

Итак, добавили диск и теперь у него статус spare rebuilding. Посмотреть, сколько осталось на это любоваться можно так:

1
cat /proc/mdstat

В итоге получим примерно это:

1
2
3
4
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
 md1 : active raid1 sdb1[2] sdc1[1]</nowiki>
       15133184 blocks super 1.2 [2/1] [_U]
       [>....................]  recovery =  0.5% (82816/15133184) finish=442.1min speed=567K/sec

Второй вариант

1
mdadm --detail /dev/md1

И смотрим строчку

1
Rebuild Status : 2% complete

Если один из дисков решил уйти в мир иной…

Отключаем сбойный диск. Предположим, это sdd

1
2
mdadm --fail /dev/md0 /dev/sdd1
mdadm --remove /dev/md0 /dev/sdd1

Меняем диски и копируем данные c sdc на sdd

1
2
sfdisk -d /dev/sdc | sfdisk /dev/sdd 
mdadm --zero-superblock /dev/sdd

Подключаем (добавляем )диск:

1
mdadm --add /dev/md0 /dev/sdd1

Удаляем массив

Бывает и такое, что он больше не нужен. Удаляем:

1
2
3
 mdadm /dev/md0 --fail --remove /dev/sda1 
 mdadm /dev/md0 --fail --remove /dev/sdb1 
 mdadm -S /dev/md0

Мониторим состояние RAID

Всегда есть шанс, что один из дисков выйдет из строя. Чтобы периодически проверять, все ли диски на месте, можно cron запускать периодически скрипт на проверку следующего содержания:

1
2
3
4
5
6
7
8
 #!/bin/bash
 POST_Q=`mdadm --detail /dev/md0 | grep Active`
 DATA_Q=`echo $POST_Q | awk '{print $4 }' | tr -d %`
 PNEED_Q='2'
 # die Abfahrt der Post
 if [ "$DATA_Q" -lt "$PNEED_Q" ]; then
  echo `date` | mail -s "RAID Alarm" mail@wikiadmin.net
 fi

Здесь PNEED - ваше количество активных дисков, почту стоит заменить на свою. В тело письма будет добавляться дата.