Домашний Сервер: Часть 2 – Установка системы виртуализации Proxmox

gost-proxmox-intro Роутеры

Приветствую вас дорогие читатели на второй части цикла статей про домашний сервер!

Список цикла статей:

  1. Домашний Сервер: Часть 1 – Предисловие, аппаратная и софтовая начинка
  2. Домашний Сервер: Часть 2 – Установка системы виртуализации Proxmox (вы тут)
  3. Домашний Сервер: Часть 3 – Внутренний DNS сервис на BIND9 или свои доменные имена в локальной сети
  4. Домашний Сервер: Часть 4 – Настройка Transmission daemon в контейнере LXC Proxmox-VE
  5. Домашний Сервер: Часть 5 – Установка и настройка Plex Media Server в контейнере LXC Proxmox-VE

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

Логично задать вопрос: «А это бесплатное ПО?»
Да, это действительно бесплатное Open Source ПО, хотя есть корпоративная подписка.
Корпоративная подписка предоставляет доступ к закрытому репозиторию Proxmox VE Enterprise, который содержит более частые стабильные обновления ПО и обновления безопасности, а также техническую поддержку.
Если не использовать подписку никаких ограничений по функциональности не будет! И это по настоящему здорово!

Ну что, приступим к установке Proxmox Virtual Environment — далее PVE!
Установку я производил сначала на 2 SSD объемом по 256 Гб каждый. Другие 4 HDD я добавлял позже. Именно в таком ключе и предлагаю двигаться далее.

Подготовка Flash инсталлятора с образом системы

Для скачивания образа системы необходимо перейти на официальный сайт www.proxmox.com и скачать необходимую версию. Особых отличий в заливке или установке не будет.
На момент написания статьи доступны версии 6 и 5.4
Берем какую либо флешку и пишем ISO образ на неё с помощью специальных программ. Их много (Rufus, balenaEtcher и др.).
Я предпочитаю balenaEtcher. Там все просто до безобразия. Запустили, выбрали образ, убедились, что выбрана нужная флешка и нажали запись. Подождали и вытащили флешку.
Есть Portable версия.

gost-proxmox-flash-1
balenaEtcher

Подключаем флешку к серверу и продолжаем уже через монитор или IPMI/BMC интерфейс.

IPMI/BMC интерфейс для управления сервером по сети

Что такое IPMI?
Выдержка из Wikipedia:
IPMI (от англ. Intelligent Platform Management Interface) — интеллектуальный интерфейс управления платформой, предназначенный для автономного мониторинга и управления функциями, встроенными непосредственно в аппаратное и микропрограммное обеспечения серверных платформ. Ключевые характеристики IPMI — мониторинг, восстановление функций управления, журналирование и инвентаризация, которые доступны независимо от процессора, BIOS’a и операционной системы. Функции управления платформой могут быть доступны, даже если система находится в выключенном состоянии.
 
Что такое BMC?
Это «мозг» IPMI, отдельный микроконтроллер. BMC (Baseboard Management Controller). Через него как раз и происходит удаленное управление сервером. По сути, BMC ― это отдельный компьютер со своим программным обеспечением и сетевым интерфейсом, который распаивают на материнской плате или подключают как плату расширения по шине PCI management bus. В моем случае она уже есть на материнской плате.
 
На практике это выглядит так:
gost-proxmox-ipmi-1
Страница входа через обычный браузер
gost-proxmox-ipmi-2
Одна из страниц настройки


 
Для чего я это пишу тут?
А для того, чтобы вы понимали, как можно управлять сервером не подключая к нему никаких мониторов, клавиатур и мышей.
И в чем особенность серверных материнских плат. На обычных предназначенных для дома или игровых вы такого не увидите.

Установка Proxmox VE на сервер

Для демонстрации буду использовать версию 5.4-1, как более близкую к своей 5.3-11, хоть она и поновей, но существенных изменений там нет.
Все изображения спрятаны под спойлеры для вашего удобства!

После загрузки мы увидим такое окно...
gost-proxmox-install-1
Начало установки Proxmox VE


Ожидаем окончания загрузки системы установки…

Соглашаемся с лицензионным соглашением...
gost-proxmox-install-2
Соглашаемся с лицензионным соглашением
Переходим к настройке места для установки...
gost-proxmox-install-3
Переходим к настройке места для установки
gost-proxmox-install-4
Выбираем ZFS RAID-1
gost-proxmox-install-5
Используется два диска, как и положено
gost-proxmox-install-6
Место хранения настроили, движемся далее
Указываем страну, временную зону, а раскладку не трогаем...
gost-proxmox-install-7
Указываем страну, временную зону, а раскладку не трогаем
Указываем пароль и наш email для оповещений...
gost-proxmox-install-8
Указываем пароль и наш email для оповещений
Настраиваем сеть...

