Для того, чтобы загрузить ядро linux с корневой файловой системой лежащей на RAID-массиве нужно передать ядру следующие параметры (рабочий пример для Grub). Значимыми для нас опциями являются первая и вторая строка параметров.
title Gentoo Linux 3.0.8 Hardened
kernel (hd0,0)/linux-3.0.8-hardened/linux \
root=/dev/md0 \
md=0,/dev/sda1,/dev/sdc1 \
rootfstype=ext4 \
rootflags=nodelalloc,data=ordered,journal_checksum,barrier=1,acl,user_xattr \
panic=15 \
vga=792

Значения параметров:
1. root=/dev/md0 задает имя файла устройства с корневой ФС.
2. md=0,/dev/sda1,/dev/sdc1
На этом параметре хотелось бы остановиться подробнее. Он имеет следующий формат:
md=md_device_number,raid_level,chunk_size_factor,fault_level,dev0,dev1,...,devn

  • md_device_number - номер md-устройства. Например, 0 означает /dev/md0, 1 это /dev/md1. Прошу обратить внимание - это именно НОМЕР устройства, а не количество дисков входящих в массив, как иногда встречается в описаниях в Сети.
  • raid_level - уровень RAID. Является обязательным для линейного режима (значение -1) и RAID-0 (значение 0). Для остальных типов массивов информация берётся из суперблока и это значение должно быть опущено.
  • chunk_size_factor - задает размер чанка. Минимальное значение 4кб (4k).
  • fault_level - насколько я понял из документации, этот параметр игнорируется драйвером MD (нафига тогда предусматривали?)
  • dev0,...,devn - список устройств, входящих в массив.
Есть еще один важный момент. В документации заявлено, что драйвер поддерживает версии суперблока 0.90.0 и md-1.
Но загрузится с RAID-1 с версией суперблока 1.2, который создается mdadm по-умолчанию у меня не получилось. Пришлось пересоздавать массив с версией 0.90.0, после чего загрузка прошла успешно. Возможно, в виду имелась поддержка версии 1.0, за исключением версий 1.1 и 1.2.
Создать массив с суперблоком версии 0.90 можно указав mdadm ключ --metadata=0.90, например так:
$ mdadm --create /dev/md0 -n 2 -l 1 --metadata=0.90 /dev/sd1

Если массив уже создан, но суперблок имеет версию 1.2, изменить его на версию 0.90 можно только создав новый массив указанной выше командой, и перенеся данные со старого массива на новый. Т.е. бэкап данных ОБЯЗАТЕЛЕН!
Сейчас объясню почему. Я специально проверил возможность замены суперблока с 1.2 на 0.90 без потери данных на тестовом массиве. Забегая наперед скажу, что такой возможности нет. Во всяком случае у меня не получилось. Если знаете как это сделать - расскажите, буду признателен.
Теоретически, как можно было бы подумать, можно затереть суперблок командой:

#!!! Не выполняйте следующие две команды на реальном массиве. Это пример!!!
$ mdadm --zero-superblock /dev/sd1

И создать новый массив без синхронизации дисков (--assume-clean), но версии 0.90 командой:
$ mdadm --create /dev/md0 --assume-clean -n 2 -l 1 --metadata=0.90 /dev/sd1

Это работает. Массив создается, таблица разделов остается (на массиве был создан один раздел с ext4), но файловая система (ext4) созданная ранее (до очистки суперблоков) отказывается монтироваться, ругаясь на поврежденный суперблок. После сравнения суперблоков этой ФС в массивах v1.2 и v0.90 оказывается что они различаются. Причем не сохраняется ни главный, ни резервные суперблоки (в 1 блоке и в 8193). Таким образом даже команда
$ mount -o sb=8193,nocheck -t ext4 /dev/md0 /mnt/test

Не спасёт. Т.е. для Ваших данных смена версии суперблока RAID-массива прошла х… В общем, плохо.

Поэтому лучше, и главное - безопаснее, создать новый массив и перенести данные на него.
К слову сказать, восстановление поврежденного суперблока той же версии (допустим был массив с версией 1.2, и восстанавливаете Вы поврежденный суперблок той же версии) двумя приведенными выше командами работает великолепно и данные остаются в порядке. Благодаря ключу --assume-clean, который создает только новые суперблоки на каждом диске массива, а сами данные не трогает.

