Перейти к содержанию

Установка Debian с применением UEFI на LVM в RAID1

Эта небольшая заметка посвящена установке Debian на ПК с UEFI с использованием LVM на RAID1.

Установка

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

В описании далее, предполагается, что вы загрузились с установочного носителя в режиме UEFI.

Выберить Manual для деления дисков вручную:

Создайте на дисках новые схемы разделов (в данном случае по-умолчанию будет создана таблица GPT):

Создайте на каждом диске по разделу типа EFI размером 500MB:

Далее нужно создать дисковый массив для операционной системы:

Добавьте в дисковый массив разделы:

Теперь нужно создать логическую группу томов и сами логические тома.

Добавьте в логическую группу созданный дисковый массив и в этой группе создайте логические тома rootfs размером 50GB и swapfs размером 1GB (размеры даны для примера, используйте свои значения в зависимости от задачи). Настройка загрузки

Чтобы система могла загружаться с любого диска, нужно создать дисковый массив, добавить в него разделы типа EFI двух имеющихся дисков и затем добавить в систему UEFI записи, содержащие сведения о разделах, с которых можно загрузиться.

Отобразите список блочных устройств:

lsblk -o +uuid

Из списка видно, что на разделе sdb1 нет раздела EFI. Его нужно будет создать. Мы сделаем это путем копирования чуть позже.

Отобразите список записей загрузки системы UEFI и список идентификаторов разделов дисков:

efibootmgr -v | grep -i debian

Из списка записей системы UEFI видно, что сейчас загрузка возможна только с раздела с идентификатором 1f95f89b..... Найдем этот идентификатор в списке разделов - он соответствует разделу sda1. То есть система может быть загружена только с этого раздела именно этого диска.

Дополнительно, можно посмотреть статус дисковых массивов:

cat /proc/mdstat

Из вывода команды видно, что есть только один исправный дисковый массив md0, в который входят разделы sda2 и sdb2. Это дисковый массив для самой операционной системы.

Создадим еще один дисковый массив для разделов типа EFI, но включим в него изначально только пока еще пустой раздел sdb1:

mdadm --create /dev/md100 --level 1 --raid-disks 2 --metadata 1.0 /dev/sdb1 missing

Если теперь посмотреть данные о дисковых массивах, можно увидеть, что появился второй массив, но в него входит только раздел sdb1:

Далее, нужно отформатировать новый дисковый массив в файловой системе FAT32 и смонтировать его во временную директорию:

mkfs.fat -F32 /dev/md100
mkdir /tmo/RAID
mount /dev/md100 /tmp/RAID

Теперь нужно скопировать данные из действующего раздела sda1 на новый дисковый массив:

rsync -av --process /boot/efi /tmp/RAID/

Теперь данные идентичны и на действующем разделе EFI, и на новом дисковом массиве. Остается только добавить в этот массив сам действующий раздел. Для этого его нужно сначала отмонтировать, а затем добавить в массив:

umount /dev/sda1
mdadm --manage /dev/md100 --add /dev/sda1

После этого необходимо заменить строку загрузки системы в /etc/fstab на строку, содержащую имя дискового массива:

/dev/md100  /boot/efi vfat  umask=0077  0 1

Остается только добавить запись о дисковом массиве в конфигурацию mdadm и пересобрать образ initrd:

mdadm --detail --scan | grep 100 >> /etc/mdadm/mdadm.conf

update-initramfs -u

Если теперь вывести данные о дисковых массивах, мы увидим два массива, в каждом из которых есть по два раздела с двух разных дисков:

Чтение данных с диска

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

Далее предполагается, что в системе, к которой вы подключаете диск, уже установлены пакеты mdamd и lvm2. Если это не так, установите эти пакеты.

Отобразите список блочных устройств:

lsblk -o +uuid

На примере видно, что система опознала и автоматически смонтировала массивы md126 и md127. Можно отобразить более подробную информацию о любом из разделов подключенного диска и посмотреть данные массива:

mdadm --examine /dev/sda2

Если нужно остановить дисковый массив, выполните:

mdadm -S /dev/md127

