Сервер Proxmox: различия между версиями

Материал из wolfram
Перейти к навигации Перейти к поиску
Новая страница: «мини|Демонстрация Proxmox === Описание === '''Своими сло...»
 
 
(не показано 30 промежуточных версий этого же участника)
Строка 1: Строка 1:
[[Файл:Сервер Proxmox демонстрация Proxmox.png|мини|Демонстрация Proxmox]]
<code>systemctl restart sshsystemctl restart ssh</code>[[Файл:Сервер Proxmox демонстрация Proxmox.png|мини|Демонстрация Proxmox]]


=== Описание ===
===Описание===
'''Своими словами.''' Это ОС назначение, которой запускать в себе другие ОС. Создавать между ними все виды виртуальных устройств. Интересно то, что позволяет создавать хранилища, в которых уже и будут размещаться виртуальные накопители. Получается, нет привязки к конкретному диску. Все может храниться, где угодно, и переноситься куда угодно. Его плюсом является очень низкие требования к железу, бесплатность.
'''Своими словами.''' Это ОС назначение, которой запускать в себе другие ОС. Создавать между ними все виды виртуальных устройств. Интересно то, что позволяет создавать хранилища, в которых уже и будут размещаться виртуальные накопители. Получается, нет привязки к конкретному диску. Все может храниться, где угодно, и переноситься куда угодно. Его плюсом является очень низкие требования к железу, бесплатность.


=== Подготовка ===
===Подготовка===
[[Файл:Сервер Proxmox - Демонстрация настроек Rufus.png|мини|Демонстрация настроек Rufus]]
[[Файл:Сервер Proxmox - Демонстрация настроек Rufus.png|мини|Демонстрация настроек Rufus]]
На сервер установлен '''Proxmox''' (Гипервизор) версия 6.1-1. Брать с [https://www.proxmox.com/en/downloads официального сайта].
На сервер установлен '''Proxmox''' (Гипервизор) версия 6.1-1. Брать с [https://www.proxmox.com/en/downloads официального сайта].


# Скачиваем образ и записываем на '''USB накопитель'''.
#Скачиваем образ и записываем на '''USB накопитель'''.
# Делать лучше всего с помощью Rufus. Брать с [https://rufus.ie/ официального сайта]. Распространяется бесплатно.
#Делать лучше всего с помощью Rufus. Брать с [https://rufus.ie/ официального сайта]. Распространяется бесплатно.
# Устройство: выбираем наш '''USB накопитель'''.
#Устройство: выбираем наш '''USB накопитель'''.
# Метод загрузки: выбираем скачанный образ.  
#Метод загрузки: выбираем скачанный образ.
# Схема раздела: '''GPT''' (''если совсем устаревшее железо, не совместимое с '''UEFI''', то выбираем '''MBR''''')
#Схема раздела: '''GPT''' (''если совсем устаревшее железо, не совместимое с '''UEFI''', то выбираем '''MBR''''')
# Старт.
#Старт.
# Ожидаем, когда запишется образ на USB накопитель.
#Ожидаем, когда запишется образ на USB накопитель.


=== Установка Proxmox ===
===Установка Proxmox===
Загружаемся с USB накопителя. Появляется логотип '''Proxmox''' с выбором установки.
Загружаемся с USB накопителя. Появляется логотип '''Proxmox''' с выбором установки.


Выбираем: '''Install Proxmox VE.'''
*Выбираем: '''Install Proxmox VE.'''


Ожидаем, когда загрузится менеджер установки.
Ожидаем, когда загрузится менеджер установки.
Строка 25: Строка 25:
Соглашаемся с условиями: '''I agree.'''
Соглашаемся с условиями: '''I agree.'''


'''Target Harddisk:''' Выбираем накопитель на который будет выполняться установка. Это 120 Гигабайт SSD.
*'''Target Harddisk:''' Выбираем накопитель на который будет выполняться установка. Это 120 Гигабайт SSD.


Нажимаем: '''“Options”.'''
Нажимаем: '''“Options”.'''


Выбор файловой системы ext4.
*Выбор файловой системы ext4.
 
  Filesystem: '''ext4'''
  Filesystem: '''ext4'''
Общий размер раздела для установки.
 
*Общий размер раздела для установки.
 
  hdsize: '''120.0'''
  hdsize: '''120.0'''
Размер виртуальной оперативной памяти 2 гигабайта.
 
*Размер виртуальной оперативной памяти 2 гигабайта.
 
  swapsize: '''2'''
  swapsize: '''2'''
'''OK, Next, Next.'''
'''OK, Next, Next.'''


Вводим пароль для пользователя root, и второй раз для подтверждения.
*Вводим пароль для пользователя root, и второй раз для подтверждения.
  Password: наш_пароль
 
Указываем почту, на случай если захотим получать оповещения о статусе Proxmox.
  Password: пароль_пользователя_root
 
*Указываем почту, на случай если захотим получать оповещения о статусе Proxmox.
 
  E-Mail: наша_почта
  E-Mail: наша_почта
'''Next.'''
'''Next.'''
Строка 45: Строка 53:
Сетевое устройство, с которым будем работать, сейчас такое, меняется в зависимости от оборудования.
Сетевое устройство, с которым будем работать, сейчас такое, меняется в зависимости от оборудования.
  Management Interface: '''ens33'''
  Management Interface: '''ens33'''
IP адрес сейчас такой, это зависит от того, что присвоит DHCP сервер. Его лучше всего привязать к '''MAC''' адресу. Описывается в .
IP адрес сейчас такой, это зависит от того, что присвоит DHCP сервер. Его лучше всего привязать к '''MAC''' адресу. Описывается в разделе '''[[Сеть#.D0.9F.D1.80.D0.B8.D0.B2.D1.8F.D0.B7.D0.BA.D0.B0 .D0.BA.D0.BB.D0.BE.D0.B0.D0.BA.D0.B0.D0.BB.D1.8C.D0.BD.D0.BE.D0.B3.D0.BE .D0.B0.D0.B4.D1.80.D0.B5.D1.81.D0.B0 .D0.BA MAC|сеть]]'''.
 
Убедившись в том, что адрес получен нажимаем '''Next'''.
 
Нам показывают все что мы настроили.
 
Наш сервер имеет имя: '''pve'''
 
IP адрес у него: 192.168.1.130
 
'''Install'''.
 
 
Дожидаемся установки Proxmox.
 
По окончании установки нам сообщают что '''все хорошо'''.
 
Для продолжения будет выполнена '''перезагрузка''', после того как выполнится загрузка ОС можно попасть на сервер с помощью '''web браузера''', используя локальный '''IP и порт 8006'''.
 
 
В моём случае: <nowiki>https://192.168.1.130:8006</nowiki>
 
Браузер скажет, что сайт небезопасен, но мы то знаем, что он наш, так что '''нечего бояться'''. Нас встречает экран авторизации Proxmox.
 
*Сразу меняем язык '''на русский.'''
 
Language: '''Русский.'''
Интерфейс сразу же перезагрузиться, и все станет '''на русском'''.
 
Вводим имя пользователя: '''root'''
 
И пароль: '''пароль_пользователя_root'''
 
Нам сообщают о том, что прокси отсутствует. Но это мы настроем намного позже.
 
На данном этапе установка Proxmox закончена. Дальнейшие действия зависят от требований.
 
===Первичная настройка Proxmox.===
Теперь создаем для себя рабочую атмосферу.
 
Proxmox является готовым продуктом, но как ни крути настраивать его все ещё приходится по старике. А точнее то что касается аппаратных средств, монтирование дисков и так далее.
 
Самое главное установить SSH. Нужен для удаленного доступа к консоли сервера. Так как начинают работать все фишки консоли. Например, в '''Window PowerShell'''. Так намного быстрее можно вводить команды, производить копирование правым нажатием мыши, выделение текста.
 
Переходим в '''web''' интерфейсе в узел '''Датацентр/pve'''.
 
В узле переходим в '''“Оболочка”.'''
 
Открывается консоль с доступом к Proxmox на прямую. В ней уже выполнен вход от '''root'''. Но для более удобной работы с открываем '''PowerShell'''. Да мы гребаные “виндусятники”!
 
В '''PowerShell''' уже встроен клиент SSH. Вписываем локальный адрес Proxmox. Соглашаемся: '''yes'''.
ssh root@192.168.1.164
Вводим пароль Proxmox: пароль_пользователя_root
 
Все мы попали в консоль, теперь:
 
Обновляем репозитории:
[[Файл:Сеть - Демонстрация PowerShell.png|мини|Демонстрация PowerShell]]
apt-get update
Выполняем ''обновление пакетов из репозиториев.''
apt-get upgrade -y
Устанавливаем файловый менеджер mc
apt-get install mc -y
Proxmox готов к работе.
 
=== Репозитории ===
Репозитории и обновление, актуально на версии 8.3
 
файл <code>/etc/apt/sources.list.d/pve-enterprise.list</code>
nano /etc/apt/sources.list.d/pve-enterprise.list
Комментируем:
#deb <nowiki>https://enterprise.proxmox.com/debian/pve</nowiki> bookworm pve-enterprise
в файле <code>/etc/apt/sources.list</code>
nano /etc/apt/sources.list
в файле комментируем все и добавляем:
deb <nowiki>http://deb.debian.org/debian</nowiki> bookworm main contrib
deb <nowiki>http://deb.debian.org/debian</nowiki> bookworm-updates main contrib
deb <nowiki>http://security.debian.org/debian-security</nowiki> bookworm-security main contrib
создаём файл <code>/etc/apt/sources.list.d/pve-no-subscription.list</code>
nano /etc/apt/sources.list.d/pve-no-subscription.list
и добавляем в него:
deb <nowiki>http://download.proxmox.com/debian/pve</nowiki> bookworm pve-no-subscription
Теперь будут нормальные репозитории, скачиваться обновлять и всё такое
 
===Настройка сети===
в консоли pve
apt-get install ifupdown2
Для устройств '''SMB''' и '''Plex''' решено виртуализировать собственную подсеть, для снижения нагрузки на канал вне сервера (Чиать далее).
[[Файл:Сервер Proxmox - Демонстрация добавления виртуального сетевого адаптера.png|мини|Демонстрация добавления виртуального сетевого адаптера]]
В разделе '''pve''' выбираем Система/Сеть.
 
Нажимаем: '''“Создать”'''
 
Выбираем: '''Linux Bridge'''
 
Прописываем адрес IPv4: '''192.168.2.1/24'''
 
Все виртуальная сетевая карта есть.
 
===Настройка виртуальных машин===
 
*[[Облачный сервер Nextcloud#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0 Proxmox .D0.B4.D0.BB.D1.8F Nextcloud|Настройка Proxmox для Nextcloud]]
*[[Nginx прокси сервер#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0 Proxmox .D0.B4.D0.BB.D1.8F Nginx|Настройка Proxmox для Nginx]]
*[[Сервис MediaWiki#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0 Proxmox .D0.B4.D0.BB.D1.8F MediaWiki|Настройка Proxmox для MediaWiki]]
 
== О моём хранилище ==
Что-ж - это большая тема! Со временем моё хранилище эволюционировало и модифицировалось. Начиналось всё с одного диска на 8 терабайт, сейчас на июль 2023 года хранилище состоит из 10 накопителей по 12 терабайт и одного NVME PCIe GEN 3 на 1 терабайт под кэш.
 
Сначала рейдов не было, но когда я купил 3 одинаковых накопителя, сразу же встал вопрос, какой рейд выбирать. На тот момент пал выбор именно на ZFS RAIDZ (аналог рейда 5), казался лучшим выбором. Затем через год расширился до 5ти дисков, помучился с невозможностью расширить, пришлось искать накопители для переноса. на пяти дисках так же оставался с аналогом рейда 5 от ZFS. Всё в общем то устраивало, но когда объем упал до 30 процентов, очень сильно стало сказываться на производительности. Так же количество оперативной памяти потреблялось чрезвычайно много.
 
А так же очень затруднительная сложность найти объём на стороне для сохранения информации, заставила задуматься о перехожее на другой программный рейд, который бы позволил расширять себя налету. Выбор пал на MD рейд. В простонародье MDADM.
 
Куплено еще 5 накопителей. Сервер уже насчитывает 10 дисков. Теоретическим объемом 120 терабайт. Умопомрачительные объёмы надо сказать, для одного человека.
 
=== MD RAID ===
RAID 6 — это уровень RAID, который обеспечивает отказоустойчивость при выходе из строя двух дисков одновременно. Это достигается за счет использования двойной четности. MD RAID хорошо подходит для RAID 6, но есть нюансы:
 
При данном количестве накопителей надёжность всё-таки уже кажется очень важной. Я уже готов пожертвовать 2 накопителя из 10 на четность. Потому выбирается Raid6.
 
* <code>mdadm</code> — это основная утилита для управления MD RAID. Она позволяет создавать, изменять, мониторить и восстанавливать массивы.
 
* MD RAID поддерживает горячую замену дисков, что позволяет заменять вышедшие из строя устройства без остановки системы.
 
* Вы можете добавлять новые диски в массив и расширять его емкость.
 
Если <code>mdadm</code> сообщает, что на дисках уже есть данные (например, остатки предыдущих RAID-массивов), необходимо очистить метаданные и подготовить диски перед созданием нового RAID-массива. Ниже приведена пошаговая инструкция по настройке RAID 6 на 10 дисках в Proxmox.
 
==== DD ====
Запись посекторно с начала диска значение нулей, смый жесткий метод.
 
Уничтоже всё что есть в анчале разделов и таблице, несмотря на занятость и востребованость. Станет не сразу понятно, но после перезагрузки, уже ничего не будет. Легко можно затереть системный раздел.
dd if=/dev/zero of=/dev/sdb
Та же можно затереть требуемым размером блоков, скорость будет выше:
dd if=/dev/zero of=/dev/sdb bs=2M
Еще можно сказать чтобы было записан нужное число раз, наприемер 2 мегабайта 1000 раз:
dd if=/dev/zero of=/dev/sdb bs=2M count=1000
Про DD в данных рамках пока что все.
 
==== wipefs ====
Сслучайно наткнулся на днную команду в посикаха разных способов стирать разделы.
 
Есть поумолчанию в линусе, потому очень удобно.
 
Уже чувствительна к тому используется ли где то что нужно затереть. Но если всё свободно то отлично стирает все зписи о разделах.
wipefs -a /dev/md1
----
 
==== Создание RAID 6 массива ====
Тут на удивление всё просто. Я рассмотрю 2 варианта Raid0 и Raid6. Нулевой рейд мен пригодился при копировании всей информации с моих дисков, это сильно экономит время, а так же скорость хорошая. Использовать для временного переноса всего очень нужная тема.
apt update
 
apt-get install mdadm
 
mdadm --create /dev/md0 --level=6 --raid-devices=10 /dev/sd{a,b,c,d,e,...}
 
* <code>/dev/md0</code> — имя нового RAID-устройства.
* <code>--level=6</code> — указывает, что создается RAID 6.
* <code>--raid-devices=10</code> — количество дисков в массиве.
* <code>/dev/sd{b..k}</code> — диски, которые будут использоваться в массиве.
 
 
После создания массива, происходит билдинг массива. Это не быстрый процесс. В этот момент уже можно вести запись на созданный массив. Но скорость будет снижена.
 
Посмотреть статус можно командой:
cat /proc/mdstat
А так же дополнительную информацию командой
mdadm --detail /dev/md0
'''Сохраните конфигурацию RAID''':
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
Далее можно уже создать файловую систему на нашем рейд массиве, но это уже совсем другая история.
Но это уже в прошлом. Теперь нужно создать прослойку для того чтобы можно было задействовать SSD кеш.
 
В процессе я столкнулся с двумя способами реализации данного метода. Вообще их даже 3. Первый я описываю в другой статье, можно назвать его ZTF, так как эта ФС по умолчанию может в использование SSD накопителя для кеширования.
----
 
=== Bcache ===
Решил я посмотреть и на этот вид кеширования. Я не очень склонялся на использование данного решения, так как информация не столь приятно и понятно изложена как с LVM. Но я разобрался.
 
Почему я остановился на именно этом варианте?
 
Производительность у данного способа веже выше. На одинаковом массиве данных этот способ показывает всегда одинаковый результат, в отличии от LVM.
 
Опять же припомню мой случай:
 
'''/dev/md0''' - рейд массив с дисками
 
'''/dev/nvme0n1''' - диск под кеш
 
Создам bcache на дисках
apt-get install bcache-tools
 
make-bcache -B /dev/md0
Создам bcache на SSD диске
make-bcache -C /dev/nvme0n1
Теперь нужно узнать uuid диска с кешом
bcache-super-show /dev/nvme0n1 | grep cset
Полученый uuid зарегистровать для нашего хранилища
echo e0bae1a5-4f68-4066-a7b6-5d0f16dd63da > /sys/block/bcache0/bcache/attach
Влючить обратный режим записи. Чтобы кеш работал на запись
echo writeback > /sys/block/bcache0/bcache/cache_mode
Дальше можно отформатировать раздел в btrfs, назавём его '''STORAGE'''
mkfs.btrfs -L STORAGE /dev/bcache0
И в целом всё. Оно уже работает, можно монтировать и использовать.
 
Так же можно примонтировать раздел с функцией сжатися.
mount -o compress=zstd:5 mount /dev/bcache0 /mnt/meganas
Можно посмотреть информацию о том заполнен ли чем то кеш и есть ли проблеммы
watch cat /sys/block/bcache0/bcache/state
 
watch cat /sys/block/bcache0/bcache/dirty_data
Так же о монтировании в fstab с функцией сжатия
UUID=a8e75a9d-a6f6-4c6e-be41-c10bc1077aa2 /data btrfs compress=zstd:5 0 0
Теперь если требутся отключить диск с кешем
echo e0bae1a5-4f68-4066-a7b6-5d0f16dd63da > /sys/block/bcache0/bcache/detach
и соответсвенно включить можно командой
echo e0bae1a5-4f68-4066-a7b6-5d0f16dd63da > /sys/block/bcache0/bcache/attach
Вот и всё, технически даже проще чем LVM, хотя козалось наооборот.
 
Время покажет, будет ли всё хорошо.
 
=== BTRFS ===
Файловая система у меня выбрана как BTRFS (B-tree File System).
 
О ней можно много чего почитать в интернатах. По тестам на пустом хранилище она показала хорошие результаты по скорости. Хотя на данный момент я могу поставить это под сомнение, так как попробовав воспользоваться протоколом NFS, в место SMB на Windows, я получил разительную разницу в скорости. Но на данный момент NFS на Windows в очень плохом техническом состоянии, поэтому, поживём увидим как это будет развиваться дальше.
 
В итоге, что можно сказать о ФС. Есть возможность использовать сжатие, дедупликацию на уровне блоков.
 
О втором и поговорим в первую очередь, я хочу сэкономить пространство бесплатно, и без регистрации, за счёт объединения одинаковых блоков.
 
==== Дедупликация данных ====
Возможность устранения дублирования данных для экономии места на диске (требует дополнительных инструментов, таких как <code>duperemove</code>)
 
Дедупликация данных в BTRFS — это процесс устранения дублирующихся блоков данных, что позволяет экономить место на диске. Однако, в отличие от других файловых систем (например, ZFS), BTRFS не имеет встроенной поддержки дедупликации "на лету". Вместо этого дедупликация в BTRFS выполняется с помощью внешних инструментов, таких как '''<code>duperemove</code>''' или '''<code>bees</code>'''.
apt install duperemove
<code>duperemove</code> анализирует файлы на наличие дублирующихся блоков данных и сообщает о них ядру BTRFS, чтобы файловая система могла использовать общие блоки.
duperemove -r -d /path/to/directory
 
* '''<code>-r</code>''': Рекурсивный поиск в указанной директории.
 
* '''<code>-d</code>''': Выполнить дедупликацию (без этого флага <code>duperemove</code> только сканирует файлы).
 
===== Использование <code>ionice</code> для снижения приоритета I/O =====
Утилита <code>ionice</code> управляет приоритетом ввода-вывода (I/O). Это особенно полезно, если дедупликация активно использует дисковые операции.
 
Пример:
ionice -c 3 nice -n 19 duperemove -r -d /mnt/meganas/
 
* <code>-c 3</code>: Устанавливает класс I/O <code>idle</code> (наинизший приоритет). Процесс будет использовать I/O только тогда, когда другие процессы не активны/
 
* <code>nice -n 19</code>: Дополнительно снижает приоритет CPU. Но это мне не так важно, процессорного времени у меня навалом.
 
===== Использование <code>systemd</code> для управления фоновым процессом =====
nano /etc/systemd/system/duperemove.service
<syntaxhighlight lang="ini">
[Unit]
Description=Btrfs Deduplication with Duperemove
After=network.target
 
[Service]
Type=simple
ExecStart=/usr/bin/ionice -c 3 /usr/bin/duperemove -r -d -v /mnt/meganas/
StandardOutput=journal
StandardError=journal
User=root
 
[Install]
WantedBy=multi-user.target
</syntaxhighlight>
 
* <code>-v</code>: Добавляет подробный вывод (verbose) для <code>duperemove</code>.
 
systemctl daemon-reload
 
systemctl start duperemove.service
 
systemctl status duperemove.service
Использование <code>journalctl</code>:
 
Чтобы просмотреть логи в реальном времени, используйте команду:
journalctl -u duperemove.service -f
 
==== Сжатие данных ====
BTRFS поддерживает сжатие "на лету" для новых данных, но для уже записанных данных сжатие нужно выполнять вручную. Сжатие применяется к каждому файлу или директории отдельно.
 
Поддерживаемые алгоритмы сжатия:
 
* '''zlib''': Хороший баланс между степенью сжатия и производительностью.
* '''lzo''': Быстрый алгоритм с меньшей степенью сжатия.
* '''zstd''': Современный алгоритм, который обеспечивает высокую степень сжатия и хорошую производительность (рекомендуется).
 
Сжатие может быть выполнено на лету, для этого можно примонтировать раздел с необходимыми параметрами.
 
Про это было уже ранее '''fstab'''
UUID=a8e75a9d-a6f6-4c6e-be41-c10bc1077aa2 /data btrfs compress=zstd:5 0 0
Чтобы сжать уже записанные данные, используйте команду '''<code>btrfs filesystem defragment</code>''' с опцией <code>-c</code>.
btrfs filesystem defragment -r -czstd /mnt/meganas/
 
* <code>-r</code>: Рекурсивно сжимает все файлы в указанной директории.
* <code>-czstd</code>: Использует алгоритм сжатия '''zstd'''. Вы можете заменить <code>zstd</code> на <code>zlib</code> или <code>lzo</code>.
* <code>/mnt/meganas/</code>: Путь к директории или файлу, который нужно сжать.
 
Я предпочитаю запускать такие процессы на фоне, например с помощью systemd, но в этот раз я хочу попробовать другой способ, сделаю это через скрин. Так как это разовая акция.
apt install screen
Если его нет
 
Запустите новую сессию <code>screen</code>:
screen -S btrfs-compress
Я создам небольшой bash скрипт который будет показывать некий статус выполнений этой операции:
 
он потребует pv
apt install pv
 
nano /usr/local/bin/btrfs-compress-with-progress.sh
Напишем такой скрипт<syntaxhighlight lang="bash">
#!/bin/bash
DIR="/mnt/meganas"
TOTAL_FILES=$(find "$DIR" -type f | wc -l)
CURRENT_FILE=0
 
find "$DIR" -type f | while read -r file; do
  CURRENT_FILE=$((CURRENT_FILE + 1))
  echo "Processing file $CURRENT_FILE of $TOTAL_FILES: $file"
  btrfs filesystem defragment -czstd "$file"
done | pv -l -s "$TOTAL_FILES" > /dev/null
</syntaxhighlight>
chmod +x /usr/local/bin/btrfs-compress-with-progress.sh
теперь в сессии screen я запускаю этот скрипт
 
== NFS ==
Устанавливаем серверную часть.
apt-get install nfs-kernel-server
Далее редактируем конфиг
nano /etc/exports
Добавляем нашу папку, и указываем нужную нам подсеть.
/mnt/meganas/nas 192.168.2.0/24(rw,sync,no_subtree_check,no_root_squash)
/mnt/meganas/nextcloud 192.168.2.0/24(rw,sync,no_subtree_check,no_root_squash)
Запускаем службы
/etc/init.d/nfs-kernel-server start
service nfs-kernel-server restart
exportfs -ra
Готово.
 
 
== Контейнеры ==
Открыл для себя контейнеры.
 
Хорошо экономит ресурсы, как памяти так и мощности.
 
Для использования контейнера в ProxMox нужно загрузить шаблон.
 
Делать это нужно в консоли хоста (сам сервер proxmox).
pveam update
показать список:
pveam available
я выбрал для себя ubuntu-20.04, просто привычнее. Скачиваем шаблон:
pveam download local ubuntu-20.04-standard_20.04-1_amd64.tar.gz
После чего можно уже создавать Контейнеры из этого шаблона. Из минусов то, что шаблон практически пуст. И большинство компонентов нужно будет установить самостоятельно.
 
Перво наперво, это создать пользователя. Это иногда требуется. Потому, по умолчанию есть только ROOT. Из за этого не работает ssh из коробки.
adduser user
Задаём ему пароль 2 раза. Будет вопрос по дополнительным данным, если ничего не нужно просто нажимаем ENTER. В конце соглашаем с тем что все правильно.
 
Дадим права пользователю
usermod -a -G sudo user
После чего можно попасть на нашу контейнер по ssh
 
 
Есть и второй способ, не безопасный но быстрый. В файле '''/etc/ssh/sshd_config'''
nano /etc/ssh/sshd_config
Найти строку и сделать такой:
PermitRootLogin yes
Послу чего перезагрузить службу ssh
systemctl restart ssh
 
 
Далее лучше всего сделать обновление:
apt update
 
apt upgrade -y
 
 
Теперь неплохо установит русскую локаль.
dpkg-reconfigure locales
Выбираем из списка '''ru_RU.UTF-8'''
 
Её же в следующем меню
 
Готово
 
После перезапуска терминала будут доступны русские символы.
 
Установим часовой пояс как надо.
timedatectl set-timezone Asia/Omsk
и проверим время
timedatectl
Не лишним будет поставить MC
apt install mc -y
 
 
Как оказалось еще нет '''ADD-APT-REPOSITORY'''
apt install software-properties-common -y
 
 
Теперь расшарим папку из нашего Хоста внутрь контейнера, чтобы не было всяких там NFS.
 
Для это отредактируем файл конфигурации нашего контейнера. Они находятся '''/etc/pve/lxc/'''
 
Выполняем это на хосте, машине с proxmox
nano /etc/pve/lxc/номер.conf
Я хочу пробросить паку с ZFS рейда расположенную на хосте '''/mnt/meganas/nas/media/''' в папку '''/media/nas/''' в контейнере.
 
Добавлю строку в файл конфигурации
mp0: /mnt/meganas/media,mp=/media/nas
На машине контейнере создаём папку /media/nas
mkdir /media/nas
перезагружаем контейнер
 
 
=== Установка NVIDIA - Ускорение в контейнерах. ===
[https://gist.github.com/egg82/90164a31db6b71d36fa4f4056bbee2eb Ссылка]

Текущая версия от 18:29, 12 апреля 2025

systemctl restart sshsystemctl restart ssh

Демонстрация Proxmox

Описание

Своими словами. Это ОС назначение, которой запускать в себе другие ОС. Создавать между ними все виды виртуальных устройств. Интересно то, что позволяет создавать хранилища, в которых уже и будут размещаться виртуальные накопители. Получается, нет привязки к конкретному диску. Все может храниться, где угодно, и переноситься куда угодно. Его плюсом является очень низкие требования к железу, бесплатность.

Подготовка

Демонстрация настроек Rufus

На сервер установлен Proxmox (Гипервизор) версия 6.1-1. Брать с официального сайта.

  1. Скачиваем образ и записываем на USB накопитель.
  2. Делать лучше всего с помощью Rufus. Брать с официального сайта. Распространяется бесплатно.
  3. Устройство: выбираем наш USB накопитель.
  4. Метод загрузки: выбираем скачанный образ.
  5. Схема раздела: GPT (если совсем устаревшее железо, не совместимое с UEFI, то выбираем MBR)
  6. Старт.
  7. Ожидаем, когда запишется образ на USB накопитель.

Установка Proxmox

Загружаемся с USB накопителя. Появляется логотип Proxmox с выбором установки.

  • Выбираем: Install Proxmox VE.

Ожидаем, когда загрузится менеджер установки.

Соглашаемся с условиями: I agree.

  • Target Harddisk: Выбираем накопитель на который будет выполняться установка. Это 120 Гигабайт SSD.

Нажимаем: “Options”.

  • Выбор файловой системы ext4.
Filesystem: ext4
  • Общий размер раздела для установки.
hdsize: 120.0
  • Размер виртуальной оперативной памяти 2 гигабайта.
swapsize: 2

OK, Next, Next.

  • Вводим пароль для пользователя root, и второй раз для подтверждения.
Password: пароль_пользователя_root
  • Указываем почту, на случай если захотим получать оповещения о статусе Proxmox.
E-Mail: наша_почта

Next.

Сетевое устройство, с которым будем работать, сейчас такое, меняется в зависимости от оборудования.

Management Interface: ens33

IP адрес сейчас такой, это зависит от того, что присвоит DHCP сервер. Его лучше всего привязать к MAC адресу. Описывается в разделе сеть.

Убедившись в том, что адрес получен нажимаем Next.

Нам показывают все что мы настроили.

Наш сервер имеет имя: pve

IP адрес у него: 192.168.1.130

Install.


Дожидаемся установки Proxmox.

По окончании установки нам сообщают что все хорошо.

Для продолжения будет выполнена перезагрузка, после того как выполнится загрузка ОС можно попасть на сервер с помощью web браузера, используя локальный IP и порт 8006.


В моём случае: https://192.168.1.130:8006

Браузер скажет, что сайт небезопасен, но мы то знаем, что он наш, так что нечего бояться. Нас встречает экран авторизации Proxmox.

  • Сразу меняем язык на русский.
Language: Русский.

Интерфейс сразу же перезагрузиться, и все станет на русском.

Вводим имя пользователя: root

И пароль: пароль_пользователя_root

Нам сообщают о том, что прокси отсутствует. Но это мы настроем намного позже.

На данном этапе установка Proxmox закончена. Дальнейшие действия зависят от требований.

Первичная настройка Proxmox.

Теперь создаем для себя рабочую атмосферу.

Proxmox является готовым продуктом, но как ни крути настраивать его все ещё приходится по старике. А точнее то что касается аппаратных средств, монтирование дисков и так далее.

Самое главное установить SSH. Нужен для удаленного доступа к консоли сервера. Так как начинают работать все фишки консоли. Например, в Window PowerShell. Так намного быстрее можно вводить команды, производить копирование правым нажатием мыши, выделение текста.

Переходим в web интерфейсе в узел Датацентр/pve.

В узле переходим в “Оболочка”.

Открывается консоль с доступом к Proxmox на прямую. В ней уже выполнен вход от root. Но для более удобной работы с открываем PowerShell. Да мы гребаные “виндусятники”!

В PowerShell уже встроен клиент SSH. Вписываем локальный адрес Proxmox. Соглашаемся: yes.

ssh root@192.168.1.164

Вводим пароль Proxmox: пароль_пользователя_root

Все мы попали в консоль, теперь:

Обновляем репозитории:

Демонстрация PowerShell
apt-get update

Выполняем обновление пакетов из репозиториев.

apt-get upgrade -y

Устанавливаем файловый менеджер mc

apt-get install mc -y

Proxmox готов к работе.

Репозитории

Репозитории и обновление, актуально на версии 8.3

файл /etc/apt/sources.list.d/pve-enterprise.list

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

Комментируем:

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

в файле /etc/apt/sources.list

nano /etc/apt/sources.list

в файле комментируем все и добавляем:

deb http://deb.debian.org/debian bookworm main contrib
deb http://deb.debian.org/debian bookworm-updates main contrib
deb http://security.debian.org/debian-security bookworm-security main contrib

создаём файл /etc/apt/sources.list.d/pve-no-subscription.list

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

и добавляем в него:

deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription

Теперь будут нормальные репозитории, скачиваться обновлять и всё такое

Настройка сети

в консоли pve

apt-get install ifupdown2

Для устройств SMB и Plex решено виртуализировать собственную подсеть, для снижения нагрузки на канал вне сервера (Чиать далее).

Демонстрация добавления виртуального сетевого адаптера

В разделе pve выбираем Система/Сеть.

Нажимаем: “Создать”

Выбираем: Linux Bridge

Прописываем адрес IPv4: 192.168.2.1/24

Все виртуальная сетевая карта есть.

Настройка виртуальных машин

О моём хранилище

Что-ж - это большая тема! Со временем моё хранилище эволюционировало и модифицировалось. Начиналось всё с одного диска на 8 терабайт, сейчас на июль 2023 года хранилище состоит из 10 накопителей по 12 терабайт и одного NVME PCIe GEN 3 на 1 терабайт под кэш.

Сначала рейдов не было, но когда я купил 3 одинаковых накопителя, сразу же встал вопрос, какой рейд выбирать. На тот момент пал выбор именно на ZFS RAIDZ (аналог рейда 5), казался лучшим выбором. Затем через год расширился до 5ти дисков, помучился с невозможностью расширить, пришлось искать накопители для переноса. на пяти дисках так же оставался с аналогом рейда 5 от ZFS. Всё в общем то устраивало, но когда объем упал до 30 процентов, очень сильно стало сказываться на производительности. Так же количество оперативной памяти потреблялось чрезвычайно много.

А так же очень затруднительная сложность найти объём на стороне для сохранения информации, заставила задуматься о перехожее на другой программный рейд, который бы позволил расширять себя налету. Выбор пал на MD рейд. В простонародье MDADM.

Куплено еще 5 накопителей. Сервер уже насчитывает 10 дисков. Теоретическим объемом 120 терабайт. Умопомрачительные объёмы надо сказать, для одного человека.

MD RAID

RAID 6 — это уровень RAID, который обеспечивает отказоустойчивость при выходе из строя двух дисков одновременно. Это достигается за счет использования двойной четности. MD RAID хорошо подходит для RAID 6, но есть нюансы:

При данном количестве накопителей надёжность всё-таки уже кажется очень важной. Я уже готов пожертвовать 2 накопителя из 10 на четность. Потому выбирается Raid6.

  • mdadm — это основная утилита для управления MD RAID. Она позволяет создавать, изменять, мониторить и восстанавливать массивы.
  • MD RAID поддерживает горячую замену дисков, что позволяет заменять вышедшие из строя устройства без остановки системы.
  • Вы можете добавлять новые диски в массив и расширять его емкость.

Если mdadm сообщает, что на дисках уже есть данные (например, остатки предыдущих RAID-массивов), необходимо очистить метаданные и подготовить диски перед созданием нового RAID-массива. Ниже приведена пошаговая инструкция по настройке RAID 6 на 10 дисках в Proxmox.

DD

Запись посекторно с начала диска значение нулей, смый жесткий метод.

Уничтоже всё что есть в анчале разделов и таблице, несмотря на занятость и востребованость. Станет не сразу понятно, но после перезагрузки, уже ничего не будет. Легко можно затереть системный раздел.

dd if=/dev/zero of=/dev/sdb

Та же можно затереть требуемым размером блоков, скорость будет выше:

dd if=/dev/zero of=/dev/sdb bs=2M

Еще можно сказать чтобы было записан нужное число раз, наприемер 2 мегабайта 1000 раз:

dd if=/dev/zero of=/dev/sdb bs=2M count=1000

Про DD в данных рамках пока что все.

wipefs

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

Есть поумолчанию в линусе, потому очень удобно.

Уже чувствительна к тому используется ли где то что нужно затереть. Но если всё свободно то отлично стирает все зписи о разделах.

wipefs -a /dev/md1

Создание RAID 6 массива

Тут на удивление всё просто. Я рассмотрю 2 варианта Raid0 и Raid6. Нулевой рейд мен пригодился при копировании всей информации с моих дисков, это сильно экономит время, а так же скорость хорошая. Использовать для временного переноса всего очень нужная тема.

apt update
apt-get install mdadm
mdadm --create /dev/md0 --level=6 --raid-devices=10 /dev/sd{a,b,c,d,e,...}
  • /dev/md0 — имя нового RAID-устройства.
  • --level=6 — указывает, что создается RAID 6.
  • --raid-devices=10 — количество дисков в массиве.
  • /dev/sd{b..k} — диски, которые будут использоваться в массиве.


После создания массива, происходит билдинг массива. Это не быстрый процесс. В этот момент уже можно вести запись на созданный массив. Но скорость будет снижена.

Посмотреть статус можно командой:

cat /proc/mdstat

А так же дополнительную информацию командой

mdadm --detail /dev/md0

Сохраните конфигурацию RAID:

mdadm --detail --scan >> /etc/mdadm/mdadm.conf

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

В процессе я столкнулся с двумя способами реализации данного метода. Вообще их даже 3. Первый я описываю в другой статье, можно назвать его ZTF, так как эта ФС по умолчанию может в использование SSD накопителя для кеширования.


Bcache

Решил я посмотреть и на этот вид кеширования. Я не очень склонялся на использование данного решения, так как информация не столь приятно и понятно изложена как с LVM. Но я разобрался.

Почему я остановился на именно этом варианте?

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

Опять же припомню мой случай:

/dev/md0 - рейд массив с дисками

/dev/nvme0n1 - диск под кеш

Создам bcache на дисках

apt-get install bcache-tools
make-bcache -B /dev/md0

Создам bcache на SSD диске

make-bcache -C /dev/nvme0n1

Теперь нужно узнать uuid диска с кешом

bcache-super-show /dev/nvme0n1 | grep cset

Полученый uuid зарегистровать для нашего хранилища

echo e0bae1a5-4f68-4066-a7b6-5d0f16dd63da > /sys/block/bcache0/bcache/attach

Влючить обратный режим записи. Чтобы кеш работал на запись

echo writeback > /sys/block/bcache0/bcache/cache_mode

Дальше можно отформатировать раздел в btrfs, назавём его STORAGE

mkfs.btrfs -L STORAGE /dev/bcache0

И в целом всё. Оно уже работает, можно монтировать и использовать.

Так же можно примонтировать раздел с функцией сжатися.

mount -o compress=zstd:5 mount /dev/bcache0 /mnt/meganas

Можно посмотреть информацию о том заполнен ли чем то кеш и есть ли проблеммы

watch cat /sys/block/bcache0/bcache/state
watch cat /sys/block/bcache0/bcache/dirty_data

Так же о монтировании в fstab с функцией сжатия

UUID=a8e75a9d-a6f6-4c6e-be41-c10bc1077aa2 /data btrfs compress=zstd:5 0 0

Теперь если требутся отключить диск с кешем

echo e0bae1a5-4f68-4066-a7b6-5d0f16dd63da > /sys/block/bcache0/bcache/detach

и соответсвенно включить можно командой

echo e0bae1a5-4f68-4066-a7b6-5d0f16dd63da > /sys/block/bcache0/bcache/attach

Вот и всё, технически даже проще чем LVM, хотя козалось наооборот.

Время покажет, будет ли всё хорошо.

BTRFS

Файловая система у меня выбрана как BTRFS (B-tree File System).

О ней можно много чего почитать в интернатах. По тестам на пустом хранилище она показала хорошие результаты по скорости. Хотя на данный момент я могу поставить это под сомнение, так как попробовав воспользоваться протоколом NFS, в место SMB на Windows, я получил разительную разницу в скорости. Но на данный момент NFS на Windows в очень плохом техническом состоянии, поэтому, поживём увидим как это будет развиваться дальше.

В итоге, что можно сказать о ФС. Есть возможность использовать сжатие, дедупликацию на уровне блоков.

О втором и поговорим в первую очередь, я хочу сэкономить пространство бесплатно, и без регистрации, за счёт объединения одинаковых блоков.

Дедупликация данных

Возможность устранения дублирования данных для экономии места на диске (требует дополнительных инструментов, таких как duperemove)

Дедупликация данных в BTRFS — это процесс устранения дублирующихся блоков данных, что позволяет экономить место на диске. Однако, в отличие от других файловых систем (например, ZFS), BTRFS не имеет встроенной поддержки дедупликации "на лету". Вместо этого дедупликация в BTRFS выполняется с помощью внешних инструментов, таких как duperemove или bees.

apt install duperemove

duperemove анализирует файлы на наличие дублирующихся блоков данных и сообщает о них ядру BTRFS, чтобы файловая система могла использовать общие блоки.

duperemove -r -d /path/to/directory
  • -r: Рекурсивный поиск в указанной директории.
  • -d: Выполнить дедупликацию (без этого флага duperemove только сканирует файлы).
Использование ionice для снижения приоритета I/O

Утилита ionice управляет приоритетом ввода-вывода (I/O). Это особенно полезно, если дедупликация активно использует дисковые операции.

Пример:

ionice -c 3 nice -n 19 duperemove -r -d /mnt/meganas/
  • -c 3: Устанавливает класс I/O idle (наинизший приоритет). Процесс будет использовать I/O только тогда, когда другие процессы не активны/
  • nice -n 19: Дополнительно снижает приоритет CPU. Но это мне не так важно, процессорного времени у меня навалом.
Использование systemd для управления фоновым процессом
nano /etc/systemd/system/duperemove.service
[Unit]
Description=Btrfs Deduplication with Duperemove
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/ionice -c 3 /usr/bin/duperemove -r -d -v /mnt/meganas/
StandardOutput=journal
StandardError=journal
User=root

[Install]
WantedBy=multi-user.target
  • -v: Добавляет подробный вывод (verbose) для duperemove.
systemctl daemon-reload
systemctl start duperemove.service
systemctl status duperemove.service

Использование journalctl:

Чтобы просмотреть логи в реальном времени, используйте команду:

journalctl -u duperemove.service -f

Сжатие данных

BTRFS поддерживает сжатие "на лету" для новых данных, но для уже записанных данных сжатие нужно выполнять вручную. Сжатие применяется к каждому файлу или директории отдельно.

Поддерживаемые алгоритмы сжатия:

  • zlib: Хороший баланс между степенью сжатия и производительностью.
  • lzo: Быстрый алгоритм с меньшей степенью сжатия.
  • zstd: Современный алгоритм, который обеспечивает высокую степень сжатия и хорошую производительность (рекомендуется).

Сжатие может быть выполнено на лету, для этого можно примонтировать раздел с необходимыми параметрами.

Про это было уже ранее fstab

UUID=a8e75a9d-a6f6-4c6e-be41-c10bc1077aa2 /data btrfs compress=zstd:5 0 0

Чтобы сжать уже записанные данные, используйте команду btrfs filesystem defragment с опцией -c.

btrfs filesystem defragment -r -czstd /mnt/meganas/
  • -r: Рекурсивно сжимает все файлы в указанной директории.
  • -czstd: Использует алгоритм сжатия zstd. Вы можете заменить zstd на zlib или lzo.
  • /mnt/meganas/: Путь к директории или файлу, который нужно сжать.

Я предпочитаю запускать такие процессы на фоне, например с помощью systemd, но в этот раз я хочу попробовать другой способ, сделаю это через скрин. Так как это разовая акция.

apt install screen

Если его нет

Запустите новую сессию screen:

screen -S btrfs-compress

Я создам небольшой bash скрипт который будет показывать некий статус выполнений этой операции:

он потребует pv

apt install pv
nano /usr/local/bin/btrfs-compress-with-progress.sh

Напишем такой скрипт

#!/bin/bash
DIR="/mnt/meganas"
TOTAL_FILES=$(find "$DIR" -type f | wc -l)
CURRENT_FILE=0

find "$DIR" -type f | while read -r file; do
  CURRENT_FILE=$((CURRENT_FILE + 1))
  echo "Processing file $CURRENT_FILE of $TOTAL_FILES: $file"
  btrfs filesystem defragment -czstd "$file"
done | pv -l -s "$TOTAL_FILES" > /dev/null
chmod +x /usr/local/bin/btrfs-compress-with-progress.sh

теперь в сессии screen я запускаю этот скрипт

NFS

Устанавливаем серверную часть.

apt-get install nfs-kernel-server 

Далее редактируем конфиг

nano /etc/exports 

Добавляем нашу папку, и указываем нужную нам подсеть.

/mnt/meganas/nas 192.168.2.0/24(rw,sync,no_subtree_check,no_root_squash)
/mnt/meganas/nextcloud 192.168.2.0/24(rw,sync,no_subtree_check,no_root_squash)

Запускаем службы

/etc/init.d/nfs-kernel-server start
service nfs-kernel-server restart
exportfs -ra

Готово.


Контейнеры

Открыл для себя контейнеры.

Хорошо экономит ресурсы, как памяти так и мощности.

Для использования контейнера в ProxMox нужно загрузить шаблон.

Делать это нужно в консоли хоста (сам сервер proxmox).

pveam update

показать список:

pveam available

я выбрал для себя ubuntu-20.04, просто привычнее. Скачиваем шаблон:

pveam download local ubuntu-20.04-standard_20.04-1_amd64.tar.gz

После чего можно уже создавать Контейнеры из этого шаблона. Из минусов то, что шаблон практически пуст. И большинство компонентов нужно будет установить самостоятельно.

Перво наперво, это создать пользователя. Это иногда требуется. Потому, по умолчанию есть только ROOT. Из за этого не работает ssh из коробки.

adduser user

Задаём ему пароль 2 раза. Будет вопрос по дополнительным данным, если ничего не нужно просто нажимаем ENTER. В конце соглашаем с тем что все правильно.

Дадим права пользователю

usermod -a -G sudo user

После чего можно попасть на нашу контейнер по ssh


Есть и второй способ, не безопасный но быстрый. В файле /etc/ssh/sshd_config

nano /etc/ssh/sshd_config

Найти строку и сделать такой:

PermitRootLogin yes

Послу чего перезагрузить службу ssh

systemctl restart ssh


Далее лучше всего сделать обновление:

apt update 
apt upgrade -y


Теперь неплохо установит русскую локаль.

dpkg-reconfigure locales

Выбираем из списка ru_RU.UTF-8

Её же в следующем меню

Готово

После перезапуска терминала будут доступны русские символы.

Установим часовой пояс как надо.

timedatectl set-timezone Asia/Omsk

и проверим время

timedatectl

Не лишним будет поставить MC

apt install mc -y


Как оказалось еще нет ADD-APT-REPOSITORY

apt install software-properties-common -y


Теперь расшарим папку из нашего Хоста внутрь контейнера, чтобы не было всяких там NFS.

Для это отредактируем файл конфигурации нашего контейнера. Они находятся /etc/pve/lxc/

Выполняем это на хосте, машине с proxmox

nano /etc/pve/lxc/номер.conf

Я хочу пробросить паку с ZFS рейда расположенную на хосте /mnt/meganas/nas/media/ в папку /media/nas/ в контейнере.

Добавлю строку в файл конфигурации

mp0: /mnt/meganas/media,mp=/media/nas

На машине контейнере создаём папку /media/nas

mkdir /media/nas

перезагружаем контейнер


Установка NVIDIA - Ускорение в контейнерах.

Ссылка