Важность надёжного хранения данных очевидна для пользователя любого уровня. Тем более сейчас, когда объёмы хранимых данных растут с угрожающей скоростью, вне зависимости от того, являются ли эти данные персональными (коллекции фотографий и видеозаписей) или корпоративными (финансовая и проектная документация, результаты научных исследований и т.п.). Одно из средств, помогающих в той или иной степени решить проблему надёжности хранения данных, основано на организации дискового RAID-массива.

Концепция RAID

RAID (англ. Redundant Array of Independent Disks - избыточный массив независимых дисков) (хотя более точной, возможно, будет "вольная интерпретация": массив независимых дисков с избыточным ресурсом) - это аппаратная или программная подсистема, в которой хранимые данные распределяются (часто с дублированием) по нескольким жёстким дискам (физическим или виртуальным). Наиболее эффективной, как с точки зрения надёжности, так и с точки зрения производительности, является аппаратная RAID-подсистема. Тем не менее, программная реализация также может принести немалую пользу, и в Linux есть все необходимые компоненты для организации программного RAID-массива.

Различные типы RAID-массивов

Выше было отмечено, что помимо своей главной функции - обеспечение надёжности хранения данных - RAID может способствовать повышению производительности, разделяя данные на несколько потоков для одновременной записи на несколько дисков. Реализация RAID-подсистемы в Linux несколько отличается от общепринятой, но логическое деление на несколько уровней сохранено.

На уровне RAID 0 два или более диска используются только для повышения производительности, поскольку разделяют между собой данные при чтении/записи. Здесь "избыточность" фактически отсутствует.

Массив RAID 1 является первым уровнем, обеспечивающим избыточность. Этот режим часто называют "зеркалированием" (mirroring), поскольку данные дублируются на всех дисках массива. Степень надёжности возрастает, но производительность операции записи снижается, так как запись одних и тех же данных выполняется несколько раз. Для организации RAID 1 требуется не менее двух дисков.

Особенностью массива RAID 4 является отдельный диск для записи информации о контроле чётности данных. Таким образом, узким местом этой подсистемы становятся периоды ожидания при записи именно на этот диск. По этой причине рекомендуется пользоваться RAID 5 во всех случаях, кроме тех, в которых применение RAID 4 крайне необходимо и обосновано.

В массиве RAID 5 при записи разделяются и данные, и информация о контроле чётности. Поэтому RAID 5 считался наиболее эффективным и экономичным уровнем до появления новых разработок в этой области: RAID 5EE , RAID 6 , RAID 10 и комбинированных уровней RAID 1+0 , RAID 5+0 , RAID 1+5 . Для организации массива RAID 5 требуется не менее трёх дисков.

О дальнейшем развитии концепции RAID-массивов можно узнать на указанных выше страницах Wikipedia. Особый интерес представляет сравнение "RAID 10 versus RAID 5 in Relational Databases" на англоязычной странице.

Поддержка программной реализации RAID появилась в ядре Linux, начиная с версии 2.0, хотя для практического использования первая версия вряд ли годилась: возможности её были весьма ограничены, и содержала она изрядное количество ошибок. Начиная с ядер версии 2.4 ситуация улучшилась, и современные реализации RAID в Linux вполне пригодны для практического применения.

Создание и конфигурирование RAID-массива

Первые эксперименты с созданием RAID-массивов рекомендуется проводить в среде виртуальной машины, например, VirtualBox. Это более безопасно, к тому же не у каждого пользователя найдётся компьютер с двумя-тремя физическими дисками.

Для подробного рассмотрения выбрана организация RAID-массива уровня 1, поскольку это самый простой с архитектурной точки зрения и обладающий наибольшей избыточностью (с точки зрения надёжности) массив.

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

Итак, для начала в VirtualBox необходимо создать собственно виртуальную машину для Linux (с ядром версий 2.6), выбрать для неё подходящий размер памяти и создать три жёстких диска с одинаковым объёмом (по 20 Гб для каждого диска будет вполне достаточно). После загрузки Linux-системы (можно использовать любой live-DVD или его ISO-образ) для работы потребуется эмулятор терминала (текстовой консоли).

Для разметки разделов на диске можно воспользоваться утилитой fdisk , но более удобной является её "наследница" cfdisk с псевдографическим интерфейсом, которую можно запустить из консоли следующей командой:

cfdisk /dev/sda

После запуска следует создать раздел свопинга (например, размером 1ГБ), а оставшееся пространство (19 ГБ) отдать корневому разделу. При этом важно установить для обоих разделов тип Linux RAID (шестнадцатеричный код fd ). После этого нужно обязательно записать сделанные изменения и выйти из cfdisk .

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

sfdisk -d /dev/sda | sfdisk /dev/sdb sfdisk -d /dev/sda | sfdisk /dev/sdc

Ключ -d используется для создания дампа всех разделов указанного устройства в формате, который может служить входным для той же команды sfdisk , что позволяет создавать дубликаты разделов с сохранением всех свойств и атрибутов.

В результате будут получены три диска с одинаковыми разделами и установленным типом Linux RAID. Теперь можно приступать непосредственно к созданию RAID-массива.

Создание дисков RAID-массива

Для создания RAID-массива потребуется утилита mdadm из одноимённого пакета. Сама операция создания выполняется с помощью команд, приведенных в листинге 1.

Листинг 1. Создание дисков RAID-массива
mdadm --create /dev/md0 --metadata=0.90 --level=1 --raid-devices=3 \ /dev/sda1 /dev/sdb1 /dev/sdc1 mdadm --create /dev/md1 --metadata=0.90 --level=1 --raid-devices=3 \ /dev/sda2 /dev/sdb2 /dev/sdc2

Первый ключ команды обязательно должен определять основной режим функционирования mdadm . В данном случае используется ключ --create (краткая форма -C ) - режим создания. После этого ключа указывается имя создаваемого RAID-устройства.

Ключ --metadata (краткая форма -e ) определяет используемый для данного диска формат метаданных (суперблока). Значение 0.90 (а также его аналоги 0 и default ) при создании RAID-массива используется по умолчанию, поэтому в приведённом примере его можно было бы и не включать в команду. Формат 0.90 допускает использование в RAID-массиве до 28 устройств-компонентов, а также определяет максимальный размер этих устройств (не более 2 ТБ).

Ключ --level=1 определяет уровень RAID-массива. Ключ --raid-devices=3 определяет количество устройств-компонентов в создаваемом RAID-массиве. Завершает командную строку список устройств, из которых будет сформирован RAID-массив.

Запуск в эксплуатацию

Дисковый массив успешно создан, но пока ещё пуст. Потребуется установить Linux-систему, чтобы проверить работу созданной RAID-подсистемы. Перед установкой следует позаботиться о том, чтобы раздел, выделенный для свопинга, корректно распознавался программой установки. Для этого используется следующая команда:

mkswap /dev/md0 setup

Установка Linux-системы выполняется в "штатном" режиме за исключением одной особенности: при выборе разделов вместо привычных /dev/sda1 и /dev/sda2 пользователю предлагаются /dev/md0 и /dev/md1 соответственно. Загрузчик, разумеется, должен быть установлен в MBR.

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

Если в установленной Linux-системе используется загрузчик grub , то в файл /boot/grub/grub.conf необходимо внести следующие изменения:

  • в строке splashimage=... имя раздела (hd0,1) заменяется на имя (md0,1)
  • в строке root (hd0,1) аналогичным образом выполняется замена на (md0,1)

Если система загружается с помощью lilo (этот загрузчик всё ещё используется в некоторых дистрибутивах), то потребуется отредактировать файл /etc/lilo.conf :

  • добавить в начальной (общей) секции строку: raid-extra-boot = mbr-only
  • заменить строку boot = /dev/sda на строку boot = /dev/md0

После сохранения и выхода из редактора обязательно нужно активизировать внесённые изменения командой lilo .

Теперь можно перезагрузить систему и проверить, как работает система на RAID-массиве.

Учёт и контроль

Текущее состояние RAID-подсистемы в структуре ядра отражает файл /proc/mdstat . Следует отметить, что для его просмотра требуются полномочия суперпользователя. Информация из этого файла особенно важна в тех случаях, когда в RAID-массив добавляется новый диск (или заменяется испорченный диск) или одно из устройств-компонентов удаляется из RAID-массива.

Команда mdadm сама по себе выполняет активизацию RAID-массива и в принципе не требует наличия файла конфигурации, но будет обращаться к нему, если в явной форме указано его имя ("стандартное" имя - /etc/mdadm.conf ). Использование файла конфигурации рекомендуется по двум причинам:

  • исчезает необходимость писать длинные командные строки с множеством ключей, так как все характеристики берутся из указанного файла;
  • файл конфигурации сам по себе является документацией по используемому RAID-массиву.

Команда mdadm --detail --scan позволяет получить значения текущих параметров настройки RAID-массива. Но для извлечения более подробной информации следует воспользоваться следующей комбинацией команд (опять же, потребуются права root):

echo "DEVICE /dev/sd*" > /etc/mdadm.conf mdadm --detail --scan >> /etc/mdadm.conf

Управление RAID-массивом

Преимущества избыточности при хранении данных в RAID-массиве можно оценить, если отключить один из дисков в конфигурации виртуальной машины, тем самым имитируя его отказ. После перезагрузки системы на RAID-массиве в виртуальной машине следует выполнить операцию копирования достаточно большого объёма данных. После этого в хост-системе можно будет увидеть, что размеры двух работающих дисков увеличились (в соответствии с объёмом скопированных данных), а размер третьего, отключённого диска остался неизменным.

Если третий диск снова подключить и ещё раз перезагрузить систему в виртуальной машине, то вновь подключённый диск будет обнаружен, но синхронизация с первыми двумя RAID-дисками не будет выполнена. Дело в том, что эта операция должна выполняться вручную. Для продолжения "эксперимента" теперь следует полностью удалить третий диск из виртуальной машины и создать точно такой же новый, чтобы имитировать замену испорченного физического жёсткого диска на исправный.

Текущее состояние RAID-массива проверяется по содержимому вышеупомянутого файла /proc/mdstat . После удаления третьего диска содержимое этого файла будет выглядеть приблизительно так, как на рисунке 1.

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

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

sfdisk -d /dev/sda | sfdisk /dev/sdc

После этого подготовленный "новый" диск добавляется в существующий RAID-массив:

mdadm /dev/md0 -a /dev/sdc1 mdadm /dev/md1 -a /dev/sdc2

Теперь система продолжает функционировать в нормальном режиме - все три RAID-устройства-компонента подключены и работают. В этом можно убедиться, снова просмотрев содержимое файла /proc/mdstat .

Дополнительные замечания

Имитировать отказ одного из RAID-дисков можно и с помощью специальных ключей команды mdadm , как показано ниже:

mdadm /dev/md0 --set-faulty /dev/sdc1 или mdadm /dev/md0 --fail /dev/sdc1

После того, как диск объявлен "неработающим", его можно удалить из RAID-массива:

mdadm /dev/md0 --remove /dev/sdc1

Сразу после логического удаления устройства-компонента его можно заменить физически. Ещё раз следует отметить, что "аппаратные" жёсткие диски настоятельно рекомендуется заменять только идентичными устройствами, а компоненты в виде логических разделов непременно должны быть заменены разделами точно такого же размера.

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

mdadm /dev/md0 --add /dev/sdc1

Заключение

Программная реализация RAID-массива в системе Linux позволяет пользователю без особых затруднений создавать дисковые массивы нескольких уровней с применением как физических дисков, так и логических разделов. Предоставляемых этой подсистемой возможностей вполне достаточно, чтобы организовать хранение данных, ориентированное и на надёжность, и на производительность.

Ресурсы для скачивания

static.content.url=http://www.сайт/developerworks/js/artrating/

Zone=Linux, Open source

ArticleID=758669

ArticleTitle=Создание программного RAID-массива на Linux-платформе

Для Debian 8.6 данная статья уже не очень актуальна, т.к. там всё уже грузится "из коробки", даже при деградированном массиве с загрузочным разделом, однако я оставлю нижеследующий текст в исторических целях, да и мало ли где ещё такая проблема всплывёт, плюс часть о собственно восстановлении массивов по-прежнему актуальна, хотя это в общем-то элементарная вещь, легко находимая гуглом.

В последней (восьмой на момент написания статьи) версии Debian восстановление развалившегося загрузочного software-raid-массива, как оказалось - дело не совсем тривиальное. Когда-то давно, во времена первого GRUB-а - компьютер спокойно загружался при отсутствии части дисков в массиве, однако в 7 и 8 версиях Debian - что-то сломали. Система выдаёт примерно такое:

ALERT /dev/disks/by-uuid/куча-разных-кракозябликов does not exist.
Dropping to a shell!

Мне, если честно, лень искать что именно и где там изменилось в поведении mdadm и в загрузочных скриптах. Однако факт остаётся фактом - если в процессе загрузки какой-либо из массивов окажется в деградированном состоянии - этот массив будет неактивен, и если он нужен для загрузки - операционка просто не стартует, выдав вместо этого командную строку busybox, а там возможность что-то исправить - крайне ограничена. И если восстановить массивы на загрузившейся системе - человек, не имеющий серьёзного опыта настройки linux ещё сможет (нагуглить про sfdisk и "магические" mdadm -r / mdadm -a не сложно), то встретившись с куцым busybox, в котором из текстовых редакторов только vi (а он в неумелых руках лишь бибикает и всё портит) - ему не останется ничего иного, кроме как вызванивать вас вечером в субботу. А это, согласитесь, не очень приятно:).

Поэтому распишу вкратце, во-первых, о том, что стоит сразу же подшаманить в установленном на программный raid Debian-е, во-вторых - как это дело быстро восстановить. Здесь не будет ничего о том, как устанавливать систему на raid или как перевести существующую. Кроме того, крайне рекомендуется помнить о том, что манипуляции с raid и дисками могут привести к необратимой потере данных, поэтому убедитесь, что для всего важного есть бекап.

Первым делом - подшаманим загрузочный скрипт. Это позволит системе загружаться даже с деградировавшего массива.

nano -w /usr/share/initramfs-tools/scripts/local-top/mdadm

Открываем файл /usr/share/initramfs-tools/scripts/local-top/mdadm , находим там все вхождения --assemble и заменяем их на --incremental - скорее всего, это нужно будет сделать в двух строчках.
Обновляем образ initramfs.

update-initramfs -kall -u

Опции означают, что обновляются образы для всех имеющихся версий ядра (-kall), в том числе те, которые уже существуют (-u).

Теперь, даже если массив деградировал - система всё равно загрузится полностью, что значительно упрощает разбивку и подключение к raid нового жёсткого диска. Однако если вы в эту ситуацию уже попали - проще будет загрузиться с чего-то навроде SystemRescueCD и либо поправить загрузочный скрипт и образ initramfs с помощью chroot, либо прямо из загруженной спасательной системы восстанавливать raid-массивы. Возможно, подобное поведение Debian - не бага а фича, т.е. так и задумано - мол, если raid развалился - не трогать его во-избежание, и пусть юзверь занимается камасутрой с busybox, вероятно это действительно где-то оправдано... однако raid - всё равно не backup, а главная его задача - обеспечение бесперебойной работы, поэтому ценность подобной фичи - имхо крайне сомнительна.

Дальше - важно, чтобы загрузчик (по умолчанию в Debian используется GRUB) был установлен на все загрузочные жёсткие диски. Предположим, у вас два жёстких диска, на которых расположена корневая файловая система вместе с /boot и лежит это всё в виде зеркалки - raid1. По-умолчанию, если в таком виде всё изначально устанавливалось - инсталлятор debian установит GRUB только на один жёсткий диск. Поэтому имеет смысл повторить установку для обоих жёстких дисков - выполнить от root-а примерно такие команды:

grub-install /dev/sda
grub-install /dev/sdb

Здесь /dev/sda и /dev/sdb - ваши два диска. В результате система будет загружаться с любого из имеющихся дисков. Если система даже после этих мер не грузится - проверьте настройки BIOS, не пытается ли он грузиться с какого-нибудь флоппика? Подобное тоже бывает в некоторых материнках после удаления одного из дисков (приоритет в загрузке для оставшегося диска оказывается ниже, чем DVD-привода, например).

Теперь перейдём к восстановлению. Допустим, у нас два одинаковых по объёму жёстких диска, на которых в raid1 работают два массива - md0 и md1. На md1 у нас лежит swap (оно нужно на случай умирания диска в процессе работы, чтобы запущенным процессам не стало плохо при обращении к сбойной странице памяти). На md0 - корневая файловая система с /boot и всеми остальными файлами. Т.е. предельно упрощённый вариант, без всяческих выделений под /boot или /home отдельных разделов. Допустим, диски у нас обозначаются /dev/sda и /dev/sdb.
И вот, работал себе /dev/sdb, работал... и внезапно умер. Печальный итог его жизни. В случае если вы не подшаманили скрипт загрузки - теперь при попытке стартовать система будет выдавать вышеприведённый ALERT и выкидываться в busybox. С подшаманенным же скриптом - система, скорее всего, загрузится. Если вы не настроили никаких действий и уведомлений на сбой raid - вы о проблеме с диском можете даже не узнать, но настройка уведомлений - выходит за рамки этой статьи. Чтобы проверить состояние raid-а вручную - достаточно выполнить вот такую команду:

