Если вы подключаетесь к удаленному рабочему столу по протоколу VNC, ваше соединение может быть небезопасным. Некоторые клиенты VNC, такие как популярный TightVNC, не шифруют ваше соединение после начальной стадии входа в систему. Чтобы обойти проблему, вы можете туннелировать соединение VNC через туннель Secure Shell (SSH).
Туннель SSH не только обеспечивает полностью безопасное соединение для VNC, но также позволяет использовать соединения VNC, когда типичный порт VNC (порт 5901) заблокирован. Некоторые корпоративные сети блокируют общие порты, такие как порт 5901, для дополнительной безопасности, поэтому туннелирование VNC через SSH позволит вам обойти эту проблему.
Настройка PuTTY
В Windows 10 встроен SSH-клиент, благодаря Windows PowerShell, но это только недавняя разработка. Если вы хотите узнать, как туннелировать VNC через SSH, рекомендуется использовать PuTTY для подключения к вашему SSH-серверу.
PuTTY предлагает графический интерфейс пользователя, который можно легко настроить, чтобы вы могли туннелировать через соединение другое программное обеспечение, такое как программа просмотра VNC. Чтобы это работало, вам необходимо иметь подходящий SSH-сервер, установленный на удаленном настольном ПК или сервере, к которому вы хотите подключиться через VNC.
Для начала загрузите PuTTY и откройте клиент.
Главное меню сеанса позволяет вам ввести IP-адрес вашего сервера или имя хоста. Введите адрес вашего SSH-сервера в текстовом поле Имя хоста (или IP-адрес). Если ваш SSH-порт отличается от стандартного порта 22, введите его в поле «Порт».
Вы также захотите сохранить этот сеанс, поэтому в текстовом поле «Сохраненные сеансы» добавьте подходящее имя для вашего SSH-соединения и нажмите кнопку «Сохранить».
В левом меню разверните вкладку «Соединение», затем сделайте то же самое для SSH. Нажмите на Туннели.
В разделе «Переадресация портов» меню «Туннели» вы предоставите сведения, которые позволят PuTTY туннелировать ваше соединение VNC через SSH. В текстовом поле «Порт источника» введите 5901. В текстовом поле «Адресат» введите свой удаленный IP-адрес: 5901, используя IP-адрес удаленного настольного ПК или сервера. Например, 192.168.1.100:5901 подойдет.
Вернитесь в раздел «Сеанс», щелкните имя сохраненного сеанса в разделе «Сохраненные сеансы», затем нажмите «Сохранить», чтобы сохранить настройки.
Когда настройки PuTTY будут готовы, установите соединение SSH, нажав кнопку «Открыть» внизу. Вам потребуется ввести имя пользователя и пароль, необходимые для подключения SSH, когда PuTTY попытается это сделать.
После завершения входа в систему вам будет предоставлен доступ к окну SSH-терминала для удаленного рабочего стола.
С активным туннелем SSH к серверу удаленного рабочего стола вы сможете установить соединение VNC. Вы можете использовать любой VNC-клиент по вашему выбору, но в этом руководстве будет рассказано, как подключиться с помощью TightVNC, популярного и бесплатного VNC-клиента для Windows и Linux.
Вы можете свернуть PuTTY, пока соединение активно.
Подключение с помощью TightVNC
Если ваше SSH-соединение активно, подключение с использованием TightVNC довольно простое. Это предполагает, что ваш VNC-сервер работает на вашем удаленном ПК или сервере.
Откройте TightVNC, чтобы начать. В разделе «Подключение» введите localhost :: 5901 или 127.0.0.1::5901 в текстовое поле «Удаленный хост». PuTTY контролирует этот порт и автоматически отправит это соединение, когда попытка будет предпринята, на ваш удаленный сервер.
Вы можете настроить свое подключение VNC дальше, нажав «Опции», но, если вы готовы к подключению, нажмите «Подключиться».
Вам будет предложено ввести пароль вашего сервера VNC, поэтому укажите его во всплывающем окне «Аутентификация VNC» и нажмите кнопку «ОК».
Если ваше SSH-соединение работает правильно, TightVNC должен загрузить окно удаленного рабочего стола VNC, готовое для использования.
Клиенты SSH с поддержкой туннелирования
Хотя TightVNC является популярным клиентом Windows для VNC-соединений, он не поддерживает SSH-туннелирование внутри самого клиента, что требует использования PuTTY для установления соединения.
Однако другие VNC-клиенты включают SSH-туннелирование внутри самого клиента. Одним из примеров является SSVNC, который, хотя и базовый, будет туннелировать по SSH перед установлением VNC-соединения. SSVNC поддерживается операционными системами Windows и Linux.
Откройте клиент SSVNC и в главном окне клиента SSVNC заполните необходимые поля. В разделе VNC Host: Display введите SSHusername@remoteIPaddress:1. Замените SSHusername на имя пользователя, которое вы будете использовать для вашего SSH-соединения, и замените адрес удаленного IP-адреса на IP-адрес удаленного рабочего стола. Например, root@192.168.1.100:1.
Убедитесь, что вы выбрали опцию Использовать SSH или SSL + SSL перед подключением. Когда вы будете готовы, нажмите кнопку Подключиться.
Вас попросят ввести пароль SSH во всплывающем окне терминала. Введите пароль, затем нажмите клавишу ввода на клавиатуре.
Как только SSH-туннель будет активен, ваше VNC-соединение будет запущено, и должно появиться окно вашего VNC-клиента, где вы можете начать использовать удаленный рабочий стол.
Хотя соединения VNC по умолчанию не шифруются, собственный протокол удаленного рабочего стола Microsoft зашифрован. Если вы используете Windows и планируете подключиться к удаленному ПК или серверу Windows, вы можете подключиться с помощью инструмента «Подключение к удаленному рабочему столу».
Ошибка Linux, обнаруженная в Linux: операционная система Linux считается безопасной операционной системой, она хорошо справляется с недостатками и уязвимостями, но это не означает, что она полностью безопасна, некоторые ошибки все еще могут скрываться в тени.
Эксплойт больше не актуален в последней версии Sudo.
Недостаток затрагивает все версии Sudo до последней выпущенной версии 1.8.28.
Один такой недостаток был обнаружен в функции Sudo, которая широко используется для запуска программ, скриптов и выполнения команд с правами root.
Недостаток позволяет любому скрипту быть выполненным с привилегиями суперпользователя от пользователя, не имеющего root-доступ.
Команда Sudo (superuser do) – это широко используемая команда в операционной системе Linux.
Sudo отвечает за обработку прав суперпользователя.
Недостаток затрагивает все версии Sudo до последней выпущенной версии 1.8.28.
Уязвимость отслеживается как CVE-2019-14287 и обнаружена Джо Венниксом из Apple Information Security.
На удивление, уязвимость может быть использована злоумышленником для запуска команд от имени пользователя root, просто указав идентификатор пользователя «-1» или «4294967295.»
Давайте разберемся с дизайном недостатка и с чем именно связана эта уязвимость.
Функция, которая преобразует UID (идентификатор пользователя) в свое имя пользователя, неправильно обрабатывает -1, или его неподписанный эквивалент 4294967295, как 0, всегда является идентификатором пользователя root.
С облегчением можно сказать, что атака работает только по конкретным сценариям.
Но всем пользователям Linux по-прежнему рекомендуется обновиться до последней версии Sudo как можно скорее.
Потому что, в конце концов, меры предосторожности всегда лучше лечения.
Теперь для примера сценария атаки.
Если в файле конфигурации политики безопасности /etc/sudoers указано:
myhost bob = (ALL, !root) /usr/bin/vi
Т.е. пользователь bob может запускать программы vi от любого пользователя, кроме root.
Многие пользователи дистрибутивов Linux устанавливают на жёстком диске своего компьютера две и более систем, одну как рабочую, а другую/другие для тестирования или просто ради любопытства. И здесь возникает не существенная, но всё-таки проблема с загрузчиком GRUB, так как установка новой (другой системы) автоматически изменяет меню загрузки систем, т. е. наша вновь установленная система оказывается первой в списке. Для восстановления загрузчика GRUB своей предпочтительной системы пользователь, применяет такие графические инструменты как: Boot-Repair или Grub Customizer, которые прекрасно с этим справляются. Читать →
SOA-запись DNS определяет авторитетную информацию о доменном имени и зоне в целом.
A-запись (Address)
Эта запись указывает имя хоста и адрес IP определенного компьютера. По сути, любая система с подключением http/https должна иметь свою A-запись, чтобы по доменному имени определялся привязанный к нему IP-адрес. Читать →
Решил я собрать собственный LFS. Причин тут несколько:
Давно хотелось и чесалось.
Присутствует желание лучше понять устройство операционной системы.
Нужно мигрировать с 32-битной архитектуры на 64. Инструкцию для Debian нашел, но лучше бы иметь запасную систему на всякий случай.
У меня достаточно устойчивый набор программного обеспечения, поэтому есть представление о том, что именно мне нужно.
Следовать по возможности буду этим инструкциям, однако не повторяя их полностью. Иначе смысл сборки дистрибутива для себя полностью теряется. Насчет скорости процесса так же вопросы, ибо я ленив. Но думаю за месяц справлюсь.
Выделение раздела для системы
Я сделал достаточно просто – отмонтировал /home и отрезал от него 10 Гб места под root’ом программой GParted. Это достаточно простая и полезная программа:
Как вариант, можно загрузиться с live-cd той же Ubuntu и проделать те же манипуляции.
Подготовка к началу
Добавление глобальных переменных для пользователя
Предположим, что у нас в системе есть пользователь user. В файл /home/user/.bashrc занесём следующие строки:
Точка монтирования устройства с собираемой ОС:
export LFS64="/mnt/x64lfs"
Аббревиатура системы, на которой происходит сборка:
export LFS64_HOST="i586-cross-linux-gnu"
Аббревиатура системы, для которой происходит сборка:
export LFS64_TARGET="x86_64-unknown-linux-gnu"
Флаги компилятора, для целевой системы:
export BUILD64="-m64 -march=native"
Включаем путь к приложения из в будующем созданной папки для пользователя:
PATH=/cross-tools/bin:$PATH
Теперь можно выйти из терминала и зайти в него снова, чтобы данные глобальные переменные обновились.
Монтирование раздела и создание папок
Теперь можно подключить раздел, подготовленный для будущей операционной системы:
#mkdir $LFS64 #mount /dev/XXX $LFS64
Где /dev/XXX – собственно раздел.
Затем необходимо создать несколько папок и сделать символические ссылки на корень системы:
Для временной системы, на базе которой будет происходить сборка основной:
В прошлой части я указал на используемый софт и центральным узлом всего домашнего сервера будет использование системы виртуализации 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 версия.
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. В моем случае она уже есть на материнской плате.
На практике это выглядит так:
Страница входа через обычный браузер
Одна из страниц настройки
Для чего я это пишу тут?
А для того, чтобы вы понимали, как можно управлять сервером не подключая к нему никаких мониторов, клавиатур и мышей.
И в чем особенность серверных материнских плат. На обычных предназначенных для дома или игровых вы такого не увидите.
Установка Proxmox VE на сервер
Для демонстрации буду использовать версию 5.4-1, как более близкую к своей 5.3-11, хоть она и поновей, но существенных изменений там нет.
Все изображения спрятаны под спойлеры для вашего удобства!
После загрузки мы увидим такое окно…
Начало установки Proxmox VE
Ожидаем окончания загрузки системы установки…
Соглашаемся с лицензионным соглашением…
Соглашаемся с лицензионным соглашением
Переходим к настройке места для установки…
Переходим к настройке места для установки
Выбираем ZFS RAID-1
Используется два диска, как и положено
Место хранения настроили, движемся далее
Указываем страну, временную зону, а раскладку не трогаем…
Указываем страну, временную зону, а раскладку не трогаем
Указываем пароль и наш email для оповещений…
Указываем пароль и наш email для оповещений
Настраиваем сеть…
Тут хочется остановиться более подробно.
Настройка сети
Учтите сразу, у Proxmox сеть указывается вручную. Я несколько раз пробовал настраивать DHCP-Client для него, но почему-то он его не очень любит. Потому биндинг адреса в DHCP-Lease особого смысла не имеет, разве только, чтобы понимать какой девайс на нем сидит.
Hostname (FQDN): рекомендую задавать осмысленно с учетом того, какое доменное имя планируете использовать. Это необходимо для следующей статьи по DNS. Вы же планируете заходить по доменному имени, а не по IP адресу, правда? 🙂
Я задал свой pve1.gregory-gost.ru и по такому URL теперь захожу на WEB интерфейс Proxmox. Подумайте заранее!
Я указал в DNS IP контейнера в котором у меня работает DNS служба, но вам для начала необходимо указать свои стандартные DNS. Иначе PVE не будет иметь нормального выхода в интернет. Часто совпадает с Gateway.
Проверяем финальные данные…
Проверяем финальные данные
Дожидаемся окончания процесса установки…
Дожидаемся окончания процесса установки
Проводим финальную перезагрузку…
Проводим финальную перезагрузку
И наконец, после непродолжительных процедур нам позволено войти в систему.
После установки видим строку приглашения и информирующий баннер
Как можно наблюдать нам вежливо сообщили о том, по какому адресу и порту работает WEB интерфейс PVE:
https://192.168.88.5:8006
Давайте зайдем и посмотрим, что там!
Обратите особое внимание на адрес по которому работает WEB интерфейс PVE!
Как можно не сразу заметить используется защищенный протокол https вместо http. Автоматического перенаправления в системе не предусмотрено! Будьте внимательны!
Настройка Proxmox VE после установки
После ввода в браузере нужного адреса перед нами предстает WEB интерфейс PVE
Окно входа в PVE
Логин для входа: root
Пароль тот, который вы указали при установке.
Далее я не буду производить обзор всей системы т.к. это еще не на одну статью. Знающие администраторы разберутся в ней без труда.
Система поддерживает Русский язык, который вы можете выбрать при входе.
Дополню только минимальными настройками для начала и покажу, как скачать шаблон для LXC контейнера. В следующей статье нам это пригодится.
Настраиваем репозиторий для обновлений
Перво наперво откроем консоль нашего сервера
Путь до консоли самого сервера
Нас попросят ввести логин и пароль, вводим те же данные, которые вводили для входа в WEB.
Открываем Enterprise репозиторий…
nano /etc/apt/sources.list.d/pve-enterprise.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
Убираем всплывающее окно о подписке
После входа вы могли заметить сообщение о подписке, которое со временем может надоесть.
В принципе его можно оставить если оно вам не мешает. А для тех кому мешает необходимо сделать следующее:
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
Создаем хеш файл авторизации для доступа к почтовому ящику
У Яндекса есть проблема, а именно для успешной отправки письма, Яндекс требует, чтобы адрес отправителя в письме совпадал с адресом для авторизации на сервере.
Если это не будет сделано, то мы получим ошибку во время отправки — 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 это локальное имя сервера. Мы его заменим на учетную запись Яндекса.
Устанавливаем уровень доступа 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
Проверяйте почту 😉
Итоговый вид полученного письма на 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
Папка массива в файловой системе доступна по пути, который мы прописали при создании: /rpoolz
В целом этого будет достаточно, но есть еще один момент, это вопрос «Как подключить данный массив как папку для хранения данных?»
Для начала необходимо отправиться в раздел Datacenter -> Storage
Например я добавил папку, куда сохраняю Backup архивы.
Добавляем папку для Backup архивов
Заполняем параметры для папки
Тут нужно заполнить 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Гб для контейнеров и хоста.
Давайте установим лимиты. Делается это через конфигурирование.
Формула для расчёта: Кол-во гигабайт умноженное на 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Мб в начале оставил не размеченным)
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 таких метаданных не существует.
Ну вот мы и разобрались с базовой(и не только) установкой и подготовкой системы виртуализации Proxmox.
Как видно, ничего сложного в этом нет. Достаточно обычных знаний по работе с Linux системами. Для тех из вас, кто только начинает разбираться полагаю данный материал будет не плохим стартом!
Надеюсь данная статья оказалась для вас полезной. Возможно у кого-то уже используется данная система и вы не прочь поделиться с читателями своими мыслями, в этом случае прошу в комментарии 🙂
Ну а дальше… дальше будем ставить контейнеры и виртуалки с сервисами, продолжим с доменных имен в локальной сети с помощью DNS. Следите за обновлениями!