Программный RAID в Linux на основе MD-устройств успел отлично зарекомендовать себя в работе и пользуется заслуженной популярностью у администраторов, сочетая надежность и простоту создания и управления. Но со все более широким распространением UEFI-систем приходится сталкиваться с некоторыми особенностями. Многие, если есть такая возможность, переключают настройки в режим совместимости, но это неправильно, UEFI - это стандарт для современных устройств и поэтому надо учиться работе с ним.
Другой возможной альтернативой программного RAID является использование встроенного в материнскую плату или недорогого внешнего контроллера. Но в этом случае вы получаете проблему совместимости, такой массив будет работать только со своим семейством контроллеров, сегодня их не так и много, но тем не менее. Также вы не сможете производить работы по восстановлению и обслуживанию массива в онлайн, данные на дисках в это время будут недоступны.
Скажем больше, мы не видим никаких преимуществ у встроенных и недорогих контроллеров перед программной реализацией, особенно на простых массивах, не требующих сложных вычислений (RAID 1 и 10). А учитывая всю гибкость mdadm, программный RAID по многим параметрам будет выглядеть гораздо привлекательнее.
Конфигурация разделов Linux с UEFI
Для примера рассмотрим применяемую по умолчанию во многих дистрибутивах схему со всеми файлами в одном разделе. Однако это не означает, что вам следует применять именно ее, данная схема выбрана нами для простоты подачи материала.
Linux RAID - специальные разделы, из которых собирается программный RAID, в нашем случае используется один массив md0, располагающийся на двух дисках. Данные разделы имеют специальные заголовки, что позволяет даже при подключении к другой системе правильно определить их тип и собрать массив заново.
Swap - раздел подкачки, используется как механизм виртуальной памяти, а также для организации режима сна (в настольных системах). Некоторые современные системы не используют раздел подкачки (Ubuntu) используя для этой цели специальный файл в корневом разделе. Swap можно объединить в программный RAID, но смысла в этом немного, более того, при использовании отдельных swap-разделов системе будет доступен вдвое больший объем для подкачки.
Некоторые особенности Ubuntu Server 18.04
Начиная с версии 18.04 Ubuntu Server по умолчанию предлагается с новым инсталлятором Subiquity, который очень просто отличить по обновленному внешнему виду:
Также легко можно отличить дистрибутивы по наименованию, образ с Subiquity содержит в наименовании слово live (ubuntu-18.04.3-live-server-amd64.iso).
Создание программного RAID при установке системы
Все дальнейшие действия мы будем производить на системе Debian 10, однако все сказанное будет справедливо для любой основанной на Debian системе, а с некоторыми поправками и для любого дистрибутива Linux.
Прежде всего создадим в начале каждого диска системный раздел EFI размером в 499 МБ (по умолчанию Debian и Ubuntu используют близкие к этому размеры разделов).
Настройка загрузчика EFI и его копирование на второй раздел
Перед тем как настраивать загрузчик нам потребуется получить некоторые данные, в частности идентификаторы (UUID) разделов, их можно получить командой:
lsblk -o +uuid
В полученном выводе прежде всего обратим внимание на идентификаторы EFI-разделов.
Правильно будет изменить идентификатор одного из разделов, чтобы они были одинаковы. Так как UUID раздела на первом диске уже используется в файлах конфигурации, то изменим его у раздела на втором диске.
Для работы с разделами FAT32 нам потребуется установить дополнительные утилиты:
apt install dosfstools
После чего выполним:
mkdosfs -i 2396BE56 /dev/sdb1
Где 2396BE56 - идентификатор первого EFI-раздела (/dev/sda1), его следует указывать в одну строку без пробелов и тире, а /dev/sdb1 - второй EFI раздел.
Теперь получим список текущих загрузочных записей EFI:
efibootmgr -v
Создадим аналогичную запись для второго диска:
efibootmgr -c -d /dev/sdb -p 1 -L "debian 2" -l "\EFI\debian\shimx64.efi"
Немного поясним назначение ключей команды:
- -c (--create) создать новую запись
- -d (--disk) диск, на котором находится системный раздел EFI
- -p (--part) номер раздела EFI
- -L (--label) метка(наименование) для загрузочной записи
- -l (--loader) путь образа EFI для загрузки
Так как наш EFI-раздел располагается в /dev/sdb1, то в опциях -d и -p указываем /dev/sdb и 1 соответственно, а в качестве пути указываем данные из первой загрузочной записи, которые мы получили на предыдущем шаге. Обратите внимание, что при указании пути к образу EFI используется обратный слеш.
Еще раз убедимся, что запись выполнена правильно:
efibootmgr -v
Если обнаружена ошибка, то запись следует удалить и создать заново, для удаления используйте команду:
efibootmgr -b 6 -B
Ключ -b (--bootnum) указывает на номер записи, а -B (--delete-bootnum) предписывает удалить ее.
Последним шагом скопируем содержимое загрузочного раздела с первого диска на второй, для этого смонтируем второй EFI-раздел:
mount /dev/sdb1 /mnt
И скопируем на него содержимое первого EFI-раздела:
cp -R /boot/efi/EFI/ /mnt
После чего отмонтируем раздел:
umount /dev/sdb1
На этом настройка завершена, система теперь может быть успешно загружена с любого диска.