Перевел домашний сервер с bare metal Debian на Proxmox.
Сетап до Proxmox
Долгое время у меня был просто debian, который работал на голом железе, в котором было запущено несколько десятков docker контейнеров. Когда нужны были виртуалки - использовал virt-manager в docker, который дергал libvirt на хосте. Это было good enough для временных виртуалок.
Около года назад я перенес роутер в виртуалку. Я буквально использую openwrt x86 образ и пробрасывал два сетевых интерфейса в виртуалку, в один подключал провод от провайдера, а второй bridge с хостом и подключенным свитчем. OpenWrt на x86 - не очень популярный выбор, обычно на таком железе уже используют pfSense, но я привык к OpenWrt и уже знаю как его настраивать. И перенести конфиги с пластикового роутера было очень просто.
OpenWrt жил поверх debian, и это вполне работало. По сути все, что нужно для работы сервера в одной коробке, куда нужно подключить питание и провод от провайдера.
Проблема этого сетапа в том, что если с дебианом что то случиться - я буду без интернета. А дебиан помимо виртуализации занимается еще кучей всего. Очень просто удаленно отпилить сук, на котором сидишь и остаться без какого либо способа подключится к серверу.
Миграция в Proxmox
Итак сетап - m2 ssd с дебианом, внутри которого есть .img файл с диском openwrt. Из этого надо сделать две виртуалки в proxmox.
Я скопировал openwrt.img на другой комп, что бы можно было сразу после установки proxmox развернуть виртуалку с openwrt.
Установка Proxmox
Отключил все диски от сервера, подключил временный ssd, куда буду ставить proxmox. Записал на флешку с ventoy файл iso проксмокса.
Во время установки возникло две проблемы:
- У proxmox какой то свой процесс запуска livecd линуха, и ventoy старой версии его не умел. Ошибка была +- внятная, так что нагуглил я это быстро. После обновления ventoy все заработало без проблем
- Во время установки я подключил USB хаб, в который воткнут десяток устройств, в том числе и клавиатура. Внезапно такой сетап ложил... сеть. Тут копался довольно долго. Кажется проблема оказалась в вебкамере, но это не точно. В итоге после отключения USB хаба сеть поднялась. Странное поведение, но окей.
При установке я выбрал lvm, а не zfs. Был не уверен, как zfs будет работать с виртаульными дисками, та ещё и на уже довольно старом проце.
По умолчанию proxmox создает два раздела. Один под свою систему, второй под lvm разделы для дисков виртуалок. Из 240гб ссд под виртуалки была доступно только половина. Быстро нашелся гайд, как это поправить. Это не самое хорошее решение, но в условиях сервера из того что есть под рукой - оверхед в половину ссд - неприемлем.
Если коротко, то выполняем эти команды, и в настройках разрешаем создавать виртуальные диски в root разделе.
lvremove /dev/pve/data
lvresize -l +100%FREE /dev/pve/root
resize2fs /dev/mapper/pve-root
OpenWrt
Дальше создал виртуальную машину под openwrt. .img диск ипортнулся без проблем:
qm importdisk 100 openwrt-22.03.5-x86-64-generic-ext4-combined-efi.img local
Дальше можно нажать move storage в списке устройств виртуальной машины и выбрать формат qcow2
Сетевой интерфейс просто так пробросить, как virt-manager не нашел как. Создал bridge между физическим интерфейсом и виртуалкой, не добавляя туда адреса. В OpenWrt даже не пришлось править названия интерфейсов, роутер заработал.
Debian
Я не нашел удобных инструментов, что бы из физического диска сделать виртуальный. По этому просто пробросил SSD с Debian (qm set 101 -virtio0 /dev/nvme0n1
), подключил livecd, и сделал dd с реального диска на виртуальный.
Жесткие диски с zfs пулом тоже пробросил. После zfs import
все заработало как и до переноса в виртуалку.
USB устройства пробросились тоже без проблем, буквально парой кликов. Пробросил 3D принтер и вебкамеру. Да, Klipper у меня тоже в виртуалке с дебианом. В докере.
Проброс встроенной видеокарты Intel
В виртуалке с дебианом у меня крутится frigate, который пишет видео с usb веб камеры и ip камеры. Для записи с вебкамеры видно надо энкодить в h264. Когда Debian был на голом железе - использовал Intel QuickSync. После переноса в виртуалку хотелось продолжить юзать все в таком же виде.
В Proxmox проброс PCI устройств - выглядит тоже довольно просто, выбираем что хотим пробросить и всё. Но для проброса видеокарты - надо сначала сказать хост системе, что она её не юзала сама.
Делал по этому гайду
- В
/etc/default/grub
добавляем вGRUB_CMDLINE_LINUX_DEFAULT
intel_iommu=on и video=efifb:off - В
/etc/modprobe.d/blacklist.conf
пишем
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915
- Делаем
update-grub
иupdate-initramfs -u
- Перезагружаемся.
- Добавляем PCI устройство в виртуалку