(из Software-RAID-HOWTO)
Есть программный RAID-массив уровня 1. Однажды сервер прислал письмо, что с RAID-ом проблемы:
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
Здравствуйте, спасибо, полезная заметка. К слову, если диски raid-массива имеют достаточно сложную разметку, то проще воспользоваться командой sfdisk, что-то типа:
sfdisk -d --force /dev/sda | sfdisk /dev/sdb
опция --force иногда требуется для нестандартных разметок, скажем, если используются винчестеры WD с 4 кб секторами.