Назад | Перейти на главную страницу

Linux - dmraid (или mdadm) - перестроить RAID 10

Некоторое время назад у меня было дерьмо с конфигурацией raid10, и теперь я просто пытаюсь спасти массив, чтобы я мог перестроить и продолжить свою жизнь. В основном привод в каждом подмножестве вышел из строя, что означает (теоретически), что я могу восстановить. Если я потерял два диска в одном подмножестве, то восстановление невозможно.

Я удалил два плохих диска и добавил в систему два новых. Для карты контроллера рейда система использует обещание fasttrak 4310. Когда я загрузил систему, я прыгнул в BIOS карты контроллера рейда и заметил, что все 4 диска были найдены, но два новых (очевидно) не были назначены на рейд конфигурация. К сожалению, у меня нет возможности удалить два старых диска и добавить два новых диска из конфигурации через BIOS. Promise предоставляет установщик WebPAM, но он старый (6 лет назад) и не устанавливается на CentOS 6.4.

Итак, я немного покопался и наткнулся на "dmraid". dmraid выглядит многообещающе, поскольку он возвращал информацию о моей конфигурации рейда, исходя из того, что я о нем знаю:

root@service1 ~ # -> dmraid -s -s
ERROR: pdc: wrong # of devices in RAID set "pdc_fbdbhaai-0" [1/2] on /dev/sdb
ERROR: pdc: wrong # of devices in RAID set "pdc_fbdbhaai-1" [1/2] on /dev/sde
ERROR: pdc: wrong # of devices in RAID set "pdc_fbdbhaai-0" [1/2] on /dev/sdb
ERROR: pdc: wrong # of devices in RAID set "pdc_fbdbhaai-1" [1/2] on /dev/sde
*** Superset
name   : pdc_fbdbhaai
size   : 976642080
stride : 32
type   : raid10
status : ok
subsets: 2
devs   : 2
spares : 0
--> Subset
name   : pdc_fbdbhaai-0
size   : 976642080
stride : 32
type   : stripe
status : broken
subsets: 0
devs   : 1
spares : 0
--> Subset
name   : pdc_fbdbhaai-1
size   : 976642080
stride : 32
type   : stripe
status : broken
subsets: 0
devs   : 1
spares : 0

root@service1 ~ # -> dmraid -r
/dev/sde: pdc, "pdc_fbdbhaai-1", stripe, ok, 976642080 sectors, data@ 0
/dev/sdb: pdc, "pdc_fbdbhaai-0", stripe, ok, 976642080 sectors, data@ 0

На данный момент, похоже, все, что мне нужно сделать, это обновить метаданные рейда, чтобы игнорировать старые диски, и добавить новые. Затем (надеюсь) я могу дать команду на восстановление, и теоретически рейд спасет себя с двумя оставшимися дисками.

Я прочитал "man dmraid", но я хотел быть абсолютно уверен в том, что вводимые мной команды выполнят то, что я пытаюсь сделать. К сожалению, мне не удалось найти в Интернете никаких хороших документов о том, как добавлять / удалять диски из метаданных рейда с помощью dmraid.

Предлагаемый мной набор команд будет выглядеть так:

root@service1 ~ # -> dmraid --remove pdc_fbdbhaai-0 /dev/sda1
root@service1 ~ # -> dmraid --remove pdc_fbdbhaai-1 /dev/sda2

Удалив старые диски, пора добавить новые:

root@service1 ~ # -> dmraid -R pdc_fbdbhaai-0 /dev/sdc
root@service1 ~ # -> dmraid -R pdc_fbdbhaai-1 /dev/sdd

Кто-нибудь, имеющий опыт работы с dmraid, сможет подтвердить эти шаги? Или мне пойти другим путем?

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

Согласно документации mdadm, при выполнении команды сборки логический том создается из двух физических дисков, ЕСЛИ у них есть информация о суперблоке, поэтому давайте добавим два диска, которые не вышли из строя:

$ -> mdadm --assemble /dev/md0 /dev/sdb /dev/sde
mdadm: /dev/md0 assembled from 2 drives - need all 4 to start it (use --run to insist).

Достаточно просто, давайте добавим два новых диска в логический том:

$ -> mdadm --add /dev/md0 /dev/sdc /dev/sdd
mdadm: cannot get array info for /dev/md0

На этом этапе я немного погуглил, чтобы узнать, на что указывает это сообщение. Было множество различных ситуаций, которые могут вызвать данный ответ, поэтому я снова задумался над командой сборки. Ключом к повторной проверке команды сборки во второй раз было данное сообщение; "используйте --run, чтобы настоять". Подумал, почему бы не попробовать:

$ -> mdadm --run /dev/md0
mdadm: started /dev/md0

Хорошо, пока все хорошо, могу я добавить два новых диска?

$ -> mdadm --add /dev/md0 /dev/sdc
mdadm: added /dev/sdc

$ -> mdadm --add /dev/md0 /dev/sdd
mdadm: added /dev/sdd

Круто! Давайте проверим статус:

$ -> cat /prod/mdstat
Personalities : [raid10]
md0 : active raid10 sdd[4](S) sdc[5] sdb[1] sde[2]
  976772992 blocks 64K chunks 2 near-copies [4/2] [_UU_]
  [>....................]  recovery =  2.2% (10762688/488386496) finish=131.5min speed=60498K/sec

unused devices: <none>

Да, черт возьми! Согласно статусу, рейд восстанавливается с двух дисков, которые не вылетели и не сгорели.

-- РЕДАКТИРОВАТЬ --

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

$ -> mdadm --detail --scan >> /etc/mdadm.conf