Установка Manjaro на программный рейд mdraid

Manjaro — замечательная операционная система из семейства Linux, прекрасно работающая на моем ноутбуке последние несколько лет. Поборов лень, решил установить Manjaro на основной домашний ПК и здесь, к своему удивлению, пришлось столкнуться с некоторыми сложностями, возникшими из-за того, что на ПК использую программный RAID-массив mdraid. Впрочем, возникшие сложности легко решаются, о чем и пойдет речь в данной статье.

Итак, установка Manjaro на программный рейд mdraid — решение проблем.

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

Error: diskfilter writes are not supported

Данная ошибка возникнет, если раздел /boot является программным RAID-массивом и связана с тем, что загрузчик Manjaro умеет запоминать некоторые параметры, например, выбранную на стадии загрузки ОС, записывая эти данные в раздел /boot, но он не может выполнить запись, если /boot является массивом mdraid.

На самом деле, сохранение параметров состояния, это очень удобно, например, если на одном ПК несколько ОС — Windows любит перезагружаться в процессе обновления и продолжать обновление после перезагрузки — если загрузчик запомнил, какая именно была выбрана ОС, то не требуется присутствовать постоянно у ПК, чтобы не пропустить момент перезагрузки и вручную снова выбирать Windows, для продолжения обновления.

Итак, определились, что в загрузчик Manjaro по умолчанию встроен весьма удобный алгоритм, обеспечивающий запоминание некоторой информации. Информация записывается (save_env) в файл (environment block), обычно, находящийся по адресу /boot/grub/grubenv, но по соображениям безопасности, это хранилище доступно лишь при хранении на обычном диске — не являющимся программным RAID-массивом или томом LVM, а также, в файловой системе без контрольной суммы (традиционно, для раздела /boot используются файловые системы ext3 или ext4, вполне совместимые с данной опцией). Файловая же система ZFS, например, не подойдет.

В случае, если /boot является программным RAID-массивом, возникает упомянутая ошибка при загрузке ОС — «diskfilter writes are not supported».

Решение:

  1. Наиболее распространенным вариантом решения данной проблемы является отключение функционала описанного выше. Для этого, в файле /etc/default/grub необходимо задать следующий параметр:
    GRUB_SAVEDEFAULT="false"
    Затем, применить новую конфигурацию grub:
    sudo update-grub
    Основным минусом данного решения является потеря функционала сохранения состояния между перезагрузками. Мне данное решение не понравилось, поскольку хотелось сохранить удобную для себя опцию, поэтому, решил пойти другим путем.
  2. Для сохранения всего функционала, просто разобрал RAID-массив смонтированный в /boot и назначил /boot разделом обычного диска, а раздел второго диска, освободившийся после того, как был разобран RAID-массив, пустил под резервное копирование /boot, которое выполняется при загрузке ОС и дополнительно раз в сутки, по расписанию CRON, при помощи rsync.
    Минусы данного решения — если выйдет из строя диск, на котором расположен /boot, ОС не сможет загрузиться. Однако, с учетом наличия резервной копии /boot на втором диске, решить такую проблему будет не сложно.
    Плюсы данного решения — полный функционал save_env/load_env.

Grub ERROR: device ‘UUID=xxx’ not found.

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

mount: /new_root: can't find UUID='xxx' 
You are now being dropped into and emergency shell.
sh: can't access tty: job control turned off

Решению подобной проблемы может помочь следующий алгоритм действий:

    1. Загружаемся с LiveCD (Rescue/Repair).
    2. Монтируем файловую систему ОС в /mnt
    3. Выполняем chroot-prepare
      mount —bind /dev /mnt/dev/
      mount —bind /proc /mnt/proc/
      mount —bind /sys /mnt/sys/
      mount —bind /run /mnt/run
    4. Заходит в chroot, выполняем:
      chroot /mnt
      export PATH=$PATH:/usr/sbin:/bin:/sbin
      mount devpts /dev/pts -t devpts
      mkinitcpio -P
    5. Теперь отмонтируем всё в обратном порядке и пробуем перезагрузиться и это вполне вероятно, что этого будет достаточно.

Также, нужно понимать, что мир не стоит на месте и информация изложенная в данной статье может потерять актуальность в любой момент. Однако, это не отменяет того факта, что Manjaro остается отличной ОС, а mdraid отличным решением обеспечения сохранности своих данных.

Ответить