Установка Proxmox на RAID1 через Debian

2023.10.15
Установим Proxmox на RAID1 из двух дисков через установку Debian, по пути разберем возникающие проблемы с автозагрузкой, BIOS и сетями, перенесем данные со старого Proxmox в новый.

Proxmox можно установить через официальный образ, однако в этом случае у нас нет возможности самостоятельного создания RAID массива, мы можем выбирать массив на основе ZFS или Btrfs:

Нам нужен RAID1 массив с произвольной файловой системой, например ext4.

Однако, Proxmox можно установить не только из образа Proxmox, но и через установку пакетов в Debian, и здесь мы уже можем вручную создать нужный нам RAID массив.

Ранее мы уже рассматривали создание RAID1 массива из дисков для хранения данных, понимание прошлого материала значительно облегчит применение нового.

Создание RAID1 через установщик Debian

Скачиваем образ Debian здесь.

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

UEFI вымещает старый BIOS, поэтому будем говорить только про установку в режиме UEFI и создавать отдельный EFI раздел в 500МБ. Загрузиться с флешки в режиме UEFI можно намерено указав это в загрузчике BIOS:

Загружаемся в установщик Debian и доходим до этапа Partition disks, который очень похож на fdisk в том плане что все изменения накапливаюется и только при подтверждении применяются к диску.

Создание разделов

В разделе Partition disks выбираем Manual (ручное разделение):

Здесь мы видим 2 наших диска одинакового объема:

Заходим в первый диск и создаем пустую таблицу раздедлов выбирая Yes:

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

В итоге на первом диске будет пустая таблица разделов:

Заходим в нее и выбираем Create a new partition:

Для EFI раздела необходимо выделить 500мб с самого начала диска (а вот и вот ссылки обсуждений на форумах):

После создания раздела, по умолчанию у него будут такие настройки:

Нужно сменить Use as на EFI System Partition:

После нажатия на Done settings up the partition мы должны увидеть примерно такую картину:

Выбираем неразмеченное пространство и создаем новый раздел на весь объем Create a new partition:

Use as меняем на RAID:

Применяем изменения. В конечном итоге наш первый диск должен иметь 2 раздела EFI и RAID:

Проделываем тоже самое со вторым диском и получаем такую картину:

Конфигурация RAID1

Выбираем Configure software RAID (на предыдущем скрине) и подтверждаем (Yes):

Выбираем Create MD Device:

Выбираем RAID1, указываем количество дисков 2, а номер MD устройства 0 чтобы в системе это устрйоство было доступно как /dev/md0. Затем выбираем разделы на дисках которые хотим поместить в RAID:

Выбираем Finish и в итоге получаем такую структуру разделов на наших дисках:

Теперь нужно создать файловую систему на RAID диске, выбираем ext4 (или другую подходящуюю) и обязательно указываем Mount point в корень (/). Должно получиться примерно так:

Все конфигурация дисков у нас должна быть примерно такой:

Теперь нужно выбрать Finish partitioning and write changes to disk и мы получим такое сообщение:

Дело в том что мы не создали swap раздел. В моем случае достаточно ОЗУ чтобы игнорировать swap, однако его можно создать также как мы создавали разделы выше, только в Use as нужно выбрать swap.

Выбираем No и получаем финальный вопрос о подтверждении, выбираем Yes и стартует установка ОС:

Установка ProxMox

На сайте Proxmox есть исчерпывающая статья по установке Proxmox на Debian 12.

Некоторые утилиты будут недоступны, несмотря на то что они уже установленны, проблемы в переменной PATH, в ней нет пути /usr/sbin. Например при update-grub будет получена ошибка что такой пакет не найден.

Исправить проблему просто:

export PATH=$PATH:/usr/sbin

А еще лучше поместить эту строку в конец ~/.bashrc чтобы не вводить эту команду каждый раз при входе под root.

Загрузка системы с любого диска

Раз уж содаем отказоустойчивую систему, то хочется чтобы она автоматически загружалась если один из дисков выходит из строя.

grub

На хосте у нас уже смонтирована директория /boot/efi/, это и есть тот самый EFI раздел на первом диске, который мы делали в самом начале.

В директории EFI есть файл ./EFI/debian/grub.cfg который отсылает на конкретный диск за настройками grub. Ссылка на тему на форуме.

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

