Centos 7 Конвертируется В Программный Raid 1

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



Преамбула

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

Созданный "dracut" initramfs почему-то не видит собранный рейд и отказывается загружаться.

Версия "дракут" 033.

Басня

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

начиная с версии 024. Ниже я приведу набор команд для перевода установленной ОС в программный рейд уровня 1, для осуждения или помощи нуждающимся.



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

Диск /dev/sda, на /dev/sda1 стоит система 4Гб.

Диск /dev/sdb полностью чист.

Команды

1. Скопируйте все разделы из sda в sdb:
  
  
  
  
  
  
  
  
  
  
  
  
  
   

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

2. Используя fdisk, измените идентификатор 83 на fd на sdb1:

fdisk /dev/sdb

3. Делаем рейд 1 уровня с одним диском:

mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb1

4. Отформатируйте полученный файл /dev/md0:

mkfs.ext4 /dev/md0

5. Подключите наш /dev/md0:

mount /dev/md0 /mnt/

6. Скопируйте текущую систему в /dev/md0:

rsync -axu / /mnt/

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

mount --bind /proc /mnt/proc && mount --bind /dev /mnt/dev && mount --bind /sys /mnt/sys && mount --bind /run /mnt/run && chroot /mnt/

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

ls -l /dev/disk/by-uuid |grep md >> /etc/fstab && vim /etc/fstab

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

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

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

mv /boot/initramfs-3.10.0-123.el7.x86_64.img /boot/initramfs-3.10.0-123.el7.x86_64.img.bak dracut /boot/initramfs-$(uname -r).

img $(uname -r)

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

vim /etc/default/grub

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

grub2-mkconfig -o /boot/grub2/grub.cfg && grub2-install /dev/sdb

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

cat /boot/grub2/grub.cfg

14. Перезагружаем аппарат и через меню загрузки биоса выбираем диск с половиной рейда 15. После успешной загрузки конвертируем sda в рейдовую часть.

Измените id 83 на fd через fdisk, добавьте диск в рейд и переустановите на диск «GRUB»:

fdisk /dev/sda mdadm --manage /dev/md0 --add /dev/sda1 grub2-install /dev/sda

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

UPD: Из-за использования rd.auto=1 замечены проблемы с LVM, если он находится на программном рейд-разделе - после перезагрузки LVM-раздел будет недоступен.

Чтобы этого не произошло, нужно сделать следующее: На шаге 11 вам нужно передать rd.md.uuid= UUID, который мы поместили в mdadm.conf, вместо «rd.auto=1», тем самым явно указав, какой рейд-раздел нам следует собрать, чтобы рут был загружен.

Ссылка и решение ошибки: https://bugs.debian.org/cgi-bin/bugreport.cgiЭbug=725759 Теги: #настройка Linux #raid1 #grub2 #mdadm #centos7 #dracut

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.