Установка centos 7 на raid 1

Обновлено: 04.07.2024

Проблемка такая: Ставлю centos 7, в установщике разбиваю диск на /boot (ext4), / (ext4) и /swap, выбираю зеркалирование на второй диск, система ставится и стартует.

cat /proc/mdstat показывает что массив собрался

Теперь вырубаю машину, выдергиваю 2 диск, надо ведь проверить как работает зеркало и. ничего не работает, получаю вот это:

Ок, возможно загрузчик криво встал на второй диск, втыкаю обратно второй, выдергиваю первый и получаю тоже самое. Подрубив обратно оба диска - все грузится нормально, что я делаю не правильно, почему массив так криво собирается и в какую сторону копать?

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

Проверь ещё отключая диск во время работы.

Raid можно сделать средствами lvm, но там он больше как чёрный ящик - видно только процент синхронизации и простейший статус. Можно хранить все разделы внутри lvm. Только первичный загрузчик снаружи, вторичный уже внутри можно.

boowai ★★★★ ( 14.01.19 08:21:15 )
Последнее исправление: boowai 14.01.19 08:21:50 (всего исправлений: 1)

Нужно либо вытаскивать диск при работающей системе, чтобы программный RAID увидел сбой, либо руками удалить пропавший диск из рейда с помощью mdadm (это можно сделать в emergency mode).

Быть может есть способ заставить mdadm собирать деградированный RAID1 при загрузке системы после какого-то таймаута, но мне кажется лучше так не делать. Это увеличивает шансы возникновения очень серьёзных проблем в будущем.

Проверь ещё отключая диск во время работы

Проверю как система себя ведет, но опять же получается пропадает смысл raid1, допустим я недосмотрел за состоянием диска, один вылетел, потом последовала перезагрузка машины и все. приехали. Да подсунув новый диск и пересобрав массив все заработает, но как же отказоустойчивость?

Быть может есть способ заставить mdadm собирать деградированный RAID1 при загрузке системы после какого-то таймаута

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

Разве soft raid1 не должен позволять грузиться с любого диска, если 1 вылетел?

Разве soft raid1 не должен позволять грузиться с любого диска, если 1 вылетел?

Вот я и говорю, что raid1 должен увидеть, что диск именно вылетел. Если диск пропал пока система была выключена, то с точки зрения сохранности данных, при включении лучше не пытаться стартовать с деградированного массива.

Проверю как система себя ведет, но опять же получается пропадает смысл raid1, допустим я недосмотрел за состоянием диска, один вылетел, потом последовала перезагрузка машины и все. приехали.

Что мешает протестировать именно эту ситуацию? На _работающей_ системе вытащи один из дисков и всё.

Что мешает протестировать именно эту ситуацию? На _работающей_ системе вытащи один из дисков и всё.

на работающей системе диск sda вытащил, массив тут же выдает ошибку и после ребута система стартует нормально. Ради интереса выключил машину, отрубил sdb, подрубил обратно sda --> опять emergency mode. Правильно я понимаю логику работы зеркала в софт рейде, если mdadm обнаружил во время работы вылетевший диск, то система после ребута стартанет нормально, а если диск пропал в то время как система была выключена, получаем emergency mode.

А как в emergency mode деградировать массив в ручную и загрузится с диска?

на работающей системе диск sda вытащил, массив тут же выдает ошибку и после ребута система стартует нормально. Ради интереса выключил машину, отрубил sdb, подрубил обратно sda --> опять emergency mode.

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

Правильно я понимаю логику работы зеркала в софт рейде, если mdadm обнаружил во время работы вылетевший диск, то система после ребута стартанет нормально, а если диск пропал в то время как система была выключена, получаем emergency mode.

Да. Как я уже говорил, софтовый RAID или сам должен задетектить ошибку диска, или ему о ней надо сказать при помощи mdadm.

А как в emergency mode деградировать массив в ручную и загрузится с диска?

Там должна быть утилита mdadm. Соответственно: mdadm --fail, mdadm --remove.

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

Стало интересно, решил добить этот диск, в emergency mode --fail и --remove не выполняются, выдает ошибку mdadm: cannot get array info for /dev/md125.

Решил массив совсем остановить mdadm --stop /dev/md125. После ребута все так же emergency mode. Я так понимаю в таком случае только пересборка массива поможет загрузиться?