Посмотрим вывод lsblk:

$ sudo lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
sda           8:0    0  21.5G  0 disk  
├─sda1        8:1    0   476M  0 part  /boot/efi
└─sda2        8:2    0  21.0G  0 part  
  └─md1       9:1    0 19.95G  0 raid1 /
sdb           8:16   0  21.5G  0 disk  
├─sdb1        8:17   0   476M  0 part  
└─sdb2        8:18   0  21.0G  0 part  
  └─md1       9:1    0  19.95G  0 raid1 /

Видно что sda1 и sdb1 одно размера, первый монтируется в /boot/efi, а второй никуда не монтируется. Монтируем sdb1 и копируем в него EFI из первого диска:

$ sudo mkdir /mnt/sdb1
$ sudo mount /dev/sdb1 /mnt/sdb1
$ sudo cp -r /boot/efi/* /mnt/sdb1/

Отмонтируем /dev/sdb1:

$ sudo umount /mnt/sdb1

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

bios

Если сейчас мы попытаемся убрать диск sda, то к сожалению автоматической загрузки может не произойти. По крайней мере у меня не произошло: boot настройки BIOS слетели, пришлось выставить руками очередность загрузки.

fstab

Но даже теперь не получиться нормально загрузить ОС:

В настройках /etc/fstab указано автоматическое монтирование /dev/sda1 (EFI раздела) при старте системы, а этот диск мы убрали.

Для исправления проблемы нужно добавить опцию nofail:

При замене первого диска, с которого монтируется /boot/efi, нужно поменять /etc/fstab чтобы EFI раздел монтировался при старте системы с другого диска. UUID диска можно узнать так: lsblk -o +uuid,name.

Дополнительно почитать про fstab можно на вики arch или на wiki debian. Разницу между опциями nobootwait и nofail можно узнать здесь.

Проблемы сети

На сайте Proxmox есть инструкция по настройке сети. В Proxmox 7 это сработало, но на Proxmox 8 упорно не хотело работать. К слову каждая новая инсталяция Proxmox вызывает у меня пробелмы с сетью, которые приходится как-то решать.

Нам нужна простая конфигурация с использованием bridge, при этом хост и VPS будут доступны из Интернета.

В нашем распоряжении роутер, который доступ из Интернета по публичному IP, и который имеет локальный IP. Его локальный IP будет являться gateway для vmbr0:

IP адреса раздает DHCP роутера, и за хостом Proxmox закреплен статичный адрес в локальной сети 192.168.0.100, это позволит прокинуть хост в интернет по некоторым портам через роутер.

Proxmox 7

Указываем статичный IP адрес для нашей bridge сети и адрес gateway (роутера) в локальнйо сети:

auto lo
iface lo inet loopback

iface eno1 inet manual

auto vmbr0
iface vmbr0 inet static
        address 192.168.0.100/24
        gateway 192.168.0.1
        bridge-ports eno1
        bridge-stp off
        bridge-fd 0

Proxmox 8

Предыдущий способ на Proxmox 8 не заработал. Можно указать в eno1 dhcp, и в vmbr0 тоже dhcp со ссылкой на eno1, и это сработает:

auto lo
iface lo inet loopback

auto eno1
iface eno1 inet dhcp

auto vmbr0
iface vmbr0 inet dhcp
        bridge-ports eno1
        bridge-stp off
        bridge-fd 0

Как перенести данные в новый Proxmox

Можно к старому Proxmox подключить новую директорию на отдельном смонтированном диске (не зря же мы в прошлый раз делали RAID1 массив на NVME дисках):

Выбрав сущности для хранения в этой диреткории:

Теперь можно забэкапить нужные VPS в новую директорию хранения:

Таким же образом подключаем этот смонтированный диск к новому Proxmox и разворачиваем VPS из бэкапа.

Итог

Для первой инсталяции процедура достаточно утомительная, но последующие уже идут как по шаблону.

RAID1 желательно протестировать на работоспособность, например вынимая диски и проверяя загрузку ОС и ее работоспособность. Как минимум нужно проверить созданный RAID1 массив инстурментами мониторинга из этой статьи.

В телеграм канале DevOps от первого лица можно оставить комментарий или почитать интересные истории из практики DevOps