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

Вложенный RAID (RAID0 в RAID1) не работает при загрузке

Я построил RAID-массив с тремя дисками, двумя по 1,5 ТБ (sdb и sdd) и одним 3 ТБ (sdc). Мой подход состоит в том, чтобы объединить два диска 1,5 ТБ в диск RAID0 (md3) и создать зеркало RAID1 (md2) с диском 3 ТБ (sdc) и массивом RAID0 (md3). Все это работает.

Эта проблема: всякий раз, когда я перезагружаю компьютер, массив RAID1 (md2) видит только один активный диск (sdc), даже если массив RAID0 (md2) запускается правильно. Мне каждый раз приходится вручную заново добавлять массив md2. В чем дело? Есть ли способ заставить систему собирать md3 перед сборкой md2?

У меня уже был диск md2 с sdc. В общем, я выполнил команды (примерно):

mdadm --create --verbose /dev/md3 --level=stripe --raid-devices=2 /dev/sdb /dev/sdd
mdadm /dev/md2 --add /dev/md3
mdadm --detail --scan >> /etc/mdadm/mdadm.conf

Я также добавил «DEVICE разделы, контейнеры / dev / md3» в файл mdadm.conf. Все это в Debian 6.0.8.

Дополнительная информация: После перезагрузки / proc / mdstat читает (информация о md0 и md1 удалена):

Personalities : [raid0] [raid1]

md3 : active raid0 sdb[0] sdd[1]
      2930274304 blocks super 1.2 512k chunks

md2 : active raid1 sdc[4]
      1415577600 blocks super 1.2 [2/1] [U_]

unused devices: <none>

Похоже, что md3 (массив RAID1) забыл о md2.

Также при запуске есть что-то подозрительное.

dmesg | grep -i 'md2\|md3\|raid'
[    2.537001] md: raid0 personality registered for level 0
[    2.539298] md: raid1 personality registered for level 1
[    2.620402] md: md2 stopped.
[    2.623636] raid1: raid set md2 active with 1 out of 2 mirrors
[    2.623655] md2: detected capacity change from 0 to 1449551462400
[    2.625028]  md2: unknown partition table
[    2.914801] md: md3 stopped.
[    2.919365] raid0: looking at sdb
[    2.919368] raid0:   comparing sdb(2930274304)
[    2.919370] raid0:   END
[    2.919371] raid0:   ==> UNIQUE
[    2.919372] raid0: 1 zones
[    2.919373] raid0: looking at sdd
[    2.919374] raid0:   comparing sdd(2930274304)
[    2.919376] raid0:   EQUAL
[    2.919377] raid0: FINAL 1 zones
[    2.919380] raid0: done.
[    2.919381] raid0 : md_size is 5860548608 sectors.
[    2.919382] ******* md3 configuration *********
[    2.919397] md3: detected capacity change from 0 to 3000600887296
[    2.921296]  md3: unknown partition table
[    3.244104] raid1: raid set md1 active with 2 out of 2 mirrors
[    3.468709] raid1: raid set md0 active with 2 out of 2 mirrors

Мой подход состоит в том, чтобы объединить два диска 1,5 ТБ в диск RAID0 (md3) и создать зеркало RAID1 (md2) с диском 3 ТБ (sdc) и массивом RAID0 (md3). Все это работает.

Ваш подход увеличивает вероятность потери данных, чем при использовании RAID-10. Один из ваших дисков в полосе исчез, другой бесполезен. Вот почему обычно люди склонны использовать полоски зеркал, а не зеркала из полос.

Кроме того, лучше не использовать вложенные RAID-массивы, так как это приводит к лишним накладным расходам. Программный RAID Linux поддерживает RAID-10 на нечетном количестве дисков. Таким образом, у вас может быть RAID-1 для загрузочного раздела на 2 или всех 3 дисках, а затем объединить 3 диска в RAID-10. Да, у вас останется немного места за пределами RAID-10, но, по крайней мере, у вас будет неплохой RAID-10. Оставшееся место можно использовать для не важных данных.

UPD.: Самый простой способ добиться подобной настройки - использовать возможность LVM-2 либо разделять, либо зеркалировать логические тома на физических дисках.

Оказалось, решение было довольно простым: не забудьте собрать md3 до md2. Эти инструкции предназначены специально для Debian 6.

  1. В /etc/mdadm/mdadm.conf разместите диски в том порядке, в котором вы хотите, чтобы они собирались. В этом примере ARRAY / dev / md3 metadata = 1.2 ARRAY / dev / md2 metadata = 1.2

  2. Запустите update-initramfs -u. Это было то, чего мне раньше не хватало!

Теперь, когда компьютер загружается, он сначала собирает md3, а затем собирает md2. Раньше он сначала собирал md2 и терпел неудачу, потому что не мог найти md3.