--------------------------------------------------------------
Базовые настройки
--------------------------------------------------------------
При наличии достаточного количества ОЗУ, для уменьшения нагрузки на ЦП отключаем службу KSM
systemctl disable ksmtuned
Отключаем и удаляем раздел Swap, а также раздел Data
swapoff -a
lvremove /dev/pve/swap
lvremove /dev/pve/data
Создаем раздел Swap размером 2 Гб и подключаем его
lvcreate -n swap -L 2G pve
mkswap -L swap /dev/pve/swap
swapon -a
Увеличиваем файловую систему до максимального размера
lvresize -l +100%FREE /dev/pve/root
resize2fs /dev/mapper/pve-root
--------------------------------------------------------------
Ограничение использования Swap
--------------------------------------------------------------
Задаем порог помещения в Swap
sysctl -w vm.swappiness=0
sysctl -p
Переподключаем раздел Swap
swapoff -a
swapon -a
Автоматизируем параметры использования Swap раздела при перезагрузке
nano /etc/sysctl.conf
vm.swappiness = 0
Создаем файл rc.local с запретом неконтролированного помещения данных в Swap
nano /etc/rc.local
Помещаем содержимое скрипта в созданный файл rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# fix for proxmox kernel swappiness problem
for i in $(/usr/bin/find /sys /var/lib 2>/dev/null | /bin/grep slice | grep swappiness) ; do [ -f ${i} ] && /bin/echo 0 > ${i} ; done
exit 0
Делаем файл rc.local исполняемым
chmod +x /etc/rc.local
Создаем файл автозапуска файла rc.local
nano /etc/systemd/system/rc-local.service
Помещаем содержимое скрипта в созданный файл rc-local.service
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
After=pve-cluster.service
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Делаем файл rc.local.service запускаемым при старте системы и и запускаем его вручную
systemctl enable rc-local
systemctl start rc-local.service
--------------------------------------------------------------
Обновление и установка дополнительного ПО
--------------------------------------------------------------
Создаем файл не стабильного репозитория
touch /etc/apt/sources.list.d/pve-no-subscription.list
Заполняем файл репозитория ссылкой
echo 'deb http://download.proxmox.com/debian/pve buster pve-no-subscription' >> /etc/apt/sources.list.d/pve-no-subscription.list
Для версии Proxmox 7 заполняем файл репозитрория ссылкой
echo 'deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription' >> /etc/apt/sources.list.d/pve-no-subscription.list
Комментируем использование коммерческого репозитория
sed -i 's/^/#/' /etc/apt/sources.list.d/pve-enterprise.list
Для версии Proxmox 8 заполняем файл репозитрория ссылкой
echo 'deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription' >> /etc/apt/sources.list.d/pve-no-subscription.list
echo 'deb http://download.proxmox.com/debian/ceph-quincy bookworm no-subscription' >> /etc/apt/sources.list.d/pve-no-subscription.list
Комментируем использование коммерческого репозитория ceph (только для версии PVE 8)
sed -i 's/^/#/' /etc/apt/sources.list.d/ceph.list
Обновляем систему
apt-get update
apt-get upgrade
apt-get dist-upgrade
Устанавливаем дополнительное ПО. ifupdown2 нужен для переконфигурирования сетевых интерфейсов без перезапуска сервера.
apt install screen mc nmon iotop ioping iptraf iftop speedometer htop nload ncdu ntfs-3g fio ifupdown2 openvswitch-switch
Очищаем ненужное
apt-get autoremove
apt-get autoclean
--------------------------------------------------------------
Локализация консоли
--------------------------------------------------------------
dpkg-reconfigure locales
Выбираем ru_RU.UTF-8 UTF-8 и нажимаем Ок
В следующем окне выбираем ru_RU.UTF-8 и нажимаем Ок
dpkg-reconfigure console-setup
Выбираем UTF-8 и нажимаем Ок
Выбираем Cyrillic — non-Slavic languages и нажимаем Ок
Выбираем Fixed и нажимаем Ок
Выбираем 8х16 и нажимаем Ок
--------------------------------------------------------------
Отключаем окно предупреждения о отсутствии лицензии
--------------------------------------------------------------
Делаем резервную копию оригинального файла
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
--------------------------------------------------------------
Скачиваем драйвера Virtio
--------------------------------------------------------------
wget -P /var/lib/vz/template/iso https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso
--------------------------------------------------------------
Настройка NAT и DHCP на хосте
--------------------------------------------------------------
1. Создаем новый Bridge, например vmbr1 и назначаем ему IP адрес, например 192.168.158.1./24
В настройки созданного бриджа добавляем:
hwaddress ether ab:cd:12:34:56:78
Это нужно для того чтобы виртуальные машины Windows при перезапуске каждый раз не обнаруживали новую сеть.
В конец файла /etc/network/interfaces добавляем следующие правила
#Разрешаем маршрутизацию между интерфейсами
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
#Разрешаем Source NAT из локальной сети 192.168.158.0/24
post-up iptables -t nat -A POSTROUTING -s '192.168.158.0/24' -o vmbr0 -j MASQUERADE
#Если необходимо, например, пробросить RDP внутрь виртуальной машины с наружного порта 49389 на внутренний 3389. Создаем правила tcp и udp. В правиле указываем интерфейс - бридж на котором назначен внешний IP.
post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp -m tcp --dport 49389 -j DNAT --to-destination 192.168.158.10:3389
post-up iptables -t nat -A PREROUTING -i vmbr0 -p udp -m udp --dport 49389 -j DNAT --to-destination 192.168.158.10:3389
#Удаляем правила при остановке
post-down iptables -t nat -D POSTROUTING -s '192.168.158.0/24' -o vmbr0 (enp1s0, eth0 или другие варианты) -j MASQUERADE
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp -m tcp --dport 49389 -j DNAT --to-destination 192.168.158.10:3389
post-down iptables -t nat -D PREROUTING -i vmbr0 -p udp -m udp --dport 49389 -j DNAT --to-destination 192.168.158.10:3389
Устанавливаем dhcp и dns сервер dnsmasq
apt install dnsmasq
Редактируем конфигурационный файл dnsmasq
nano /etc/dnsmasq.conf
Добавляем в конец файла
interface=vmbrl
listen-address=192.168.158.1
dhcp-range=interface:vmbr1,192.168.158.101,192.168.158.199,255.255.255.0,12h
dhcp-option=interface:vmbr1,3,192.168.158.1
dhcp-option=interface:vmbr1,6,192.168.158.1
dhcp-option=interface:vmbr1,15,pve.lan
Перезапускаем dnsmasq /etc/init.d/dnsmasq restart
--------------------------------------------------------------
Инициализация новых дисков в системе
--------------------------------------------------------------
Очистка информации, иницализация в GPT и создание одного раздела типа LVM
sgdisk /dev/sdX -Z -U -R -N 1 -t 1:8e00
Очистка информации, иницализация в GPT и создание одного раздела типа Linux Filesystem
sgdisk /dev/sdX -Z -U -R -N 1 -t 1:8300
--------------------------------------------------------------
Создание тома LVM Thin
--------------------------------------------------------------
Мне не нравится как Proxmox создает lvm thin через веб интерфейс, поэтому делаю это вручную. lvm thin нужен для работы снепшотов.
Создание физического тома (PV)
pvcreate /dev/sdX1
Создание группы томов (VG)
vgcreate volume_group_name /dev/sdX1
Создание раздела Meta (высчитывается как 1% от емкости дисковой группы)
lvcreate -L XG volume_group_name
Создание раздела свободного пространства для расширения раздела Meta в случае завершения в нем места. Минимум 1 Гб
lvcreate -L XG volume_group_name
Создание раздела Data (оставшееся свободное пространство)
lvcreate -l +100%FREE volume_group_name
Удаление раздела свободного места для расширения раздела Meta
lvremove volume_group_name/lvol1
Пример для диска объемом 6 Тб
pvcreate /dev/sdb1
vgcreate data /dev/sdb1
lvcreate -L 15G data
lvcerate -L 5G data
lvcreate -l +100%FREE data
lvremove data/lvol1
Конвертация раздела LVM в разреженный том (Thin Pool) без дублирующего раздела для Meta - pmspare (Данный раздел позволяет восстановить данные в случае повреждения раздела Meta)
lvconvert --type thin-pool --poolmetadataspare n --poolmetadata volume_group_name/lvol0 volume_group_name/lvol2
Переименование раздела lvm thin
lvrename /dev/volume_group_name/lvol2 /dev/volume_group_name/volume_new_name
Увеличение раздела Meta при отсутствии в нем свободного места
lvextend --poolmetadatasize +1G volume_group_name/volume_name