Тут хочется остановиться более подробно.
gost-proxmox-install-9
Настройка сети
  1. Учтите сразу, у Proxmox сеть указывается вручную. Я несколько раз пробовал настраивать DHCP-Client для него, но почему-то он его не очень любит. Потому биндинг адреса в DHCP-Lease особого смысла не имеет, разве только, чтобы понимать какой девайс на нем сидит.
    Hostname (FQDN): рекомендую задавать осмысленно с учетом того, какое доменное имя планируете использовать. Это необходимо для следующей статьи по DNS. Вы же планируете заходить по доменному имени, а не по IP адресу, правда? 🙂
    Я задал свой pve1.gregory-gost.ru и по такому URL теперь захожу на WEB интерфейс Proxmox. Подумайте заранее!
  2. Я указал в DNS IP контейнера в котором у меня работает DNS служба, но вам для начала необходимо указать свои стандартные DNS. Иначе PVE не будет иметь нормального выхода в интернет. Часто совпадает с Gateway.
Проверяем финальные данные...
gost-proxmox-install-10
Проверяем финальные данные
Дожидаемся окончания процесса установки...
gost-proxmox-install-11
Дожидаемся окончания процесса установки
Проводим финальную перезагрузку...
gost-proxmox-install-12
Проводим финальную перезагрузку

И наконец, после непродолжительных процедур нам позволено войти в систему.

gost-proxmox-install-13
После установки видим строку приглашения и информирующий баннер

Как можно наблюдать нам вежливо сообщили о том, по какому адресу и порту работает WEB интерфейс PVE:

https://192.168.88.5:8006

Давайте зайдем и посмотрим, что там!

Обратите особое внимание на адрес по которому работает WEB интерфейс PVE!
Как можно не сразу заметить используется защищенный протокол https вместо http. Автоматического перенаправления в системе не предусмотрено! Будьте внимательны!

Настройка Proxmox VE после установки

После ввода в браузере нужного адреса перед нами предстает WEB интерфейс PVE

gost-proxmox-configure-1
Окно входа в PVE

Логин для входа: root
Пароль тот, который вы указали при установке.

Далее я не буду производить обзор всей системы т.к. это еще не на одну статью. Знающие администраторы разберутся в ней без труда.
Система поддерживает Русский язык, который вы можете выбрать при входе.
Дополню только минимальными настройками для начала и покажу, как скачать шаблон для LXC контейнера. В следующей статье нам это пригодится.

Настраиваем репозиторий для обновлений

Перво наперво откроем консоль нашего сервера

gost-proxmox-configure-2
Путь до консоли самого сервера

Нас попросят ввести логин и пароль, вводим те же данные, которые вводили для входа в WEB.

Открываем Enterprise репозиторий…

nano /etc/apt/sources.list.d/pve-enterprise.list

и комментируем его (добавляем решетку в начало строки)

#deb https://enterprise.proxmox.com/debian/pve stretch pve-enterprise

Создаем отдельный лист для репозитория без подписки

touch /etc/apt/sources.list.d/pve-no-subscription.list

Открываем его

nano /etc/apt/sources.list.d/pve-no-subscription.list

И добавляем в него репозиторий

