сервер v2, знову — тепер на zfs

| щоденник, комп'ютери, linux, підказка, сервер

минуло чимало часу, і я награвся із mergerfs/snapraid на заготовці для нового домашнього сервера… нічого доброго з того не вийшло, бо — proxmox. не в тім сенсі, що це щось зле, але тому, що mergerfs та snapraid не є прийнятним рішенням для сховища proxmox; треба робити по-серйозному — отже, zfs. ну, а коли так, то вже й систему ставити на дзеркало zfs із двох дисків?

інсталятор proxmox дозволяє зробити це просто, під час встановлення… але на клятому hp compaq 8100 завантажити proxmox із флешки usb мені ніяк не вдалося — з якого боку я вже не підходив, не завантажується proxmox і все, хоч лусни. а debian — завантажується… але встановити її на zfs — то цілий ритуал, з бубном і ритуальною жертвою.

ну, що складніше, то цікавіше?

підготовка: диски, флешка debian

по-перше, я придбав другий kingston a400 на 240 гб до пари; обидва ssd завантажив до верхніх кишень бекплейна і перекинув їхні кабелі на перші (швидкі) роз’єми sata на материнці — тут буде система. в чотирьох інших кишенях — повільні hitachi travelstar hts7250 по 500 гб. всі диски спорожнив.

$ lsblk -o NAME,SIZE,TYPE,HCTL,MODEL,SERIAL,LABEL,MOUNTPOINT
NAME     SIZE TYPE HCTL       MODEL      SERIAL     LABEL                   MOUNTPOINT
loop0  611.2M loop                                                          /usr/lib/live/mount/rootfs/filesyst
sda    223.6G disk 0:0:0:0    KINGSTON_S 50026B7783
sdb    223.6G disk 1:0:0:0    KINGSTON_S 50026B7783
sdc    465.8G disk 6:0:0:0    HGST_HTS72 TF755AWHJ8
sdd    465.8G disk 7:0:0:0    HGST_HTS72 TF755AWHJ9
sde    465.8G disk 9:0:0:0    HGST_HTS72 TF755AWHH6
sdf      3.8G disk 10:0:0:0   Store_n_Go TTYAQET7J9 d-live 10.10.0 st amd64
├─sdf1   968M part                                  d-live 10.10.0 st amd64 /usr/lib/live/mount/medium
└─sdf2   2.5M part                                  d-live 10.10.0 st amd64
sdg    465.8G disk 8:0:0:0    HGST_HTS72 TF655AWJ15

по-друге, інсталятор debian netinst не підходить для задачі — потрібен саме live usb з системою; завантажив десятку standard (debian-live-10.10.0-amd64-standard.iso), закинув на флешку тим самим примітивним (але чомусь єдино прийнятним для примхливого compaq’а) спрособом:

# cp debian-live-10.10.0-amd64-standard.iso /dev/sdX ; sync

встановлення debian на дзеркало zfs

чи не єдина детальна підказка зі встановлення debian (buster, десятка) на zfs — на офійційному сайті openzfs: дуже детальна і точна.

неухильно дотримуючись інструкцій, яза якихось дві-три години (насправді довше) я отримав робочу debian на двох віддзеркалених ssd… і майже одразу знову поламав, спробувавши поновити систему:

# apt update && apt full-upgrade --yes

схоже, grub намагався поновити свою конфігурацію, поліз своїми «брудними руками» чи то до fstab’а, чи то до своїх налаштувань завантаження… і після перезавантаження система більше не піднімається, з помилкою:

ALERT! ZFS=rpool/ROOT/debian does not exist. Dropping to a shell!

тепер маю вибір: або перевстановити (може, десь припустився дрібної помилки, як от встановив якийсь компонент з головного репозиторію замість із бекпортів?), або невтомно гуглити, аж поки не подужаю поремонтувати? (знайшлося ще таке: скрипт для автоматизованого встановлення deiban з коренем на zfs; спробувати?)

пошук причин проблеми

здається, зрозумів, коли виникає проблема: після встановлення система поновлюється нормально; але щойно додаю репозиторій proxmox за підказкою зі встановлення на debian ― apt dist-upgrade і full-upgrade (на відміну від upgrade) пропонують видалити декілька пакунків, специфічних для zfs, і я це пропустив попереднього разу (бо не треба робити --yes):

# apt dist-upgrade
...
The following packages were automatically installed and are no longer required:
  distro-info-data dkms libnvpair3linux libuutil3linux libzfs4linux libzpool4linux lsb-release python3-distutils python3-lib2to3 sudo zfs-dkms
