Тема, которую я хочу затронуть, достаточно популярна и обсуждалась на многих ресурсах, но для другой версии загрузчика GRUB и для другой версии ОС.
Преамбула
Переносить установленный Centos 7 на программный рейд уровня 1 пришлось вручную, так как сама система устанавливалась через кикстарт. Искав информацию по этому вопросу, я нашел материал только по старым версиям ОС и по первой версии загрузчика GRUB. Решив, что методы схожи, только с изменением команд, я взялся за дело и наткнулся на нюансы с «дракутом».Созданный "dracut" initramfs почему-то не видит собранный рейд и отказывается загружаться.
Версия "дракут" 033.
Басня
Решение найдено и оно заключается во включении и отправке ядру опции «rd.auto=1» (опция заставляет его автоматически обнаруживать и запускать все доступные рейд-устройства), которая по умолчанию отключена в «dracut».начиная с версии 024. Ниже я приведу набор команд для перевода установленной ОС в программный рейд уровня 1, для осуждения или помощи нуждающимся.
Исходные данные
Диск /dev/sda, на /dev/sda1 стоит система 4Гб.
Диск /dev/sdb полностью чист.
Команды
1. Скопируйте все разделы из sda в sdb:2. Используя fdisk, измените идентификатор 83 на fd на sdb1:sfdisk -d /dev/sda | sfdisk /dev/sdb
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
-
Скидка При Использовании Социальных Сетей
19 Oct, 24 -
«Ижора»: Сотовый Автомат-Компьютер
19 Oct, 24 -
Что Такое Ecpm И Как Его Увеличить?
19 Oct, 24