Я так понимаю в таком случае только пересборка массива поможет загрузиться?

Пересборка массива из этого одного диска с той же версией метаданных точно поможет. Но скорее всего это не единственный и не правильный вариант.

Тема, которую я хочу затронуть, довольно популярная и рассмотрена на многих ресурсах, но для другой версии загрузчика «GRUB» и для другой версии ОС.

Преамбула

Потребовалось перенести установленный Centos 7 на software raid level 1 в ручном режиме, так как сама система ставилась через kickstart. Поискав информацию по данному вопросу, нашел материал только по старым версия ОС и по первой версии загрузчика «GRUB».

Решив, что методы аналогичные, лишь с изменением команд, взялся за дело и наткнулся на нюансы с «dracut».
По какой-то причине initramfs созданый «dracut» не видит собранного raid и отказывается грузится. Версия «dracut» 033.

Фабула

Решение было найдено и заключается оно в включении и посылке ядру опции «rd.auto=1» (опция заставляет автоматически определить и запустить все raid устройства которые есть в наличии), которая отключена по умолчанию в «dracut» начиная с версии 024.

Ниже я приведу набор команд для перевода установленной ОС на software raid level 1, для осуждения или помощи нуждающимся.

Исходные данные

Диск /dev/sda, на /dev/sda1 стоит система, размером в 4Гб.
Диск /dev/sdb полностью чистый.

Команды

1. Копируем полностью разделы, с sda на sdb:


2. Через fdisk меняем id 83 на fd на sdb1:


3. Делаем raid level 1 с одним диском:


4. Форматируем получившийся /dev/md0:


5. Монтируем наш /dev/md0:


6. Копируем текущую сис-му на /dev/md0:


7. Монтируем информацию о текущей системе в наш новый корень и делаем chroot в него:


8. Получаем uuid /dev/md0 и вносим его в fstab, где заменяем uuid sda1 на uuid md0:


9. Создаем конфиг для mdadm, чтоб md0 не сменил имя при перезагрузке:


10. Делаем новый initramfs, с нужными модулями (вот тут-то dracut и подкачал):


11. Передаем ядру опцию «rd.auto=1» явно через «GRUB», для этого, добавляем ее в «GRUB_CMDLINE_LINUX»:


12. Перепишем конфиг «GRUB» и установим его на наш диск sdb:


13. Убеждаемся, что uuid md0 и опция «rd.auto=1» точно записались:


14. Производим reboot машины и через bios boot меню выбираем диск с половинкой raid

15. После удачной загрузки, переделываем sda в часть raid. Меняем id 83 на fd через fdisk, добавляем диск в raid и переустанавливаем «GRUB» на диск:


После этого смотрим как собирается raid через /proc/mdstat и можно попробовать загрузится с первого диска.

Ещё один блог о системном администрировании, операционных системах, СУБД, сетях, костылях-велосипедах и пр.

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


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

  1. Диск /dev/sda, на котором имеются следующие разделы:
    • /dev/sda1 - раздел / с файловой системой ext4
    • /dev/sda2 - swap
    • /dev/sda3 - раздел /opt с файловой системой ext4
  2. Абсолютно чистый /dev/sdb, идентичный по размеру с /dev/sda

В результате должно получиться следующее:

  • /dev/md0, полученный из /dev/sda1 и /dev/sdb1
  • /dev/md1, полученный из /dev/sda2 и /dev/sdb2
  • /dev/md2, полученный из /dev/sda3 и /dev/sdb3

Как я уже написал в начале заметки, для создания массива будет использоваться утилита mdadm.
Для ее установки:

Для создания массива raid1 на уже работающей системе, необходимо подготовить диск /dev/sdb, скопировать на него все содержимое диска /dev/sda и только после этого добавить /dev/sda к массиву.

Для начала копируем таблицу разделов диска /dev/sda на диск /dev/sdb:

Команда fdisk -l должна теперь показать идентичную разметку обоих дисков.

Желательно (но не обязательно) изменить тип всех трех разделов и установить его равным FD (Linux RAID autodetect). Изменить тип раздела можно с помощью fdisk:

Перейдем к созданию raid1 массивов. Поскольку диск /dev/sda сейчас занят (на нем запущена система) разделы /dev/sda1, /dev/sda2 и /dev/sda3 нельзя добавить к массиву. Создаем raid1 из одного диска, для вторго используем заполнитель missing:

Следующий шаг – создание файловых систем на наших массивах:

Теперь монтируем наши /dev/md0 и /dev/md2 для копирования текущей системы. Естественно, swap массив /dev/md1 монтировать не нужно:

Копируем содержимое разделов /dev/sda1 и /dev/sda3 на /dev/md0 и /dev/md2 соответственно:

Монтируем информацию о текущей системе в наш новый корень и делаем chroot в него:

Получаем UUID /dev/md0, /dev/md1 и /dev/md2, вносим их в /etc/fstab, где заменяем UUID разделов диска /dev/sda:

Создаем конфиг для mdadm:

Делаем новый initramfs:

Передаем ядру опцию "rd.auto=1" явно через grub, для этого добавляем ее в GRUB_CMDLINE_LINUX:

Перепишем конфиг grub и установим его на наш диск sdb:

Далее выполним перезагрузку сервера. Через BIOS Boot Menu выбираем диск с половинкой raid.

После удачной загрузки, переделываем sda в часть raid1 массива. С помощью fdisk изменим тип всех трех разделов и установим его равным FD (Linux RAID autodetect). Далее добавим диск в raid1 и переустановим grub на диск:

После этого можем посмотреть как собирается raid1 массив через /proc/mdstat:

На этом все, программный raid1 успешно создан!

Ниже несколько примеров для работы с утилитой mdadm.

Примеры использования mdadm

Пометка диска как сбойного

Диск в массиве можно условно сделать сбойным, ключ --fail (-f):

Удаление сбойного диска

Сбойный диск можно удалить с помощью ключа --remove (-r):

Добавление нового диска

Добавить новый диск в массив можно с помощью ключей --add (-a) и --re-add:

Сборка существующего массива

Собрать существующий массив можно с помощью mdadm --assemble. Как дополнительный аргумент указывается, нужно ли выполнять сканирование устройств, и если нет, то какие устройства нужно собирать.

Расширение массива

Расширить массив можно с помощью ключа --grow (-G). Сначала добавляется диск, а потом массив расширяется:

Проверяем, что диск (раздел) добавился:

Если раздел действительно добавился, мы можем расширить массив:

Опция --raid-devices указывает новое количество дисков используемое в массиве. Например, было 3 диска, а теперь расширяем до 4-х - указываем 4.

Рекомендуется задать файл бэкапа на случай прерывания перестроения массива, например добавить:

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

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

Выбор дисков для RAID массивов

Для отображения подключенных дисков выполним команду:


Создание RAID1 массива

Выполним следующие команды для создания массивов для БД и логов:

На вопрос Continue creating array? отвечаем y.

Проверим результат выполнения команд:


Настройка RAID массивов

Разметим пространство. В качестве файловой системы выберем ext4:

Создадим конфигурационный файл для утилиты mdadm:

Монтируем созданные RAID массивы в каталог /raid:

Для автоматического монтирования RAID массивов при загрузке системы выполним команду:

в открывшемся файле добавим строчки:

/dev/md0 /raid200 ext4 defaults 1 2

/dev/md1 /raid120 ext4 defaults 1 2

Примеры использования mdadm

Пометка диска как сбойного

Удаление сбойного диска

Добавление нового диска

Сборка существующего массива

Расширение массива

Проверяем, что диск (раздел) добавился:

Если раздел действительно добавился, мы можем расширить массив:

Рекомендуется задать файл бэкапа на случай прерывания перестроения массива, например добавить:

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

Убедитесь, что массив расширился:

Нужно обновить конфигурационный файл с учётом сделанных изменений:

Переименование массива

Для начала отмонтируйте и остановите массив:

Затем необходимо пересобрать как md5 каждый из разделов sd[abcdefghijk]1

Удаление массива

Для начала отмонтируйте и остановите массив:

Затем необходимо затереть superblock каждого из составляющих массива:

Если действие выше не помогло, то затираем так:

Заключение

В итоге мы получили два программных RAID массива уровня 1, которые будем использовать для баз данных 1С:Предприятие 8.3

Читайте также: