Skip to content


Программный RAID в Linux

RAID will also not help you preserve your data if the server holding the RAID itself is lost in one way or the other (theft, flooding, earthquake, Martian invasion etc.)
(из Software-RAID-HOWTO)

Есть программный RAID-массив уровня 1. Однажды сервер прислал письмо, что с RAID-ом проблемы:

Date: Mon, 14 Jun 2010 11:18:44 +0300
From: mdadm monitoring <[email protected]>
To: [email protected]
Subject: DegradedArray event on /dev/md1:some.server.org

This is an automatically generated mail message from mdadm running on some.server.org
A DegradedArray event had been detected on md device /dev/md1.
Faithfully yours, etc.
P.S. The /proc/mdstat file currently contains the following:
Personalities : [raid1] [raid6] [raid5] [raid4] [raid0]
md1 : active raid1 sdb1[0]
156288256 blocks [2/1] [U_]
md0 : active raid1 sdc3[1] sda3[0]
4192896 blocks [2/2] [UU]
unused devices: <none>

Здесь видно, что у массива md1 отвалился один из двух компонентов (знак подчеркивания вместо буквы U в /proc/mdstat). Через fdisk -l вычисляем имя второго компонента массива и видим, что на устройстве /dev/sdd вообще отсутствуют разделы:

[root@~]# fdisk -l /dev/sdd
Диск /dev/sdd: 160.0 ГБ, 160041885696 байт
255 heads, 63 sectors/track, 19457 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт
На диске /dev/sdd отсутствует верная таблица разделов

Для сравнения смотрим на второй диск массива:

[root@~]# fdisk -l /dev/sdb
Диск /dev/sdb: 160.0 ГБ, 160041885696 байт
255 heads, 63 sectors/track, 19457 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт
Устр-во Загр   Начало    Конец      Блоки  Id  Система
/dev/sdb1  *        1    19457  156288321  fd  Автоопределение Linux raid

Следовательно, нужно содать на sdd раздел типа "fd" (linux raid autodetect) и добавить этот раздел в массив.

[root@~]# fdisk /dev/sdd
Команда (m для справки): n
Действие команды
   e   расширенный
   p   основной раздел (1-4)
p
Номер раздела (1-4): 1
Первый цилиндр (1-19457, по умолчанию 1):
Используется значение по умолчанию 1
Последний цилиндр или +size или +sizeM или +sizeK (по умолчанию 19457):
Используется значение по умолчанию 19457
Команда (m для справки): t
Выбранный раздел 1
Шестнадцатеричный код (введите L для получения списка кодов): fd
Системный тип раздела 1 изменен на fd (Автоопределение Linux raid)
Команда (m для справки): w
Таблица разделов была изменена!
Вызывается ioctl() для перечитывания таблицы разделов.
Синхронизируются диски.
 
[root@ ~]# fdisk -l /dev/sdd
Диск /dev/sdd: 160.0 ГБ, 160041885696 байт
255 heads, 63 sectors/track, 19457 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт
Устр-во Загр   Начало    Конец      Блоки  Id  Система
/dev/sdd1           1    19457  156288321  fd  Автоопределение Linux raid
 
[root@~]# mdadm --manage /dev/md1 --add /dev/sdd1
mdadm: re-added /dev/sdd1

Далее смотрим в /proc/mdstat и видим, что массив начал синхронизацию:

Personalities : [raid1] [raid6] [raid5] [raid4] [raid0]
md1 : active raid1 sdd1[2] sdb1[0]
  1562882 blocks [2/1] [U_]
  [===========>...] recovery = 76% (1194268/1562882) finish=4.3min speed=42M/sec

А если один из компонентов массива переходит в статус "Failed", то обычно помогает его ручное удаление из массива, а затем – добавление заново. Например:

[root@~]# grep md1 /proc/mdstat -A 1
md1 : active raid1 sdb1[1] sdd1[2](F)
      14659200 blocks [2/1] [_U]
 
[root@~]# mdadm --manage /dev/md1 --remove /dev/sdd1
[root@~]# mdadm --manage /dev/md1 --add /dev/sdd1

Чтобы управлять скоростью синхронизации, есть в ядре 2 параметра:

$ cat /proc/sys/dev/raid/speed_limit_min
1000
$ cat /proc/sys/dev/raid/speed_limit_max
200000

Это значения по умолчанию (в Кбайт/сек). Если нужно ускорить процесс, то делаем примерно так:

echo 200000 > /proc/sys/dev/raid/speed_limit_min

Posted in *nix, Howto.

Tagged with , .


One Response

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. Тодоров says

    Здравствуйте, спасибо, полезная заметка. К слову, если диски raid-массива имеют достаточно сложную разметку, то проще воспользоваться командой sfdisk, что-то типа:
    sfdisk -d --force /dev/sda | sfdisk /dev/sdb
    опция --force иногда требуется для нестандартных разметок, скажем, если используются винчестеры WD с 4 кб секторами.

You must be logged in to post a comment.