# proxmox no subscriptions repo
deb http://download.proxmox.com/debian/pve stretch pve-no-subscription
Если вы устанавливаете Proxmox другой версии, то версия базовой ОС Debian может отличаться от stretch. В этом случае вам необходимо указать аналогичный тому, что есть в pve-enterprise.list.
Также узнать имя дистрибутива можно командой:
cat /etc/*-release | grep VERSION_CODENAME
Ответ будет примерно такой:
VERSION_CODENAME=stretch
К примеру уже 6-я версия PVE – buster а не stretch
А 7-я версия PVE – bullseye

Для обновления списков подаем команду

apt update

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

apt update && apt dist-upgrade -y
reboot

Убираем всплывающее окно о подписке

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

Сохраняем резервную копию файла:

cp /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js.bak

Подаем команду:

sed -i "s/getNoSubKeyHtml:/getNoSubKeyHtml_:/" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js

Команда заменяет нужную переменную getNoSubKeyHtml: на ошибочную getNoSubKeyHtml_: и окно более нам не мешает.

Все просто 🙂

Работает только для PVE версий выше 5.1
Для более старых необходим другой метод, который вы можете найти на просторах интернета.

Настраиваем базовую отправку уведомлений на почту

Безусловно мы хотим, чтобы сервер оповещал нас, если вдруг что-то происходит. Например, когда Бэкап виртуальной машины не выполнился.

За этот функционал в PVE отвечает сервис Postfix, его и будем настраивать.
Для примера я буду использовать придуманный почтовый адрес: ggost@yandex.ru. Вы конечно используете свой!

Будем отправлять сообщения от почтового ящика зарегистрированного на Yandex. Для Gmail отличий особых не будет.

Проверяем установлена ли библиотека libsasl2-modules

apt install libsasl2-modules

Делаем бекап основного файла конфигурации

cp /etc/postfix/main.cf /etc/postfix/main.cf.bak

Вносим правки в файл. Я привел его к такому виду:

# See /usr/share/postfix/main.cf.dist for a commented, more complete version
myhostname = pve1.gregory-gost.ru
default_transport = smtp
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = $myhostname, localhost.$mydomain, localhost
relayhost = [smtp.yandex.ru]:587
mynetworks = 127.0.0.0/8
inet_interfaces = loopback-only
recipient_delimiter = +
header_checks = pcre:/etc/postfix/rewrite_subject
smtp_sender_dependent_authentication = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relayhost.hash
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_auth.hash
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_generic_maps = hash:/etc/postfix/generic

Создаем хеш файл авторизации для доступа к почтовому ящику

echo [smtp.yandex.ru]:587 ggost@yandex.ru:yourpassword > /etc/postfix/sasl_auth.hash

Создаем хеш файл sender_relayhost (он гарантирует, что мы всегда используем свой почтовый ящик в качестве отправителя)

echo ggost@yandex.ru [smtp.yandex.ru]:587 > /etc/postfix/sender_relayhost.hash

И скобки [] обязательны!

У Яндекса есть проблема, а именно для успешной отправки письма, Яндекс требует, чтобы адрес отправителя в письме совпадал с адресом для авторизации на сервере.
Если это не будет сделано, то мы получим ошибку во время отправки — Sender address rejected: not owned by auth user
Чтобы этого избежать мы добавили в конфиг файл /etc/postfix/main.cf пункт smtp_generic_maps = hash:/etc/postfix/generic
Происходит это потому, что отправка системных сообщений идет от локального пользователя root.
Имя отправителя в письме у меня такое — root@pve1.gregory-gost.ru
В данном случае pve1.gregory-gost.ru это локальное имя сервера. Мы его заменим на учетную запись Яндекса.

Откройте файл блокнотом

nano /etc/postfix/generic

Добавьте в файл generic одну строку:

root@pve1.gregory-gost.ru ggost@yandex.ru

Шифруем файлы с помощью postmap

postmap /etc/postfix/sender_relayhost.hash
postmap /etc/postfix/sasl_auth.hash
postmap /etc/postfix/generic

Устанавливаем уровень доступа 0600 на файлы sasl_auth

chmod 0600 /etc/postfix/sasl_auth.*

Дополнительно я ввел формирование специального заголовка для темы. За это отвечает параметр

header_checks = pcre:/etc/postfix/rewrite_subject

Давайте создадим этот файл:

nano /etc/postfix/rewrite_subject

Добавляем в него такую строку:

/^Subject: (.*)$/ REPLACE Subject: [PVE1]: $1

Это регулярное выражение, которое меняет заголовок письма, начинающийся с Subject. Оно добавляет в начало темы имя сервера с двоеточием — [PVE1]:
Вы можете добавлять свой вариант. А $1 это исходное содержание темы, которое будет без изменений оставлено далее, после добавки.

Но для того, чтобы это работало, просто создать файл и поправить конфиг мало. Необходимо доустановить специальную библиотеку postfix-pcre
Вы ведь помните, как выглядит строка с этой настройкой: pcre:/etc/postfix/rewrite_subject
Давайте поставим нужный сервис:

apt install postfix-pcre

Перезапускаем Postfix

service postfix restart

или

systemctl restart postfix.service

Пробуем отправить тестовое сообщение адресату:

echo "Test mail from proxmox" | mail -s test my-email@gmail.com

Проверяйте почту 😉

gost-proxmox-configure-3
Итоговый вид полученного письма на Gmail через Yandex

Проверка работы Postfix:

cat /var/log/mail.log | grep postfix

Подключение четырех дисков как ZFS массив RAID-5 (raidz1)

Не забудем и про дополнительные четыре диска, которые в моем случае будут использоваться для хранения медиа файлов (фильмы, сериалы и др.)

И да, я знаю про специфику работы с RAID-5 и что к нему есть много вопросов, я решил пойти именно таким путем, вы же можете использовать свои знания и выбрать то, что кажется вам наиболее правильным. Но у ZFS RAID-5 есть одно преимущество, он восстановит потерянные данные, хоть и не целиком. А т.к. у меня там медиа данные, их можно без особого труда скачать снова. Это выгодно отличает его от обычного RAID-5. В итоге я потеряю файл/часть файла, но не потеряю весь массив данных.
Дополнительно ознакомиться с тем, что такое ZFS, посмотреть сравнение с RAID на mdadm можно по ссылкам ниже. Мне они кажутся достаточно полезными и наглядными. Осторожно English!
1. ZFS 101 — Understanding ZFS storage and performance
2. ZFS versus RAID: Eight Ironwolf disks, two filesystems, one winner

Для начала проверим, видны ли они в системе, в этом нам поможет команда lsblk:

root@pve1:~# lsblk

В ответ мы увидим, что-то такое…

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0   236G  0 disk 
├─sda1   8:1    0  1007K  0 part 
├─sda2   8:2    0   512M  0 part 
└─sda3   8:3    0 235.5G  0 part 
sdb      8:16   0   236G  0 disk 
├─sdb1   8:17   0  1007K  0 part 
├─sdb2   8:18   0   512M  0 part 
└─sdb3   8:19   0 235.5G  0 part 
sdc      8:32   0   2.7T  0 disk 
sdd      8:48   0   2.7T  0 disk 
sde      8:64   0   2.7T  0 disk 
sdf      8:80   0   2.7T  0 disk

Активные диски уже используются и на них можно наблюдать уже логические разделы, это два SSD диска: sda и sdb

А вот sdc, sdd, sde и sdf пока не задействованы, давайте это исправим!

Проверим созданный нами ранее RAID-1 из двух SSD

zpool list

Ответ

NAME     SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
rpool    234G  8.07G   226G         -     0%     0%  1.00x  ONLINE  -

Создадим RAID-5 из нужных нам дисков. Массив назовем rpoolz и пропишем полные пути к дискам (через /dev):

zpool create -f -o ashift=12 rpoolz raidz1 /dev/sdc /dev/sdd /dev/sde /dev/sdf

Не путайте с raidz2, это немного другое.

Проверяем более детально:

root@pve1:~# zpool list -v
NAME   SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
rpool   234G   8.07G   226G         -     0%     0%  1.00x  ONLINE  -
  mirror   234G   8.07G   226G         -     0%     0%
    sda3      -      -      -         -      -      -
    sdb3      -      -      -         -      -      -
rpoolz   10.9T   2.14T   8.73T         -     0%     0%  1.00x  ONLINE  -
  raidz1   10.9T   2.14T   8.73T         -     0%     0%
    sdc      -      -      -         -      -      -
    sdd      -      -      -         -      -      -
    sde      -      -      -         -      -      -
    sdf      -      -      -         -      -      -

Папка массива в файловой системе доступна по пути, который мы прописали при создании: /rpoolz

В целом этого будет достаточно, но есть еще один момент, это вопрос «Как подключить данный массив как папку для хранения данных?»

Для начала необходимо отправиться в раздел Datacenter -> Storage
Например я добавил папку, куда сохраняю Backup архивы.

gost-proxmox-configure-4
Добавляем папку для Backup архивов
gost-proxmox-configure-5
Заполняем параметры для папки

Тут нужно заполнить ID — это имя директории, Directory — это путь в файловой системе к нужной папке. Выбрать тип хранимых данных. При добавлении типа VZDump backup file появится дополнительная настройка, где нудно указать количество хранимых Backup архивов для каждой виртуальной машины. (Настройка архивации виртуальных машин выполняется отдельно!)

Подключение папки массива в контейнерах LXC будем рассматривать уже в отдельных статьях.

Изменение размера ARC кэша

Преимуществом и одновременно недостатком ZFS перед другими файловыми системами (хотя ZFS это не только файловая система) является её непомерное потребление оперативной памяти.
Этому способствует специальный функционал ZFS, а именно ARC(Adjustable Replacement Cache — кэш адаптивной замены) — это очень быстрый кэш, расположенный в оперативной памяти сервера (ОЗУ/DDR). Фактически все наиболее частые запросы и последние запросы на чтение, могут быть обслужены прямо из физической оперативной памяти. А как мы знаем оперативная память очень быстрая, не говоря уже про сравнение с обычными медленными HDD.
В большей степени в OpenZFS используется реализация запатентованного IBM adaptive replacement cache с некоторыми изменениями.

По умолчанию нашему серверу доступно 50% оперативной памяти хоста. Многовато вам не кажется? Особенно для домашнего использования, когда на компактных серверах всего-то от 8 до 16 Гб доступно. Ну или 32Гб.
У нас же будут еще контейнеры, виртуалки и бог его знает что еще, для чего оперативная память гораздо нужнее.

Соответственно мы можем уменьшить этот размер до приемлемого, от 4 до 6 Гб в моем случае.
Вы можете выбрать для себя свою психологическую планку, исходя из доступного вам, или оставить как есть, если вас устраивает, что ZFS для себя заберет (а она обязательно заберет) 50% оперативки.

Из рекомендаций Proxmox: 2Гб для хоста и далее по 1Гб на 1Тб данных хранилища (грабеж)
Если исходить из этих рекомендаций, у меня 4HDD по 3Тб, 2Гб на хост и 12Гб на хранилище, итого 14Гб из 16Гб доступных для ZFS. Что простите? Для контейнеров останется всего 2Гб … это шутка да?

Тем не менее я решил выделить до 6Гб для ZFS и оставить 10Гб для контейнеров и хоста.

Давайте установим лимиты. Делается это через конфигурирование.

nano /etc/modprobe.d/zfs.conf
options zfs zfs_arc_min=4294967296
options zfs zfs_arc_max=6442450944

Формула для расчёта: Кол-во гигабайт умноженное на 1024*1024*1024
6Гб = 6*1024*1024*1024 = 6442450944

Далее нам нужно обновить initramfs

update-initramfs -u -k all

Дожидаемся обновления и обязательно необходимо перезагрузить хост! Изменения применяться после перезагрузки. Сразу увидите уменьшенное потребление памяти.

Добавление L2ARC и ZIL(SLOG) с помощью отдельного NVME SSD накопителя

Итак. Размер потребляемой памяти для ZFS мы уменьшили, но при этом увеличили возможное кол-во обращений к медленным HDD для операций чтения. Но в действительности это еще не все прелести ZFS!

У ZFS есть еще одна возможность, от которой было бы глупо отказываться, особенно, когда у вас в материнской плате есть разъем для M.2 NVME накопителя.

M.2 NVME разъем в материнской плате Asus P10S-I

Представляю вам L2ARC(Layer 2 Adaptive Replacement Cache) — он же кэш адаптивной замены второго уровня. По сути это тот же ARC только уже не в оперативной памяти, а на SSD. SSD конечно не такие быстрые как оперативная память, но гораздо быстрее обычных HDD.
1700 Мб/сек на чтение в NVME SSD против средних 200-250 Мб/сек для малообъемных HDD (до 6Тб)
Данный кэш сбрасывается при перезагрузке, как и кэш в оперативной памяти т.е. поведение ARC и L2ARC абсолютно идентичное.

Архитектура возможных способов организации хранилища ZFS

Что касательно ZIL(ZFS Intent Log) — это механизм ведения журнала, в котором все данные для записи сохраняются, а затем сбрасываются как транзакционная запись. По функциям аналогичен журналу для журналируемых файловых систем, таких как ext3 или ext4. Обычно хранится на диске.
Т.к. данный функционал касается только записи, то лучше всего, чтобы это был SSD оптимизированный для записи, желательно SLC с алгоритмами выравнивания износа(wear-leveling algorithms). Также рекомендуют ставить ZIL в зеркало(RAID-1).
В моем случае нет еще одного M.2 разъема для подключения отдельного SSD и свободных SATA разъемов, поэтому попробуем использовать тот же SSD.

Взял для себя модель попроще, но от надежного производителя: Samsung PM991 128 ГБ M.2 MZALQ128HBHQ-000L2 (PCI-E 3.0, TLC 3D NAND)
L2ARC естественно буду применять для пула из обычных дисков т.к. системный пул и так на базе SSD, для него добавлять L2ARC не буду.

После установки нужно проверить определился ли диск. Все операции проводим естественно на хосте.

lsblk -a | grep nvme
nvme0n1     259:0    0 119.2G  0 disk

Нужно разделить SSD на разделы. Для этого будем использовать утилиту parted. Если не установлена, то ставим через APT.
ВАЖНО! Диск должен быть с GPT таблицей разделов. Перевести диск в этот формат возможно из интерфейса самого Proxmox -> Pve -> Disks

Выделим 4Гб для ZIL и все остальное под L2ARC (1Мб в начале оставил не размеченным)

parted /dev/nvme0n1 mkpart primary zfs 1 4G mkpart primary zfs 4G 100%

Проверяем

ls -l /dev/disk/by-id/ | grep nvme
lrwxrwxrwx 1 root root 13 Feb  3 21:12 nvme-SAMSUNG_MZALQ128HBHQ-000L2_S4UNNX0R196876 -> ../../nvme0n1
lrwxrwxrwx 1 root root 15 Feb  3 21:14 nvme-SAMSUNG_MZALQ128HBHQ-000L2_S4UNNX0R196876-part1 -> ../../nvme0n1p1
lrwxrwxrwx 1 root root 15 Feb  3 21:15 nvme-SAMSUNG_MZALQ128HBHQ-000L2_S4UNNX0R196876-part2 -> ../../nvme0n1p2
Некоторые материнские платы не будут последовательно представлять диски ядру Linux при перезагрузке. Таким образом, диск, идентифицированный как /dev/sda при одной загрузке, может быть /dev/sdb при следующей. Для основного пула, в котором хранятся ваши данные, это не проблема, поскольку ZFS может реконструировать VDEV на основе геометрии метаданных. Однако для ваших устройств L2ARC и SLOG таких метаданных не существует.

Добавляем ZIL к существующему пулу

zpool add <pool_name> log nvme-SAMSUNG_MZALQ128HBHQ-000L2_S4UNNX0R196876-part1

Добавляем L2ARC кэш к существующему пулу

zpool add <pool_name> cache nvme-SAMSUNG_MZALQ128HBHQ-000L2_S4UNNX0R196876-part2

Проверяем

zpool status -v
logs
          nvme-SAMSUNG_MZALQ128HBHQ-000L2_S4UNNX0R196876-part1  ONLINE       0     0     0
        cache
          nvme-SAMSUNG_MZALQ128HBHQ-000L2_S4UNNX0R196876-part2  ONLINE       0     0     0

Через некоторое время можем проверить как используется ZIL и L2ARC в пуле

zpool iostat -v
logs                                                        -      -      -      -      -      -
  nvme-SAMSUNG_MZALQ128HBHQ-000L2_S4UNNX0R196876-part1   372K  3.50G      0      4      0  33.1K
cache                                                       -      -      -      -      -      -
  nvme-SAMSUNG_MZALQ128HBHQ-000L2_S4UNNX0R196876-part2   184M   115G      0      0      6  5.16K

Также вы можете задавать кэш и лог прямо при создании пула

zpool create -f -o ashift=12 <pool_name> raidz1 <device1> <device2> <device3> <device4> cache <cache_device> log <log_device>

Заключение

Ну вот мы и разобрались с базовой(и не только) установкой и подготовкой системы виртуализации Proxmox.
Как видно, ничего сложного в этом нет. Достаточно обычных знаний по работе с Linux системами. Для тех из вас, кто только начинает разбираться полагаю данный материал будет не плохим стартом!
Надеюсь данная статья оказалась для вас полезной. Возможно у кого-то уже используется данная система и вы не прочь поделиться с читателями своими мыслями, в этом случае прошу в комментарии 🙂

Ну а дальше… дальше будем ставить контейнеры и виртуалки с сервисами, продолжим с доменных имен в локальной сети с помощью DNS. Следите за обновлениями!

  1. DNS — доменные имена в локальной сети вместо IP адресов. Домашний Сервер: Часть 3 – Внутренний DNS сервис на BIND9 или свои доменные имена в локальной сети
  2. Torrent Transmission — качалка торрентов. Домашний Сервер: Часть 4 – Настройка Transmission daemon в контейнере LXC Proxmox-VE
  3. Plex Mediaserver — домашний медиа сервер. Домашний Сервер: Часть 5 – Установка и настройка Plex Media Server в контейнере LXC Proxmox-VE
  4. The Dude — мониторинг девайсов в домашней сети.
  5. Домашний IoT.
  6. IP телефония.

Делитесь в комментариях, чем пользуетесь вы для организации подобной системы. Готовый NAS, альтернативные системы виртуализации? В общем пишите 🙂

Благодарю за ваше время!
Всего хорошего на просторах Интернета 😉

UPD: 03.02.2023

В статью добавлена информация по:

  • изменению размера ARC кэша
  • использованию NVME SSD для L2ARC кэша и ZIL (логов записи)

UPD: 10.11.2019

Добавлен блок с подключением дополнительных дисков, как массива RAID-5

UPD: 20.11.2019

Добавлена заметка по редактированию источников обновления, для разных версий дистрибутивов. Спасибо Константину за подсказку в комментарии.

Выразить благодарность автору
Если Вам не безразлична судьба блога или Вы просто хотите отблагодарить Автора за его труд, смело переходите на страницу Поддержки, там описана вся информация, по тому, как это сделать. Заранее благодарен вам за данную инициативу!
Хочешь получать уведомления о выходе новых статей?
Loading
GregoryGost

Мир интересен, если вы достаточно любопытны!!!

Оцените автора
GREGORY GOST
Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

  1. Dmitry

    Спасибо Вам за статьи огромное!
    Все максимально доходчиво для понимания новичкам как я!
    Только начал изучать Proxmox, первые месяцы, переехал с QNAP, Synology, WD, т.к. в них стало очень тесно (слабое железо, проприетарность, отсутствие гибкости, глюки обновлений), а на ПК мощности простаивают, поэтому выбор пал на аппаратную виртуализацию, сначала читал мануалы, потом тестовую машину запусти, сейчас поднимаю все необходимые сервисы понемногу.

    Сейчас настроил по вашему мануалу posfix и отправку уведомлений, все работает! Спасибо! Хотел спросить еще — а как можно добавить подпись в письмах с уведомлениями от Proxmox?

    Ответить
  2. Олег

    Здравствуйте, Григорий!
    У меня на домашнем сервере система proxmox стоит на двух ssd zfs raid1, а данные на четырех hdd ZFS массив RAID-5 (raidz1). Я физически отключал все ssd и hdd, после того как поставил диски обратно (в процессе отключения/подключения дисков sata порты были перепутаны) система не видит rpoolz. Со всеми дисками все в порядке они видны, но рейд массива нет. Подскажите можно ли как то собрать этот массив, чтобы данные сохранились?

    root@pve:~# zpool list
    NAME    SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
    rpool   222G  10.2G   212G        -         -     5%     4%  1.00x    ONLINE  -
    root@pve:~# fdisk -l | grep /dev/sd
    Disk /dev/sda: 223.6 GiB, 240057409536 bytes, 468862128 sectors
    /dev/sda1       34      2047      2014  1007K BIOS boot
    /dev/sda2     2048   1050623   1048576   512M EFI System
    /dev/sda3  1050624 468862094 467811471 223.1G Solaris /usr & Apple ZFS
    Disk /dev/sdb: 223.6 GiB, 240057409536 bytes, 468862128 sectors
    /dev/sdb1       34      2047      2014  1007K BIOS boot
    /dev/sdb2     2048   1050623   1048576   512M EFI System
    /dev/sdb3  1050624 468862094 467811471 223.1G Solaris /usr & Apple ZFS
    Disk /dev/sdc: 3.7 TiB, 4000787030016 bytes, 7814037168 sectors
    /dev/sdc1        2048 7814019071 7814017024  3.7T Solaris /usr & Apple ZFS
    /dev/sdc9  7814019072 7814035455      16384    8M Solaris reserved 1
    Disk /dev/sdd: 3.7 TiB, 4000787030016 bytes, 7814037168 sectors
    /dev/sdd1        2048 7814019071 7814017024  3.7T Solaris /usr & Apple ZFS
    /dev/sdd9  7814019072 7814035455      16384    8M Solaris reserved 1
    Disk /dev/sde: 3.7 TiB, 4000787030016 bytes, 7814037168 sectors
    /dev/sde1        2048 7814019071 7814017024  3.7T Solaris /usr & Apple ZFS
    /dev/sde9  7814019072 7814035455      16384    8M Solaris reserved 1
    Disk /dev/sdf: 3.7 TiB, 4000787030016 bytes, 7814037168 sectors
    /dev/sdf1        2048 7814019071 7814017024  3.7T Solaris /usr & Apple ZFS
    /dev/sdf9  7814019072 7814035455      16384    8M Solaris reserved 1
    Ответить
    1. GregoryGost автор

      Это случайно не похожая проблема?
      https://qna.habr.com/q/744233

  3. Maxim

    Стесняюсь спросить… А Автор знает, что в документации к Проксмоксу английскими словами сказано — «Руфус образ не запишет, пользуйтесь только Баленса Этчер?»

    Ответить
    1. GregoryGost автор

      Про запись в документации нет, не знал. А можете ссылку кинуть?
      Вы не тестировали последние версии?
      Т.к. крайний раз я писал образ через Rufus в режиме DD, никаких проблем не испытал с этим…

    2. Roman

      Все записалось и установилось без проблем PVE7

  4. Михаил

    Григорий,
    в ответ на ваш ответ в последнем комментарии:
    «Очень не дурно и корпус интересный! А материнку и CPU под это дело какие рассматриваете?»
    Уже прикупил то же самое, что и у вас, но с CPU вышло случайно 🙂
    Изначально я рассматривал множество энергоэффективных матплат с распаянным на плате процессором, например, с CPU Intel Atom D525 (Supermicro X7SPE-HF-D525), Intel Celeron J1800 и т.д. Но позже отказался от них, так как у этих процессоров нет поддержки виртуализации и множества других полезных инструкций. Тем не менее, можно поставить пассивное охлаждение и они очень экономичные в плане расхода электроэнергии.
    В процессе изучения темы про NAS я нашел эти платы:
    1) Supermicro X11SCL-IF — стоила очень дорого, на декабрь 2020 г. около 18 т.р.;
    2) ASUS P11C-I — также стоила дороговато, на декабрь 2020 г. около 14.5 — 16 т.р., модуль IPMI за дополнительные 2 т.р. или б/у за 1.5. на Авито. Мне очень нужен был IPMI и не хотелось переплачивать за него, а также, смутило малое кол-во отзывов о работе данной платы за продолжительный период;
    3) ASRock E3C226D2I — взял в итоге ее, так как это самый оптимальный вариант, пускай используется уже устаревшая DDR 3 память и на плате ограничение максимального размера памяти в 16 Гб. Да и по форумам/статьям не нашел с ней явных проблем. Удачно приобрел ее в декабре 2020 года за 11200 руб., после чего, она пропала из продажи во множестве магазинов, а единственный вариант сейчас это уже 17060 т.р.

    Насчет CPU — такой же, как и вашей сборке — Intel Xeon E3-1200 v3. Вышло случайно — я искал на Авито память DDR3 ECC, нашел объявление о продаже сразу 4 планок по 8 Гб (продавец продавал только вместе). Но продавец предложил взять память в комплексе с сервером Dell Poweredge T20, в котором как раз изначально стоит этот проц; также в комплекте было 32 Гб памяти DDR3 ECC и SATA HDD на 1 Tb. И все за 20 т.р. (одна память стоит 12 т.р.!). Временно раздербенил этот сервер на CPU/радиатор (вентилятор, к сожалению, с нестандартным коннектором и пришлось докупить) под свой NAS, так как мой корпус компактнее для дома и вмещает больше дисков.
    В планах для экономии электроэнергии поставить Xeon 1200-й серии с индексом L, например, один из этих: Xeon E3-1240L V3 или Xeon E3-1230L v3. Будет меньше есть электроэнергии, меньше греть соседние комплектующие, ну и больше ядер из-за наличия гипер третинга. После апргрейда смогу вернуть Dell в строй и сделать резервный бэкап сервер.

    Ответить
  5. Михаил

    Григорий, спасибо за статьи, все очень интересно и полезно!

    Долго изучал вопрос построения дисковой подсистемы для proxmox и хранилище на файловой системе zfs.
    Пришел к такому, на мой взгляд, оптимальному и более производительному варианту, благо, методом прямых рук и напильника, удалось разместить, помимо 6 SAS HDD дисков, еще 4 дополнительных SSD диска в очень компактном корпусе Fraktal Design Node 304:
    1. Два SSD по 120 Gb в зеркале ZFS RAID1 — под ОС/Proxmox, шаблоны, контейнеры, VM’s. По 20 Gb на каждом диске оставлю неразмеченными для более долгой жизни дисков.
    2. Два SSD по 250 Gb для:
    2.1. SLOG ZFS (журнал ZIL) по 5 GB на каждом из дисков в зеркале ZFS RAID1;
    2.2. L2ARC Кеш для ускорения работы чтения в хранилище ZFS — по 200 Gb на каждом из двух дисков в режиме Stripe (не в зеркале!). 45 Gb — неразмеченными.
    3. Шесть SAS HDD по 2 Tb в ZFS RaidZ1.

    Для возможности подключения всех дисков поставлю HBA котроллер LSI в порт PCI Express.

    Ответить
    1. GregoryGost автор

      Очень не дурно и корпус интересный!
      А материнку и CPU под это дело какие рассматриваете?

  6. Кирилл

    Собственно сам и отвечу на вопрос. Купил вчера SSD M.2 Samsung EVO 970 Plus 250. Сделал два раздела — под лог 5 Гигабайт, под cache 227 Гигабайт. Файл (образ ISO) размером 7 Гигабайт без кеша на RAID Z1 записывался 1 мин 30 секунд. С кешем 1 минута 10 секунд. Разница на лицо -:)

    Ответить
  7. Кирилл

    Григорий, здравствуете.
    Хотел уточнить, не пробовали ли вы создать RAID-5 с использованием кеша L2ARC (на диске SSD)?
    В интернете пишут, что это должно повысить производительность.

    Ответить
  8. Игорь

    Здравствуйте, отличная статья очень интересно пишете!
    Подскажите пожалуйста ни как не могу настроить отправку почты все время ошибка
    «relay=smtp.yandex.ru[77.88.21.158]:587, delay=0.16, delays=0.02/0/0.14/0, dsn=4.7.8, status=deferred (SASL authentication failed; server smtp.yandex.ru[77.88.21.158] said: 535 5.7.8 Error: authentication failed: Invalid user or password!)»
    Пробовал пароль от веб интерфейса и создавал пароль приложений в яндексе, не помогает, логин правильный. А, кстати, домена у меня нет, это важно?

    Ответить
    1. GregoryGost автор

      Домен не обязателен.
      Проверяйте логин и пароль от почты. Ну и классика жанра — погуглите про этот тип ошибки 🙂

  9. Виталий

    Здравствуйте,
    огромное спасибо за полезные статьи.
    Два вопроса —
    1. Возможно ли на существующей установке с одним SSD ext4. добавить второй для RAID1. или лучше все таки переустановить с нуля ?
    2. Вы выбрали для системы RAID1 zfs. На сколько это предпочтительнее RAID на материнке при довольно таки прожорливой zfs в плане памяти ?

    Ответить
    1. GregoryGost автор

      Здравствуйте,
      Спасибо за ваш отзыв!

      1. Возможно. Причем если это именно Ext4, а не ZFS, то необходимо использовать mdadm для создания программного RAID. Изучите команды для работы с RAID, там не сложно.
      2. Давайте скажу так.
      2.1 Аппаратный RAID на материнках может быть не надежным и зависеть от контроллера. При переносе на другую аппаратную платформу своего хоста (например материнка вышла из строя или стал барахлить сам контроллер), высока вероятность, что RAID вы уже не соберете обратно. Внешние RAID контроллеры в этом плане получше, но также вы привязываетесь к аппаратной части.
      2.2 Proxmox в базовой инсталляции не позволяет создавать другой тип RAID массивов, кроме как на ZFS. Для этого необходимо ставить Proxmox на чистый Debian.
      А вопрос расходования памяти это необходимое зло. Мне пока хватает 8Гб для не особо прожорливых систем, но безусловно, чем больше тем лучше.
      Все остальное необходимо рассматривать под призмой сравнения файловых систем, разобрать плюсы и минусы и принять для себя решение на чем и как делать.
      Меня например в ZFS зацепила именно возможность сохранения основных данных массива при повреждении диска и восстановлении.

      Для себя, я на всегда определил, что софтовый RAID на таких кейсах применения(дома/малый офис) ничем не уступает аппаратному, даже выигрывает.

  10. Виталий

    Скажите имеет место сценарий когда гипервизор proxmox ставится на USB,
    а имеющийся RAID-1 используется под VM?

    Ответить
    1. GregoryGost автор

      Имеет, но только для тестирования т.к. USB накопители не надежное средство для гипервизора.
      Можно посмотреть в сторону компактных портативных SSD. Ну и еще вам придется настроить сам гипервизор для хранения и работы VM на RAID-1

  11. Константин

    Отредактируйте пожалуйста свою статью, и на этапе `nano pve-no-sub.list` внесите упоминание, что нужно писать не просто и бездумно `stretch`, а ту версию, которую установил пользователь. К примеру 6-я версия PVE — buster а не stretch. Узнать Debian основу — `cat /etc/*-release`, то что в скобочках, или VERSION_CODENAME

    Ответить
    1. GregoryGost автор

      Константин, благодарю!
      Добавил в статью заметку.

  12. Анатолий

    В статье про DNS расскажите обязательно как правильно его использовать когда домашней сетью рулит микротик!!

    Ответить
    1. GregoryGost автор

      Анатолий, обязательно!
      Там будет полный пример настройки DNS(BIND9 и MikroTik) и PVE для открытия его web интерфейса через доменное имя.
      Статья получается не маленькая )