Многие пользователи дистрибутивов Linux устанавливают на жёстком диске своего компьютера две и более систем, одну как рабочую, а другую/другие для тестирования или просто ради любопытства. И здесь возникает не существенная, но всё-таки проблема с загрузчиком GRUB, так как установка новой (другой системы) автоматически изменяет меню загрузки систем, т. е. наша вновь установленная система оказывается первой в списке. Для восстановления загрузчика GRUB своей предпочтительной системы пользователь, применяет такие графические инструменты как: Boot-Repair или Grub Customizer, которые прекрасно с этим справляются. Читать
Архив метки: Linux
Настраиваем SSH на Ubuntu
Для работы ssh-сервера , а также ssh-клиента будем использовать всем известный пакет OpenSSH
Установка SSH
Установим OpenSSH командой:
sudo apt install ssh
Настройка сервера
При установке SSH-сервер автоматически прописывается в автозагрузку. Управлять его запуском, остановкой или перезапуском можно с помощью команд:
sudo service ssh stop|start|restart
Основной файл конфигурации SSH-сервера — файл /etc/ssh/sshd_config, доступный для чтения или редактирования только суперпользователю. После каждого изменения этого файла ssh-сервер необходимо перезапускать для применения изменений.
Пример конфигурации SSH-сервера в Ubuntu 18.04:
# Какие порты, IP-адреса и протоколы мы слушаем
Port 22
# “any” - любые #
# “inet” (только IPv4) #
# “inet6” (только IPv6) #
AddressFamily inet
# По каким интерфейсам/сетям разрешен доступ, если
# не указывать, то слушает по всем адресам.
#ListenAddress ::
#ListenAddress 0.0.0.0
# Протокол на котором будет работать SSH (рекомендуется второй)
Protocol 2
# Указывает файл, содержащий закрытый хост-ключ для протокола версии 2
HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key
#Разделение привилегий включена для безопасности
UsePrivilegeSeparation yes
# Продолжительность жизни и размер бит ключа для протокола версии 1
#KeyRegenerationInterval 3600
#ServerKeyBits 1024
# Логирование
# DAEMON #
# USER #
# AUTH #
# LOCAL0 #
# LOCAL1 #
# LOCAL2 #
# LOCAL3 #
# LOCAL4 #
# LOCAL5 #
# LOCAL6 #
# LOCAL7 #
SyslogFacility AUTH
# SILENT #
# QUIET #
# FATAL #
# ERROR #
# INFO #
# VERBOSE #
# DEBUG #
# DEBUG1 #
# DEBUG2 #
# DEBUG3 #
LogLevel INFO
# Аутентификация:
LoginGraceTime 45
# Разрешить или нет доступ root пользователю.
# “yes” - суперпользователь может зайти.
# Применяется текущая глобальная схема аутентификации.
# “without-password” - суперпользователь может зайти.
# Парольная аутентификация для него будет отключена.
# “forced-commands-only” - суперпользователь сможет зайти,
# пользуясь аутентификацией на основе публичного ключа и
# только если передаст необходимую к исполнению команду.
# Все остальные методы аутентификации для суперпользователя будут заблокированы.
# “no” - суперпользователь не может использовать ssh для входа в систему.
PermitRootLogin no
StrictModes yes
# Указывает, разрешена ли "чистая" RSA-аутентификация.
# Актуально только для протокола версии 1.
RSAAuthentication yes
# Использовать аутентификацию по публичному ключу
PubkeyAuthentication yes
# Указывает файл, в котором содержатся публичные ключи, используемые
# для аутентификации пользователей.
#AuthorizedKeysFile %h/.ssh/authorized_keys
# Запрещает использование файлов .rhosts и .shosts #
# в процессе аутентификации, основанной на проверке хоста.
IgnoreRhosts yes
# Для этой работы вам также потребуется ключи хоста в /etc/ssh_known_hosts
RhostsRSAAuthentication no
# аналогично для версии протокола 2
HostbasedAuthentication no
# Указывает должен ли sshd игнорировать пользовательские
# "известные хосты" ~/.ssh/known_hosts для RhostsRSAAuthentication
#IgnoreUserKnownHosts yes
# Включает аутентификацию по пустому паролю (НЕ РЕКОМЕНДУЕТСЯ)
PermitEmptyPasswords no
# Указывает, разрешить ли аутентификацию вида вопрос-ответ
ChallengeResponseAuthentication no
# Указывает, разрешена ли аутентификация по паролю
PasswordAuthentication no
# Kerberos опции
# Указывает, требует ли пароль, предоставленный #
# пользователем для аутентификации
#KerberosAuthentication no
# Если активен AFS и пользователь получил Kerberos 5 TGT,
# пытаться ли получить AFS токен до того, как пользователь
# получит доступ к своей домашней папке.
# По умолчанию - “no”.
#KerberosGetAFSToken no
# Указывает, как поступать в случае, если аутентификация
# через Kerberos завершилась неудачей. Если
# значение = "yes" - пароль будет проверен при помощи
# любого дополнительного локального механизма авторизации,
# например - /etc/passwd.
# По умолчанию - “yes”.
#KerberosOrLocalPasswd yes
# Указывает, нужно ли автоматически уничтожать файл с
# кэшем тикета пользователя по завершению сеанса.
# По умолчанию - “yes”.
#KerberosTicketCleanup yes
# GSSAPI опции
# Указывает, разрешена ли аутентификация пользователя на
# основе GSSAPI. По умолчанию - "no"
#GSSAPIAuthentication no
# Указывает, нужно ли автоматически уничтожать
# пользовательский кэш аутентификационных полномочий при
# завершении сеанса.
# По умолчанию - "yes"
#GSSAPICleanupCredentials yes
# Указывает, разрешено ли перенаправление графической
# подсистемы X11.
#X11Forwarding yes
# Указывает номер первого дисплея, доступного sshd в
# качестве перенаправления X11.
#X11DisplayOffset 10
# Указывает, должен ли sshd выводить на экран информацию /etc/motd
# при интерактивном входе пользователя.
PrintMotd no
# Указывает, должен ли sshd выводить на экран дату и время
# последнего сеанса при интерактивном входе пользователя.
# По умолчанию - “yes”.
PrintLastLog yes
# Указывает, нужно системе посылать TCP сообщения клиенту с целью
# поддержания соединения.
TCPKeepAlive yes
# Задает количество сообщений к клиентам, которые sshd
# посылает подряд, не получая какого либо ответа от
# клиента. Если пороговое значение будет достигнуто, а
# клиент так и не ответил - sshd отключит клиента, прервав
# ssh сессию.
#ClientAliveCountMax
# Задает временной интервал в секундах. Если в течении
# этого интервала не было обмена данными с клиентом, sshd
# посылает сообщение по зашифрованному каналу,
# запрашивающее ответ от клиента. По умолчанию - 0, т.е.
# не посылать таких сообщений. Эта директива работает
# только для протокола ssh2.
#ClientAliveInterval
# Указывает, должен ли использоваться login для
# интерактивного сеанса. Значение по умолчанию - “no”.
#UseLogin no
# Указывает максимальное число одновременных
# неавторизованных подключений к sshd.
# Дополнительно, можно задать ранний сброс соединений,
# указав в качестве параметра три значения, разделенные
# двоеточием “start:rate:full” (например: "3:30:30").
# sshd отклонит попытку соединения с вероятностью равной
# “rate/100” (т.е. в нашем примере - 30%), если уже
# имеется “start” (3) неавторизованных соединений.
# Вероятность увеличивается линейно и любые попытки
# соединения будут отклонены, если число неавторизованных
# соединений достигнет значения “full” (30). #
MaxStartups 3:30:30
# Указывает какой файл содержит текстовый баннер, который
# будет показан пользователю ПЕРЕД процедурой
# аутентификации. Опция доступна только для протокола ssh2.
Banner /etc/issue.net
# Разрешить клиенту передавать региональные переменные окружения
AcceptEnv LANG LC_*
# Определяет и настраивает внешнюю подсистему (например
# демона передачи файлов - file transfer daemon).
Subsystem sftp /usr/lib/openssh/sftp-server
# Включает интерфейс PAM (Pluggable Authentication Module
# interface).Если задано значение "yes" - для всех типов
# аутентификации помимо обработки модуля сессии и аккаунта
# PAM будет использоваться аутентификация на основе
# запроса-ответа (ChallengeResponseAuthentication и
# PasswordAuthentication) Т.к. аутентификация
# запросов-ответов в PAM обычно выполняет ту же роль,
# что и парольная аутентификация, вам следует отключить
# либо PasswordAuthentication, либо
# ChallengeResponseAuthentication. Стоит отметить, что
# если директива UsePAM включена - вы не сможете запустить
# sshd от имени пользователя, отличного от root.
# Значение по умолчанию - “no”.
UsePAM yes
Можно скопировать приведенный выше текст в ваш собственный sshd_config и использовать в дальнейшем.
Рекомендуемые параметры. Безопасность
Сам по себе, неправильно настроенный SSH-сервер — огромная уязвимость в безопасности системы, т. к. у возможного злоумышленника есть возможность получить практически неограниченный доступ к системе. Помимо этого, у sshd есть много дополнительных полезных опций, которые желательно включить для повышения удобства работы и безопасности).
Port, ListenAddress и AddressFamily
На нашем ресурсе есть статья про правильную настройку ssh сервера.
[endtxt]
Сборка собственного дистрибутива GNU/Linux. Шаг 1 – подготовка.
Решил я собрать собственный 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 – собственно раздел.
Затем необходимо создать несколько папок и сделать символические ссылки на корень системы:
- Для временной системы, на базе которой будет происходить сборка основной:
# mkdir $LFS64/tools # ln -sv $LFS64/tools / - Для кросскомпилятора с x32 на x64:
# mkdir -v $LFS64/cross-tools # ln -sv $LFS64/cross-tools / - Для исходных текстов программ:
# mkdir -v $LFS64/sources # ln -sv $LFS64/sources /
Осталось дать пользователю user права на чтение и запись в этих папках:
# chown -v user $LFS64/tools # chown -v user $LFS64/cross-tools # chown -v user $LFS64/sources
На это приготовления заканчиваются, следующий шаг – сборка кросскомпилятора.
Домашний Сервер: Часть 2 – Установка системы виртуализации Proxmox
Приветствую вас дорогие читатели на второй части цикла статей про домашний сервер!
Список цикла статей:
- Домашний Сервер: Часть 1 – Предисловие, аппаратная и софтовая начинка
- Домашний Сервер: Часть 2 – Установка системы виртуализации Proxmox (вы тут)
- Домашний Сервер: Часть 3 – Внутренний DNS сервис на BIND9 или свои доменные имена в локальной сети
- Домашний Сервер: Часть 4 – Настройка Transmission daemon в контейнере LXC Proxmox-VE
- Домашний Сервер: Часть 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 версия.
Подключаем флешку к серверу и продолжаем уже через монитор или IPMI/BMC интерфейс.
Установка Proxmox VE на сервер
Для демонстрации буду использовать версию 5.4-1, как более близкую к своей 5.3-11, хоть она и поновей, но существенных изменений там нет.
Все изображения спрятаны под спойлеры для вашего удобства!
Ожидаем окончания загрузки системы установки…
И наконец, после непродолжительных процедур нам позволено войти в систему.
Как можно наблюдать нам вежливо сообщили о том, по какому адресу и порту работает WEB интерфейс PVE:
https://192.168.88.5:8006
Давайте зайдем и посмотрим, что там!
Обратите особое внимание на адрес по которому работает WEB интерфейс PVE!
Как можно не сразу заметить используется защищенный протокол https вместо http. Автоматического перенаправления в системе не предусмотрено! Будьте внимательны!
Настройка Proxmox VE после установки
После ввода в браузере нужного адреса перед нами предстает WEB интерфейс PVE
Логин для входа: root
Пароль тот, который вы указали при установке.
Далее я не буду производить обзор всей системы т.к. это еще не на одну статью. Знающие администраторы разберутся в ней без труда.
Система поддерживает Русский язык, который вы можете выбрать при входе.
Дополню только минимальными настройками для начала и покажу, как скачать шаблон для LXC контейнера. В следующей статье нам это пригодится.
Настраиваем репозиторий для обновлений
Перво наперво откроем консоль нашего сервера
Нас попросят ввести логин и пароль, вводим те же данные, которые вводили для входа в 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
Проверяйте почту 😉
Проверка работы Postfix:
cat /var/log/mail.log | grep postfix
Подключение четырех дисков как ZFS массив RAID-5 (raidz1)
Не забудем и про дополнительные четыре диска, которые в моем случае будут использоваться для хранения медиа файлов (фильмы, сериалы и др.)
Дополнительно ознакомиться с тем, что такое 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 архивы.
Тут нужно заполнить 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 накопителя.
Представляю вам L2ARC(Layer 2 Adaptive Replacement Cache) — он же кэш адаптивной замены второго уровня. По сути это тот же ARC только уже не в оперативной памяти, а на SSD. SSD конечно не такие быстрые как оперативная память, но гораздо быстрее обычных HDD.
1700 Мб/сек на чтение в NVME SSD против средних 200-250 Мб/сек для малообъемных HDD (до 6Тб)
Данный кэш сбрасывается при перезагрузке, как и кэш в оперативной памяти т.е. поведение ARC и L2ARC абсолютно идентичное.
Что касательно 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
Добавляем 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. Следите за обновлениями!
- DNS — доменные имена в локальной сети вместо IP адресов. Домашний Сервер: Часть 3 – Внутренний DNS сервис на BIND9 или свои доменные имена в локальной сети
- Torrent Transmission — качалка торрентов. Домашний Сервер: Часть 4 – Настройка Transmission daemon в контейнере LXC Proxmox-VE
- Plex Mediaserver — домашний медиа сервер. Домашний Сервер: Часть 5 – Установка и настройка Plex Media Server в контейнере LXC Proxmox-VE
- The Dude — мониторинг девайсов в домашней сети.
- Домашний IoT.
- IP телефония.
Делитесь в комментариях, чем пользуетесь вы для организации подобной системы. Готовый NAS, альтернативные системы виртуализации? В общем пишите 🙂
Благодарю за ваше время!
Всего хорошего на просторах Интернета 😉
UPD: 03.02.2023
В статью добавлена информация по:
- изменению размера ARC кэша
- использованию NVME SSD для L2ARC кэша и ZIL (логов записи)
UPD: 10.11.2019
Добавлен блок с подключением дополнительных дисков, как массива RAID-5
UPD: 20.11.2019
Добавлена заметка по редактированию источников обновления, для разных версий дистрибутивов. Спасибо Константину за подсказку в комментарии.
Как установить архиватор 7zip на Ubuntu
7zip — это программа с открытым исходным кодом для архивации. Первоначально она была разработана для Windows. Эта программа может запаковывать или распаковывать большое количество форматов архивов, включая свой собственный формат 7z, а также XZ, GZIP, TAR, ZIP и BZIP2. 7zip также часто используется для извлечения RAR, DEB, RPM и ISO файлов. Кроме простого архивирования, 7zip может поддерживать шифрование AES-256, а также самораспаковывающиеся и многотомные архивы. Для систем POSIX (Linux, Unix, BSD), оригинальная программа 7zip была портирована как p7zip (сокращение от “POSIX 7zip”).
Установка 7zip на Debian, Ubuntu или Linux Mint
Основанные на Debian дистрибутивы идут с тремя связанными с 7zip пакетами.
- p7zip: включает 7zr (минимальный инструмент архивирования 7zip), который может работать только с родным форматом 7z.
- p7zip-full: содержит 7z, который может поддерживать 7z, LZMA2, XZ, ZIP, CAB, GZIP, BZIP2, ARJ, TAR, CPIO, RPM, ISO и DEB.
- p7zip-rar: содержит плагин для извлечения файлов RAR.
Рекомендуется установить пакет p7zip-full (а не p7zip), поскольку это наиболее полный пакет 7zip, который поддерживает много различных архивных форматов. Вдобавок, если вы хотите извлекать файлы RAR, вам также нужно установить пакет p7zip-rar. Причина, по которой поддержка вынесена в отдельный пакет плагина в том, что RAR — это проприетарный формат.
sudo apt update
sudo apt install p7zip-full p7zip-rar
Создание и извлечение архивов 7z
Сразу после установки 7zip, вы можете использовать команду 7z для упаковки и распаковки различных типов архивов. Команда 7z использует другие плагины для работы с архивами.
Для создания архива используйте опцию “a”. Поддерживаются следующие типы архивов для создания: 7z, XZ, GZIP, TAR, ZIP и BZIP2. Если файл с заданным именем уже существует, то файлы будут добавлены в существующий архив, вместо его перезаписи.
7z a <имя_архива> <список_файлов>
Для извлечения архива, используйте опцию “e”. Она извлечёт архив в текущую директорию. Количество поддерживающихся типов архивов для извлечения намного больше, чем для создания. Список включает: 7z, XZ, GZIP, TAR, ZIP, BZIP2, LZMA2, CAB, ARJ, CPIO, RPM, ISO и DEB.
7z e <имя_архива>
Другой способ распаковать, это использовать опцию “x”. В отличие от опции “e”, она извлечёт содержимое с полными путями.
7z x <имя_архива>
Чтобы просмотреть список архива используйте опцию “l”.
7z l <имя_архива>
Вы можете обновить или удалить файл(ы) в архиве опциями “u” и “d”, соответственно.
7z u <имя_архива> <список_файлов_для_обновления>
7z d <имя_архива> <список_файлов_для_удаления>
Для проверки целостности архива:
7z t <имя_архива>
Также смотрим man для остальных опций
[endtxt]
В Ubuntu не запускаются файлы из сети Samba
Раз вы тут, значит у вас возникла проблема с запуском исполняемых файлов по сети, расположенных на сервере Ubuntu.
После настройки и запуска файлового сервера Samba на Ubuntu Server, а также открытие общего доступа к определенным директориям на нем, может возникнуть проблема с доступом для запуска исполняемых файлов по сети. Читать






