А чтобы собрать массив вручную, выполните:

mdadm --assemble --run /dev/md3 /dev/sda2

Здесь собирается массив md3, состоящий только из раздела sda2.

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

pvscan
vgck --updatemetadata lvg01
vgimport lvg01
vgchange -a y lvg01
lvscan
mount /dev/lvg01/rootfs /mnt

Теперь файловая система rootfs логической группы lvg01 смонтирована в /mnt.

Чтобы корректно отмонтировать такой раздел выполните:

umount /mnt
vgchange -a n lvg01
vgexport lvg01
mdadm -S /dev/md3

Загрузка с одним диском

Система не сможет загрузиться, если в UEFI нет корректных записей, содержащих данные о разделах с загрузчиком. Такая ситуация может возникнуть по нескольким причинам, например, если вы переставите диск в другой ПК или если данные UEFI будут изменены по другим причинам.

Если такое произойдет, вы получите ошибку загрузки и UEFI предоставит возможность загрузки вручную при помощи UEFI Interactive Shell:

Чтобы выполнить загрузку вручную, введите имя раздела и затем имя загрузчика:

FS0:
EFI\debian\shimx64.efi

Здесь описан только один небольшой частный случай ручной загрузки и вам может потребоваться дополнительная информация. Более подробно о UEFI Shell можно почитать, например, здесь.

Восстановление RAID1

После того, как один из дисков массива вышел из строя, его нужно заменить. Установите новый диск и загрузите систему.

В зависимости от того, используете ли вы диск на том же ПК, или на другом, или же изменились данные UEFI, вам может потребоваться загрузить систему вручную, как показано в предыдущем параграфе.

После загрузки системы можно просмотреть список дисков и разделов командой

lsblk

Например, вывод команды содержит:

NAME               MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
sda                  8:0    0    48G  0 disk  
sdb                  8:16   0    48G  0 disk  
|-sdb1               8:17   0   476M  0 part  
| `-md100            9:100  0 475.9M  0 raid1 /boot/efi
`-sdb2               8:18   0  47.5G  0 part  
  `-md0              9:0    0  47.5G  0 raid1 
    |-lvg01-rootfs 253:0    0  46.6G  0 lvm   /
    `-lvg01-swapfs 253:1    0   960M  0 lvm   [SWAP]
sr0                 11:0    1  1024M  0 rom 

Здесь можно видеть, что диск sdb содержит разделы, а диск sda - пустой. Значит нужно выполнить клонирование структуры и данных с диска sdb на sda и затем восстановить дисковые массивы.

Сначала сохраним структуру диска sdb в файл:

sfdisk -d /dev/sdb > sdb.dump

Теперь восстановим ее на диске sda:

sfdisk /dev/sda < sdb.dump

Добавим первый раздел диска sda в дисковый массив md100:

mdadm --manage /dev/md100 --add /dev/sda1

Добавим второй раздел диска sdb к дисковому массиву md0:

mdadm --manage /dev/md0 --add /dev/sda2

Просмотрим записи в UEFI:

efibootmgr -v | grep -i debian

В каждой записи есть идентификатор раздела, с которого возможна загрузка. Чтобы сравнить, какие идентификаторы у существующих разделов EFI выполните:

blkid /dev/sda1
blkid /dev/sdb1

Идентификаторы разделов в выводе должны совпадать с идентификаторами в списке загрузки UEFI. Если это не так, нужно содержимое списка загрузки UEFI привести в соответствие имеющимся разделам.

Если для этого нужно удалить запись из списка загрузки UEFI выполните:

efibootmgr -B -b NUMBER

Вместо NUMBER укажите номер записи, например, 0005.

Чтобы добавить запись в UEFI выполните команду по шаблону:

efibootmgr --create --disk /dev/sda --part 1  --label "debian 1" --loader "\EFI\debian\shimx64.efi"

Вмето /dev/sda подставьте имя диска, раздел с которого является загрузочным; в параметре --part 1 укажите номер этого раздела; в --label укажите уникальное имя записи.

Добавьте записи для загрузки с каждого из имеющихся у вас дисков.