Use 'apt autoremove' to remove them.
The following packages will be **REMOVED**:
  zfs-initramfs zfs-zed zfsutils-linux
The following packages will be upgraded:
  dmsetup grub-common grub-pc grub-pc-bin grub2-common ifupdown libdevmapper1.02.1 libnvpair3linux libuutil3linux libzfs4linux libzpool4linux
11 upgraded, 0 newly installed, 3 to remove and 0 not upgraded.
Need to get 5,884 kB of archives.
After this operation, 2,164 kB disk space will be freed.
Do you want to continue? [Y/n]

це на відміну від консервативнішого upgrade, котрий ніколи не видалятиме вже встановлені пакунки:

# apt upgrade
...
The following packages have been kept back:
  libnvpair3linux libuutil3linux libzfs4linux libzpool4linux
The following packages will be upgraded:
  dmsetup grub-common grub-pc grub-pc-bin grub2-common ifupdown libdevmapper1.02.1
7 upgraded, 0 newly installed, 0 to remove and 4 not upgraded.
Need to get 4,360 kB of archives.
After this operation, 84.0 kB disk space will be freed.
Do you want to continue? [Y/n]

джерело проблеми, ймовірно, в тому, що інструкція вимагає зафіксувати (pin) версії кількох пакунків на backport’і, а спроба full-upgrade’у призводить до видалення трьох пакунків, які не можливо поновити з урахуванням цього обмеження (а з часом їх буде ще більше)?

# cat /etc/apt/preferences.d/90_zfs
Package: libnvpair1linux libuutil1linux libzfs2linux libzfslinux-dev libzpool2linux python3-pyzfs pyzfs-doc spl spl-dkms zfs-dkms zfs-dracut zfs-initramfs zfs-test zfsutils-linux zfsutils-linux-dev zfs-zed
Pin: release n=buster-backports
Pin-Priority: 990

отже, тут бачу декілька варіантів:

  • а) поновлюватися консервативно (лише update), — але рано чи пізно, все застаріє так, що далі неможливо буде поновитися, і що тоді?
  • б) прибрати pin до backport’ів, додати репозиторій proxmox і поглянути, чи full-upgrade зможе розв’язати залежності без видалення ключових для zfs пакунків;
  • в) ризикнути зробити full-upgrade без переконфігурування grub, а тоді доставити те, що він видалить (zfs-initramfs, zfs-zed, zfsutils-linux), переконфігурувати grub і спробувати перезавантажити;
  • г) підключити репозиторії proxmox і зробити full-upgrade ще до встановлення zfs, сподіваючись, що тоді не доведеться pin’ити частину пакунків до backport’ів.

чи які ще можуть бути ідеї?

опція б) здається досить безпечною, дозволяє просто поглянути, що скаже apt, не поновлюючись:

# rm /etc/apt/preferences.d/90_zfs
...
# apt full-upgrade
...
The following packages were automatically installed and are no longer required:
  distro-info-data dkms lsb-release python3-distutils python3-lib2to3 sudo zfs-dkms
Use 'sudo apt autoremove' to remove them.
The following packages will be upgraded:
  dmsetup grub-common grub-pc grub-pc-bin grub2-common ifupdown libdevmapper1.02.1 libnvpair3linux libuutil3linux libzfs4linux libzpool4linux zfs-initramfs zfs-zed zfsutils-linux
14 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 6,451 kB of archives.
After this operation, 310 kB disk space will be freed.
Do you want to continue? [Y/n]

хоч full-upgrade цього разу й нарікає на «автоматично встановлені й більше не потрібні» пакунки, але нічого не пропонує видалити. спробую… і debian успішно перезавантажилася після поновлення.

встановлення proxmox на debian

підказка зі встановлення proxmox на debian (buster) — на офіційному сайті proxmox.

якщо до цього нічого не поламалося, то власне proxmox встановлюється одним рядком, і веб-інтерфейс (https://x.x.x.x:8006) піднімається без перезавантаження.

debian «з коробки» не має ifupdown2, котрий потрібен proxmox’у для керування мережевими інтерфейсами, і зокрема для створення моста — перший (практично обов’язковий) крок після встановлення proxmox:

# apt install ifupdown2

інші налаштуванння

ups

в стійці під сервером стоїть ups ― простенький apc, але з менеджментом по usb. кинув кабель, спробую налаштувати apcupsd як книжка пише:

# apt install usbutils apcuspd
...
# lsusb
...
Bus 001 Device 003: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
...

далі буде.