cat /proc/mdstat

Или посмотреть содержимое файлика любым другим способом. В файле будет что-то примерно такое:

md0: active raid1 sda1
2926528 blocks super 1.2 [_U]

md1: active raid1 sda2
5855168 blocks super 1.2 [_U]

Здесь для каждого массива перечислены оставшиеся в массиве разделы (как видно, расположенные на sda) + видно, что из двух разделов в массиве работает только один - в норме в квадратных скобках было бы написано .

Итак, диск умер, но raid жив. Отключаем компьютер. Достаём где-нибудь новый (или выдранный из потрохов другого компа) винчестер такого-же или бОльшего размера. Подключаем его на место умершего. Включаем комп и тут же лезем в BIOS - нужно убедиться, что загрузка пойдёт с выжившего старого винта, а не с только что добавленного. Загружаем операцинку.
Теперь нужно удалить разделы на новом жёстком диске (если имеются) и заново разбить его - так, чтобы /dev/sdb1 и /dev/sdb2 совпадали по размерам с /dev/sda1 и /dev/sda2 соответственно. Можно сделать это с помощью fdisk. Можно воспользоваться графическим gparted. Кто-то сделает это webmin-ом. Выбор за вами. Меня больше всего устраивает parted. Вызываем его и смотрим, что есть на дисках.

root@testserver:~# parted
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type "help" to view a list of commands.
(parted) unit s
(parted) print /dev/sda
Disk /dev/sda: 156299375s
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags
1 2048s 5859327s 5857280s primary boot, raid
2 5859328s 17577983s 11718656s primary raid

(parted) print /dev/sdb
Model: ATA ST3802110AS (scsi)
Disk /dev/sda: 156299375s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

(parted)

Красным цветом - обозначены команды, введённые пользователем. Итак, у нас два диска по 80 гиг, на /dev/sda - разделы raid-а, на /dev/sdb - пусто.
Команда unit s заставляет parted показывать размеры и смещения в секторах, в противном случае - parted показывает эти цифры в человеко-читаемой и усреднённой форме (типа 7,45GB), установить по которым точное количество байт не представляется возможным. Значения в секторах удобнее тем, что один сектор по умолчанию равен 512 байтам (см. строку Sector size в выводе parted).
Строчка "Using /dev/sda " означает, что отданные пользователем команды по умолчанию будут применяться к диску /dev/sda. Нас это не устраивает. Поступаем следующим образом:

(parted) select /dev/sdb
Using /dev/sdb

Теперь команды будут применяться ко второму диску. На оном, как видно - уже есть таблица разделов типа msdos. Если бы её не было - пришлось бы создавать командой mklabel . Этим же способом можно быстро удалить старую таблицу разделов, если там сейчас что-то старое и не нужное.

(parted) mklabel msdos

Теперь, когда диск пуст и таблица разделов создана - создаём два новых раздела с теми же размерами, какие видно на первом диске.

(parted) mkpart primary 2048s 5859327s
(parted) set 1 lba off
(parted) set 1 raid on
(parted) set 1 boot on
(parted) mkpart primary 5859328s 17577983s
(parted) set 2 lba off
(parted) set 2 raid on
(parted) print /dev/sdb
Model: ATA MAXTOR STM380215 (scsi)
Disk /dev/sdb: 156299375s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags
1 2048s 5859327s 5857280s primary boot, raid
2 5859328s 17577983s 11718656s primary raid

(parted)

Как видно, размеры указываются в секторах - такие же, какие видны на /dev/sda. Команды set на разделы - включают и отключают нужные и ненужные флаги - например, флаг lba ставится по-умолчанию, но он нам особо не нужен, в то же время нужен флаг raid и флаг boot для загрузочного раздела.
Теперь можно восстановить деградировавшие массивы. Это весьма просто:

mdadm /dev/md0 -a /dev/sdb1
mdadm /dev/md1 -a /dev/sdb2
cat /proc/mdstat

Последняя команда должна вывести информацию по массивам, в которых будет что-то вроде прогрессбара (полоски с процентами) для процесса восстановления. Эпизодически посматривая содержимое /proc/mdstat можно отслеживать этот процесс. Либо можно делать это в реальном времени примерно такой командой:

watch -n 1 cat /proc/mdstat

Команда будет выводить содержимое файла на экран раз в секунду.