Редакция октябрь, 2026
Аннотация
pvesh и стандартных команд Linux;
Примечание
apt-get позволяют пользователям легко обновлять свои системы и быть в курсе актуальных новинок мира свободных программ.
Содержание
Предупреждение




Предупреждение



Предупреждение
Предупреждение
dd:
#где <файл-образа.iso> — ISO-образ дистрибутива, аddoflag=direct if=<файл-образа.iso> of=/dev/sdX bs=1M status=progress;sync
/dev/sdX — устройство, соответствующее USB-накопителю.
#где <файл-образа.iso> — ISO-образ дистрибутива, аpv<файл-образа.iso> | dd oflag=direct of=/dev/sdX bs=1M;sync
/dev/sdX — устройство, соответствующее USB-накопителю.
lsblk:
$ lsblk | grep disk
sda 8:0 0 931,5G 0 disk
sdb 8:16 0 931,5G 0 disk
sdc 8:32 1 7,4G 0 disk
В данном примере USB-накопителю соответствует устройство /dev/sdc.
# dd oflag=direct if=/iso/alt-virtualization-pve-11.2-x86_64.iso of=/dev/sdc bs=1M status=progress; sync
или:
# pv /iso/alt-virtualization-pve-11.2-x86_64.iso | dd oflag=direct of=/dev/sdc bs=1M;sync
dd: warning: partial read (524288 bytes); suggest iflag=fullblock
3GiB 0:10:28 [4,61MiB/s] [===================================> ] 72% ETA 0:04:07
После завершения команды dd выполнится sync, который обеспечит запись буферизованных данных на накопитель.
Предупреждение
dd дождитесь возврата приглашения командной строки.
гдеsudo dd if=alt-virtualization-pve-11.2-x86_64.isoof=/dev/rdiskX bs=10Msync
alt-virtualization-pve-11.2-x86_64.iso — ISO-образ дистрибутива, а /dev/rdiskX — устройство USB-накопителя.
diskutil list
Предупреждение
$ du -b alt-virtualization-pve-11.2-x86_64.iso | cut -f1
2676996096
MD5SUM на сервере FTP):
$ md5sum alt-virtualization-pve-11.2-x86_64.iso
a203f4d656ebacd34053a845dc6b68a3 alt-virtualization-pve-11.2-x86_64.iso
# head -c 2676996096 /dev/sdd | md5sum
a203f4d656ebacd34053a845dc6b68a3
где 2676996096 — размер ISO-образа в байтах, полученный на первом шаге, а /dev/sdd — устройство, на которое был записан образ.
Предупреждение
Примечание

vncviewer --listen):


Log in as root localhost login:

Примечание

Примечание
Примечание


Примечание
… Running initinstall script [85-start-multipath.sh] [ DONE ] 11:19:59 Running initinstall script [90-alteratord.sh] [ DONE ] 11:19:59 Running initinstall script [90-date.sh] [ DONE ] 11:19:59 Running initinstall script [90-pkg.sh] [ DONE ] 11:20:00 Running initinstall script [91-pkg-size.sh] [ DONE ] 11:20:01 Running initinstall script [95-virt-env.sh] [ DONE ] 11:20:01 Running initinstall script [98-oem.sh] [ DONE ] 11:20:01 Open debug shell on tty2 [ DONE ] 11:20:01 Open debug shell on tty3 [ DONE ] 11:20:01 ** IP(s): 192.168.0.95 ** VNC cmdline: vncpassword=Pa$$word The VNC desktop is: localhost.localdomain:0 PORT=5900
$ vncviewer 192.168.0.95
Примечание
Welcome to ALT Virtualization PVE Edition 11.2 (Nimbostratus)! Hostname: pve01.test.alt IP: 192.168.0.186 Use https://192.168.0.186:8006/ to manage your PVE server. pve01 login:
Примечание
позволяет показать или скрыть панель со списком шагов установки:





Примечание


Примечание

/boot);

Примечание
Примечание

Предупреждение
Примечание
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 600M 0 part /boot/efi
└─sda2 8:2 0 99,4G 0 part
├─pve-swap 253:0 0 2G 0 lvm [SWAP]
├─pve-root 253:1 0 14G 0 lvm /
├─pve-data_tmeta 253:2 0 84M 0 lvm
│ └─pve-data 253:4 0 81,8G 0 lvm
└─pve-data_tdata 253:3 0 81,8G 0 lvm
└─pve-data 253:4 0 81,8G 0 lvm
sr0 11:0 1 2,5G 0 rom
Примечание

/var/lib/pve/local-btrfs. Он используется для хранения данных, необходимых для работы виртуализации.

Примечание
Примечание
Примечание
/var/lib/pve/local-btrfs. Для того чтобы использовать данный подтом инструментами PVE, в /etc/pve/storage.cfg будет создана следующая конфигурация:
dir: local
path /var/lib/vz
content iso,vztmpl,backup
disable # стандартное хранилище отключено
btrfs: local-btrfs
path /var/lib/pve/local-btrfs
content iso,vztmpl,backup,images,rootdir
Таким образом, хранилище local будет отключено в пользу local-btrfs, расположенного на дополнительном подтоме. Хранилище local-btrfs поддерживает все типы данных (образы, шаблоны, резервные копии и т.д).
# btrfs subvolume list /
ID 256 gen 160 top level 5 path var_lib_pve_local-btrfs
ID 257 gen 196 top level 5 path root
ID 258 gen 134 top level 257 path var/lib/machines

Предупреждение


/etc/fstab).

/root/.install-log, после чего из NVRAM удаляются все загрузочные записи. Это освобождает место в NVRAM и гарантирует, что система загрузится в установленную ОС;
Примечание

Примечание

Примечание
Примечание

Примечание

Примечание

Важно


#После завершения обновления перезагрузите систему:apt-get update#apt-get dist-upgrade#update-kernel#apt-get clean
# reboot
Примечание
$ su -
или выполнив вход в систему от имени пользователя root.
Примечание
Важно
Важно

nomodeset — отключает автозагрузку графических драйверов. Используется для предотвращения проблем с отображением на этапе загрузки, например при появлении чёрного экрана;
nosplash — отключает графический экран загрузки, позволяя видеть сообщения консоли;
vga=normal — отключает графический экран загрузки установщика;
xdriver=vesa — позволяет явно указать видеодрайвер vesa. Может применяться при проблемах с загрузкой графической подсистемы;
module_blacklist=nouveau,nvidia,ast — запрещает загрузку указанных модулей ядра;
bc_debug — включает режим расширенной диагностики на этапе stage1 и копирует журнал в stage2;
irqpoll — заставляет ядро опрашивать IRQ (аппаратные прерывания) вручную;
pci=nomsi — отключает использование MSI/MSI-X (Message Signaled Interrupts) для PCI-устройств. Может применяться при проблемах с обработкой аппаратных прерываний на некоторых контроллерах и материнских платах, которые могут приводить к зависаниям, нестабильной работе устройств или невозможности загрузки системы;
pci=noaer — отключает AER (Advanced Error Reporting) для PCI-устройств. Может применяться при проблемах с PCIe-контроллерами, чтобы подавить избыточные сообщения в журнале и предотвратить сбои при загрузке;
acpi=off — отключает ACPI (Advanced Configuration and Power Interface). Может применяться, если оборудование или прошивка некорректно поддерживают ACPI;
noapic — отключает использование APIC (Advanced Programmable Interrupt Controller). Может применяться при проблемах с обработкой аппаратных прерываний;
mce=off — отключает Machine Check Exception (MCE), механизм обнаружения аппаратных ошибок процессора и других компонентов;
barrier=off — отключает барьеры записи, используемые для обеспечения порядка операций записи. Может применяться при проблемах с определёнными устройствами или драйверами;
oldinst — применяет более медленный метод копирования файлов вместо распаковки с помощью unsquashfs (актуально только для образов, использующих SquashFS).
apm=off acpi=off mce=off barrier=off vga=normalВ этом режиме отключаются некоторые функции управления питанием, обработки аппаратных ошибок, барьеры записи и графический режим загрузки. Кроме того, отключается использование APIC.
nomodeset, pci=nomsi, pci=noaer или irqpoll в зависимости от характера проблемы.
Log in as root localhost login:После ввода логина суперпользователя (root) появится приглашение командной строки:
[root@localhost /]#. Начиная с этого момента, система готова к вводу команд.

fixmbr без параметров. Программа попытается переустановить загрузчик в автоматическом режиме.
Содержание

Важно


Содержание
https://<имя-компьютера>:8006. Для входа требуется аутентификация (логин по умолчанию: root, пароль указывается в процессе установки ОС):


Примечание


Примечание
Важно
#control sshd-permit-root-login without_password#systemctl restart sshd
#А после того, как сервер будет добавлен, снова отключить.control sshd-permit-root-login enabled#systemctl restart sshd
Таблица 25.1. Используемые порты
|
Порт
|
Функция
|
|---|---|
|
TCP 8006
|
Веб-интерфейс PVE
|
|
TCP 5900-5999
|
Доступ к консоли VNC
|
|
TCP 3128
|
Доступ к консоли SPICE
|
|
TCP 22
|
SSH-доступ
|
|
UDP 5405-5412
|
Трафик кластера Corosync
|
|
TCP 60000-60050
|
Живая миграция (память ВМ и данные локального диска)
|
/etc/hosts:
#echo "192.168.0.186 pve01.test.alt pve01" >> /etc/hosts#echo "192.168.0.90 pve02.test.alt pve02" >> /etc/hosts#echo "192.168.0.70 pve03.test.alt pve03" >> /etc/hosts
Примечание
/etc/hosts можно в панели управления: выбрать узел, перейти в → , добавить все узлы, которые будут включены в состав кластера и нажать кнопку :

Примечание
/etc/hosts с адресом 127.0.0.1.








Примечание
/etc/pve на присоединяемом узле будет полностью перезаписано конфигурацией кластера. В частности, присоединяющийся узел не должен содержать гостевые системы, так как это может привести к конфликтам идентификаторов ВМ. Если на узле уже есть ВМ, рекомендуется перед присоединением создать резервные копии всех ВМ (используя vzdump) и восстановить их с новыми идентификаторами после присоединения к кластеру.

Примечание
# pvecm create <cluster_name>
# pvecm create pve-cluster
# pvecm status
Cluster information
-------------------
Name: pve-cluster
Config Version: 1
Transport: knet
Secure auth: on
Quorum information
------------------
Date: Mon May 5 13:59:31 2025
Quorum provider: corosync_votequorum
Nodes: 1
Node ID: 0x00000001
Ring ID: 1.5
Quorate: Yes
Votequorum information
----------------------
Expected votes: 1
Highest expected: 1
Total votes: 1
Quorum: 1
Flags: Quorate
Membership information
----------------------
Nodeid Votes Name
0x00000001 1 192.168.0.186 (local)
/etc/pve/corosync.conf. По мере добавления узлов в кластер файл настройки будет автоматически пополняться информацией об узлах.
# pvecm add <existing_node_in_cluster>
где existing_node_in_cluster — адрес уже добавленного узла (рекомендуется указывать самый первый).
Примечание
link0 для установки адреса узла в этой сети:
# pvecm add <existing_node_in_cluster> --link0 <IP_link0>
# pvecm add pve01
где pve01 — имя или IP-адрес «головного» узла.
# pvecm add pve01
Please enter superuser (root) password for 'pve01': ***
Establishing API connection with host 'pve01'
Login succeeded.
Request addition of this node
Join request OK, finishing setup locally
stopping pve-cluster service
backup old database to '/var/lib/pve-cluster/backup/config-1625747072.sql.gz'
waiting for quorum...OK
(re)generate node files
generate new node certificate
merge authorized SSH keys and known hosts
generated new node certificate, restart pveproxy and pvedaemon services
successfully added node 'pve03' to cluster.
/etc/pve/corosync.conf должен содержать информацию об узлах кластера.
#systemctl start pve-cluster pveproxy pvedaemon pvestatd pve-firewall pvefw-logger pve-ha-crm pve-ha-lrm spiceproxy lxc lxcfs lxc-net lxc-monitord qmeventd pvescheduler pve-lxc-syscalld#systemctl enable pve-cluster pveproxy pvedaemon pvestatd pve-firewall corosync pvefw-logger pve-guests pve-ha-crm pve-ha-lrm spiceproxy lxc lxcfs lxc-net lxc-monitord qmeventd pvescheduler pve-lxc-syscalld
pvecm nodes, чтобы определить идентификатор узла, который следует удалить:
# pvecm nodes
Membership information
----------------------
Nodeid Votes Name
1 1 pve01 (local)
2 1 pve02
3 1 pve03
# pvecm delnode pve02
Примечание
Could not kill node (error = CS_ERR_NOT_EXIST)Это сообщение можно игнорировать. Оно возникает, если узел уже недоступен, и не влияет на корректность удаления.
Membership information команда отобразит список узлов кластера без удаленного узла):
# pvecm status
…
Membership information
----------------------
Nodeid Votes Name
0x00000001 1 192.168.0.186 (local)
0x00000003 1 192.168.0.70
Важно
/etc/pve/nodes/<имя_узла> не удаляется автоматически. Он может содержать конфигурации ВМ, хранилищ и другие данные, которые при необходимости можно сохранить или перенести.
Примечание
#Командаpvecm expected 1#pvecm delnode <недоступный_узел>
pvecm expected 1 применяется в ситуациях, когда:
pvecm expected 1 является аварийной мерой управления кластером, а не штатной операцией, и должно применяться только при осознанном принятии риска потери отказоустойчивости.
Примечание
--linkX команды pvecm create, используемой для инициализации нового кластера.
# pvecm create pve-cluster --link0 10.10.100.150
Параметр --link0 указывает IP-адрес интерфейса, который будет использоваться для обмена сообщениями между узлами кластера.

# pvecm create pve-cluster --link0 10.10.100.150 --link1 10.10.101.150
В этом случае будет настроено несколько каналов обмена Corosync, что повышает отказоустойчивость кластера.
# pvecm add 192.168.0.186 --link0 10.10.100.151

/etc/pve/corosync.conf:
logging {
debug: off
to_syslog: yes
}
nodelist {
node {
name: pve01
nodeid: 1
quorum_votes: 1
ring0_addr: 192.168.0.186
}
node {
name: pve02
nodeid: 2
quorum_votes: 1
ring0_addr: 192.168.0.90
}
node {
name: pve03
nodeid: 3
quorum_votes: 1
ring0_addr: 192.168.0.70
}
}
quorum {
provider: corosync_votequorum
}
totem {
cluster_name: pve-cluster
config_version: 3
interface {
linknumber: 0
}
ip_version: ipv4-6
link_mode: passive
secauth: on
version: 2
}
Примечание
ringX_addr определяет IP-адрес интерфейса, используемого для обмена сообщениями между узлами кластера.
ring0_addr на новые IP-адреса из выделенной подсети (например, 10.10.100.0/24).
config_version (например, с 3 до 4).
logging {
debug: off
to_syslog: yes
}
nodelist {
node {
name: pve01
nodeid: 1
quorum_votes: 1
ring0_addr: 10.10.100.150
}
node {
name: pve02
nodeid: 2
quorum_votes: 1
ring0_addr: 10.10.100.151
}
node {
name: pve03
nodeid: 3
quorum_votes: 1
ring0_addr: 10.10.100.152
}
}
quorum {
provider: corosync_votequorum
}
totem {
cluster_name: pve-cluster
config_version: 4
interface {
linknumber: 0
}
ip_version: ipv4-6
link_mode: passive
secauth: on
version: 2
}
Примечание
# systemctl restart corosync
systemctl status corosync) необходимо повторить операцию на остальных узлах.
--link0, --link1 в команде pvecm;
ring0_addr, ring1_addr в файле corosync.conf.
Примечание
# pvecm create CLUSTER \
--link0 10.10.100.105,priority=15 \
--link1 10.20.20.1,priority=20
В данном случае будет использоваться канал link1, поскольку его приоритет выше.
link0 имеет более высокий приоритет, чем link1).
/etc/pve/corosync.conf:
ringX_addr для каждого узла. Например:
nodelist {
node {
name: pve01
nodeid: 1
quorum_votes: 1
ring0_addr: 192.168.0.186
ring1_addr: 192.168.1.10
}
node {
name: pve02
nodeid: 2
quorum_votes: 1
ring0_addr: 192.168.0.90
ring1_addr: 192.168.1.11
}
node {
name: pve03
nodeid: 3
quorum_votes: 1
ring0_addr: 192.168.0.70
ring1_addr: 192.168.1.12
}
}
Важно
totem добавить блок interface для нового кольца (номер ссылки должен соответствовать числу X, выбранному выше):
interface {
linknumber: 1
}
config_version.
# journalctl -b -u corosync
# pvecm status
# corosync-cfgtool -s
# pvecm status
…
Votequorum information
----------------------
Expected votes: 5
Highest expected: 5
Total votes: 5
Quorum: 3
Flags: Quorate
…
В выводе команды видно, что в кластере пять узлов (Expected votes), из них для кворума необходимо не менее трёх (Quorum), сейчас все пять узлов активны (Total votes), кворум соблюден (Flags: Quorate).
Примечание
Важно
#А после того, как QDevice будет добавлен, отключить:control sshd-permit-root-login enabled#systemctl restart sshd
#control sshd-permit-root-login without_password#systemctl restart sshd
# apt-get install corosync-qnetd
# corosync-qnetd-certutil -i
Примечание
/etc/sysconfig/corosync-qnetd изменить значение опции COROSYNC_QNETD_OPTIONS:
COROSYNC_QNETD_OPTIONS="-s off"
corosync-qnetd:
# systemctl enable --now corosync-qnetd
# apt-get install corosync-qdevice
# pvecm qdevice setup 192.168.0.88
где 192.168.0.88 — IP-адрес арбитра (внешнего сервера).
# pvecm status
…
Votequorum information
----------------------
Expected votes: 5
Highest expected: 5
Total votes: 5
Quorum: 3
Flags: Quorate Qdevice
Membership information
----------------------
Nodeid Votes Qdevice Name
0x00000001 1 A,V,NMW 192.168.0.186 (local)
0x00000002 1 A,V,NMW 192.168.0.90
0x00000003 1 A,V,NMW 192.168.0.70
0x00000004 1 A,V,NMW 192.168.0.91
0x00000000 1 Qdevice
# pvecm qdevice remove
/etc/pve/priv/ и /etc/pve/nodes/${NAME}/priv/ доступны только root.
/etc/pve/.
Таблица 26.1. Доступные типы хранилищ
|
Хранилище
|
PVE тип
|
Уровень
|
Общее (shared)
|
Снимки (snapshots)
|
|---|---|---|---|---|
|
ZFS (локальный)
|
zfspool
|
файл
|
нет
|
да
|
|
dir
|
файл
|
нет
|
нет (возможны в формате qcow2)
|
|
|
btrfs
|
файл
|
нет
|
да
|
|
|
nfs
|
файл
|
да
|
нет (возможны в формате qcow2)
|
|
|
cifs
|
файл
|
да
|
нет (возможны в формате qcow2)
|
|
|
cephfs
|
файл
|
да
|
да
|
|
|
lvm
|
блок
|
нет*
|
да
|
|
|
lvmthin
|
блок
|
нет
|
да
|
|
|
iscsi
|
блок
|
да
|
нет
|
|
|
iscsidirect
|
блок
|
да
|
нет
|
|
|
rbd
|
блок
|
да
|
да
|
|
|
ZFS over iSCSI
|
zfs
|
блок
|
да
|
да
|
|
pbs
|
файл/блок
|
да
|
-
|
|
|
esxi
|
-
|
да
|
-
|
Примечание
/etc/pve/storage.cfg. Поскольку этот файл находится в каталоге /etc/pve/, он автоматически реплицируется на все узлы кластера. Таким образом, все узлы имеют одинаковую конфигурацию хранилищ.
<type>: <STORAGE_ID>
<property> <value>
<property> <value>
...
/etc/pve/storage.cfg:
# cat /etc/pve/storage.cfg
# Локальное файловое хранилище
dir: local
path /var/lib/vz
content iso,vztmpl,snippets,backup,rootdir
shared 0
# хранилище образов по умолчанию при установке на LVM
lvmthin: local-lvm
thinpool data
vgname pve
content images,rootdir
# NFS-хранилище
nfs: nfs-storage
export /export/storage
path /mnt/pve/nfs-storage
server 192.168.0.105
content images,iso,backup,vztmpl
options vers=3,nolock,tcp
/var/lib/vz;
Таблица 26.2. Параметры хранилищ
|
Свойство
|
Описание
|
|---|---|
|
nodes
|
Список узлов кластера, на которых доступно хранилище. Позволяет ограничить его использование
|
|
content
|
Типы данных, поддерживаемые хранилищем:
|
|
shared
|
Указывает, что хранилище физически одно и то же на всех узлах (или на перечисленных в опции
nodes). Не делает локальное хранилище общим автоматически — только помечает уже общее хранилище
|
|
disable
|
Отключает хранилище
|
|
maxfiles
|
Устарело, следует использовать свойство prune-backups
|
|
prune-backups
|
Параметры хранения резервных копий
|
|
format
|
Формат образа по умолчанию: raw, qcow2, vmdk
|
|
preallocation
|
Режим предварительного выделения для образов raw и qcow2 в файловых хранилищах: off, metadata, falloc, full. По умолчанию — metadata (для raw эквивалентно off). На сетевых хранилищах рекомендуется off для больших qcow2, чтобы избежать таймаутов.
|
Примечание
local:iso/slinux-11.0-x86_64.iso local:101/vm-101-disk-0.qcow2 local:backup/vzdump-qemu-100-2024_08_22-21_12_33.vma.zst nfs-storage:vztmpl/alt-p10-rootfs-systemd-x86_64.tar.xz
# pvesm path <VOLUME_ID>
Например:
#pvesm path local:iso/slinux-11.0-x86_64.iso/var/lib/vz/template/iso/slinux-11.0-x86_64.iso #pvesm path nfs-storage:vztmpl/alt-p11-rootfs-systemd-x86_64.tar.xz/mnt/pve/nfs-storage/template/cache/alt-p11-rootfs-systemd-x86_64.tar.xz
pvesm (PVE Storage Manager) позволяет управлять хранилищами.
#pvesm add <TYPE> <STORAGE_ID> <OPTIONS>#pvesm add dir <STORAGE_ID> --path <PATH>#pvesm add nfs <STORAGE_ID> --path <PATH> --server <SERVER> --export <EXPORT>#pvesm add lvm <STORAGE_ID> --vgname <VGNAME>#pvesm add iscsi <STORAGE_ID> --portal <HOST[:PORT]> --target <TARGET>
#pvesm set <STORAGE_ID> --disable 1# отключить #pvesm set <STORAGE_ID> --disable 0# включить
#pvesm set <STORAGE_ID> <OPTIONS>#pvesm set <STORAGE_ID> --shared 1#pvesm set local --format qcow2#pvesm set <STORAGE_ID> --content iso
# pvesm remove <STORAGE_ID>
# pvesm alloc <STORAGE_ID> <VMID> <name> <size> [--format <raw|qcow2>]
# pvesm alloc local <VMID> '' 4G
# pvesm free <VOLUME_ID>
# pvesm status
# pvesm list <STORAGE_ID> [--vmid <VMID>]
# pvesm list <STORAGE_ID> --content iso


Примечание

Таблица 26.3. Структура каталогов
|
Тип данных
|
Подкаталог
|
|---|---|
|
Образы дисков ВМ
|
images/<VMID>/
|
|
ISO-образы
|
template/iso/
|
|
Шаблоны контейнеров
|
template/cache/
|
|
Резервные копии VZDump
|
dump/
|
|
Фрагменты (сниппеты)
|
snippets/
|
|
Импорт
|
import/
|
Примечание
/etc/fstab, а затем определить в PVE хранилище типа каталог для этой точки монтирования. Таким образом можно использовать любую файловую систему (ФС), поддерживаемую Linux.
Примечание
/mnt/iso:

path — абсолютный путь к каталогу на файловой системе;
snapshot-as-volume-chain — снимки как цепочки томов. Включает поддержку создания снимков для ВМ через механизм цепочек томов (подробнее см. в описании хранилища LVM). Технология в статусе preview;
content-dirs (опционально) — позволяет изменить стандартную структуру каталогов. Значение представляет собой список в формате:
vtype=pathгде vtype — тип содержимого (images, backup, и т.д.), а path — путь относительно точки монтирования.
/etc/pve/storage.cfg):
dir: backup
path /mnt/backup
content backup
prune-backups keep-last=7
shared 0
content-dirs backup=custom/backup
/mnt/backup/custom/backup.
Примечание
shared (Общий доступ) следует включать только для хранилищ, содержимое которых доступно с нескольких узлов кластера и является общим для этих узлов. Например, это могут быть хранилища на основе кластерных файловых систем OCFS2 или сетевые хранилища NFS и CIFS. Установка флага shared сама по себе не обеспечивает совместный доступ к хранилищу.
VM-<VMID>-<NAME>.<FORMAT>где:
# ls /var/lib/vz/images/101
vm-101-disk-0.qcow2 vm-101-disk-1.qcow2
base-<VMID>-<NAME>.<FORMAT>Это означает, что образ становится доступен только для чтения и может использоваться как базовый для клонирования.
/etc/fstab.
shared, который для NFS всегда установлен. Дополнительные параметры:
server — IP-адрес или DNS-имя сервера (рекомендуется использовать IP для избежания задержек, связанных с разрешением DNS-имён);
export — совместный ресурс с сервера NFS (список можно получить, выполнив команду pvesm scan nfs <server>);
path — локальная точка монтирования (по умолчанию: /mnt/pve/<STORAGE_ID>/);
content-dirs (опционально) — позволяет изменить стандартную структуру каталогов. Значение представляет собой список в формате:
vtype=pathгде vtype — тип содержимого (images, backup, и т.д.), а path — путь относительно точки монтирования;
options — параметры монтирования NFS (см. man nfs).
/etc/pve/storage.cfg):
nfs: nfs-storage
export /export/storage
path /mnt/pve/nfs-storage
server 192.168.0.105
content images,backup,vztmpl,iso
options vers=3,nolock,tcp
Примечание
hard) поведение: при недоступности сервера запросы повторяются бесконечно, что может вызывать зависания. Для данных, доступных только для чтения, рекомендуется использовать опцию soft, при которой после трёх неудачных попыток операция завершится с ошибкой.
Примечание
# systemctl enable --now nfs-client.target

/export/storage.
# pvesm add nfs nfs-storage \
--path /mnt/pve/nfs-storage \
--server 192.168.0.105 \
--options vers=3,nolock,tcp \
--export /export/storage \
--content images,iso,vztmpl,backup
# pvesm nfsscan <server>
Примечание
Примечание
is_mountpoint, указав реальную точку монтирования.
/etc/pve/storage.cfg):
btrfs: btrfs-storage
path /mnt/data/btrfs-storage
content rootdir,images
is_mountpoint /mnt/data
nodes pve02
prune-backups keep-all=1
В данном примере файловая система BTRFS смонтирована в /mnt/data, а пулом данных служит её подкаталог btrfs-storage/.

# pvesm add btrfs btrfs-storage \
--path /mnt/data/btrfs-storage \
--is_mountpoint /mnt/data/ \
--content images,rootdir
/dev/sdd:
# mkfs.btrfs -m single -d single -L My-Storage /dev/sdd
Параметры -m и -d задают профиль для метаданных и данных соответственно. -L задаёт метку.
/dev/sdb1 и /dev/sdc1:
# mkfs.btrfs -m raid1 -d raid1 -L My-Storage /dev/sdb1 /dev/sdc1
#mkdir /mnt/data#mount /dev/sdd /mnt/data
/etc/fstab):
UUID=5a556184-43b2-4212-bc21-eee3798c8322 /mnt/data btrfs defaults 0 0Проверка монтирования:
# mount -a
Результатом выполнения команды должен быть пустой вывод без ошибок.
Примечание
mkfs.btrfs).
# blkid
/dev/sdd: LABEL="My-Storage" UUID="5a556184-43b2-4212-bc21-eee3798c8322" BLOCK_SIZE="4096" TYPE="btrfs"
# btrfs subvolume create /mnt/data/btrfs-storage
# btrfs subvolume snapshot -r /mnt/data/btrfs-storage /mnt/data/new
Будет создан доступный только для чтения «клон» подтома /mnt/data/btrfs-storage. Чтобы из снимка, доступного только для чтения, создать его версию, доступную для записи, следует просто создать его снимок без опции -r.
# btrfs subvolume list /mnt/data
ID 256 gen 17 top level 5 path btrfs-storage
ID 257 gen 14 top level 5 path new
# btrfs subvolume delete /mnt/data/btrfs-storage
# btrfs filesystem usage /mnt/data
или:
$ btrfs filesystem df /mnt/data
Примечание
shared, который всегда установлен. Дополнительные параметры:
server — IP-адрес или DNS-имя сервера (рекомендуется использовать IP для избежания задержек, связанных с разрешением DNS-имён);
share — совместный ресурс с сервера CIFS (список можно просмотреть, выполнив команду pvesm scan cifs <server>);
snapshot-as-volume-chain — снимки как цепочки томов. Включает поддержку создания снимков для ВМ через механизм цепочек томов (подробнее см. в описании хранилища LVM). Технология в статусе preview;
username — имя пользователя для хранилища CIFS (опционально, по умолчанию «guest»);
password — пароль пользователя (опционально). Пароль хранится в файле /etc/pve/priv/storage/<STORAGE-ID>.pw, доступном только пользователю root;
domain — рабочая группа или домен (опционально);
smbversion — версия протокола SMB (опционально, по умолчанию 3; версия 1 не поддерживается);
path — локальная точка монтирования (по умолчанию: /mnt/pve/<STORAGE_ID>/);
content-dirs (опционально) — позволяет изменить стандартную структуру каталогов. Значение представляет собой список в формате:
vtype=pathгде vtype — тип содержимого (images, backup, и т.д.), а path — путь относительно точки монтирования;
options — дополнительные параметры монтирования CIFS (см. man mount.cifs). Некоторые параметры устанавливаются автоматически, и их не следует задавать в этом параметре. PVE всегда устанавливает опцию soft;
subdir — подкаталог внутри общего ресурса (по умолчанию — корень).
/etc/pve/storage.cfg):
cifs: newCIFS
path /mnt/pve/newCIFS
server 192.168.0.105
share smb_data
smbversion 2.1
# pvesm cifsscan <server> [--username <username>] [--password]
# pvesm add cifs <storagename> --server <server> --share <share> [--username <username>] [--password]

Примечание
# pvesm add cifs newCIFS \
--server 192.168.0.105 \
--share smb_data \
--smbversion 2.1
Примечание
# modprobe zfs
#zfsв файле
/etc/modules-load.d/zfs.conf.
pool — имя пула или файловой системы ZFS;
blocksize — размер блока;
sparse — использовать тонкое выделение ресурсов;
mountpoint — точка монтирования пула/файловой системы ZFS. Изменение этого параметра не влияет на свойство mountpoint в ZFS. По умолчанию /<pool>.
/etc/pve/storage.cfg):
zfspool: vmdata
pool vmdata
content images,rootdir
mountpoint /vmdata
nodes pve03
Примечание
cannot destroy 'data/vm-101-disk-0': dataset is busyЧтобы избежать конфликта, следует исключить ZFS-диски из области сканирования LVM, добавив в конфигурацию LVM (файл
/etc/lvm/lvm.conf) в секцию devices{} строки:
# Do not scan ZFS zvols (to avoid problems on ZFS zvols snapshots) filter = [ "r|^/dev/zd*|" ] global_filter = [ "r|^/dev/zd*|" ]





zfs и zpool.
# zpool create -f -o ashift=12 <pool> <device1> <device2>
# zpool create -f -o ashift=12 <pool> mirror <device1> <device2>
# zpool create -f -o ashift=12 <pool> mirror <device1> <device2> mirror <device3> <device4>
# zpool create -f -o ashift=12 <pool> raidz1 <device1> <device2> <device3>
# zpool create -f -o ashift=12 <pool> raidz2 <device1> <device2> <device3> <device4>
# zpool replace -f <pool> <old device> <new device>
# zfs set compression=on <pool>
# pvesm zfsscan
# zpool create -f vmdata mirror sdb sdc
# zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
vmdata 17,5G 492K 17,5G - - 0% 0% 1.00x ONLINE -
Статус пула:
# zpool status
pool: vmdata
state: ONLINE
config:
NAME STATE READ WRITE CKSUM
vmdata ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sdb ONLINE 0 0 0
sdc ONLINE 0 0 0
errors: No known data errors
vgname — имя группы томов LVM (должна существовать в системе);
base — базовый том. Этот том автоматически активируется перед доступом к хранилищу. Параметр особенно полезен, если группа томов LVM находится на удалённом iSCSI-сервере;
saferemove — безопасное удаление томов (соответствует опции Стереть удалённые тома в веб-интерфейсе). При удалении LVM-тома все его данные полностью затираются нулями, что исключает возможность восстановления остаточных данных при последующем создании томов на тех же физических экстентах;
saferemove_throughput — скорость операции безопасного удаления (значение параметра cstream -t утилиты cstream);
snapshot-as-volume-chain — снимки как цепочки томов. Включает поддержку создания снимков для ВМ в LVM через механизм цепочек томов:
snapshot1 → snapshot2 → active-volume
/etc/pve/storage.cfg):
lvm: vg
vgname vg
content images,rootdir
saferemove 0
shared 0
snapshot-as-volume-chain 1
nodes pve03
Примечание




/dev/sdd:
# pvcreate /dev/sdd
Physical volume "/dev/sdd" successfully created.
# vgcreate vg /dev/sdd
Volume group "vg" successfully created
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdd vg lvm2 a-- <18,00g <3,00g
# vgs
VG #PV #LV #SN Attr VSize VFree
vg 1 2 0 wz--n- <18,00g <3,00g
# pvesm lvmscan
vg
# pvesm add lvm myspace --vgname vg --nodes pve03
vgname — имя группы томов LVM (должна существовать в системе);
thinpool — название тонкого пула LVM.
/etc/pve/storage.cfg):
lvmthin: vmstore
thinpool vmstore
vgname vmstore
content rootdir,images
nodes pve03
Примечание



# lvcreate -L 80G -T -n vmstore vg
# pvesm lvmthinscan vg
vmstore
# pvesm add lvmthin vmstore --thinpool vmstore --vgname vg --nodes pve03
portal — IP-адрес или DNS-имя iSCSI-сервера;
target — iSCSI-цель (target).
/etc/pve/storage.cfg):
iscsi: test1-iSCSI
portal 192.168.0.105
target iqn.2021-7.local.omv:test
content images
Примечание
content noneВ этом случае напрямую создавать ВМ на таком хранилище будет невозможно — оно будет служить только «основой» для других уровней.
Примечание
iscsid — включена и запущена:
# systemctl enable --now iscsid

# pvesm scan iscsi <IP-адрес сервера[:порт]>
# pvesm add iscsi <ID> --portal <Сервер iSCSI> --target <Цель iSCSI> --content none
Примечание
/etc/pve/storage.cfg):
iscsidirect: test1-iSCSi
portal 192.168.0.191
target dc1.test.alt:server.target
monhost — список IP-адресов мониторов Ceph (указывается только при подключении к внешнему кластеру Ceph);
pool — название пула Ceph (по умолчанию rbd);
username — имя пользователя Ceph (только для внешних кластеров);
krbd (опционально) — использовать драйвер ядра krbd для монтирования образов (по умолчанию — отключено).
Примечание
krbd.
/etc/pve/storage.cfg):
rbd: new
content images
krbd 0
monhost 192.168.0.105
pool rbd
username admin

/root узла:
# scp <external cephserver>:/etc/ceph/ceph.client.admin.keyring /root/rbd.keyring
# pvesm add rbd <name> \
--monhost "10.1.1.20 10.1.1.21 10.1.1.22" \
--content images \
--keyring /root/rbd.keyring
/etc/pve/priv/ceph/<STORAGE_ID>.keyring.

Примечание
monhost — IP-адреса мониторов (только для внешнего Ceph);
path — локальная точка монтирования (по умолчанию: /mnt/pve/<STORAGE_ID>/);
username — пользователь Ceph (только для внешнего кластера);
subdir — подкаталог CephFS для монтирования (по умолчанию — корень /);
fuse — доступ к CephFS через FUSE (по умолчанию 0).
/etc/pve/storage.cfg):
cephfs: cephfs-external
content backup
monhost 192.168.0.105
path /mnt/pve/cephfs-external
username admin

Примечание
# ceph fs ls
/root узла:
# scp <external cephserver>:/etc/ceph/cephfs.secret /root/cephfs.secret
# pvesm add cephfs <name> \
--monhost "10.1.1.20 10.1.1.21 10.1.1.22" \
--content backup --keyring \
/root/cephfs.secret
/etc/pve/priv/ceph/<STORAGE_ID>.secret.
# ceph auth get-key client.userid > cephfs.secret
shared, который всегда установлен. Дополнительные параметры:
server — IP-адрес или DNS-имя сервера резервного копирования;
username — имя пользователя на сервере резервного копирования (например, root@pam, backup_u@pbs);
password — пароль пользователя. (сохраняется в /etc/pve/priv/storage/<STORAGE-ID>.pw, доступен только суперпользователю);
datastore — имя хранилища на сервере PBS;
fingerprint — отпечаток TLS-сертификата PBS. (обязателен при использовании самоподписанного сертификата). Отпечаток можно получить в веб-интерфейсе сервера резервного копирования или с помощью команды proxmox-backup-manager cert info;
encryption-key (опционально) — ключ для шифрования резервной копии. В настоящее время поддерживаются только те файлы, которые не защищены паролем (без функции получения ключа (kdf)). Сохраняется в /etc/pve/priv/storage/<STORAGE-ID>.enc, доступен только суперпользователю;
master-pubkey (опционально) — открытый ключ RSA для шифрования копии ключа шифрования (encryption-key). Зашифрованная копия будет добавлена к резервной копии и сохранена на сервере резервного копирования для целей восстановления.
/etc/pve/storage.cfg):
pbs: pbs_backup
datastore store2
server 192.168.0.123
content backup
fingerprint 42:5d:29:20:…:d1:be:bc:c0:c0:a9:9b:b1:a8:1b
prune-backups keep-all=1
username root@pam

# pvesm add pbs pbs_backup \
--server 192.168.0.123 \
--datastore store2 \
--username root@pam \
--fingerprint 42:5d:29:20:…:d1:be:bc:c0:c0:a9:9b:b1:a8:1b \
--password
encryption-key, либо через веб-интерфейс:



/etc/pve/priv/storage/<STORAGE-ID>.enc, который доступен только пользователю root.
Примечание
proxmox-backup-client key. Например, сгенерировать ключ:
# proxmox-backup-client key create --kdf none <path>
Сгенерировать мастер-ключ:
# proxmox-backup-client key create-master-key
Важно
Важно
Примечание
server — IP-адрес или DNS-имя ESXi-хоста;
username — имя администратора;
password — пароль администратора. (сохраняется в /etc/pve/priv/storage/<STORAGE-ID>.pw, доступно только суперпользователю);
skip-cert-verification — отключить проверку TLS-сертификата (использовать только в доверенных сетях).
/etc/pve/storage.cfg):
esxi: myESXi
server 192.168.0.130
username root
skip-cert-verification 1

# pvesm add esxi myESXi \
--server 192.168.0.130 \
--username root \
--skip-cert-verification 1 \
--password
Примечание
Примечание
systool из пакета sysfsutils.
# apt-get install sysfsutils
# systool -c fc_host -A port_name
Class = "fc_host"
Class Device = "host1"
port_name = "0x10000090fa59a61a"
Device = "host1"
Class Device = "host16"
port_name = "0x10000090fa59a61b"
Device = "host16"
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 59G 0 disk
sdb 8:16 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath
sdc 8:32 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath
sdd 8:48 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath
sde 8:64 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath
В этом примере один LUN объёмом ~931 ГБ доступен по четырём путям.
node.startup значение automatic. Значение по умолчанию для параметра node.session.timeo.replacement_timeout составляет 120 секунд. Рекомендуется использовать значение — 15 секунд.
/etc/iscsi/iscsid.conf (по умолчанию). Если iSCSI target уже подключен, то необходимо изменить настройки по умолчанию для конкретной цели в файле /etc/iscsi/nodes/<TARGET>/<PORTAL>/default.
#apt-get install open-iscsi#systemctl enable --now iscsid
/etc/iscsi/iscsid.conf:
node.startup = automatic node.session.timeo.replacement_timeout = 15
#iscsiadm -m discovery -t sendtargets -p <iscsi-target-1-ip>#iscsiadm -m discovery -t sendtargets -p <iscsi-target-2-ip>#iscsiadm -m node --login
/etc/iscsi/iscsid.conf:
node.startup = automatic
/var/lib/iscsi/send_targets/<TargetServer>,<Port>/st_config:
discovery.sendtargets.use_discoveryd = Yes
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 59G 0 disk
sdb 8:16 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath
sdc 8:32 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath
sdd 8:48 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath
sde 8:64 0 931,3G 0 disk
└─mpatha 253:0 0 931,3G 0 mpath
Примечание
iscsiadm:
# iscsiadm -m node --logout
# iscsiadm -m node --targetname "iscsi-target-1.test.alt:server.target1" --logout
# iscsiadm -m node -R
# iscsiadm -m session
# apt-get install multipath-tools
И запущена служба multipathd:
# systemctl enable --now multipathd && sleep 5; systemctl status multipathd
Примечание
multipath используется для обнаружения и объединения нескольких путей к устройствам.
multipath:
-l — показать текущую multipath-топологию, полученную из sysfs и устройства сопоставления устройств;
-ll — показать текущую multipath-топологию, собранную из sysfs, устройства сопоставления устройств и всех других доступных компонентов системы;
-f device — удалить указанное multipath-устройство;
-F — удалить все неиспользуемые multipath-устройства;
-w device — удалить WWID указанного устройства из файла wwids;
-W — сбросить файл wwids, чтобы включить только текущие многопутевые устройства;
-r — принудительная перезагрузка multipath-устройства.
# multipath -ll
mpatha (3600c0ff00014f56ee9f3cf6301000000) dm-0 HP,P2000 G3 FC
size=931G features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=50 status=active
| |- 1:0:0:1 sdb 8:16 active ready running
| `- 16:0:1:1 sde 8:64 active ready running
`-+- policy='service-time 0' prio=10 status=enabled
|- 1:0:1:1 sdc 8:32 active ready running
`- 16:0:0:1 sdd 8:48 active ready running
# multipath -v3
/etc/multipath.conf:
defaults {
find_multipaths yes
user_friendly_names yes
}
user_friendly_names установлено значение no, то для имени multipath-устройства задается значение World Wide Identifier (WWID). Имя устройства будет /dev/mapper/WWID и /dev/dm-X:
#Если для параметраls /dev/mapper/3600c0ff00014f56ee9f3cf6301000000 #lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 59G 0 disk sdb 8:16 0 931,3G 0 disk └─3600c0ff00014f56ee9f3cf6301000000 253:0 0 931,3G 0 mpath sdc 8:32 0 931,3G 0 disk └─3600c0ff00014f56ee9f3cf6301000000 253:0 0 931,3G 0 mpath sdd 8:48 0 931,3G 0 disk └─3600c0ff00014f56ee9f3cf6301000000 253:0 0 931,3G 0 mpath sde 8:64 0 931,3G 0 disk └─3600c0ff00014f56ee9f3cf6301000000 253:0 0 931,3G 0 mpath
user_friendly_names установлено значение yes, то для имени multipath-устройства задаётся алиас (псевдоним), в форме mpathХ. Имя устройства будет /dev/mapper/mpathХ и /dev/dm-X:
#Однако не гарантируется, что имя устройства будет одинаковым на всех узлах, использующих это multipath-устройство.ls /dev/mapper/mpatha #lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 59G 0 disk sdb 8:16 0 931,3G 0 disk └─mpatha 253:0 0 931,3G 0 mpath sdc 8:32 0 931,3G 0 disk └─mpatha 253:0 0 931,3G 0 mpath sdd 8:48 0 931,3G 0 disk └─mpatha 253:0 0 931,3G 0 mpath sde 8:64 0 931,3G 0 disk └─mpatha 253:0 0 931,3G 0 mpath
/dev/mapper/mpatha). Для этого в файл /etc/multipath.conf добавить секции:
blacklist {
wwid .*
}
blacklist_exceptions {
wwid "3600c0ff00014f56ee9f3cf6301000000"
}
Данная настройка предписывает внести в черный список любые найденные устройства хранения данных, за исключением нужного.
multipaths {
multipath {
wwid "3600c0ff00014f56ee9f3cf6301000000"
alias mpatha
}
}
В этом случае устройство всегда будет доступно только по имени /dev/mapper/mpatha. Вместо mpatha можно вписать любое желаемое имя устройства.
Примечание
# /lib/udev/scsi_id -g -u -d /dev/sdb
3600c0ff00014f56ee9f3cf6301000000
Для устройств в одном multipath WWID будут совпадать.
/etc/multipath.conf может также потребоваться внести рекомендованные производителем СХД параметры.
/etc/multipath.conf необходимо перезапустить службу multipathd для активации настроек:
# systemctl restart multipathd.service
Примечание
/etc/multipath.conf на наличие ошибок можно, выполнив команду:
# multipath -t

Примечание
Примечание
/etc/lvm/lvm.conf, например:
filter = [ "a|/dev/mapper/|", "a|/dev/sda.*|", "r|.*|" ]В данном примере принимаются только multipath-устройства и
/dev/sda.*, все остальные устройства отклоняются:
/dev/mapper;
/dev/sda;
# fdisk -l /dev/mapper/mpatha
Disk /dev/mapper/mpatha: 931.32 GiB, 999999995904 bytes, 1953124992 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 1048576 bytes
Disklabel type: dos
Disk identifier: 0x2221951e
Device Boot Start End Sectors Size Id Type
/dev/mapper/mpatha-part1 2048 1953124991 1953122944 931.3G 83 Linux
# pvcreate /dev/mapper/mpatha-part1
Physical volume "/dev/mapper/mpatha-part1" successfully created.
# vgcreate VG1 /dev/mapper/mpatha-part1
Volume group "VG1" successfully created
# pvs
PV VG Fmt Attr PSize PFree
/dev/mapper/mpatha-part1 VG1 lvm2 a-- 931.32g 931.32g
# pvesm lvmscan
VG1

# pvesm add lvm mpath-lvm --vgname VG1 --content images,rootdir

# pvs
PV VG Fmt Attr PSize PFree
/dev/mapper/mpatha-part1 VG1 lvm2 a-- 931.32g 931.32g
# vgs
VG #PV #LV #SN Attr VSize VFree
VG1 1 0 0 wz--n- 931.32g 931.32g
# lvcreate -L 100G -T -n vmstore VG1
Logical volume "vmstore" created.
# pvesm lvmthinscan VG1
vmstore

# pvesm add lvmthin mpath-lvmthin --thinpool vmstore --vgname VG1 --nodes pve01

# multipath -l
mpatha (3600c0ff00014f56ee9f3cf6301000000) dm-0 HP,P2000 G3 FC
size=465G features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=0 status=active
| |- 1:0:1:1 sdc 8:32 active undef running
| `- 16:0:1:1 sde 8:64 active undef running
`-+- policy='service-time 0' prio=0 status=enabled
|- 1:0:0:1 sdb 8:16 active undef running
`- 16:0:0:1 sdd 8:48 active undef running
# echo 1 > /sys/block/<path_device>/device/rescan
#echo 1 > /sys/block/sdb/device/rescan#echo 1 > /sys/block/sdc/device/rescan#echo 1 > /sys/block/sdd/device/rescan#echo 1 > /sys/block/sde/device/rescan
# dmesg -wHT

# multipathd -k"resize map 3600c0ff00014f56ee9f3cf6301000000"
где 3600c0ff00014f56ee9f3cf6301000000 — WWID multipath-устройства;
# pvresize /dev/mapper/mpatha
# resize2fs /dev/mapper/mpatha
Примечание
pveceph — инструмент для установки и управления службами Ceph на узлах PVE.
ls, find и т.д.) без создания избыточной нагрузки на кластер хранения.
Таблица 26.4. Системные требования к оборудованию для Ceph
|
Процесс
|
Критерий
|
Требования
|
|---|---|---|
|
Монитор Ceph
|
Процессор
|
2 ядра минимум, 4 рекомендуется
|
|
ОЗУ
|
5ГБ+ (большим/производственным кластерам нужно больше)
|
|
|
Жёсткий диск
|
100 ГБ на демон, рекомендуется SSD
|
|
|
Сеть
|
1 Гбит/с (рекомендуется 10+ Гбит/с)
|
|
|
Менеджер Ceph
|
Процессор
|
1 ядро
|
|
ОЗУ
|
1 ГБ
|
|
|
OSD Ceph
|
Процессор
|
|
|
ОЗУ
|
|
|
|
Жёсткий диск
|
1 SSD накопитель на демон
|
|
|
Сеть
|
1 Гбит/с (рекомендуется агрегированная сеть 10+ Гбит/с)
|
|
|
Сервер метаданных Ceph
|
Процессор
|
2 ядра
|
|
ОЗУ
|
2 ГБ+ (для производственных кластеров больше)
|
|
|
Жёсткий диск
|
1 ГБ на демон, рекомендуется SSD
|
|
|
Сеть
|
1 Гбит/с (рекомендуется 10+ Гбит/с)
|
|
Важно
Примечание


Примечание

# pveceph init --network 192.168.0.0/24
/etc/pve/ceph.conf с выделенной сетью для Ceph. Этот файл автоматически распространяется на все узлы PVE с помощью pmxcfs. Будет также создана символическая ссылка /etc/ceph/ceph.conf, указывающая на основной файл конфигурации, что позволяет выполнять команды Ceph без явного указания пути к конфигурации.
Примечание

# pveceph mon create
# pveceph mon destroy <mon_id>
Примечание
Примечание


# pveceph mgr create
# pveceph mgr destroy <mgr_id>
# ceph-volume lvm zap /dev/[X] --destroy
Предупреждение

# pveceph osd create /dev/[X]
-db_dev и -wal_dev:
# pveceph osd create /dev/[X] -db_dev /dev/[Y] -wal_dev /dev/[Z]
Если устройство для WAL не указано, журнал размещается вместе с DB.
-db_size и -wal_size. Если параметры не заданы, используются следующие значения (в указанном порядке):
Примечание

# ceph osd df tree
Пример вывода:
ID CLASS WEIGHT REWEIGHT AVAIL %USE VAR PGS STATUS TYPE NAME
-1 0.40585 - 415 GiB 0.07 1.00 - root default
-7 0.11279 - 115 GiB 0.06 0.91 - host pve01
3 ssd 0.11279 1.00000 115 GiB 0.06 0.91 65 up osd.3
-3 0.19537 - 200 GiB 0.07 1.03 - host pve02
0 ssd 0.09769 1.00000 100 GiB 0.08 1.11 31 up osd.0
2 ssd 0.09769 1.00000 100 GiB 0.06 0.94 34 up osd.2
-5 0.09769 - 100 GiB 0.07 1.05 - host pve03
1 ssd 0.09769 1.00000 100 GiB 0.07 1.05 65 up osd.1
TOTAL 415 GiB 0.07
MIN/MAX VAR: 0.91/1.11 STDDEV: 0.01
Примечание




# ceph osd out <ID>
Эта команда указывает Ceph не включать OSD в распределение данных.
# ceph osd ok-to-stop <ID>
# systemctl stop ceph-osd@<ID>.service
До этого момента данные не теряются.
# pveceph osd destroy <ID> [--cleanup]
Параметр --cleanup уничтожает таблицу разделов на диске.
Предупреждение
#ceph osd out 2marked out osd.2. #ceph osd ok-to-stop 2{"ok_to_stop":true,"osds":[2],"num_ok_pgs":0,"num_not_ok_pgs":0} #systemctl stop ceph-osd@2.service#pveceph osd destroy 2 --cleanupdestroy OSD osd.2 Remove osd.2 from the CRUSH map Remove the osd.2 authentication key. Remove OSD osd.2 …

pveceph pool create):
-size) — количество реплик на объект. Ceph всегда пытается поддерживать указанное количество копий каждого объекта (по умолчанию 3);
warn выводится предупреждение, если количество PG в пуле неоптимально (по умолчанию on);
-add_storages) — автоматическое создание хранилища. Доступно только при создании пула (по умолчанию true);
-min_size) — минимальное количество реплик, необходимое для записи. Ceph отклонит операции ввода-вывода, если в PG доступно меньше реплик, чем указано (по умолчанию 2);
-crush_rule) — правило размещения данных в кластере;
-pg_num) — начальное количество групп размещения (по умолчанию 128);
-target_size_ratio) — доля пула в общем объёме кластера. Автомасштабирование PG использует это соотношение относительно других пулов. Параметр имеет приоритет над целевым размером, если заданы оба;
-target_size) — ожидаемый объём данных пула (используется для автомасштабирования);
-pg_num_min) — минимальное число PG при автомасштабировании. Используется для задания нижней границы количества PG; autoscaler не будет объединять PG ниже этого значения.
Примечание
min_size=1, так как это приведёт к потере данных при отказе одного OSD.
# pveceph pool create <pool-name> -add_storages
size), тогда как в пулах EC данные разбиваются на k фрагментов данных и m фрагментов кодирования (проверки). Фрагменты кодирования используются для восстановления данных при утрате фрагментов данных.
m определяет, сколько OSD может выйти из строя без потери данных. Общее количество хранимых объектов равно k + m.
pveceph. При их планировании следует учитывать, что они работают иначе, чем реплицированные пулы.
min_size для EC-пула зависит от параметра m:
m = 1, min_size = k;
m > 1, min_size = k + 1.
min_size = k + 2.
min_size, все операции ввода-вывода в пуле будут заблокированы до восстановления достаточного количества доступных OSD.
Примечание
min_size, так как он определяет минимальное число доступных OSD, необходимое для работы пула.
k = 2, m = 1 → size = 3, min_size = 2 (выдерживает 1 отказ);
k = 2, m = 2 → size = 4, min_size = 3 (выдерживает 2 отказа).
# pveceph pool create <pool-name> --erasure-coding k=<integer> ,m=<integer> \
[,device-class=<class>] [,failure-domain=<domain>] [,profile=<profile>]
--add_storages 0. При ручной настройке хранилища необходимо задать параметр data-pool, чтобы EC-пул использовался для хранения.
Примечание
--size, --min_size и --crush_rule применяются только к пулу метаданных. Параметры size и crush_rule нельзя изменить для EC-пулов. Значение min_size для пула данных можно изменить после создания.
profile, например:
# pveceph pool create <pool-name> --erasure-coding profile=<profile-name>
# pvesm add rbd <storage-name> --pool <replicated-pool> --data-pool <ec-pool>
Примечание
keyring и monhost.

# pveceph pool destroy <name>
-cleanup, чтобы дополнительно уничтожить таблицу разделов):
# pveceph osd destroy <ID>
Чтобы также удалить связанное хранилище, следует указать параметр -remove_storages.
Примечание
Примечание
# ceph mgr module enable pg_autoscaler
Список загруженных модулей:
# ceph mgr module ls
warn — выводится предупреждение, если предлагаемое значение pg_num значительно отличается от текущего;
on — pg_num настраивается автоматически без ручного вмешательства;
off — автоматическая корректировка pg_num отключена, предупреждения не выводятся.
target_size, target_size_ratio и pg_num_min.
# ceph osd pool set <pool> pg_autoscale_mode on

# ceph osd crush tree --show-shadow
ID CLASS WEIGHT TYPE NAME
-6 nvme 0.09760 root default~nvme
-5 nvme 0 host pve01~nvme
-9 nvme 0.04880 host pve02~nvme
1 nvme 0.04880 osd.1
-12 nvme 0.04880 host pve03~nvme
2 nvme 0.04880 osd.2
-2 ssd 0.04880 root default~ssd
-4 ssd 0.04880 host pve01~ssd
0 ssd 0.04880 osd.0
-8 ssd 0 host pve02~ssd
-11 ssd 0 host pve03~ssd
-1 0.14639 root default
-3 0.04880 host pve01
0 ssd 0.04880 osd.0
-7 0.04880 host pve02
1 nvme 0.04880 osd.1
-10 0.04880 host pve03
2 nvme 0.04880 osd.2
# ceph osd crush rule create-replicated <rule-name> <root> <failure-domain> <class>
Где:
rule-name — имя правила;
root — корень дерева (значение default — корень Ceph);
failure-domain — домен отказа, на котором должны распределяться объекты (как правило, host);
class — класс устройств (например, nvme, ssd).
# ceph osd crush rule create-replicated my_rule default host nvme
# ceph osd crush rule dump
# ceph osd pool set <pool-name> crush_rule <rule-name>
Примечание
/etc/pve/priv/ceph/<storage_id>.keyring.
Примечание
hotstandby при создании сервера либо, после его создания, установив в соответствующем разделе MDS файла /etc/pve/ceph.conf параметр:
mds standby replay = trueЕсли этот параметр включён, указанный MDS будет находиться в состоянии warm standby, опрашивая активный сервер, что позволяет быстрее принять управление в случае сбоя.
Примечание

# pveceph mds create

# pveceph fs create --pg_num 128 --add-storage

Примечание
--add-storage (опция Добавить как хранилище) автоматически добавляет CephFS в конфигурацию хранилищ PVE.
Предупреждение
# umount /mnt/pve/<STORAGE-NAME>
где <STORAGE-NAME> — имя хранилища CephFS в PVE.
#pveceph stop --service mds.NAME#pveceph mds destroy NAME
# pveceph fs destroy NAME --remove-storages --remove-pools
Примечание
size=3, min_size=2) для восстановления требуется минимум 4 (домен отказа — хост).
# ceph osd out osd.<id>
# ceph osd safe-to-destroy osd.<id>
#systemctl stop ceph-osd@<id>.service#pveceph osd destroy <id>
# ceph crash archive-all
fstrim (discard) на ВМ и контейнерах. Это освобождает блоки данных, которые файловая система больше не использует, снижая нагрузку на ресурсы хранения.
Примечание
osd scrub begin hour = 2 osd scrub end hour = 6
#watch ceph -s# постоянный мониторинг (обновление каждые 2 сек) #ceph --watch# однократный вывод + поток событий
Примечание
# journalctl --since "2 days ago"
или в веб-интерфейсе: → ;
# ceph crash ls
# ceph crash info <ID_аварии>
# ceph crash archive-all
/var/log/ceph/. Уровень детализации журналов можно настроить в конфигурации Ceph.
Таблица 26.5. Возможные причины проблем
|
Категория
|
Примеры
|
|---|---|
|
Сетевые проблемы
|
Перегрузка сети, неисправный коммутатор, отключённый интерфейс, блокировка брандмауэром
|
|
Проблемы с дисками
|
Неисправные диски, ненадёжное подключение, недостаточная производительность (HDD, потребительские контроллеры)
|
|
Несоответствие рекомендациям
|
Нарушение требований к оборудованию или конфигурации Ceph
|
# ceph-volume lvm activate --all
Примечание
# ceph -s
noout, чтобы избежать ненужных операций восстановления при остановке и последующем запуске кластера:
# ceph osd set noout
Также флаг можно включить через веб-интерфейс ( → → ):

noout.
noout:
# ceph osd unset noout
Или через веб-интерфейс ( → → ).
pvesr.
Примечание

/etc/pve/datacenter.cfg, добавив параметр:
replication: network=10.10.10.150/24,type=secure
network указывается подсеть в формате CIDR. Параметр type=secure означает использование SSH-туннеля для передачи данных репликации.
Важно
pvesr.


# pvesr create-local-job 214-0 pve03 --schedule "*/10" --rate 10
# pvesr disable 214-0
# pvesr list
JobID Target Schedule Rate Enabled
213-0 local/pve02 */1:00 - yes
214-0 local/pve03 */10 10 no
# pvesr status
JobID Enabled Target LastSync NextSync Duration FailCount State
213-0 Yes local/pve02 2025-02-26_10:10:48 2025-02-26_11:00:00 2.455654 0 OK
# pvesr enable 214-0
# pvesr update 214-0 --schedule '*/1:00'
Примечание
# pvecm status
# pvecm expected 1
Примечание
#mv /etc/pve/nodes/pve02/qemu-server/100.conf /etc/pve/nodes/pve03/qemu-server/100.conf#mv /etc/pve/nodes/pve02/lxc/200.conf /etc/pve/nodes/pve03/lxc/200.conf
#qm start 100#pct start 200
Примечание
#apt-get install ifupdown2#systemctl disable network#systemctl mask network#systemctl enable networking.service#reboot
/etc/network/interfaces, в котором хранится конфигурация сети.

Примечание
/etc/network/interfaces см. в man interfaces(5)
Примечание
/etc/network/interfaces. Сначала они сохраняются во временный файл /etc/network/interfaces.new, что позволяет выполнить несколько связанных изменений одновременно. Такой подход также позволяет убедиться в корректности конфигурации, поскольку ошибочные сетевые настройки могут сделать узел недоступным.
interfaces.new будет перенесено в файл /etc/network/interfaces, а изменения будут применены без перезагрузки узла.
/etc/network/interfaces, применить их можно, выполнив команду:
# ifreload -a
systemd pvenetcommit активирует файл interfaces.new до запуска сетевой службы, которая затем применит конфигурацию.
Предупреждение
en для сетевых устройств Ethernet. Следующие символы зависят от драйвера устройства и того, какая схема именования применяется первой:

ovs_ports;
Важно

/etc/network/interfaces может выглядеть следующим образом:
auto lo
iface lo inet loopback
iface eno1 inet manual
iface enp0s20f0u1 inet manual
auto vmbr0
iface vmbr0 inet static
address 192.168.0.186/24
gateway 192.168.0.1
bridge-ports eno1
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes
bridge-vids 2-4094
dns-nameservers 8.8.8.8



Примечание

Таблица 28.1. Режимы агрегации Linux Bond
|
Режим
|
Название
|
Описание
|
Отказоустойчивость
|
Балансировка нагрузки
|
|---|---|---|---|---|
|
balance-rr или mode=0
|
Round-robin
|
Режим циклического выбора активного интерфейса для трафика. Пакеты последовательно передаются и принимаются через каждый интерфейс один за другим. Данный режим не требует применения специальных коммутаторов.
|
Да
|
Да
|
|
active-backup или mode=1
|
Active Backup
|
В этом режиме активен только один интерфейс, остальные находятся в режиме горячей замены. Если активный интерфейс выходит из строя, его заменяет резервный. MAC-адрес интерфейса виден извне только на одном сетевом адаптере, что предотвращает путаницу в сетевом коммутаторе. Это самый простой режим, работает с любым оборудованием, не требует применения специальных коммутаторов.
|
Да
|
Нет
|
|
balance-xor или mode=2
|
XOR
|
Один и тот же интерфейс работает с определённым получателем. Передача пакетов распределяется между интерфейсами на основе формулы ((MAC-адрес источника) XOR (MAC-адрес получателя)) % число интерфейсов. Режим не требует применения специальных коммутаторов. Этот режим обеспечивает балансировку нагрузки и отказоустойчивость.
|
Да
|
Да
|
|
broadcast или mode=3
|
Широковещательный
|
Трафик идёт через все интерфейсы одновременно.
|
Да
|
Нет
|
|
LACP (802.3ad) или mode=4
|
Агрегирование каналов по стандарту IEEE 802.3ad
|
В группу объединяются одинаковые по скорости и режиму интерфейсы. Все физические интерфейсы используются одновременно в соответствии со спецификацией IEEE 802.3ad. Для реализации этого режима необходима поддержка на уровне драйверов сетевых карт и коммутатор, поддерживающий стандарт IEEE 802.3ad (коммутатор требует отдельной настройки).
|
Да
|
Да
|
|
balance-tlb или mode=5
|
Адаптивная балансировка нагрузки при передаче
|
Исходящий трафик распределяется в соответствии с текущей нагрузкой (с учетом скорости) на интерфейсах (для данного режима необходима его поддержка в драйверах сетевых карт). Входящие пакеты принимаются только активным сетевым интерфейсом.
|
Да
|
Да (исходящий трафик)
|
|
balance-alb или mode=6
|
Адаптивная балансировка нагрузки
|
Включает в себя балансировку исходящего трафика, плюс балансировку на приём (rlb) для IPv4 трафика и не требует применения специальных коммутаторов (балансировка на приём достигается на уровне протокола ARP, перехватом ARP ответов локальной системы и перезаписью физического адреса на адрес одного из сетевых интерфейсов, в зависимости от загрузки).
|
Да
|
Да
|
xmit_hash_policy).
Таблица 28.2. Режимы выбора каналов при организации балансировки нагрузки
|
Режим
|
Описание
|
|---|---|
|
layer2
|
Канал для отправки пакета однозначно определяется комбинацией MAC-адреса источника и MAC-адреса назначения. Весь трафик между определённой парой узлов всегда идёт по определённому каналу. Алгоритм совместим с IEEE 802.3ad. Этот режим используется по умолчанию.
|
|
layer2+3
|
Канал для отправки пакета определяется по совокупности MAC- и IP-адресов источника и назначения. Трафик между определённой парой IP-хостов всегда идёт по определённому каналу (обеспечивается более равномерная балансировка трафика, особенно в случае, когда большая его часть передаётся через промежуточные маршрутизаторы). Для протоколов сетевого уровня, отличных от IP, данный алгоритм равносилен layer2. Алгоритм совместим с IEEE 802.3ad.
|
|
layer3+4
|
Канал для отправки пакета определяется по совокупности IP-адресов и номеров портов источника и назначения (трафик определённого узла может распределяться между несколькими каналами, но пакеты одного и того же TCP/UDP-соединения всегда передаются по одному и тому же каналу). Для фрагментированных пакетов TCP и UDP, а также для всех прочих протоколов 4 уровня, учитываются только IP-адреса. Для протоколов 3 уровня, отличных от IP, данный алгоритм равносилен layer2. Алгоритм не полностью совместим с IEEE 802.3ad.
|
Таблица 28.3. Параметры OVS Bond
|
Параметр
|
Описание
|
|---|---|
|
bond_mode=active-backup
|
Обеспечивает переключение между активным и резервным интерфейсами: при отказе активного соединения резервный сетевой интерфейс начинает передавать и принимать сетевой трафик. Физическому коммутатору представляется только один MAC-адрес. Режим не требует специальной поддержки или настройки коммутатора и позволяет подключать каналы к разным коммутаторам. Балансировка нагрузки в этом режиме не выполняется
|
|
bond_mode=balance-slb
|
Распределяет потоки трафика на основе MAC-адреса источника и выходного идентификатора VLAN, периодически перераспределяя их при изменении характера трафика. Режим balance-slb обеспечивает ограниченную балансировку нагрузки без необходимости поддержки или участия удалённого коммутатора. Параметр
bond-rebalance-interval определяет, как часто OVS должен выполнять измерение нагрузки трафика
|
|
bond_mode=balance-tcp
|
Обеспечивает балансировку нагрузки с учётом данных уровней 2–4 модели OSI, например MAC-адреса назначения, IP-адреса и TCP-порта. Кроме того, для работы balance-tcp необходимо настроить протокол LACP на коммутаторе. Этот режим аналогичен режиму mode=4 Linux Bond. По возможности рекомендуется использовать balance-tcp, поскольку LACP обеспечивает наиболее надёжное обнаружение отказов каналов связи и предоставляет дополнительные диагностические сведения об агрегированном интерфейсе.
|
|
lacp=[active|passive|off]
|
Управляет поведением протокола управления агрегацией каналов (LACP). На коммутаторе должен быть настроен протокол LACP. Если коммутатор не поддерживает LACP, необходимо использовать
bond_mode=balance-slb или bond_mode=active-backup.
|
|
other-config:lacp-fallback-ab=true
|
Позволяет использовать режим
bond_mode=active-backup в качестве резервного, если коммутатор временно не поддерживает LACP
|
|
other_config:lacp-time=[fast|slow]
|
Управляет частотой отправки LACP-пакетов (heartbeat): каждую секунду (fast) или каждые 30 секунд (slow). По умолчанию slow
|
|
other_config:bond-detect-mode=[miimon|carrier]
|
Режим обнаружения состояния канала связи: проверка с помощью механизма miimon (периодической проверки состояния канала) или мониторинг несущего сигнала (carrier)
|
|
other_config:bond-miimon-interval=100
|
Если используется miimon, задаёт интервал проверки состояния канала связи в миллисекундах
|
|
other_config:bond_updelay=1000
|
Время в миллисекундах, в течение которого канал связи должен оставаться активным, прежде чем он будет задействован. Параметр позволяет предотвратить частые переключения состояния канала
|
|
other_config:bond-rebalance-interval=10000
|
Интервал в миллисекундах между перераспределениями потоков трафика между физическими интерфейсами, входящими в состав агрегированного интерфейса (bond). Значение 0 отключает перераспределение. По умолчанию 10 секунд
|



Примечание

/etc/network/interfaces:
auto lo
iface lo inet loopback
iface enp0s3 inet manual
auto enp0s9
iface enp0s9 inet manual
auto enp0s8
iface enp0s8 inet manual
auto bond0
iface bond0 inet static
address 192.168.200.20/24
bond-slaves enp0s8 enp0s9
bond-miimon 100
bond-mode balance-rr
auto vmbr0
iface vmbr0 inet static
address 192.168.0.90/24
gateway 192.168.0.1
bridge-ports enp0s3
bridge-stp off
bridge-fd 0
dns-nameservers 8.8.8.8




Примечание
bond0 и нажать кнопку :


/etc/network/interfaces:
auto lo
iface lo inet loopback
auto enp0s3
iface enp0s3 inet manual
auto enp0s9
iface enp0s9 inet manual
auto enp0s8
iface enp0s8 inet manual
auto bond0
iface bond0 inet manual
bond-slaves enp0s3 enp0s8
bond-miimon 100
bond-mode 802.3ad
bond-xmit-hash-policy layer2+3
auto vmbr0
iface vmbr0 inet static
address 192.168.0.90/24
gateway 192.168.0.1
bridge-ports bond0
bridge-stp off
bridge-fd 0
dns-nameservers 8.8.8.8




/etc/network/interfaces:
auto lo
iface lo inet loopback
auto enp0s3
iface enp0s3 inet manual
auto enp0s9
iface enp0s9 inet manual
auto enp0s8
iface enp0s8 inet manual
auto bond0
iface bond0 inet manual
ovs_bonds enp0s3 enp0s8
ovs_type OVSBond
ovs_bridge vmbr0
ovs_options bond_mode=balance-slb
auto vmbr0
iface vmbr0 inet static
address 192.168.0.90/24
gateway 192.168.0.1
ovs_type OVSBridge
ovs_ports bond0
# ovs-vsctl show
20dc0ada-cbb5-4518-a437-0bd6909d088a
Bridge vmbr0
Port vmbr0
Interface vmbr0
type: internal
Port bond0
Interface enp0s3
Interface enp0s8
ovs_version: "3.3.2"
Примечание







/etc/network/interfaces:
auto lo
iface lo inet loopback
iface enp0s3 inet manual
auto enp0s9
iface enp0s9 inet manual
iface enp0s8 inet manual
auto enp0s8.100
iface enp0s8.100 inet manual
auto vmbr0
iface vmbr0 inet static
address 192.168.0.90/24
gateway 192.168.0.1
bridge-ports enp0s3
bridge-stp off
bridge-fd 0
dns-nameservers 8.8.8.8
auto vmbr1
iface vmbr1 inet static
address 10.10.10.2/24
bridge-ports enp0s8.100
bridge-stp off
bridge-fd 0

Таблица 29.1. Каталоги локальных хранилищ
|
Хранилище
|
Каталог
|
Содержимое
|
|---|---|---|
|
local
|
/var/lib/vz/template/iso/
|
ISO-образы
|
|
local
|
/var/lib/vz/template/cache/
|
Шаблоны контейнеров LXC
|
|
local-btrfs
|
/var/lib/pve/local-btrfs/template/iso/
|
ISO-образы
|
|
local-btrfs
|
/var/lib/pve/local-btrfs/template/cache/
|
Шаблоны контейнеров LXC
|
Таблица 29.2. Каталоги общих хранилищ
|
Каталог
|
Содержимое
|
|---|---|
/mnt/pve/<storage_name>/template/iso/
|
ISO-образы
|
/mnt/pve/<storage_name>/template/cache/
|
Шаблоны контейнеров LXC
|
Примечание


Примечание


Примечание
# pveam update


# pveam update
update successful
# pveam available
mail proxmox-mail-gateway-8.2-standard_8.2-1_amd64.tar.zst
mail proxmox-mail-gateway-9.1-standard_9.1-1_amd64.tar.zst
system almalinux-10-default_20250930_amd64.tar.xz
system almalinux-9-default_20240911_amd64.tar.xz
system alpine-3.22-default_20250617_amd64.tar.xz
…
Примечание
--section. Например, для просмотра базовых шаблонов операционных систем выполните команду:
# pveam available --section system
system almalinux-10-default_20250930_amd64.tar.xz
system almalinux-9-default_20240911_amd64.tar.xz
system alpine-3.22-default_20250617_amd64.tar.xz
system centos-9-stream-default_20240828_amd64.tar.xz
system debian-12-standard_12.12-1_amd64.tar.zst
…
# pveam download local almalinux-9-default_20240911_amd64.tar.xz
# pveam list local
NAME SIZE
local:vztmpl/almalinux-9-default_20240911_amd64.tar.xz 99.60MB


Примечание


Примечание

Примечание




Примечание

Примечание
Примечание




Примечание

Примечание
host — модель, максимально соответствующая физическому процессору хоста. Позволяет предоставить гостевой ОС доступ к поддерживаемым хостом возможностям CPU, но может ограничить live-миграцию между хостами с различающимися процессорами;
x86-64-v2-AES (по умолчанию) — модель из семейства x86-64-vX с набором инструкций уровня v2 и поддержкой AES. Требует CPU Intel не ниже Westmere или AMD не ниже Opteron_G4;
kvm64 — устаревшая универсальная модель процессора с ограниченным набором инструкций. Может использоваться для совместимости, но не предоставляет гостевой ОС многие современные возможности CPU.
Примечание


/etc/pve/virtual-guest/cpu-models.conf. Управлять ими можно также через интерфейс командной строки. Подробнее о формате файла см. в файле /usr/share/pve-doc-generator/cpu-models.conf.adoc.
/mapping/cpu/<имя>. Привилегия Mapping.Audit позволяет просматривать модель в списках, Mapping.Modify — создавать, изменять и удалять модели через веб-интерфейс, а Mapping.Use — назначать модель ВМ.

cpulimit) задаёт максимальное суммарное потребление CPU-времени ВМ в единицах, соответствующих загрузке одного логического процессора:
Примечание
cpulimit=4.0 при полной загрузке получит максимум 50 % времени каждого физического ядра (эквивалент четырёх полностью загруженных ядер). Если активно используются только 4 vCPU, они могут работать на 100 %.
cpulimit, равный количеству vCPU.
cpuunits, по умолчанию — 100) задаёт относительный вес ВМ при распределении CPU-времени между ВМ, конкурирующими за ресурсы хоста. Чем выше значение, тем большую долю доступного CPU-времени может получить ВМ при прочих равных условиях. Например, если у ВМ A значение cpuunits=100, а у ВМ B — cpuunits=200, то при одинаковых условиях конкуренции ВМ B может получить примерно вдвое большую долю CPU-времени, чем ВМ A. Фактическое распределение зависит от нагрузки и настроек планировщика. Подробнее см. man systemd.resource-control (параметр CPUWeight соответствует cpuunits).
affinity) ограничить выполнение процессов ВМ указанными логическими CPU хоста. Значение задаётся в виде списка CPU (например, 0-1,8-11).
Примечание
Таблица 30.1. Дополнительные флаги ЦП
|
Флаг
|
Описание
|
Примечание
|
|---|---|---|
|
nested-virt
|
Управление вложенной виртуализацией: svm для AMD и vmx для Intel
|
Требует включения в BIOS/UEFI. Live-миграция возможна только при совпадении флага на обоих хостах. Рекомендуется использовать модель CPU того же производителя, что и хост (не x86-64-vX)
|
|
md-clear
|
Сообщает гостевой ОС о доступности механизма очистки буферов, используемого для смягчения MDS (Microarchitectural Data Sampling)
|
Используется современными механизмами смягчения MDS-уязвимостей
|
|
pcid
|
Снижает накладные расходы исправления Meltdown (KPTI) на CPU Intel Westmere, Sandy Bridge и Ivy Bridge
|
Актуально только для указанных поколений Intel
|
|
spec-ctrl
|
Включает расширенные механизмы защиты от Spectre v1/v2 на процессорах Intel
|
Улучшает эффективность mitigation Spectre v1/v2
|
|
ssbd
|
Защита от уязвимости Speculative Store Bypass (Spectre v4) для Intel
|
Требуется поддержка со стороны CPU и ОС
|
|
ibpb
|
Механизм защиты, связанный с Spectre v1/v2 в соответствующих сценариях
|
Обычно используется совместно с amd-ssbd
|
|
amd-ssbd
|
Оптимизированная защита от Spectre v4 на AMD
|
Рекомендуется включать вместе с virt-ssbd
|
|
amd-no-ssb
|
Указывает гостевой ОС, что хост не уязвим к Spectre v4 (AMD)
|
Используется для отключения лишних mitigations внутри гостя
|
|
pdpe1gb
|
Разрешает гостевой ОС использовать страницы памяти размером 1 ГБ (если поддерживается аппаратно)
|
Улучшает производительность при работе с большими объёмами RAM
|
|
hv-tlbflush
|
Улучшает производительность Windows-гостей при избыточном выделении CPU (overcommit)
|
На старых CPU может вызывать BSOD
|
|
hv-evmcs
|
Повышает производительность вложенной виртуализации в Windows-гостях
|
Поддерживается только на процессорах Intel
|
|
aes
|
Включает набор инструкций AES для аппаратного ускорения шифрования
|
Рекомендуется для ВМ, использующих шифрование (VPN, TLS, дисковое шифрование)
|
Примечание
pcid — снижает накладные расходы KPTI (Meltdown);
spec-ctrl — защита от Spectre v1/v2;
ssbd — защита от Spectre v4.
ibpb — защита от Spectre v1/v2;
virt-ssbd, amd-ssbd — защита от Spectre v4;
amd-no-ssb — указывает, что CPU не уязвим к Spectre v4.
Примечание
host флаги virt-ssbd и amd-no-ssb не включаются автоматически — при необходимости их следует добавить вручную.
Примечание
$ for f in /sys/devices/system/cpu/vulnerabilities/*; do echo "${f##*/} -" $(cat "$f"); done
Примечание
cores × socketsПараметр
vcpus задаёт начальное количество активных виртуальных процессоров.
# /etc/udev/rules.d/99-hotplug-cpu.rules
SUBSYSTEM=="cpu", ACTION=="add", TEST=="online", ATTR{online}=="0", ATTR{online}="1"
Примечание

balloon: 0

Примечание
32 × 0,8 − 16 = 9,6 ГБПараметры:
Примечание

Примечание
Таблица 30.2. Модель сетевого интерфейса
|
Тип
|
Описание
|
Рекомендации
|
|---|---|---|
|
Intel E1000
|
Эмулируемый сетевой адаптер Intel Gigabit Ethernet
|
Может использоваться для совместимости с гостевыми ОС, не поддерживающими VirtIO
|
|
Intel E1000E
|
Эмулируемый сетевой адаптер Intel Gigabit Ethernet
|
Может использоваться, если требуется совместимость с соответствующей моделью адаптера
|
|
VirtIO
|
Паравиртуализированный сетевой адаптер
|
Рекомендуется для высокой производительности. Требуется поддержка VirtIO в гостевой ОС
|
|
Realtek RTL8139
|
Эмулируемый сетевой адаптер Fast Ethernet со скоростью до 100 Мбит/с
|
Может использоваться для совместимости со старыми гостевыми ОС
|
|
VMware vmxnet3
|
Паравиртуализированный сетевой адаптер VMware
|
Может использоваться при импорте ВМ из VMware при наличии поддержки драйвера в гостевой ОС
|
# ethtool -L ens1 combined <число_vCPU>
Важно





Примечание
# qm set <vmid> -onboot 1

Примечание


Примечание

qmqm — это инструмент для управления ВМ на базе Qemu/KVM в PVE. С её помощью можно:
qm <КОМАНДА> [АРГУМЕНТЫ] [ОПЦИИ]Получить список доступных команд можно, выполнив команду:
# qm help
qm.
Примечание
vmid — идентификатор ВМ, который может принимать значение из диапазона 100 — 999999999.
Таблица 30.3. Команды qm
|
Команда
|
Описание
|
|---|---|
qm agent
|
Псевдоним для
qm guest cmd
|
qm block <vmid>
|
Заблокировать ВМ.
|
qm cleanup <vmid> <clean-shutdown> <guest-requested>
|
Очистить ресурсы ВМ, например виртуальные сетевые устройства TAP и vGPU. Команда вызывается после завершения работы или аварийного завершения ВМ.
|
qm clone <vmid> <newid> [ОПЦИИ]
|
Создать копию ВМ/шаблона.
|
qm cloudinit dump <vmid> <type>
|
Получить автоматически сгенерированную конфигурацию cloud-init.
|
qm cloudinit pending <vmid>
|
Получить конфигурацию cloud-init с текущими и ожидающими значениями.
|
qm cloudinit update <vmid>
|
Восстановить и изменить диск конфигурации cloud-init.
|
qm config <vmid> <ОПЦИИ>
|
Вывести конфигурацию ВМ с применёнными ожидающими изменениями конфигурации. Для вывода текущей конфигурации следует указать параметр
current.
|
qm create <vmid> <ОПЦИИ>
|
Создать или восстановить ВМ.
Некоторые опции:
|
qm delsnapshot <vmid> <snapname> <ОПЦИИ>
|
Удалить снимок ВМ.
|
qm destroy <vmid> [ОПЦИИ]
|
Уничтожить ВМ и все её тома (будут удалены все разрешения, специфичные для ВМ).
|
qm disk import <vmid> <source> <storage> [ОПЦИИ]
|
Импортировать образ внешнего диска в неиспользуемый диск ВМ. Формат образа должен поддерживаться утилитой qemu-img.
|
qm disk move <vmid> <disk> <storage> [ОПЦИИ]
|
Переместить том в другое хранилище или в другую ВМ.
|
qm disk rescan [ОПЦИИ]
|
Пересканировать все хранилища и обновить размеры дисков и неиспользуемые образы дисков.
|
qm disk resize <vmid> <disk> <size> [ОПЦИИ]
|
Увеличить размер диска.
|
qm disk unlink <vmid> --idlist <строка> [ОПЦИИ]
|
Отсоединить/удалить образы дисков.
|
qm guest cmd <vmid> <команда>
|
Выполнить команды гостевого агента QEMU.
|
qm guest exec <vmid> [<extra-args>] [ОПЦИИ]
|
Выполнить данную команду через гостевой агент.
|
qm guest exec-status <vmid> <pid>
|
Получить статус данного pid, запущенного гостевым агентом.
|
qm guest passwd <vmid> <username> [ОПЦИИ]
|
Установить пароль для данного пользователя.
|
qm help [extra-args] [ОПЦИИ]
|
Показать справку по указанной команде.
|
qm import <vmid> <source> --storage <строка> [ОПЦИИ]
|
Импортировать ВМ из поддерживаемого источника импорта, например, хранилища ESXi. Опции см. команду
qm create
|
qm importdisk
|
Псевдоним для
qm disk import.
|
qm importovf <vmid> <manifest> <storage> [ОПЦИИ]
|
Создать новую ВМ, используя параметры, считанные из манифеста OVF.
|
qm list [ОПЦИИ]
|
Вывести список ВМ узла.
|
qm listsnapshot <vmid>
|
Вывести список снимков ВМ.
|
qm migrate <vmid> <target> [ОПЦИИ]
|
Перенести ВМ на целевой узел. Создаётся задача миграции.
|
qm monitor <vmid>
|
Войти в интерфейс монитора QEMU.
|
qm move-disk
|
Псевдоним для
qm disk move.
|
qm move_disk
|
Псевдоним для
qm disk move.
|
qm nbdstop <vmid>
|
Остановить встроенный сервер NBD.
|
qm pending <vmid>
|
Получить конфигурацию ВМ с текущими и ожидающими значениями.
|
qm reboot <vmid> [ОПЦИИ]
|
Перезагрузить ВМ. Применяет ожидающие изменения.
|
qm remote-migrate <vmid> [<target-vmid>] <target-endpoint> --target-bridge <строка> --target-storage <строка> [ОПЦИИ]
|
Перенести ВМ в удалённый кластер. Создаёт новую задачу миграции. ЭКСПЕРИМЕНТАЛЬНАЯ функция!
|
qm rescan
|
Псевдоним для
qm disk rescan.
|
qm reset <vmid> [ОПЦИИ]
|
Сбросить ВМ.
|
qm resize
|
Псевдоним для
qm disk resize.
|
qm resume <vmid> [ОПЦИИ]
|
Возобновить работу ВМ.
|
qm rollback <vmid> <snapname> [ОПЦИИ]
|
Откатить состояние ВМ до указанного снимка.
|
qm sendkey <vmid> <ключ> [ОПЦИИ]
|
Послать нажатия клавиш на ВМ.
|
qm set <vmid> [ОПЦИИ]
|
Установить параметры ВМ.
Некоторые опции:
|
qm showcmd <vmid> [ОПЦИИ]
|
Показать командную строку, которая используется для запуска ВМ (информация для отладки).
|
qm shutdown <vmid> [ОПЦИИ]
|
Выключить ВМ, отправив гостевой ОС событие ACPI. ОС должна обработать это событие и корректно завершить работу.
|
qm snapshot <vmid> <snapname> [ОПЦИИ]
|
Сделать снимок ВМ.
|
qm start <vmid> [ОПЦИИ]
|
Запустить ВМ.
|
qm status <vmid> [ОПЦИИ]
|
Показать статус ВМ.
|
qm stop <vmid> [ОПЦИИ]
|
Остановить ВМ (аналогично отключению питания работающего компьютера). Процесс QEMU немедленно завершается.
|
qm suspend <vmid> [ОПЦИИ]
|
Приостановить ВМ.
|
qm template <vmid> [ОПЦИИ]
|
Создать шаблон.
|
qm terminal <vmid> [ОПЦИИ]
|
Открыть терминал с помощью последовательного устройства (на ВМ должно быть настроено последовательное устройство, например, serial0: socket).
|
qm unlink
|
Псевдоним для
qm disk unlink.
|
qm unlock <vmid>
|
Разблокировать ВМ.
|
qm vncproxy <vmid>
|
Проксировать VNC-трафик ВМ на стандартный ввод/вывод.
|
qm wait <vmid> [ОПЦИИ]
|
Подождать, пока ВМ не будет остановлена.
|
qm:
# qm create 109 -ide0 local-lvm:21 -net0 e1000 -cdrom nfs-storage:iso/alt-server-11.0-x86_64.iso
# qm start 109
# qm shutdown 109 && qm wait 109
# qm sendkey 109 ctrl-shift
#qm monitor 109qm>help
Примечание
quit или последовательно нажать CTRL+O и CTRL+C.
/var/lib/vz/snippets), а для хранилища local-btrfs — /var/lib/pve/local-btrfs/snippets. Затем укажите скрипт в конфигурации ВМ или контейнера.
Примечание
hookscript:
#где <script_file> — исполняемый файл сценария.qm set <vmid> --hookscript <storage>:snippets/<script_file>#pct set <vmid> --hookscript <storage>:snippets/<script_file>
# qm set 103 --hookscript snippet:snippets/guest-hookscript.pl
update VM 103: -hookscript snippet:snippets/guest-hookscript.pl
Примечание


guest-hookscript.pl):
#!/usr/bin/perl
# Example hookscript for PVE guests
use strict;
use warnings;
print "GUEST HOOK: " . join(' ', @ARGV). "\n";
# Первый аргумент — VMID
my $vmid = shift;
# Второй аргумент — этап выполнения
my $phase = shift;
if ($phase eq 'pre-start') {
# Первый этап 'pre-start' перед запуском ВМ
# Выход с code != 0 отменит запуск ВМ
print "$vmid is starting, doing preparations.\n";
# print "preparations failed, aborting."
# exit(1);
} elsif ($phase eq 'post-start') {
# Второй этап 'post-start' выполняется после успешного
# запуска ВМ
system("/root/date.sh $vmid");
print "$vmid started successfully.\n";
} elsif ($phase eq 'pre-stop') {
# Третий этап 'pre-stop' выполняется перед остановкой ВМ через API.
# Не вызывается, если ВМ выключена изнутри,
# например, с помощью 'poweroff'
print "$vmid will be stopped.\n";
} elsif ($phase eq 'post-stop') {
# Последний этап 'post-stop' выполняется после остановки ВМ,
# в том числе после аварийной остановки.
print "$vmid stopped. Doing cleanup.\n";
} else {
die "got unknown phase '$phase'\n";
}
exit(0);
/root/date.sh, передавая VMID отдельным аргументом. Скрипт должен существовать и быть доступен для выполнения от имени пользователя, запускающего сценарий перехвата.

#!/bin/bash if [ $2 == "pre-start" ] then echo "Запуск ВМ $1" >> /root/test.txt date >> /root/test.txt fiВ этом примере $1 — VMID, а $2 — этап выполнения сценария. При запуске ВМ на этапе pre-start скрипт записывает сообщение и дату в файл
/root/test.txt.


/etc/pve/qemu-server/<VMID>.conf необходимо добавить строку с указанием номера дисплея VNC (в примере — 55):
args: -vnc 0.0.0.0:55
args: -vnc 0.0.0.0:55,password=on
set_password vnc newvnc -d vnc2
В этом примере при подключении будет запрашиваться пароль: newvnc. Максимальная длина пароля VNC: 8 символов. После перезапуска ВМ пароль необходимо установить повторно.
Примечание

Примечание

qemu-img предназначена для управления образами дисков QEMU. Она позволяет:
qemu-img:
test.vmdk в формат QCOW2:
# qemu-img convert -f vmdk test.vmdk -O qcow2 test.qcow2
test.raw в формате RAW размером 40 ГиБ:
# qemu-img create -f raw test.raw 40G
test.raw до 80 ГиБ:
# qemu-img resize -f raw test.raw 80G
# qemu-img info test.raw





Примечание

# qm resize <vm_id> <virtual_disk> [+]<size>
Примечание
# qm resize 100 scsi1 80G
# qm resize 100 scsi1 +10G

# qm move-disk <vm_id> <virtual_disk> <storage>

# qm move-disk <vm_id> <virtual_disk> --target-vmid <vm_id> --target-disk <virtual_disk>
# qm move-disk 107 scsi0 --target-vmid 10007 --target-disk scsi1

Примечание
Примечание
remote-viewer из пакета virt-viewer).

# qm set VMID -spice_enhancements foldersharing=1,videostreaming=all
Примечание
http://localhost:9843.
Примечание

Примечание
dav://localhost:9843/).
videostreaming доступны следующие значения:




lsusb).

lsusb -t).
# qm set 100 --usb3 spice
update VM 100: -usb3 spice
# qm set 100 --usb4 host=346d:5678
update VM 100: -usb4 host=346d:5678
Примечание

Примечание
info usb — информация об USB-устройствах, подключённых к гостевой системе;
info usbhost — информация об USB-устройствах, обнаруженных на хосте.

Предупреждение
host=VID:PID или host=bus:port привязывает устройство к текущему хосту и не позволяет выполнять онлайн-миграцию ВМ на другой узел с этим устройством. Для миграции необходимо учитывать доступность подходящего устройства на целевом узле и ограничения PVE.



# qm set <vm_id> -efidisk0 <storage>:1,format=<format>,efitype=4m,pre-enrolled-keys=1
где:
efitype — тип (размер) EFI-диска. Для новых ВМ рекомендуется использовать значение 4m (значение по умолчанию в графическом интерфейсе);
pre-enrolled-keys — определяет, добавляются ли в EFI-диск предварительно зарегистрированные ключи Secure Boot. При значении 1 используются предварительно зарегистрированные ключи, включая стандартные ключи Microsoft.

Примечание
# qm set <vm_id> -tpmstate0 [file=]<volume>[,format=<raw|qcow2|vmdk>][,import-from=<source volume>][,size=<размер диска>][,version=<v1.2|v2.0>]
где:
# qm set 104 --tpmstate0 nfs-storage:1,format=qcow2,version=v2.0
import-from:
# qm set 104 --tpmstate0 local:0,import-from=local:existing-tpm-state
Примечание
Примечание
Примечание
Примечание
intel_iommu=on. Для процессоров AMD поддержка IOMMU обычно включается автоматически.
/etc/modules):
vfio vfio_iommu_type1 vfio_pci vfio_virqfd
# dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
/etc/modprobe.d/vfio.conf строку:
options vfio-pci ids=1234:5678,4321:8765где 1234:5678 и 4321:8765 — идентификаторы производителя (vendor ID) и устройства (device ID).
# lspci -nn
/etc/modprobe.d/blacklist.conf добавляют строку:
blacklist DRIVERNAME

# qm set VMID -hostpci0 00:02.0
vendor-id, device-id, sub-vendor-id и sub-device-id. Эти параметры не изменяют фактические идентификаторы физического устройства на хосте. Например:
# qm set VMID -hostpci0 02:00,device-id=0x10f6,sub-vendor-id=0x0000



в строке сопоставления:


# pvesh create /cluster/mapping/<тип> <опции>
где:
# pvesh create /cluster/mapping/pci --id device \
--map node=pve01,path=0000:01:00.0,id=0002:0001 \
--map node=pve02,path=0000:02:00.0,id=0002:0001
Параметр map указывается для каждого узла, на котором должно быть доступно соответствующее устройство.
Примечание
# qm set <vmid> -hostpci0 <сопоставление>
# qm set <vmid> -usb0 <сопоставление>
Mapping.Modify на /mapping/<тип>/<сопоставление> (где <тип> — тип устройства, <сопоставление> — имя сопоставления). Для использования сопоставлений требуется привилегия Mapping.Use на /mapping/<тип>/<сопоставление>, а также необходимые привилегии для изменения конфигурации ВМ.
# apt-get install virtiofsd
Примечание


Примечание
в строке соответствующего сопоставления:

# pvesh create /cluster/mapping/dir --id sharedir \
--map node=pve01,path=/mnt/share \
--map node=pve02,path=/backup/share \
--map node=pve03,path=/mnt/share


#qm set 100 --virtiofs1 dirid=sharedir,cache=auto,expose-acl=1#qm set 101 --virtiofs0 dirid=media,cache=always
# mount -t virtiofs <dirid> <точка монтирования>
Например:
# mount -t virtiofs sharedir /mnt/pve_share
/etc/fstab:
<dirid> <точка монтирования> virtiofs rw,relatime 0 0
# apt-get install qemu-guest-agent
# systemctl enable --now qemu-guest-agent

# qm set <vmid> --agent 1
/var/run/qemu-server/<my_vmid>.qga. Проверить доступность агента можно командой:
# qm agent <vmid> ping
Если агент корректно установлен и запущен в ВМ, вывод команды будет пустой.
/etc/pve/qemu-server/. Имя файла соответствует идентификатору ВМ: <VMID>.conf. Файлы доступны на всех узлах кластера благодаря механизму репликации конфигурации в кластерной файловой системе.
Примечание
boot: order=scsi0;net0 cores: 1 cpu: x86-64-v2-AES efidisk0: local-lvm:vm-100-disk-2,efitype=4m,pre-enrolled-keys=1,size=4M memory: 2048 meta: creation-qemu=9.1.2,ctime=1746532273 name: NewVM net0: virtio=BC:24:11:40:5F:C3,bridge=vmbr0,firewall=1 numa: 0 ostype: l26 scsi0: local-lvm:vm-100-disk-0,size=52G scsihw: virtio-scsi-single smbios1: uuid=cafd8016-03d3-4514-8d6f-5f4e353e5936 sockets: 1 spice_enhancements: foldersharing=1 unused0: local-lvm:vm-100-disk-1 unused1: newCIFS:100/vm-100-disk-0.qcow2 usb0: host=090c:1000 usb1: spice usb2: spice usb3: host=346d:5678 vga: qxl vmgenid: 31f7faef-4014-453b-ba8d-801e5634cc08
OPTION: value
qm или веб-интерфейс PVE. При ручном редактировании файла конфигурации для применения изменений требуется перезапуск ВМ.
snapshot файл будет содержать секцию [snapshot] с параметрами ВМ на момент создания снимка. Свойство parent используется для хранения связей между снимками, а snaptime содержит время создания снимка в формате Unix time (количество секунд с начала эпохи Unix):
boot: order=scsi0;net0 … parent: snapshot … vmgenid: 31f7faef-4014-453b-ba8d-801e5634cc08 [snapshot] boot: order=scsi0;net0 cores: 1 cpu: x86-64-v2-AES efidisk0: local-lvm:vm-100-disk-2,efitype=4m,pre-enrolled-keys=1,size=4M memory: 2048 meta: creation-qemu=9.1.2,ctime=1746532273 name: NewVM net0: virtio=BC:24:11:40:5F:C3,bridge=vmbr0,firewall=1 numa: 0 ostype: l26 parent: first runningcpu: qemu64,+aes,enforce,+kvm_pv_eoi,+kvm_pv_unhalt,+pni,+popcnt,+sse4.1,+sse4.2,+ssse3 runningmachine: pc-i440fx-9.1+pve0 scsi0: local-lvm:vm-100-disk-0,size=52G scsihw: virtio-scsi-single smbios1: uuid=cafd8016-03d3-4514-8d6f-5f4e353e5936 snaptime: 1746609190 sockets: 1 spice_enhancements: foldersharing=1 usb0: host=090c:1000 usb1: spice usb2: spice usb3: host=346d:5678 vga: qxl vmgenid: 31f7faef-4014-453b-ba8d-801e5634cc08 vmstate: local-lvm:vm-100-state-snapshot
Примечание

Примечание
Примечание

Примечание









pct, выполняемой на узле PVE.
#!/bin/bash hostname="altLXC" vmid="108" template_path="/var/lib/vz/template/cache" storage="local-lvm" description="alt-p11" template="alt-p11-rootfs-systemd-x86_64.tar.xz" ip="192.168.0.94/24" nameserver="8.8.8.8" ram="1024" rootpw="password" rootfs="4" gateway="192.168.0.1" bridge="vmbr0" iface="eth0" # Создание контейнера pct create $vmid \ $template_path/$template \ -description $description \ -rootfs $rootfs \ -hostname $hostname \ -memory $ram \ -nameserver $nameserver \ -storage $storage \ -password $rootpw \ -net0 name=$iface,bridge=$bridge,gw=$gateway,ip=$ipСценарий предполагает, что в хранилище local-lvm разрешено размещение корневых файловых систем контейнеров, а указанный файл шаблона существует. Идентификатор 108 должен быть свободен.





tty — подключение к одному из доступных устройств tty (режим по умолчанию);
shell — запуск оболочки внутри контейнера без прохождения обычной процедуры входа в систему;
/dev/console — подключение к /dev/console.

Примечание

pct — утилита командной строки для управления контейнерами LXC в PVE. Список доступных команд можно просмотреть, выполнив команду:
# pct help
# pct create <ct_id> <template> [options]
Например:
# pct create 110 /var/lib/vz/template/cache/alt-p11-rootfs-systemd-x86_64.tar.xz
# pct set <ct_id> [options]
# pct set 105 -net0 name=eth0,bridge=vmbr0,ip=192.168.0.17/24,gw=192.168.0.1
Команда задаёт параметры интерфейса net0 целиком. Если у интерфейса были настроены дополнительные параметры, например firewall, hwaddr или tag, их необходимо указать повторно, если они должны сохраниться.
# pct set <ct_id> -memory <value>
где <value> — объём памяти в мегабайтах.
pct resize:
# pct resize <ct_id> rootfs <size>
Например, чтобы увеличить размер корневой файловой системы контейнера 105 до 10 ГиБ:
# pct resize 105 rootfs 10G
Размер указывается как новое абсолютное значение. Чтобы увеличить существующий размер на заданную величину, перед значением ставят знак +. Уменьшение размера тома этой командой не поддерживается. Возможность изменения размера зависит от типа хранилища и тома.
# pct config <ct_id>
# pct unlock <ct_id>
# pct list
VMID Status Lock Name
105 running newLXC
106 stopped altLXC
#pct start <ct_id>#pct stop <ct_id>
# pct destroy <ct_id>
Предупреждение
--purge:
# pct destroy <ct_id> --purge
/etc/pve/lxc. Как и другие файлы в каталоге /etc/pve/, они автоматически реплицируются на остальные узлы кластера.
pct. В таких случаях можно отредактировать файл конфигурации непосредственно. Изменения низкоуровневых параметров обычно требуют перезапуска контейнера для применения. Перед редактированием рекомендуется сохранить резервную копию файла конфигурации.
/etc/pve/lxc/105.conf:
arch: amd64 cores: 1 features: nesting=1 hostname: newLXC memory: 512 net0: name=eth0,bridge=vmbr0,firewall=1,gw=192.168.0.1,hwaddr=BC:24:11:A7:B5:AE,ip=192.168.0.230/24,type=veth ostype: altlinux rootfs: nfs-storage:105/vm-105-disk-0.raw,size=8G swap: 512 tty: 3 unprivileged: 1


# pct start 105
# pct stop 105


# pct enter <ct_id>
Команда открывает оболочку внутри указанного контейнера.
[root@pve03 ~]# pct enter 105
[root@newLXC ~]#
exit.
Предупреждение
Insecure $ENV{ENV} while running with...
необходимо в файле /root/.bashrc закомментировать строку:
ENV=$HOME/.bashrcи выполнить команду:
# unset ENV
pct exec:
# pct exec <ct_id> -- <command>
#pct exec 105 mkdir /home/demouser#pct exec 105 ls /homedemouser
--, чтобы отделить параметры pct от выполняемой внутри контейнера команды:
# pct exec 105 -- df -H /
Файловая система Размер Использовано Дост Использовано% Cмонтировано в
/dev/loop0 8,4G 516M 7,4G 7% /

/etc/pve/sdn, который совместно используется всеми узлами кластера через файловую систему PVE.
# pvesh set /cluster/sdn
Такой механизм позволяет применять набор изменений как единое атомарное действие.
.running-config и .version, расположенных в каталоге /etc/pve/sdn.
Примечание

Таблица 32.1. Общие параметры зон
|
Свойство
|
Описание
|
|---|---|
|
nodes
|
Список узлов кластера, на которых должны быть развернуты зона и связанные с ней виртуальные сети
|
|
ipam
|
Инструмент управления IP-адресами (IPAM) для управления IP-адресами в зоне (по умолчанию — pve)
|
|
dns
|
Адрес API сервера DNS
|
|
ReverseDNS
|
Адрес API сервера обратного DNS
|
|
DNSZone
|
Имя DNS-домена. Используется для регистрации имен узлов, например <hostname>.<domain>. Зона DNS должна уже существовать на DNS-сервере
|
type simple) предназначена для создания простых виртуальных сетей без использования VLAN и оверлейных технологий. Она обеспечивает локальное соединение ВМ и контейнеров на одном узле. При дополнительной настройке подсетей такая сеть может использоваться в маршрутизируемых схемах и конфигурациях с NAT.
type vlan) — зона, в которой каждый виртуальный сегмент (VNet) соответствует определённому VLAN ID. Внутри зоны создаются VNet, указывающие, какие VLAN ID используются и через какие интерфейсы осуществляется маршрутизация. Плагин VLAN использует существующий локальный мост (Linux или OVS) для подключения к физическому интерфейсу узла.
Примечание
bridge — локальный мост с поддержкой VLAN, который уже настроен на каждом локальном узле.
type qinq) — расширение обычной VLAN-зоны, позволяющее использовать двойную VLAN-тегировку (802.1ad), то есть VLAN внутри VLAN. Зона QinQ определяет внешний VLAN-тег (сервисную VLAN, S-tag), тогда как внутренний тег (C-tag) определяется VNet.
Примечание
bridge — локальный мост с поддержкой VLAN, который уже настроен на каждом локальном узле;
tag — основной VLAN-тег этой зоны;
vlan-protocol — протокол сервисной VLAN: 802.1Q (по умолчанию) или 802.1ad;
mtu — из-за двойного стекирования тегов QinQ общий размер заголовка увеличивается на 4 байта. Например, если MTU физического интерфейса равен 1500, необходимо уменьшить MTU виртуальной сети до 1496.
type vxlan) — используются для создания оверлей-сетей, которые позволяют соединять ВМ на разных физических узлах через виртуальные сети (VNet), изолированные друг от друга. Это обеспечивает масштабируемость, гибкость и независимость от физической топологии. Плагин VXLAN инкапсулирует Ethernet-кадры уровня 2 в UDP-датаграммы уровня 4, используя порт назначения по умолчанию 4789.
Предупреждение
peers — список IP-адресов всех узлов кластера, участвующих в VXLAN-зоне. Может включать внешние узлы, доступные по указанным IP-адресам. Должен содержать все узлы кластера;
fabric — fabric для автоматического создания списка пиров;
mtu — поскольку инкапсуляция VXLAN использует 50 байт, MTU виртуальной сети должен быть на 50 байт меньше, чем MTU физического интерфейса (50 байт — типичный дополнительный размер инкапсуляции VXLAN поверх IPv4; при использовании IPv6 накладные расходы больше).
type evpn) в PVE SDN позволяет реализовать распределённую L2-сеть поверх L3-инфраструктуры с использованием BGP EVPN как протокола маршрутизации. Данная зона подходит для крупных сетей и дата-центров с мультиузловой маршрутизацией.
vrf-vxlan — VXLAN-ID, используемый для выделенного маршрутного соединения между VNet (должен отличаться от VXLAN-ID VNet);
controller — контроллер EVPN;
mac — anycast MAC-адрес, который назначается всем VNet в этой зоне (если не определен, будет сгенерирован автоматически);
exitnodes — узлы, выступающие в роли шлюзов в реальную сеть. Настроенные узлы объявят маршрут по умолчанию в сети EVPN;
exitnodes-primary — если используется несколько выходных узлов, принудительно пропускать трафик через этот основной выходной узел вместо балансировки нагрузки между всеми узлами. Необязательно, но необходимо, если будет использоваться SNAT или если маршрутизатор не поддерживает ECMP;
exitnodes-local-routing — специальный параметр, если нужен доступ к ВМ/контейнеру из выходного узла (по умолчанию выходные узлы разрешают пересылку трафика только между реальной сетью и сетью EVPN);
advertise-subnets — объявлять полную подсеть в EVPN. Если в кластере есть «молчащие» ВМ/контейнеры (назначены IP-адреса, которые не проявляют активность) и anycast-шлюз не видит от них трафика, то такие IP могут быть недоступны из EVPN-сети. Данный параметр заставляет SDN явно объявить всю подсеть, независимо от активности;
disable-arp-nd-suppression — не подавлять пакеты ARP (Address Resolution Protocol) или ND (Neighbor Discovery). Необходимо, если в ВМ используются плавающие IP-адреса (IP и MAC-адреса перемещаются между системами);
rt-import — позволяет импортировать список внешних целей маршрута EVPN. Используется для межсетевых соединений DC или различных сетей EVPN;
mtu — поскольку инкапсуляция VXLAN использует 50 байт, MTU виртуальной сети должен быть на 50 байт меньше физического (по умолчанию 1450).
id — идентификатор виртуальной сети (до 8 символов);
alias — более описательный идентификатор (опционально). Назначается как псевдоним на интерфейсе;
zone — зона, связанная с этой сетью;
tag — уникальный идентификатор VLAN или VXLAN;
vlanaware — включает параметр VLAN-aware на интерфейсе, позволяя настройку в гостевой системе;
isolate-ports — включает изоляцию гостевых портов на уровне узла. Изолированные порты не могут напрямую обмениваться трафиком друг с другом; взаимодействие с неизолированными портами, в том числе с самим мостом, регулируется правилами изоляции. Чтобы эта настройка вступила в силу, необходимо перезапустить затронутую гостевую систему.
Примечание
id — адрес сети в нотации CIDR (например, 10.0.0.0/8);
gateway — IP-адрес шлюза по умолчанию сети. В зонах уровня 3 (плагины Simple/EVPN) он будет развернут в виртуальной сети;
snat — включить Source NAT, который позволяет гостевым системам из VNet подключаться к внешней сети, пересылая пакеты на исходящий интерфейс узлов. В зонах EVPN пересылка выполняется на шлюзовых узлах EVPN;
dnszoneprefix — префикс к DNS-домену, например: <hostname>.prefix.<domain>
# apt-get install frr frr-pythontools
И на всех узлах кластера включена служба:
# systemctl enable frr.service
/etc/network/interfaces.d/sdn на этом узле.
ping другого узла источником трафика будет IP-адрес dummy-интерфейса, а не физического интерфейса. Это обеспечивает единообразие выбора исходного адреса и корректную работу маршрутизации.
/etc/network/interfaces строки:
post-up sysctl -w net.ipv6.conf.all.forwarding=1Эта команда активирует глобальную пересылку IPv6 при поднятии интерфейса.
Важно

Примечание



Примечание
Примечание
Примечание


$ ip -br a
enp0s10 UP fd47:d11e:43c1:0:a00:27ff:fe80:2977/64 fe80::a00:27ff:fe80:2977/64
dummy0 DOWN
dummy_of1 UNKNOWN 10.255.0.2/32 fe80::54b9:eeff:fe6b:b2b8/64
В файле /etc/network/interfaces.d/sdn появляются записи вида:
auto dummy_of1
iface dummy_of1 inet static
address 10.255.0.3/32
link-type dummy
ip-forward 1
auto enp0s10
iface enp0s10
ip-forward 1
Примечание
vtysh. Соседей и маршруты OpenFabric можно увидеть с помощью следующих команд:
# vtysh -c "show openfabric neighbor"
# vtysh -c "show openfabric route"
#pvesh create /cluster/sdn/fabrics/fabric\ --id of2 --protocol openfabric --ip_prefix 10.250.0.0/24 #pvesh get /cluster/sdn/fabrics/fabric/of2 --output-format yaml--- digest: 0d9872991acab57cf6afeca9dbf93d0a333fe2d2ef650b21aaedbd30d5b73ecd id: of2 ip_prefix: 10.250.0.0/24 protocol: openfabric
#pvesh create /cluster/sdn/fabrics/node/of2\ --node_id pve01 --protocol openfabric --interfaces name=enp0s10 --ip 10.250.0.1 #pvesh create /cluster/sdn/fabrics/node/of2\ --node_id pve02 --protocol openfabric --interfaces name=enp0s10 --ip 10.250.0.2 #pvesh create /cluster/sdn/fabrics/node/of2\ --node_id pve03 --protocol openfabric --interfaces name=enp0s10 --ip 10.250.0.3 #pvesh get /cluster/sdn/fabrics/node/of2 --output-format yaml--- - digest: a75048ab2d62fe6e7f3c0e2ff26c2b78565b827b87376e63130c5fe5ed4d7312 fabric_id: of2 interfaces: - name=enp0s10 ip: 10.250.0.1 node_id: pve01 protocol: openfabric - digest: a75048ab2d62fe6e7f3c0e2ff26c2b78565b827b87376e63130c5fe5ed4d7312 fabric_id: of2 interfaces: - name=enp0s10 ip: 10.250.0.2 node_id: pve02 protocol: openfabric --- - digest: ba89eae03508e4728939e243bcfdb4452515dfb39eda21692996efaf10b23e54 fabric_id: of2 interfaces: - name=enp0s10 ip: 10.250.0.3 node_id: pve03 protocol: openfabric
# pvesh set /cluster/sdn




Примечание


$ ip -br a
enp0s9 UP 10.16.0.2/32 fe80::a00:27ff:fe9e:5ea4/64
dummy0 DOWN
dummy_ospf UNKNOWN 10.16.0.2/32 fe80::cc9f:9bff:fe0c:16bd/64
В файле /etc/network/interfaces.d/sdn появляются записи вида:
auto dummy_ospf
iface dummy_ospf inet static
address 10.16.0.2/32
link-type dummy
ip-forward 1
auto enp0s9
iface enp0s9 inet static
address 10.16.0.2/32
ip-forward 1
Примечание
# vtysh -c "show ip ospf neighbor"
Neighbor ID Pri State Up Time Dead Time Address Interface RXmtL RqstL DBsmL
10.16.0.1 1 Loading/- 0.661s 31.334s 10.16.0.1 enp0s9:10.16.0.2 0 1 0
10.16.0.3 1 Exchange/- 0.663s 34.242s 10.16.0.3 enp0s9:10.16.0.2 1 0 0
# vtysh -c "show ip route ospf"
O 10.16.0.2/32 [110/10] via 0.0.0.0, dummy_ospf onlink, rmapsrc 10.16.0.2, weight 1, 00:08:02
#pvesh create /cluster/sdn/fabrics/fabric\ --id ospf --protocol ospf --ip_prefix 10.16.0.0/24 --area 0 #pvesh get /cluster/sdn/fabrics/fabric/ospf --output-format yaml--- area: '0' digest: b42b0d474b59609522255008351b21dd2badf03e43f7289a80e2feba97815aa5 id: ospf ip_prefix: 10.16.0.0/24 protocol: ospf
#pvesh create /cluster/sdn/fabrics/node/ospf\ --node_id pve01 --protocol ospf --interfaces name=enp0s9 --ip 10.16.0.1 #pvesh create /cluster/sdn/fabrics/node/ospf\ --node_id pve02 --protocol ospf --interfaces name=enp0s9 --ip 10.16.0.2 #pvesh create /cluster/sdn/fabrics/node/ospf\ --node_id pve03 --protocol ospf --interfaces name=enp0s9 --ip 10.16.0.3 #pvesh get /cluster/sdn/fabrics/node/ospf --output-format yaml--- - digest: a75048ab2d62fe6e7f3c0e2ff26c2b78565b827b87376e63130c5fe5ed4d7312 fabric_id: ospf interfaces: - name=enp0s9 ip: 10.16.0.1 node_id: pve01 protocol: ospf - digest: a75048ab2d62fe6e7f3c0e2ff26c2b78565b827b87376e63130c5fe5ed4d7312 fabric_id: ospf interfaces: - name=enp0s9 ip: 10.16.0.2 node_id: pve02 protocol: ospf - digest: a75048ab2d62fe6e7f3c0e2ff26c2b78565b827b87376e63130c5fe5ed4d7312 fabric_id: ospf interfaces: - name=enp0s9 ip: 10.16.0.3 node_id: pve03 protocol: ospf
# pvesh set /cluster/sdn
/etc/pve/sdn/fabrics.cfg:
ospf_fabric: ospf
area 0
ip_prefix 10.16.0.0/24
ospf_node: ospf_pve01
interfaces name=enp0s9
ip 10.16.0.1
ospf_node: ospf_pve02
interfaces name=enp0s9
ip 10.16.0.2
ospf_node: ospf_pve03
interfaces name=enp0s9
ip 10.16.0.3
Примечание
# apt-get install wireguard-tools


IP:PORT;
AllowedIPs в конфигурации WireGuard и одновременно как фильтр и маршрут назначения;

Примечание


$ ip -br a
enp0s9 UP 10.16.0.2/32 fe80::a00:27ff:fe9e:5ea4/64
wg0 UNKNOWN 198.51.100.1/24
В таблице маршрутизации появляются маршруты для удалённых пиров:
$ ip route
198.51.100.0/24 dev wg0 proto kernel scope link src 198.51.100.1
198.51.100.2 dev wg0 scope link
198.51.100.3 dev wg0 scope link
wg show:
# wg show wg0
interface: wg0
public key: 54GHc/L8zfRM0XJnR7syhVv1Abl4A4l3JoWa9joIlWM=
private key: (hidden)
listening port: 51820
peer: +Vv7sh/mBXcGIVj30P/09guL3G4Ky566AwywL0kXDzU=
endpoint: 192.168.0.70:51820
allowed ips: 198.51.100.3/32
latest handshake: 16 seconds ago
transfer: 180 B received, 420 B sent
persistent keepalive: every 25 seconds
peer: VxcuW+7KMQN4knBfC8TA9fC3coPoUNvivU22Tk35bgo=
endpoint: 192.168.0.90:51820
allowed ips: 198.51.100.2/32
latest handshake: 20 seconds ago
transfer: 180 B received, 272 B sent
persistent keepalive: every 25 seconds
/etc/pve/priv/wg-keys.cfg при сохранении интерфейса. Соответствующий публичный ключ сохраняется вместе с конфигурацией интерфейса в фабрике WireGuard и используется для отображения в веб-интерфейс при редактировании узла. При удалении интерфейса соответствующий приватный ключ также удаляется из wg-keys.cfg в рамках того же API-вызова.
#pvesh create /cluster/sdn/fabrics/fabric\ --id wg \ --protocol wireguard \ --persistent_keepalive 25 #pvesh get /cluster/sdn/fabrics/fabric/wg --output-format yaml--- digest: 2c28ab53ac729ad29189e4f2a52a548d942e25415488ab4c30d1d676dc707005 id: wg persistent_keepalive: 25 protocol: wireguard id: wg
#pvesh create /cluster/sdn/fabrics/node/wg\ --node_id pve01 --protocol wireguard --role internal \ --interfaces name=wg2,ip=150.50.0.1/32,listen_port=51821 \ --endpoint 192.168.0.186 #pvesh create /cluster/sdn/fabrics/node/wg\ --node_id pve02 --protocol wireguard --role internal \ --interfaces name=wg2,ip=150.50.0.2/32,listen_port=51821 \ --endpoint 192.168.0.90 #pvesh create /cluster/sdn/fabrics/node/wg\ --node_id pve03 --protocol wireguard --role internal \ --interfaces name=wg2,ip=150.50.0.3/32,listen_port=51821 \ --endpoint 192.168.0.70
#pvesh set /cluster/sdn/fabrics/node/wg/pve01 --protocol wireguard\ --peers iface=wg2,node=pve02,type=internal,node_iface=wg2 \ --peers iface=wg2,node=pve03,type=internal,node_iface=wg2 \ --interfaces name=wg2,ip=150.50.0.1/32,listen_port=51821 #pvesh set /cluster/sdn/fabrics/node/wg/pve02 --protocol wireguard\ --peers iface=wg2,node=pve03,type=internal,node_iface=wg2 \ --peers iface=wg2,node=pve01,type=internal,node_iface=wg2 \ --interfaces name=wg2,ip=150.50.0.2/32,listen_port=51821 #pvesh set /cluster/sdn/fabrics/node/wg/pve03 --protocol wireguard\ --peers iface=wg2,node=pve01,type=internal,node_iface=wg2 \ --peers iface=wg2,node=pve02,type=internal,node_iface=wg2 \ --interfaces name=wg2,ip=150.50.0.3/32,listen_port=51821
# pvesh get /cluster/sdn/fabrics/node/wg --output-format yaml
---
- digest: a38ab69cd7a07ed73f23a070b446eaa1dc663516734169280432234b5d212b6f
endpoint: 192.168.0.186
fabric_id: wg
interfaces:
- name=wg2,listen_port=51821,public_key=lz/I7U9p8//g+JH4jk5E2TQZO9lJfOUOX5MgMCGBaUc=,ip=150.50.0.1/32
node_id: pve01
peers:
- type=internal,node=pve02,node_iface=wg2,iface=wg2
- type=internal,node=pve03,node_iface=wg2,iface=wg2
protocol: wireguard
role: internal
- digest: a38ab69cd7a07ed73f23a070b446eaa1dc663516734169280432234b5d212b6f
endpoint: 192.168.0.90
fabric_id: wg
interfaces:
- name=wg2,listen_port=51821,public_key=/kMeSUnr76FE+iPu39NMZcvYqMM8ovjClNJ+BJ76cRA=,ip=150.50.0.2/32
node_id: pve02
peers:
- type=internal,node=pve03,node_iface=wg2,iface=wg2
- type=internal,node=pve01,node_iface=wg2,iface=wg2
protocol: wireguard
role: internal
- digest: a38ab69cd7a07ed73f23a070b446eaa1dc663516734169280432234b5d212b6f
endpoint: 192.168.0.70
fabric_id: wg
interfaces:
- name=wg2,listen_port=51821,public_key=zH6M9GsD1i41cjW7luP3z1i8dXl9L1q9pT4ZYpPQmCE=,ip=150.50.0.3/32
node_id: pve03
peers:
- type=internal,node=pve01,node_iface=wg2,iface=wg2
- type=internal,node=pve02,node_iface=wg2,iface=wg2
protocol: wireguard
role: internal
# pvesh set /cluster/sdn
/etc/pve/sdn/fabrics.cfg:
wireguard_fabric: wg wireguard_node: wg_pve01 endpoint 192.168.0.186 interfaces name=wg2,listen_port=51821,public_key=lz/I7U9p8//g+JH4jk5E2TQZO9lJfOUOX5MgMCGBaUc=,ip=150.50.0.1/32 peers type=internal,node=pve02,node_iface=wg2,iface=wg2 peers type=internal,node=pve03,node_iface=wg2,iface=wg2 role internal wireguard_node: wg_pve02 endpoint 192.168.0.90 interfaces name=wg2,listen_port=51821,public_key=/kMeSUnr76FE+iPu39NMZcvYqMM8ovjClNJ+BJ76cRA=,ip=150.50.0.2/32 peers type=internal,node=pve03,node_iface=wg2,iface=wg2 peers type=internal,node=pve01,node_iface=wg2,iface=wg2 role internal wireguard_node: wg_pve03 endpoint 192.168.0.70 interfaces name=wg2,listen_port=51821,public_key=zH6M9GsD1i41cjW7luP3z1i8dXl9L1q9pT4ZYpPQmCE=,ip=150.50.0.3/32 peers type=internal,node=pve01,node_iface=wg2,iface=wg2 peers type=internal,node=pve02,node_iface=wg2,iface=wg2 role internal


Примечание

Примечание
Примечание

$ ip -br a | grep dummy_
dummy_bgp-mesh UNKNOWN 10.10.0.1/32 fe80::44cd:10ff:fe70:6081/64
Примечание
vtysh. Соседей и маршруты BGP можно увидеть с помощью следующих команд:
# vtysh -c "show openfabric neighbor"
# vtysh -c "show openfabric route"
Примечание
/etc/pve/sdn/ и транслируется в конфигурацию FRR:
/etc/frr/frr.conf. Локальные дополнения могут быть заданы в /etc/frr/frr.conf.local.

permit (разрешить) или deny (запретить). В конце списка действует неявный запрет;
Примечание
/etc/pve/sdn/prefix-lists.cfg;

ge и le не указаны, выполняется точное совпадение. При указании обоих параметров запись применяется ко всем подсетям в заданном диапазоне длин. Например:
10.0.0.0/8 ge 16 le 24означает все подсети от /16 до /24 внутри 10.0.0.0/8.
ge не должен превышать le;
Примечание

permit или deny. permit пропускает маршрут (после выполнения действий set); deny — отбрасывает его;
route-type
vni
ip-address-prefix-list
ip6-address-prefix-list
ip-next-hop-prefix-list
ip6-next-hop-prefix-list
ip-next-hop-address
ip6-next-hop-address
metric
local-preference
peer
tag
*-prefix-list ссылаются на список префиксов по имени. tag сопоставляется с 32-битным атрибутом тега маршрута, тем же значением, которое присваивается действием set tag; это позволяет одной записи помечать маршруты тегом, а последующей записи (в той же или другой карте) выполнять над ними действия. Все условия должны выполняться одновременно;
ip-next-hop
local-preference
metric
tag
weight
src
metric поддерживает операции N, +N, -N (корректировка), rtt, +rtt, -rtt, igp и aigp. Значение tag принимает целое число или буквальное значение untagged;
exit — завершить обработку (поведение по умолчанию);
on-match-next — перейти к следующей записи;
on-match-goto <порядок> — перейти к записи с указанным или следующим порядком;
continue <порядок> — продолжить с записи с конкретным порядковым номером.

/etc/pve/sdn/route-maps.cfg имя секции формируется автоматически как:
<Route Map ID>_<Порядок>где:
Примечание
# /etc/pve/sdn/prefix-lists.cfg prefix-list: default-only entries action=permit,prefix=0.0.0.0/0,seq=10
# /etc/pve/sdn/prefix-lists.cfg prefix-list: internal-subnets entries action=permit,prefix=10.0.0.0/8,ge=16,le=24,seq=10 entries action=deny,prefix=10.0.0.0/8,le=32,seq=20
# /etc/pve/sdn/route-maps.cfg route-map-entry: bgp-out_10 action permit match key=ip-address-prefix-list,value=internal-subnets set key=local-preference,value=50 route-map-entry: bgp-out_20 action permitПоследняя запись
permit без условий сопоставления используется как стандартный шаблон FRR («разрешить всё остальное»). Без неё неявный deny в конце карты маршрутов отбрасывал бы все несовпавшие маршруты.

# pvesh get /cluster/sdn/ipams/pve/status --output-format yaml
Примечание

# openssl x509 -in /var/lib/ssl/certs/nginx-netbox.cert -noout -fingerprint -sha256
sha256 Fingerprint=17:71:60:6A:C7:65:10:7E:FA:00:91:42:…:3A:CB:7B:F3:D0:0C:DC:DE

Примечание

# openssl x509 -in /etc/openssl/phpipam/phpipam.crt -noout -fingerprint -sha256
sha256 Fingerprint=52:EA:33:D0:D4:0D:7E:EE:D5:58:1A:C5:88:…:6B:7B:5A:F4:64:95:4D:E1:41:C4


Примечание
api=yes api-key=WcSieGekANq5KCcEkSk8k7Mv88Wbm7 # случайно сгенерированная строка webserver=yes webserver-port=8081

Примечание
Примечание
# pvesh set /cluster/sdn/vnets/<vnet>/subnets/<subnet> \
--dhcp-range start-address=10.10.1.100,end-address=10.10.1.200 \
--dhcp-range start-address=10.10.2.100,end-address=10.10.2.200
/etc/dnsmasq.d/<zone>:
00-default.conf — содержит глобальную конфигурацию по умолчанию для экземпляра dnsmasq;
10-<Vnet>.conf — содержит DHCP-диапазоны для экземпляра dnsmasq;
ethers — содержит сопоставления MAC и IP-адресов из плагина IPAM. Чтобы переопределить эти сопоставления, следует использовать соответствующий плагин IPAM, а не редактировать этот файл, так как он будет перезаписан плагином dnsmasq.
90-custom.conf) — они не будут изменены плагином DHCP dnsmasq.
/var/lib/misc/dnsmasq.<zone>.leases.
# /etc/pve/sdn/vnets.cfg vnet: vnet0 zone simple # /etc/pve/sdn/subnets.cfg subnet: simple-10.20.30.0-24 vnet vnet0 dhcp-range start-address=10.20.30.100,end-address=10.20.30.150 gateway 10.20.30.1 snat 1 subnet: simple-2001:db8::-64 vnet vnet0 dhcp-range start-address=2001:db8::100,end-address=2001:db8::199 gateway 2001:db8::1 snat 1Автоматически сгенерированные IP-наборы для vnet0 будут содержать следующие элементы:
vnet0-all 10.20.30.0/24 2001:db8::/64 vnet0-gateway 10.20.30.1 2001:db8::1 vnet0-no-gateway 10.20.30.0/24 2001:db8::/64 !10.20.30.1 !2001:db8::1 vnet0-dhcp 10.20.30.100 – 10.20.30.150 2001:db8::1000 – 2001:db8::1999
Примечание
Примечание
/etc/network/interfaces должна присутствовать строка:
source /etc/network/interfaces.d/*










Примечание
#pvesh create /cluster/sdn/zones --type simple --zone simple --dhcp dnsmasq --ipam pve#pvesh get /cluster/sdn/zones/simple --output-format yaml--- dhcp: dnsmasq digest: 9ad0df155d3dab9967a90671dc6123d771f65d29 type: simple zone: simple
#pvesh create /cluster/sdn/vnets --vnet vnet0 --zone simple#pvesh get /cluster/sdn/vnets/vnet0 --output-format yaml--- digest: f137eddad03996ecf6c48aa8b6bd96ef2c8aab3d type: vnet vnet: vnet0 zone: simple
#pvesh create /cluster/sdn/vnets/vnet0/subnets \--subnet 10.20.30.0/24 --type subnet \ --dhcp-range "start-address=10.20.30.10,end-address=10.20.30.20" \ --gateway 10.20.30.1 --snat 1 #pvesh get /cluster/sdn/vnets/vnet0/subnets --output-format yaml--- - cidr: 10.20.30.0/24 dhcp-range: - end-address: 10.20.30.20 start-address: 10.20.30.10 digest: ca799c5ffdc2ffc30f60ed303bd79f4c13cc6519 gateway: 10.20.30.1 id: simple-10.20.30.0-24 mask: '24' network: 10.20.30.0 snat: 1 subnet: simple-10.20.30.0-24 type: subnet vnet: vnet0 zone: simple
# pvesh set /cluster/sdn/vnets/vnet0/subnets/simple-10.20.30.0-24 \
--dhcp-range start-address=10.20.30.100,end-address=10.20.30.150
Если нужно не изменить, а добавить новый диапазон, команда будет выглядеть так:
# pvesh set /cluster/sdn/vnets/vnet0/subnets/simple-10.20.30.0-24 \
--dhcp-range start-address=10.20.30.10,end-address=10.20.30.20 \
--dhcp-range start-address=10.20.30.100,end-address=10.20.30.150
# pvesh set /cluster/sdn
pve03: reloading network config
pve01: reloading network config
pve02: reloading network config
UPID:pve01:00021C9F:0029311C:681F9B30:reloadnetworkall::root@pam:
#pvesh set /nodes/pve01/lxc/101/config --net0 name=eth0,bridge=vnet0,ip=dhcp#pvesh get /nodes/pve01/lxc/101/config --output-format yaml--- arch: amd64 cores: 1 digest: a954d7b078b605d6d477dcd4303419080963ac7f features: nesting=1 hostname: ALTp11 memory: 512 net0: name=eth0,bridge=vnet0,hwaddr=BC:24:11:02:A2:1A,ip=dhcp,type=veth ostype: altlinux rootfs: local-lvm:vm-101-disk-0,size=8G swap: 512 unprivileged: 1







Примечание
#pvesh create /cluster/sdn/zones --type vlan --zone myvlan2 --bridge vmbr0 --ipam pve#pvesh get /cluster/sdn/zones/myvlan2 --output-format yaml--- bridge: vmbr0 digest: 58543afd2dd2b1edf46b9d11647b0cdf42293509 ipam: pve type: vlan zone: myvlan2
#pvesh create /cluster/sdn/vnets --vnet vlannet2 --zone myvlan2 --tag 100#pvesh get /cluster/sdn/vnets/vlannet2 --output-format yaml--- digest: 41e1f7bff1c16506882b4ee1290d6dd066bc8333 tag: 100 type: vnet vnet: vlannet2 zone: myvlan2
# pvesh set /cluster/sdn
# pvesh set /nodes/pve03/lxc/106/config \
--net0 name=eth0,bridge=vlannet2,gw=192.168.100.1,ip=192.168.100.94/24





#pvesh create /cluster/sdn/zones --type qinq --zone myqinq --bridge vmbr0 --ipam pve --tag 40#pvesh get /cluster/sdn/zones/myqinq --output-format yaml--- bridge: vmbr0 digest: 6e9910da8a2ff11579e69c1302c0b5296932e0cc ipam: pve tag: 40 type: qinq zone: myqinq
#pvesh create /cluster/sdn/vnets --vnet myqnet --zone myqinq --tag 100#pvesh get /cluster/sdn/vnets/myqnet --output-format yaml--- digest: 7153cea08ff37c355366ff3edd70d8a54f157046 tag: 100 type: vnet vnet: myqnet zone: myqinq
# pvesh set /cluster/sdn
# pvesh set /nodes/pve03/lxc/106/config \
--net0 name=eth0,bridge=myqnet,gw=192.168.100.1,ip=192.168.100.94/24







#pvesh create /cluster/sdn/zones --type vxlan --zone myvxlan\ --peers 192.168.0.186,192.168.0.90,192.168.0.70 --ipam pve #pvesh get /cluster/sdn/zones/myvxlan --output-format yaml--- digest: 2b49f2691553ab2bc10b7a3486926995a02af885 ipam: pve peers: 192.168.0.186,192.168.0.90,192.168.0.70 type: vxlan zone: myvxlan
#pvesh create /cluster/sdn/vnets --vnet myvxnet --zone myvxlan --tag 200000#pvesh get /cluster/sdn/vnets/myvxnet --output-format yaml--- digest: ee2782a86911fd35fc37d478b4d3aadce2380ce6 tag: 200000 type: vnet vnet: myvxnet zone: myvxlan
# pvesh set /cluster/sdn
# pvesh set /nodes/pve03/lxc/106/config \
--net0 name=eth0,bridge=myvxnet,gw=192.168.100.1,ip=192.168.100.94/24
Примечание

/etc/pve/datacenter.cfg:
migration: network=10.10.10.150/24,type=secure
network указывается подсеть в формате CIDR. Параметр type=secure означает использование SSH-туннеля для передачи данных миграции.
Важно
/etc/pve/datacenter.cfg.
Примечание

Примечание




# qm migrate <vmid> <target> [OPTIONS]
--online.
# qm migrate 104 pve02 --online --with-conntrack-state
# pct migrate <ctid> <target> [OPTIONS]
--restart. Например:
# pct migrate 101 pve02 --restart
Примечание
qm importovf (для файлов OVF/OVA, экспортированных из VMware или VirtualBox).




Примечание
Примечание





Примечание
Примечание
# qm importovf <VMID> /path/to/vm.ovf <целевое хранилище>
haos_ova-15.2.ovf и haos_ova-15.2.vmdk).
# qm importovf 999 haos_ova-15.2.ovf local-lvm
Примечание
$ tar -xvf haos_ova-15.2.ova
Примечание
# vzdump <VMID> --storage <хранилище резервных копий> --mode snapshot --compress zstd
# qmrestore /path/to/vzdump-qemu-<VMID><date>.vma.zst <new_VMID> --storage <целевое хранилище>
$ oneimage show 14
IMAGE 14 INFORMATION
ID : 14
NAME : ALT Linux p9
USER : oneadmin
GROUP : oneadmin
LOCK : None
DATASTORE : default
TYPE : OS
REGISTER TIME : 04/30 11:00:42
PERSISTENT : Yes
SOURCE : /var/lib/one//datastores/1/f811a893808a9d8f5bf1c029b3c7e905
FSTYPE : save_as
SIZE : 12G
STATE : used
RUNNING_VMS : 1
PERMISSIONS
OWNER : um-
GROUP : ---
OTHER : ---
IMAGE TEMPLATE
DEV_PREFIX="vd"
DRIVER="qcow2"
SAVED_DISK_ID="0"
SAVED_IMAGE_ID="7"
SAVED_VM_ID="46"
SAVE_AS_HOT="YES"
где /var/lib/one//datastores/1/f811a893808a9d8f5bf1c029b3c7e905 — адрес образа жёсткого диска ВМ.
Примечание
$ onevm disk-saveas <vmid> <diskid> <img_name> [--type type --snapshot snapshot]
где --type <type> — тип нового образа (по умолчанию raw); --snapshot <snapshot_id> — снимок диска, который будет использован в качестве источника нового образа (по умолчанию текущее состояние диска).
$ onevm disk-saveas 125 0 test.qcow2
Image ID: 44
Информация об образе диска ВМ:
$ oneimage show 44
MAGE 44 INFORMATION
ID : 44
NAME : test.qcow2
USER : oneadmin
GROUP : oneadmin
LOCK : None
DATASTORE : default
TYPE : OS
REGISTER TIME : 07/12 21:34:42
PERSISTENT : No
SOURCE : /var/lib/one//datastores/1/9d6336a88d6ab62ea1dce65d81e55881
FSTYPE : save_as
SIZE : 12G
STATE : rdy
RUNNING_VMS : 0
PERMISSIONS
OWNER : um-
GROUP : ---
OTHER : ---
IMAGE TEMPLATE
DEV_PREFIX="vd"
DRIVER="qcow2"
SAVED_DISK_ID="0"
SAVED_IMAGE_ID="14"
SAVED_VM_ID="125"
SAVE_AS_HOT="YES"
VIRTUAL MACHINES
Информация о диске:
$ qemu-img info /var/lib/one//datastores/1/9d6336a88d6ab62ea1dce65d81e55881
image: /var/lib/one//datastores/1/9d6336a88d6ab62ea1dce65d81e55881
file format: qcow2
virtual size: 12 GiB (12884901888 bytes)
disk size: 3.52 GiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: false
refcount bits: 16
corrupt: false
extended l2: false
# qm create 120 --bootdisk scsi0 --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci
# qm importdisk <vmid> <source> <storage> [OPTIONS]
Импорт диска f811a893808a9d8f5bf1c029b3c7e905 в хранилище local, для ВМ с ID 120 (подразумевается, что образ импортируемого диска находится в каталоге, из которого происходит выполнение команды):
# qm importdisk 120 f811a893808a9d8f5bf1c029b3c7e905 local --format qcow2
importing disk 'f811a893808a9d8f5bf1c029b3c7e905' to VM 120 ...
…
Successfully imported disk as 'unused0:local:120/vm-120-disk-0.qcow2'

# qm set 120 --scsi0 local:120/vm-120-disk-0.qcow2
update VM 120: -scsi0 local:120/vm-120-disk-0.qcow2
"C:\Program Files\VMware\VMware Server\vmware-vdiskmanager" -r win7.vmdk -t 0 win7-pve.vmdk
где win7.vmdk — файл с образом диска.
win7-pve.vmdk в каталог с образами ВМ /var/lib/vz/images/VMID, где VMID — VMID, созданной виртуальной машины (можно воспользоваться WinSCP);
win7-pve.vmdk в qemu формат:
# qemu-img convert -f vmdk win7-pve.vmdk -O qcow2 win7-pve.qcow2
/etc/pve/nodes/pve02/qemu-server/VMID.conf) строку:
unused0: local:100/win7-pve.qcow2где 100 — VMID, а local — хранилище в PVE.

# qemu-img info win7-pve.vmdk
image: win7-pve.vmdk
file format: vmdk
virtual size: 127G (136365211648 bytes)
disk size: 20.7 GiB
cluster_size: 65536
Format specific information:
cid: 3274246794
parent cid: 4294967295
create type: streamOptimized
extents:
[0]:
compressed: true
virtual size: 136365211648
filename: win7-pve.vmdk
cluster size: 65536
format:
В данном случае необходимо создать диск в режиме IDE размером не меньше 127GB.
win7-pve.vmdk в каталог с образами ВМ /var/lib/vz/images/VMID, где VMID — VMID, созданной виртуальной машины (можно воспользоваться WinSCP);
# lvscan
ACTIVE '/dev/sharedsv/vm-101-disk-1' [130,00 GiB] inherit
# qemu-img convert -f vmdk win7-pve.vmdk -O raw /dev/sharedsv/vm-101-disk-1
# qemu-img info win7-pve.vmdk
win7-pve.vmdk в каталог с образами ВМ /var/lib/vz/images/VMID, где VMID — VMID созданной ВМ;
# rbd map rbd01/vm-100-disk-1
/dev/rbd0
Примечание
# qemu-img convert -f vmdk win7-pve.vmdk -O raw /dev/rbd0
Примечание

Полное клонирование и Связанная копия;


smbios1 также генерируется новый UUID.
Примечание

Примечание

Связанная копия:






, и удалить их, нажав кнопку
. Для сохранения или отмены изменений используются кнопки
и
:

# qm set ID --tags 'linux;openuds'
# pct set 101 --tags 'linux;openuds'


# pvesh set /cluster/options --tag-style [case-sensitive=<1|0>]\
[,color-map=<tag>:<hex-color> [:<hex-color-for-text>][;<tag>=...]]\
[,ordering=<config|alphabetical>][,shape=<circle|dense|full|none>]
Например, следующая команда задаёт для тега «FreeIPA» чёрный цвет фона (#000000) и белый цвет текста (#FFFFFF), а для отображения тегов в дереве ресурсов устанавливает компактную форму:
# pvesh set /cluster/options --tag-style color-map=FreeIPA:000000:FFFFFF,shape=dense
Примечание
--tag-style необходимо учитывать, что передача новой конфигурации заменит ранее заданные переопределения стилей тегов.

# pvesh set /cluster/options --user-tag-access \
[user-allow=<existing|free|list|none>][,user-allow-list=<tag>[;<tag>...]]
Например, чтобы запретить пользователям использовать теги:
# pvesh set /cluster/options --user-tag-access user-allow=none
# pvesh set /cluster/options --registered-tags <tag>[;<tag>...]

vzdump.
mode) зависит от типа гостевой системы.
Примечание
rsync копирует данные контейнера во временный каталог, указанный параметром --tmpdir. Затем контейнер приостанавливается, а rsync копирует изменившиеся файлы. После этого контейнер возобновляет работу. Такой подход сокращает время простоя, но требует дополнительного места для временной копии данных контейнера.
--tmpdir: это может существенно повысить производительность. Локальный временный каталог также необходим для резервного копирования локального контейнера с использованием списков контроля доступа (ACL) в режиме Suspend, если резервные копии сохраняются на NFS-сервере.
Примечание
backup=0 в конфигурации контейнера:
mp0: local:210/vm-210-disk-1.raw,mp=/mnt/data,backup=0,size=8GВ этом случае содержимое
/mnt/data не будет включено в резервную копию.
Примечание



prune-backups команды vzdump):
keep-all=<1|0>) — если параметр включён, сохраняются все резервные копии, а остальные правила хранения не применяются;
keep-last=<N>) — сохранять последние <N> резервных копий;
keep-hourly=<N>) — сохранять резервные копии за последние <N> часов (если за один час создано несколько копий, сохраняется только последняя);
keep-daily=<N>) — сохранять резервные копии за последние <N> дней (если за один день создано несколько копий, сохраняется только последняя);
keep-weekly=<N>) — сохранять резервные копии за последние <N> недель (если за одну неделю создано несколько копий, сохраняется только последняя);
keep-monthly=<N>) — сохранять резервные копии за последние <N> месяцев (если за один месяц создано несколько копий, сохраняется только последняя);
keep-yearly=<N>) — сохранять резервные копии за последние <N> лет (если за один год создано несколько копий, сохраняется только последняя);
max-protected-backups) — максимальное количество защищённых резервных копий для одной гостевой системы, разрешённое в хранилище. Значение -1 означает отсутствие ограничения. По умолчанию ограничение отсутствует для пользователей с привилегией Datastore.Allocate и равно 5 для остальных пользователей.
keep-last. Каждое правило учитывает только те резервные копии, которые ещё не были учтены предыдущими правилами. Поэтому копии, сохранённые одним правилом, не учитываются повторно при обработке последующих правил.
# vzdump 777 --prune-backups keep-last=3,keep-daily=13,keep-yearly=9
lzo) — алгоритм сжатия данных без потерь. Для сжатия используется утилита lzop. LZO обеспечивает высокую скорость обработки данных, но степень сжатия зависит от содержимого резервной копии.
gzip) — алгоритм сжатия без потерь на основе Deflate. Позволяет уменьшить размер резервной копии; скорость сжатия и степень сжатия зависят от данных и настроек.
zstd) — алгоритм сжатия без потерь, обеспечивающий баланс между скоростью обработки и степенью сжатия. Поддерживает многопоточную обработку.
dump. Имя файла зависит от типа гостевой системы и алгоритма сжатия:
vzdump не сжимал файл.






Предупреждение
/etc/pve/jobs.cfg, которые анализируются и выполняются демоном pvescheduler.
systemd.time (см. man 7 systemd.time):
[ДЕНЬ_НЕДЕЛИ] [[ГОД-]МЕСЯЦ-ДЕНЬ] [ЧАСЫ:МИНУТЫ[:СЕКУНДЫ]]
mon, tue, wed, thu, fri, sat и sun. Поддерживаются списки (mon,wed,fri), диапазоны (mon..fri) и их комбинации. Если день недели не указан, ограничение по дню недели не применяется.
/. Если время не указано, расписание соответствует полуночи.
Таблица 37.1. Специальные значения
|
Расписание
|
Значение
|
Синтаксис
|
|---|---|---|
|
minutely
|
Каждую минуту
|
*-*-* *:*:00
|
|
hourly
|
Каждый час
|
*-*-* *:00:00
|
|
daily
|
Раз в день
|
*-*-* 00:00:00
|
|
weekly
|
Раз в неделю
|
mon *-*-* 00:00:00
|
|
monthly
|
Раз в месяц
|
*-*-01 00:00:00
|
|
yearly или annually
|
Раз в год
|
*-01-01 00:00:00
|
|
quarterly
|
Раз в квартал
|
*-01,04,07,10-01 00:00:00
|
|
semiannually или semi-annually
|
Раз в полгода
|
*-01,07-01 00:00:00
|
Таблица 37.2. Примеры
|
Расписание
|
Эквивалент
|
Значение
|
|---|---|---|
|
mon,tue,wed,thu,fri
|
mon..fri
|
Каждый будний день в 00:00
|
|
sat,sun
|
sat..sun
|
Каждую субботу и воскресенье в 00:00
|
|
mon,wed,fri
|
-
|
Каждый понедельник, среду и пятницу в 00:00
|
|
12:05
|
12:05
|
Каждый день в 12:05
|
|
*/5
|
0/5
|
Каждые пять минут
|
|
mon..wed 30/10
|
mon,tue,wed 30/10
|
По понедельникам, вторникам и средам в 30, 40 и 50 минут каждого часа
|
|
mon..fri 8..17,22:0/15
|
-
|
В будние дни каждые 15 минут с 08:00 до 17:45 и с 22:00 до 22:45
|
|
fri 12..13:5/20
|
fri 12,13:5/20
|
По пятницам в 12:05, 12:25, 12:45, 13:05, 13:25 и 13:45
|
|
12,14,16,18,20,22:5
|
12/2:5
|
Каждые два часа каждый день с 12:05 до 22:05
|
|
*
|
*/1
|
Ежеминутно (минимальный интервал)
|
|
*-05
|
-
|
Пятого числа каждого месяца
|
|
Sat *-1..7 15:00
|
-
|
В первую субботу каждого месяца в 15:00
|
|
2026-10-22
|
-
|
22 октября 2026 года в 00:00
|






sendmail, используя параметры mailto и mailnotification;
Примечание
sendmail работала и была настроена доставка сообщений. Например, при использовании Postfix его можно включить и запустить командой:
# systemctl enable --now postfix




/etc/pve/jobs.cfg):

pct restore — восстановление контейнера;
qmrestore — восстановление ВМ.
per-restore limit) — максимальная скорость чтения данных из резервной копии при выполнении операции восстановления;
per-storage write limit) — максимальная скорость записи данных в целевое хранилище.
Важно
bwlimit (в КиБ/с). Например, значение 10240 соответствует 10 МиБ/с. оставив ресурсы хранилища для работающих ВМ.
Примечание
0 отключает ограничение, заданное этим параметром.
# pvesm set <ID хранилища> --bwlimit restore=<KIBs>

--live-restore в команде qmrestore.

Примечание
/var/log/proxmox-backup/file-restore/. Журнал может содержать дополнительную информацию, если не удалось восстановить отдельные файлы или получить доступ к файловым системам внутри резервной копии.
/etc/vzdump.conf. Каждая строка файла содержит имя параметра и его значение в следующем формате:
OPTION: valueПустые строки и строки, начинающиеся с символа #, игнорируются.
Таблица 37.3. Параметры файла конфигурации
|
Опция
|
Описание
|
|---|---|
|
bwlimit: <целое число> (0 — N) (по умолчанию 0)
|
Ограничение скорости передачи данных при резервном копировании (КиБ/с)
|
|
compress: (0|1|gzip|lzo|zstd) (по умолчанию 0)
|
Метод сжатия. 0 означает отсутствие сжатия, а 1 — использование алгоритма по умолчанию (zstd)
|
|
dumpdir: <строка>
|
Каталог для сохранения файлов резервных копий
|
|
exclude-path: <массив>
|
Список файлов и каталогов, исключаемых из резервной копии контейнера. Абсолютные пути, начинающиеся с /, отсчитываются от корня файловой системы контейнера. Относительные пути сопоставляются с каталогами внутри дерева файлов контейнера
|
|
fleecing: [[enabled=]<1|0>] [,storage=<ID хранилища>]
|
Отложенное копирование (только для ВМ):
|
|
ionice: <целое число> (0 — 8) (по умолчанию 7)
|
Настройка приоритета ввода-вывода при использовании планировщика BFQ. Для резервных копий ВМ в режимах снимка (snapshot) и приостановки (suspend) этот параметр влияет только на работу компрессора (а не на основное копирование данных). Значение 8 означает, что используется приоритет простоя (idle), в противном случае используется стандартный приоритет (best-effort) с указанным уровнем
|
|
lockwait: <целое число> (0 — N) (по умолчанию 180)
|
Максимальное время ожидания получения глобальной блокировки (в минутах)
|
|
mailnotification: (always|failure) (по умолчанию always)
|
Устаревший параметр: следует использовать цели и сопоставители уведомлений. Указание, когда следует отправить отчет по электронной почте (используется при notification-mode: legacy-sendmail)
|
|
mailto: <строка>
|
Устаревший параметр: следует использовать цели и сопоставители уведомлений. Разделенный запятыми список адресов электронной почты или пользователей, которым будут приходить уведомления (используется при notification-mode: legacy-sendmail)
|
|
maxfiles: <целое число> (1 — N) (по умолчанию 1)
|
Устаревший параметр: для управления сроком хранения следует использовать prune-backups. Максимальное количество файлов резервных копий для каждой ВМ или контейнера
|
|
mode: (snapshot|stop|suspend) (по умолчанию snapshot)
|
Режим резервного копирования
|
|
notes-template: <строка>
|
Шаблон примечания с переменными: {{cluster}}, {{guestname}}, {{node}} и {{vmid}}. Шаблон должен быть записан в одну строку, новая строка и обратная косая черта должны быть экранированы как \n и \\ соответственно
|
|
notification-mode: <notification-system | legacy-sendmail>
|
Способ отправки уведомлений. Если установлено значение legacy-sendmail,
vzdump будет учитывать параметры mailto/mailnotification и отправлять электронные письма на указанные адреса с помощью команды sendmail. Если установлено значение notification-system, уведомление будет отправлено через систему уведомлений PVE, а параметры mailto/mailnotification игнорируются
|
|
pbs-change-detection-mode: <data | legacy | metadata>
|
Определяет режим обнаружения изменений при резервном копировании контейнера в PBS:
|
|
performance: [max-workers=<целое число>][,pbs-entries-max=<целое число>]
|
Другие настройки, связанные с производительностью:
|
|
pigz: <целое число> (по умолчанию 0)
|
Если N=0 при сжатии резервных копий используется gzip. Если N>0 — используется pigz.
При N=1 pigz использует половину ядер CPU, при N>1 pigz работает в многопоточном режиме с указанным количеством потоков (N)
|
|
pool: <строка>
|
Пул, из которого выбираются ВМ для резервного копирования
|
|
protected: <логическое значение>
|
Пометить резервную копию как защищённую от удаления средствами PVE
|
|
prune-backups: [keep-all=<1|0>] [,keep-daily=<N>] [,keep-hourly=<N>] [,keep-last=<N>] [,keep-monthly=<N>] [,keep-weekly=<N>] [,keep-yearly=<N>] (по умолчанию keep-all=1)
|
Политика хранения резервных копий (переопределяет настройки хранения, заданные для хранилища)
|
|
remove: <логическое значение> (по умолчанию 1)
|
Включает удаление старых резервных копий в соответствии с политикой prune-backups. При значении 0 очистка старых копий не выполняется
|
|
script: <строка>
|
Скрипт, вызываемый на определённых этапах резервного копирования
|
|
stdexcludes: <логическое значение> (по умолчанию 1)
|
Включает исключение стандартных временных файлов и файлов PID при резервном копировании контейнера
|
|
stopwait: <целое число> (0 — N) (по умолчанию 10)
|
Максимальное время ожидания остановки гостевой системы (в минутах)
|
|
storage: <строка>
|
Идентификатор целевого хранилища резервных копий
|
|
tmpdir: <строка>
|
Каталог для временных файлов, создаваемых при резервном копировании (рекомендуется — быстрый локальный диск)
|
|
zstd: <целое число> (по умолчанию 1)
|
Количество потоков, используемых для сжатия алгоритмом Zstandard:
|
vzdump.conf:
tmpdir: /mnt/fast_local_disk storage: my_backup_storage mode: snapshot bwlimit: 10000
--script. ОН вызывается на различных этапах процесса резервного копирования и получает параметры, соответствующие текущему этапу (см. пример скрипта /usr/share/doc/pve-manager/examples/vzdump-hook-script.pl).
Примечание
vzdump исключает из резервной копии следующие пути:
/tmp/?* /var/tmp/?* /var/run/?*pidИсключение стандартных путей можно отключить с помощью параметра
--stdexcludes 0.
# vzdump 777 --exclude-path /tmp/ --exclude-path '/var/foo*'
# vzdump 777 --exclude-path bar
Такой параметр исключает совпадающие пути, например /bar, /var/bar, /var/foo/bar и т.д.
/var/lib/vz/dump/):
# vzdump 103
# vzdump 103 --mode suspend
/mnt/backup:
# vzdump 103 --dumpdir /mnt/backup --mode snapshot
# vzdump 101 102 103
# vzdump --mode suspend --exclude 101,102
# vzdump 105 --storage pbs-backup --pbs-change-detection-mode metadata
# pct restore 600 /mnt/backup/vzdump-lxc-104.tar
# qmrestore /mnt/backup/vzdump-qemu-105.vma 601
# vzdump 101 --stdout | pct restore --rootfs 4 300 -



boot: order=scsi0;net0 cores: 1 cpu: x86-64-v2-AES memory: 2048 meta: creation-qemu=9.1.2,ctime=1746532273 name: NewVM net0: virtio=BC:24:11:40:5F:C3,bridge=vmbr0,firewall=1 numa: 0 ostype: l26 parent: first scsi0: local-lvm:vm-100-disk-0,size=52G scsihw: virtio-scsi-single smbios1: uuid=cafd8016-03d3-4514-8d6f-5f4e353e5936 sockets: 1 spice_enhancements: foldersharing=1 tags: admc;linux;openuds usb1: host=090c:1000 usb2: spice vga: qxl vmgenid: 31f7faef-4014-453b-ba8d-801e5634cc08 [first] boot: order=scsi0;net0 cores: 1 cpu: x86-64-v2-AES memory: 2048 meta: creation-qemu=9.1.2,ctime=1746532273 name: NewVM net0: virtio=BC:24:11:40:5F:C3,bridge=vmbr0,firewall=1 numa: 0 ostype: l26 scsi0: local-lvm:vm-100-disk-0,size=52G scsihw: virtio-scsi-single smbios1: uuid=cafd8016-03d3-4514-8d6f-5f4e353e5936 snaptime: 1746637751 sockets: 1 spice_enhancements: foldersharing=1 tags: admc;linux;openuds usb1: host=090c:1000 usb2: spice vga: qxl vmgenid: 31f7faef-4014-453b-ba8d-801e5634cc08
parent указывает на родительский снимок, относительно которого находится текущее состояние ВМ. Параметр snaptime содержит время создания снимка в формате Unix time — количество секунд, прошедших с 1 января 1970 года по UTC.
/etc/pve/notifications.cfg — основные настройки;
/etc/pve/priv/notifications.cfg — конфиденциальные параметры (пароли, токены аутентификации). Файл доступен для чтения только пользователю root.
sendmail для отправки электронных писем указанным получателям. Если в качестве получателя указан пользователь PVE, система использует адрес электронной почты из его профиля (адрес электронной почты пользователя можно настроить в разделе → → ). Если адрес электронной почты не указан, отправить уведомление этому пользователю не удастся.
Примечание
sendmail предоставляется почтовым агентом (MTA), например Postfix. Для корректной доставки писем может потребоваться настройка Postfix, в том числе указание внешнего ретранслятора. При ошибках доставки следует проверить системный журнал на наличие сообщений службы Postfix:
# journalctl -u postfix
Примечание
sendmail была доступна и почтовая система была настроена для отправки сообщений. В стандартной установке PVE команда обычно предоставляется Postfix. Если используется Postfix, необходимо добавить его в автозагрузку и запустить:
# systemctl enable --now postfix

notifications.cfg):
users.cfg;
email_from из файла datacenter.cfg). Если оно также не задано, используется адрес root@$hostname, где $hostname — имя узла.

/etc/pve/notifications.cfg):
sendmail: sendmails-admin
comment Отправка уведомлений администраторам
mailto user@example.test
mailto-user kim@test.alt
mailto-user orlov@test.alt
mailto-user root@pam
Примечание

notifications.cfg):
users.cfg;

/etc/pve/notifications.cfg:
smtp: smtp
from-address pve-mail@test.alt
mailto-user root@pam
mailto-user orlov@test.alt
mode tls
server mail.test.alt
username pve-mail
/etc/pve/priv/notifications.cfg:
smtp: smtp password somepassword

notifications.cfg):
/etc/pve/priv/notifications.cfg), доступном для чтения только пользователю root. При получении конфигурации через API возвращается имя секрета, но не его значение. В шаблонах URL, заголовков и тела запроса к секретам можно обращаться через пространство имён secrets.

/etc/pve/notifications.cfg:
webhook: ntfy
body e3sgbWVzc2FnZSB9fQ== # Закодированный {{ message }}
comment Отправка PUSH уведомлений
method post
url https://ntfy.sh/pve_backup_job_186
/etc/pve/priv/notifications.cfg:
webhook: ntfy secret name=channel,value=MTIzNDU2NDg3OA==
Примечание
body и значения value в записях header и secret хранятся в формате Base64.
$ echo -n 'pve_backup_job_186' | base64 -w 0
cHZlX2JhY2t1cF9qb2JfMTg2
{{ title }} — заголовок уведомления;
{{ message }} — тело уведомления;
{{ severity }} — уровень серьёзности (info, notice, warning, error, unknown);
{{ timestamp }} — временная метка в формате времени Unix (количество секунд с начала эпохи Unix);
{{ fields.<name> }} — метаданные события (например, fields.type содержит тип уведомления);
{{ secrets.<name> }} — секреты (например, секрет с именем token доступен через secrets.token).
{{ url-encode <value/property> }} — URL-кодирование значения или свойства;
{{ escape <value/property> }} — экранирование управляющих символов, которые нельзя безопасно представить в строке JSON;
{{ json <value/property> }} — преобразование значения в JSON. Например, {{ json fields }} позволяет представить всё пространство имён fields в формате JSON.
Примечание
matcher: always-matches
comment Это сопоставление всегда срабатывает
mode all
target mail-to-root
match-calendar сопоставляет временную метку уведомления с заданным расписанием.
match-calendar 8-12 — ежедневно с 8:00 до 12:00;
match-calendar 8:00-15:30 — ежедневно с 8:00 до 15:30;
match-calendar mon..fri 9:00-17:00 — в будние дни с 9:00 до 17:00;
match-calendar sun,tue..wed,fri 9-17 — в воскресенье, вторник, среду и пятницу с 9:00 до 17:00.
match-field фильтрует уведомления по значениям полей метаданных.
exact можно перечислить несколько значений через запятую. Правило срабатывает, если значение поля совпадает хотя бы с одним из указанных значений.
regex используется регулярное выражение.
match-field exact:type=vzdump — только уведомления о резервном копировании;
match-field exact:type=replication,fencing — уведомления о репликации и ограждении узлов;
match-field regex:hostname=^pve-.*$ — уведомления для узлов, имена которых начинаются с pve-.
match-field regex:hostname=.* соответствует только уведомлениям, содержащим поле hostname.
match-severity фильтрует уведомления по уровню серьёзности (severity) события. Поддерживаются следующие уровни: info, notice, warning, error, unknown.
match-severity error — только ошибки;
match-severity warning,error — предупреждения и ошибки.
Таблица 38.1. События уведомлений
|
Событие
|
Тип (type)
|
Серьезность
|
Поля метаданных (кроме type)
|
|---|---|---|---|
|
Доступны обновления пакетов
|
package-updates
|
info
|
hostname
|
|
Узел кластера изолирован механизмом ограждения
|
fencing
|
error
|
hostname
|
|
Задание репликации хранилища завершилось с ошибкой
|
replication
|
error
|
hostname, job-id
|
|
Резервное копирование выполнено успешно
|
vzdump
|
info
|
hostname, job-id (только для заданий резервного копирования)
|
|
Резервное копирование завершилось с ошибкой
|
vzdump
|
error
|
hostname, job-id (только для заданий резервного копирования)
|
|
Почта для пользователя root
|
system-mail
|
unknown
|
hostname
|
match-field.
Таблица 38.2. Описание полей метаданных
|
Поле
|
Описание
|
|---|---|
|
type
|
Тип события уведомления
|
|
hostname
|
Имя узла PVE без домена (например, pve01)
|
|
job-id
|
Идентификатор задания
|
Примечание
job-id) только в том случае, если задание резервного копирования было выполнено автоматически по расписанию. Если задание запущено вручную с помощью кнопки , поле job-id отсутствует.
/etc/pve/notifications.cfg):
matcher: workday
match-calendar mon..fri 9-17
target admin
comment Notify admins during working hours
matcher: night-and-weekend
match-calendar mon..fri 9-17
invert-match true
target on-call-admins
comment Separate target for non-working hours
matcher: zfs-error
match-calendar mon..fri 8-17
match-field exact:type=vzdump
match-severity error
mode all
target smtp



system-mail с уровнем серьёзности unknown и обрабатывает их в соответствии с глобальными настройками системы уведомлений.
/mapping/notifications.
/mapping/notifications: Mapping.Use, Mapping.Audit или Mapping.Modify.
notification-mode (Режим отправки уведомлений), который определяет способ отправки уведомлений. Поддерживаются следующие режимы:
notification-system) — отправлять уведомления в соответствии с глобальными настройками системы уведомлений PVE. Для маршрутизации используются настроенные цели и сопоставители уведомлений;
legacy-sendmail) — отправлять уведомления по электронной почте с помощью системной команды sendmail на адрес, указанный в конфигурации задания резервного копирования. В этом режиме можно выбрать, отправлять ли письмо после каждого выполнения задания или только при ошибке резервного копирования. Глобальные цели и сопоставители уведомлений не используются.
/usr/share/pve-manager/templates/default/.
/etc/pve/notification-templates/default/. При формировании уведомления PVE сначала пытается загрузить шаблон из каталога пользовательских шаблонов. Если файл отсутствует или его обработка завершается ошибкой, используется исходный шаблон.
Примечание
/etc/pve/notification-templates/default/ необходимо предварительно создать:
# mkdir -p /etc/pve/notification-templates/default/
vzdump-body.html.hbs содержит шаблон HTML-версии тела уведомления о резервном копировании, а package-updates-subject.txt.hbs — шаблон темы уведомления о доступных обновлениях пакетов.



# smartctl -a /dev/sdX
где /dev/sdX — путь к устройству, соответствующему локальному диску.
# smartctl -s on /dev/sdX

Примечание
ha-manager, который отслеживает состояние ресурсов и управляет их запуском, остановкой, перемещением и восстановлением в соответствии с конфигурацией HA.
ha-manager, называется ресурсом (service). Ресурс однозначно идентифицируется идентификатором службы (Service ID, SID), состоящим из типа ресурса и идентификатора, специфичного для данного типа:
pve-ha-lrm — локальный менеджер ресурсов (Local Resource Manager, LRM). Управляет ресурсами HA на локальном узле, получает сведения об их требуемом состоянии и выполняет соответствующие действия;
pve-ha-crm — кластерный менеджер ресурсов (Cluster Resource Manager, CRM). Координирует работу HA на уровне кластера, принимает решения о размещении и восстановлении ресурсов, передаёт команды LRM и обрабатывает результаты их выполнения. CRM также участвует в обеспечении безопасного переключения ресурсов при отказе узла.
Примечание
Примечание
Примечание
Примечание
/etc/modprobe.d/nohpwdt.conf со следующим содержимым:
# Do not load the 'hpwdt' module on boot. blacklist hpwdtДля применения изменений следует перезагрузить систему.
ha-manager);

fencing отображается состояние механизма ограждения узлов, связанное с работой watchdog кластерного менеджера ресурсов (CRM). Каждая строка lrm дополнительно содержит сведения о состоянии локального менеджера ресурсов и его watchdog.
armed (активен) — watchdog активирован. CRM поддерживает свой сторожевой таймер, пока выполняются необходимые условия работы HA. LRM также использует собственный watchdog в соответствии с состоянием локального менеджера и удерживаемой им блокировкой. При нарушении условий безопасной работы HA механизм watchdog может инициировать перезагрузку узла;
standby (ожидание) — watchdog CRM находится в режиме ожидания. Такое состояние может наблюдаться, например, при отсутствии ресурсов HA или до выбора главного узла после запуска кластера. После активации CRM состояние может измениться на armed;
disarming (отключение) — выполняется отключение HA с помощью команды disarm-ha. CRM прекращает обычное управление ресурсами в соответствии с выбранным режимом и ожидает освобождения watchdog всеми LRM. На этом этапе watchdog CRM ещё может оставаться активным;
disarmed (отключен) — сторожевые таймеры HA освобождены. Автоматическая изоляция узлов и восстановление ресурсов средствами HA в этом состоянии не выполняются.
ha-manager:
# ha-manager status
quorum OK
master pve01 (active, Mon Jul 6 15:14:51 2026)
fencing armed (CRM watchdog active)
lrm pve01 (active, watchdog active, Mon Jul 6 15:14:54 2026)
lrm pve02 (idle, watchdog standby, Mon Jul 6 15:14:53 2026)
lrm pve03 (active, watchdog active, Mon Jul 6 15:14:53 2026)
service ct:102 (pve01, started)
service ct:103 (pve03, stopped)
service vm:104 (pve01, started)
# ha-manager config
ct:102
state started
ct:103
max_relocate 2
state stopped
vm:104
state started
# ha-manager migrate vm:104 pve02
Примечание
# ha-manager relocate vm:104 pve02
# ha-manager remove ct:103
Примечание
stopped — служба остановлена (подтверждено LRM). Если LRM обнаружит, что служба фактически работает, он может повторно инициировать её остановку в соответствии с требуемым состоянием;
request_stop — CRM запросил остановку службы и ожидает подтверждения от LRM;
stopping — выполняется остановка службы; CRM ожидает подтверждения от LRM;
started — служба должна быть запущена и поддерживаться в работающем состоянии. Если служба не работает, LRM предпринимает действия для её запуска;
starting — выполняется запуск службы; CRM ожидает подтверждения от LRM;
fence — ожидается завершение ограждения узла, на котором выполнялась служба. Это необходимо, когда узел находится вне кворумной части кластера и требуется обеспечить безопасное переключение. После успешного ограждения служба переводится в состояние recovery;
recovery — выполняется восстановление службы. HA Manager выбирает подходящий узел с учётом доступности узлов, состояния кворума и настроенных правил размещения. После выбора узла служба переносится туда и сначала получает состояние stopped. Если служба должна быть запущена — узел её запускает;
freeze — управление службой временно приостановлено. Это состояние может использоваться, например, при перезагрузке узла или перезапуске LRM;
ignored — служба временно исключена из обычного управления HA. Это позволяет выполнять отдельные операции вручную без удаления ресурса из конфигурации HA;
migrate — выполняется миграция службы на другой узел;
error — служба отключена из-за ошибок LRM. Требуется ручное вмешательство;
queued — служба ожидает обработки кластерным менеджером ресурсов;
disabled — служба отключена от автоматического управления запуском средствами HA. Для возобновления автоматического управления необходимо изменить её состояние в конфигурации HA.
/etc/pve/ha/ и автоматически синхронизируются между узлами кластера.

# ha-manager add ct:108 --state started --max_relocate 2
ha-manager, хранится в файле /etc/pve/ha/resources.cfg в формате:
<тип>: <имя>
<свойство> <значение>
…
Таблица 40.1. Дополнительные свойства
|
Свойство
|
Описание
|
|---|---|
|
auto-rebalance: <логическое значение> (по умолчанию 1)
|
Определяет, может ли ресурс участвовать в автоматической перебалансировке нагрузки кластера
|
|
comment: <строка>
|
Описание ресурса
|
|
failback: <логическое значение> (по умолчанию 1)
|
Разрешает автоматически переносить ресурс на узел с наивысшим приоритетом согласно правилам привязки к узлам, если этот узел становится доступен
|
|
group: <строка>
|
Устаревший механизм. Идентификатор группы высокой доступности
|
|
max_relocate: <целое число> (0 — N) (по умолчанию 1)
|
Максимальное количество попыток перенести ресурс на другой узел после неудачных попыток запуска
|
|
max_restart: <целое число> (0 — N) (по умолчанию 1)
|
Максимальное количество попыток перезапустить ресурс на текущем узле после неудачного запуска. После исчерпания этих попыток HA Manager пытается перенести ресурс на другой узел
|
|
state: <disabled | enabled | ignore | started | stopped> (по умолчанию started)
|
Запрошенное состояние ресурса (
enabled — псевдоним для started)
|
/etc/pve/ha/resources.cfg):
ct: 103
state stopped
vm: 104
state started
ct: 102
max_relocate 2
state started
Примечание

/etc/pve/ha/rules.cfg. Формат файла:
<тип>: <имя_правила>
resources <список_ресурсов>
<свойство> <значение>
Таблица 40.2. Дополнительные свойства правил HA
|
Свойство
|
Описание
|
|---|---|
|
comment: <строка>
|
Описание правила HA
|
|
disable: <логическое значение>
|
Определяет, отключено ли правило
|
|
resources: <тип>:<имя>{,<тип>:<имя>}*
|
Список идентификаторов ресурсов HA, к которым применяется правило
|
Таблица 40.3. Типы правил HA
|
Тип правила
|
Описание
|
|---|---|
|
node-affinity
|
Задаёт предпочтительные или обязательные узлы для размещения ресурсов HA
|
|
resource-affinity
|
Задаёт взаимное расположение двух или более ресурсов:
positive — ресурсы должны размещаться на одном узле, negative — ресурсы должны размещаться на разных узлах
|

# ha-manager rules add node-affinity ha-rule-vm104 --resources vm:104 --nodes pve01
# ha-manager rules set node-affinity ha-rule-vm104 --strict 1
# ha-manager rules add node-affinity priority-cascade \
--resources ct:102,ct:103 --nodes "pve01:2,pve02:1,pve03:1,pve04"
В этом примере узел pve01 имеет наивысший приоритет, узлы pve02 и pve03 — одинаковый приоритет ниже, а pve04 — приоритет 0, который используется по умолчанию.
/etc/pve/ha/rules.cfg):
node-affinity: ha-rule-vm104
nodes pve01
resources vm:104
strict 1
node-affinity: priority-cascade
nodes pve01:2,pve02:1,pve03:1,pve04
resources ct:102,ct:103
Таблица 40.4. Свойства правила привязки к узлам
|
Свойство
|
Описание
|
|---|---|
|
nodes: <узел>[:<приоритет>]{,<узел>[:<приоритет>]}*
|
Список узлов кластера, которым могут назначаться приоритеты. Если приоритет не указан, используется значение 0
|
|
resources: <тип>: <имя>{,<тип>: <имя>}*
|
Список идентификаторов ресурсов HA, к которым применяется правило
|
|
strict: <логическое значение> (по умолчанию 0)
|
Определяет строгость привязки. При значении 0 ресурс может размещаться на других узлах, если указанные недоступны. При значении 1 ресурс ограничен указанными узлами
|
Важно

#Первое правило предписывает размещать ресурсы на одном узле, второе — на разных.ha-manager rules add resource-affinity keep-together\ --affinity positive --resources vm:104,ct:108 #ha-manager rules add resource-affinity keep-separate\ --affinity negative --resources vm:200,ct:300
Примечание
Примечание
/etc/pve/ha/rules.cfg):
resource-affinity: ha-rule-6827bc89-3620
affinity negative
resources ct:101,vm:104
Таблица 40.5. Свойства правила привязки ресурсов
|
Свойство
|
Описание
|
|---|---|
|
affinity: <negative | positive>
|
Определяет, должны ли ресурсы размещаться на одном узле (positive) или на разных узлах (negative)
|
|
resources: <тип>: <имя>{,<тип>: <имя>}*
|
Список идентификаторов ресурсов HA, к которым применяется правило
|
Примечание


# ha-manager crm-command disarm-ha freeze
или:
# ha-manager crm-command disarm-ha ignore
# ha-manager crm-command arm-ha
# ha-manager status
Примечание

Примечание
Примечание

Примечание
Предупреждение
Примечание
nftables в конфигурационном файле узла (/etc/pve/nodes/<node_name>/host.fw):
[OPTIONS] nftables: 1Перед включением этого параметра убедитесь, что установлен пакет proxmox-firewall. Если включить nftables без этого пакета, правила межсетевого экрана не будут созданы, поэтому узел и гостевые системы останутся без защиты.
/etc/pve/firewall/).
/etc/pve/firewall/cluster.fw содержит конфигурацию межсетевого экрана на уровне кластера. В нём задаются общие параметры, правила и другие объекты, используемые при настройке межсетевого экрана.
/etc/pve/firewall/cluster.fw может содержать следующие разделы:
Таблица 41.1. Опции секции [OPTIONS] файла cluster.fw
|
Опция
|
Описание
|
|---|---|
|
ebtables: <1|0> (по умолчанию 1)
|
Включить правила ebtables на уровне кластера
|
|
enable: <1|0>
|
Включить или отключить межсетевой экран на уровне кластера
|
|
log_ratelimit: [enable=]<1|0> [,burst=<integer>] [,rate=<rate>]
|
Настройки ограничения частоты записи сообщений в журнал (rate limiting).
|
|
policy_forward: <ACCEPT | DROP >
|
Политика по умолчанию для переадресованного трафика:
|
|
policy_in: <ACCEPT | DROP | REJECT>
|
Политика по умолчанию для входящего трафика:
|
|
policy_out: <ACCEPT | DROP | REJECT>
|
Политика по умолчанию для исходящего трафика. Значения аналогичны policy_in
|

enable в файле /etc/pve/firewall/cluster.fw:
[OPTIONS] # enable firewall (настройка для всего кластера, по умолчанию отключено) enable: 1
Важно
Примечание
/etc/pve/nodes/<nodename>/host.fw.
host.fw содержит следующие разделы:
Таблица 41.2. Опции секции [OPTIONS] конфигурации узла
|
Опция
|
Описание
|
|---|---|
|
enable: <1|0>
|
Включить или отключить межсетевой экран узла
|
|
log_level_forward: <alert | crit | debug | emerg | err | info | nolog | notice | warning>
|
Уровень журнала для переадресованного трафика. Используются следующие уровни:
|
|
log_level_in: <alert | crit | debug | emerg | err | info | nolog | notice | warning>
|
Уровень журналирования входящего трафика. Значения аналогичны log_level_forward
|
|
log_level_out: <alert | crit | debug | emerg | err | info | nolog | notice | warning>
|
Уровень журналирования исходящего трафика. Значения аналогичны log_level_forward
|
|
log_nf_conntrack: <1|0> (по умолчанию 0)
|
Включить журналирование информации об отслеживании соединений (conntrack)
|
|
ndp: <1|0> (по умолчанию 1)
|
Разрешить обработку пакетов протокола обнаружения соседей IPv6 (Neighbor Discovery Protocol, NDP)
|
|
nf_conntrack_allow_invalid: <1|0> (по умолчанию 0)
|
Разрешить недействительные пакеты при отслеживании соединений
|
|
nf_conntrack_helpers: <string> (по умолчанию ``)
|
Включить помощники отслеживания соединений для указанных протоколов. Поддерживаются amanda, ftp, irc, netbios-ns, pptp, sane, sip, snmp, tftp
|
|
nf_conntrack_max: <integer> (32768 — N) (по умолчанию 262144)
|
Максимальное количество отслеживаемых соединений
|
|
nf_conntrack_tcp_timeout_established: <integer> (7875 — N) (по умолчанию 432000)
|
Тайм-аут для TCP-соединений в состоянии ESTABLISHED
|
|
nf_conntrack_tcp_timeout_syn_recv: <integer> (30 — 60) (по умолчанию 60)
|
Тайм-аут для TCP-соединений в состоянии SYN_RECV
|
|
nftables: <1|0> (по умолчанию 0)
|
Включение межсетевого экрана на основе nftables (предварительная версия)
|
|
nosmurfs: <1|0>
|
Включить или отключить фильтрацию атак типа SMURF
|
|
protection_synflood: <1|0> (по умолчанию 0)
|
Включить защиту от SYN flood
|
|
protection_synflood_burst: <integer> (по умолчанию 1000)
|
Порог пакетной нагрузки для защиты от SYN flood на один IP-адрес источника
|
|
protection_synflood_rate: <integer> (по умолчанию 200)
|
Допустимая скорость SYN-пакетов в секунду для одного IP-адреса источника
|
|
smurf_log_level: <alert | crit | debug | emerg | err | info | nolog | notification | warning>
|
Уровень журналирования для фильтра SMURFS
|
|
tcp_flags_log_level: <alert | crit | debug | emerg | err | info | nolog | notification | warning>
|
Уровень журнала для фильтра недопустимых комбинаций флагов TCP
|
|
tcpflags: <1|0> (по умолчанию 0)
|
Включить фильтрацию недопустимых комбинаций флагов TCP
|

/etc/pve/firewall/<VMID>.fw, где <VMID> — идентификатор гостевой системы.
Таблица 41.3. Опции секции [OPTIONS] файла конфигурации ВМ/контейнера
|
Опция
|
Описание
|
|---|---|
|
dhcp: <1|0> (по умолчанию 0)
|
Разрешить DHCP-трафик
|
|
enable: <1|0>
|
Включить или отключить правила межсетевого экрана для ВМ или контейнера
|
|
ipfilter: <1|0>
|
Включить фильтры IP-адресов по умолчанию. Это эквивалентно добавлению пустого набора ipfilter-net<id> ipset для каждого сетевого интерфейса. Такие наборы неявно включают link-local IPv6-адрес, производный от MAC-адреса интерфейса. Для контейнеров в них также автоматически включаются настроенные IP-адреса
|
|
log_level_in: <alert | crit | debug | emerg | err | info | nolog | notice | warning>
|
Уровень журналирования входящего трафика. Используются следующие уровни:
|
|
log_level_out: <alert | crit | debug | emerg | err | info | nolog | notice | warning>
|
Уровень журналирования исходящего трафика. Значения аналогичны log_level_in
|
|
macfilter: <1|0> (по умолчанию 1)
|
Включить или отключить фильтрацию MAC-адресов
|
|
ndp: <1|0> (по умолчанию 1)
|
Разрешить обработку пакетов протокола обнаружения соседей IPv6 (NDP)
|
|
policy_in: <ACCEPT | DROP | REJECT>
|
Политика по умолчанию для входящего трафика. Возможные значения:
|
|
policy_out: <ACCEPT | DROP | REJECT>
|
Политика по умолчанию для исходящего трафика. Значения аналогичны policy_in
|
|
radv: <1|0>
|
Разрешить отправку объявлений маршрутизатора (Router Advertisement)
|


[RULES] DIRECTION ACTION [OPTIONS] |DIRECTION ACTION [OPTIONS] # отключенное правило DIRECTION MACRO(ACTION) [OPTIONS] # использование предопределённого макроса
Таблица 41.4. Параметры правила межсетевого экрана
|
Параметр
|
Описание
|
|---|---|
|
--dest <string>
|
Адрес назначения пакета. Можно указать IP-адрес, набор IP-адресов (+имя_набора), псевдоним IP-адреса, диапазон адресов или список адресов и сетей, разделённых запятыми. Не следует смешивать IPv4- и IPv6-адреса в одном списке
|
|
--dport <string>
|
Порт назначения TCP/UDP. Можно указать имя службы или номер порта в диапазоне 0-65535 (как определено в
/etc/services), а также диапазон портов в формате начало:конец, например 80:85. Несколько портов или диапазонов можно перечислить через запятую
|
|
--icmp-type <string>
|
Тип ICMP-сообщения. Применяется только при соответствующем значении параметра протокола
|
|
--iface <string>
|
Сетевой интерфейс, к которому применяется правило. Для ВМ и контейнеров указывают имя ключа сетевой конфигурации, например net0. Для правил узла можно использовать произвольные строки
|
|
--log <alert | crit | debug | emerg | err | info | nolog | notice | warning>
|
Уровень журналирования для правила
|
|
--proto <string>
|
IP-протокол. Можно указать имя протокола, например tcp или udp, либо его номер согласно
/etc/protocols
|
|
--source <string>
|
Исходный IP-адрес. Можно указать IP-адрес, набор IP-адресов (+имя_набора), псевдоним, диапазон адресов или список адресов и сетей, разделённых запятыми. Не следует смешивать IPv4- и IPv6-адреса в одном списке
|
|
--sport <string>
|
Исходный порт TCP/UDP. Можно указать имя службы или номер порта в диапазоне 0-65535, а также диапазон портов в формате начало:конец, например 80:85. Несколько портов или диапазонов можно перечислить через запятую
|
[RULES] IN SSH(ACCEPT) -i net0 IN SSH(ACCEPT) -i net0 # комментарий IN SSH(ACCEPT) -i net0 -source 192.168.0.192 # разрешить SSH только из 192.168.0.192 IN SSH(ACCEPT) -i net0 -source 10.0.0.1-10.0.0.10 # разрешить SSH для диапазона IP IN SSH(ACCEPT) -i net0 -source 10.0.0.1,10.0.0.2,10.0.0.3 # разрешить SSH для списка IP-адресов IN SSH(ACCEPT) -i net0 -source +mynetgroup # разрешить SSH для набора mynetgroup IN SSH(ACCEPT) -i net0 -source myserveralias # разрешить SSH для псевдонима myserveralias |IN SSH(ACCEPT) -i net0 # отключенное правило IN DROP # отбросить все входящие пакеты OUT ACCEPT # принять все исходящие пакеты

# /etc/pve/firewall/cluster.fw [group webserver] IN ACCEPT -p tcp -dport 80 IN ACCEPT -p tcp -dport 443
# /etc/pve/firewall/<VMID>.fw [RULES] GROUP webserver




source и dest правил межсетевого экрана.
# pve-firewall localnet
local hostname: pve01
local IP address: 192.168.0.186
network auto detect: 192.168.0.0/24
using detected local_network: 192.168.0.0/24
accepting corosync traffic from/to:
- pve02: 192.168.0.90 (link: 0)
- pve03: 192.168.0.70 (link: 0)
Межсетевой экран использует этот псевдоним при формировании правил, разрешающих трафик, необходимый для работы кластера, включая Corosync, API и SSH.
/etc/pve/firewall/cluster.fw. Если узел работает в публичной сети и не имеет других узлов в локальной сети, рекомендуется явно указать его IP-адрес, чтобы не использовать автоматически определённую сеть:
# /etc/pve/firewall/cluster.fw [ALIASES] local_network 192.168.0.186 # указать IP-адрес узла

source или dest.
IN HTTP(ACCEPT) -source +management




/etc/pve/firewall/cluster.fw:
[IPSET management] 192.168.0.90 192.168.0.0/24
/etc/pve/firewall/cluster.fw:
[IPSET blacklist] 77.240.159.182 213.87.123.0/24
/etc/pve/firewall/<VMID>.fw:
[IPSET ipfilter-net0] # разрешить на net0 только указанные IP-адреса 192.168.0.90
pve-firewall:
#Чтобы проверить состояние межсетевого экрана, выполните команду:pve-firewall start#pve-firewall stop
# pve-firewall status
Команда проверяет и компилирует правила межсетевого экрана. Если в конфигурации обнаружены ошибки, они отображаются в выводе команды.
# iptables-save

# iptables-save
Вывод этой команды также включается в системный отчёт, который можно получить с помощью команды:
# pvereport
loglevel не влияет на количество регистрируемого отфильтрованного трафика. Он определяет значение LOGID, добавляемое в начало записи журнала для упрощения фильтрации и последующей обработки.
Таблица 41.5. Значения параметра loglevel
|
loglevel
|
LOGID
|
|---|---|
|
nolog
|
—
|
|
emerg
|
0
|
|
alert
|
1
|
|
crit
|
2
|
|
err
|
3
|
|
warning
|
4
|
|
notice
|
5
|
|
info
|
6
|
|
debug
|
7
|
VMID LOGID CHAIN TIMESTAMP POLICY: PACKET_DETAILSДля межсетевого экрана узла значение VMID равен 0.
-log <loglevel>.
IN REJECT -p icmp -log nolog IN REJECT -p icmpСледующее правило:
IN REJECT -p icmp -log debugсоздаёт записи журнала с уровнем debug.
Таблица 41.6. Используемые порты
|
Порт
|
Функция
|
|---|---|
|
8006/TCP (HTTP/1.1 через TLS)
|
Веб-интерфейс PVE
|
|
5900–5999/TCP (WebSocket)
|
Доступ к консоли VNC
|
|
3128/TCP
|
Доступ к прокси-серверу SPICE
|
|
22/TCP
|
Доступ по SSH
|
|
111/UDP
|
Служба rpcbind
|
|
25/TCP (исходящий трафик)
|
Отправка почты (sendmail)
|
|
5405-5412/UDP
|
Трафик кластера Corosync
|
|
60000-60050/TCP
|
Живая миграция ВМ: передача памяти ВМ и данных локальных дисков
|
Важно
nftables управление межсетевым экраном передаётся новой службе proxmox-firewall. Проверить её состояние можно командой:
# systemctl status proxmox-firewall
pve-firewall больше не создаёт правила iptables (см. раздел Службы и команды).
nftables в 0.
proxmox-firewall создаёт две таблицы nftables, которыми управляет: proxmox-firewall и proxmox-firewall-guests.
pve-firewall для управления межсетевым экраном на основе nftables используется proxmox-firewall. Запускать и останавливать её можно с помощью systemctl:
#systemctl start proxmox-firewall#systemctl stop proxmox-firewall
# systemctl status proxmox-firewall
# nft list ruleset
compile. Кроме того, переменная окружения PVE_LOG позволяет выводить сообщения журнала в стандартный поток ошибок (STDERR). Это может быть полезно при диагностике проблем, возникающих во время формирования набора правил nftables.
# PVE_LOG=trace /usr/libexec/proxmox/proxmox-firewall compile > firewall.json
# /usr/libexec/proxmox/proxmox-firewall skeleton
nft. Следующие команды позволяют заново создать весь набор правил nftables:
#/usr/libexec/proxmox/proxmox-firewall skeleton | nft -f -#/usr/libexec/proxmox/proxmox-firewall compile | nft -j -f -
# systemctl edit proxmox-firewall
[Service] Environment="PVE_LOG=trace"
nftrace. Не рекомендуется включать отслеживание для всех пакетов. В следующем примере отслеживаются только пакеты ICMP.
#!/usr/sbin/nft -f
table bridge tracebridge
delete table bridge tracebridge
table bridge tracebridge {
chain trace {
meta l4proto icmp meta nftrace set 1
}
chain prerouting {
type filter hook prerouting priority -350; policy accept;
jump trace
}
chain postrouting {
type filter hook postrouting priority -350; policy accept;
jump trace
}
}
# nft monitor trace
Примечание
# nft delete table bridge tracebridge

/etc/pve/user.cfg:
# cat /etc/pve/user.cfg
user:root@pam:1:0::::::
user:test@pve:1:0::::::
user:testuser@pve:1:0::::Just a test::
user:user@pam:1:0::::::
group:admin:user@pam::
group:testgroup:test@pve::
Запись о пользователе содержит его идентификатор, состояние учётной записи, срок действия и другие атрибуты, в том числе имя, фамилию, адрес электронной почты и комментарий. Членство в группах описывается отдельными записями.

Примечание

Примечание
Примечание


# pveum user token add <userid> <tokenid> [ОПЦИИ]
Доступные параметры:
--comment <строка> — комментарий к токену;
--expire <целое число> — время истечения срока действия API-токена в секундах с начала эпохи Unix. По умолчанию срок действия API-токена совпадает со сроком действия пользователя. Значение 0 означает отсутствие ограничения срока действия токена;
--privsep <логическое значение> — определяет, используется ли разделение привилегий. Значение 1 включает разделение привилегий (по умолчанию), а значение 0 позволяет токену использовать разрешения связанного с ним пользователя.
# pveum user token add user@pam t2 --privsep 0
┌──────────────┬──────────────────────────────────────┐
│ key │ value │
╞══════════════╪══════════════════════════════════════╡
│ full-tokenid │ user@pam!t2 │
├──────────────┼──────────────────────────────────────┤
│ info │ {"privsep":"0"} │
├──────────────┼──────────────────────────────────────┤
│ value │ 3c749375-e189-493d-8037-a1179317c406 │
└──────────────┴──────────────────────────────────────┘
# pveum user token list user@pam
┌─────────────┬─────────┬────────┬─────────┐
│ tokenid │ comment │ expire │ privsep │
╞═════════════╪═════════╪════════╪═════════╡
│ monitoring │ │ 0 │ 1 │
├─────────────┼─────────┼────────┼─────────┤
│ t2 │ │ 0 │ 0 │
└─────────────┴─────────┴────────┴─────────┘
# pveum user token permissions user@pam t2
Можно использовать опцию --path, чтобы вывести разрешения только для определённого пути, а не всё дерево разрешений:
# pveum user token permissions user@pam t2 --path /storage
# pveum acl modify /vms --tokens 'user@pam!monitoring' --roles PVEAdmin,PVEAuditor
# pveum user token remove user@pam t2
Примечание
# pveum acl modify /vms --users test@pve --roles PVEVMAdmin
# pveum user token add test@pve monitoring --privsep 1
# pveum acl modify /vms --tokens 'test@pve!monitoring' --roles PVEAuditor
#pveum user permissions test@pve#pveum user token permissions test@pve monitoring
Authorization со значением следующего формата:
PVEAPIToken=USER@REALM!TOKENID=UUID



# pveum pool add IT --comment 'IT development pool'
# pveum pool list
┌────────┬─────────────────────┬─────────┐
│ poolid │ comment │ members │
╞════════╪═════════════════════╪═════════╡
│ IT │ IT development pool │ │
├────────┼─────────────────────┼─────────┤
│ mypool │ │ │
└────────┴─────────────────────┴─────────┘
# pveum pool modify IT --vms 201,108,202,104,208 --storage mpath2,nfs-storage
# pveum pool modify IT --delete 1 --vms 108,104
# pveum pool delete IT
Примечание
/etc/pve/domains.cfg.


/etc/pve/priv/shadow.cfg и формируются с использованием алгоритма SHA-256. Пользователи управляются средствами PVE и могут изменять свои пароли через графический интерфейс.


# pveum useradd testuser@pve -comment "Just a test"
# pveum passwd testuser@pve
# pveum usermod testuser@pve -enable 0
# pveum groupadd testgroup
# pveum roleadd VM_Power-only -privs "VM.PowerMgmt VM.Console"


/etc/pve/priv/realm/<realmname>.pw;



Примечание
# pveum realm sync example.test --scope both
Значение example.test должно совпадать с идентификатором области аутентификации, заданным в PVE. Параметр --scope both указывает на синхронизацию пользователей и групп.



/etc/pve/priv/realm/<realmname>.pw;


Примечание
# pveum realm sync test.alt --scope both
Значение test.alt должно совпадать с идентификатором области аутентификации, заданным в PVE. Параметр --scope both указывает на синхронизацию пользователей и групп.





oathkeygen, который выводит случайный ключ в кодировке Base32. Ключ можно использовать с совместимыми приложениями и инструментами, например oathtool или FreeOTP.
Примечание
Примечание






# pveum user tfa unlock orlov@test.alt
Важно


# pveum role add VM_Power-only --privs "VM.PowerMgmt VM.Console"
Примечание
Таблица 42.1. Привилегии, используемые в PVE
|
Привилегия
|
Описание
|
|---|---|
|
Привилегии узла/системы
|
|
|
Group.Allocate
|
Создание/удаление/изменение групп
|
|
Mapping.Audit
|
Просмотр сопоставлений ресурсов
|
|
Mapping.Modify
|
Управление сопоставлениями ресурсов
|
|
Mapping.Use
|
Использование сопоставлений ресурсов
|
|
Permissions.Modify
|
Изменение прав доступа
|
|
Pool.Allocate
|
Создание/удаление/изменение пулов
|
|
Pool.Audit
|
Просмотр пула
|
|
Realm.Allocate
|
Создание/удаление/изменение областей аутентификации
|
|
Realm.AllocateUser
|
Создание пользователей в области аутентификации
|
|
SDN.Allocate
|
Управление конфигурацией SDN
|
|
SDN.Audit
|
Просмотр конфигурации SDN
|
|
Sys.AccessNetwork
|
Просмотр информации о сетевых интерфейсах, использование сетевых ресурсов
|
|
Sys.Audit
|
Просмотр состояния и конфигурации узла, конфигурации Corosync и HA
|
|
Sys.Console
|
Консольный доступ к узлу
|
|
Sys.Incoming
|
Разрешение приёма потоков данных из других кластеров (экспериментальная привилегия)
|
|
Sys.Modify
|
Изменение конфигурации узла
|
|
Sys.PowerMgmt
|
Управление питанием узла (запуск, остановка, сброс, выключение)
|
|
Sys.Syslog
|
Просмотр Syslog
|
|
User.Modify
|
Создание/удаление/изменение пользователя
|
|
Права, связанные с ВМ
|
|
|
SDN.Use
|
Доступ к виртуальным сетям SDN и локальным сетевым мостам
|
|
VM.Allocate
|
Создание/удаление ВМ
|
|
VM.Audit
|
Просмотр конфигурации ВМ
|
|
VM.Backup
|
Резервное копирование/восстановление ВМ
|
|
VM.Clone
|
Клонирование/копирование ВМ
|
|
VM.Config.CDROM
|
Извлечение и изменение настроек виртуального CD/DVD-привода
|
|
VM.Config.CPU
|
Изменение настроек процессора
|
|
VM.Config.Cloudinit
|
Изменение параметров Cloud-init
|
|
VM.Config.Disk
|
Добавление/изменение/удаление дисков ВМ
|
|
VM.Config.HWType
|
Изменение типа виртуального оборудования
|
|
VM.Config.Memory
|
Изменение настроек памяти
|
|
VM.Config.Network
|
Добавление/изменение/удаление сетевых устройств
|
|
VM.Config.Options
|
Изменение любой другой конфигурации ВМ
|
|
VM.Console
|
Консольный доступ к ВМ
|
|
VM.GuestAgent.Audit
|
Выполнение информационных команд QEMU Guest Agent
|
|
VM.GuestAgent.FileRead
|
Чтение файлов в гостевой системе через QEMU Guest Agent
|
|
VM.GuestAgent.FileSystemMgmt
|
Замораживание, размораживание и выполнение TRIM для файловых систем гостевой ОС через QEMU Guest Agent
|
|
VM.GuestAgent.FileWrite
|
Запись файлов в гостевой системе через QEMU Guest Agent
|
|
VM.GuestAgent.Unrestricted
|
Выполнение произвольных команд QEMU Guest Agent без ограничений
|
|
VM.Migrate
|
Миграция ВМ на другой узел кластера
|
|
VM.PowerMgmt
|
Управление питанием (запуск, остановка, сброс, выключение)
|
|
VM.Replicate
|
Настройка и выполнение репликации гостевой ВМ
|
|
VM.Snapshot.Rollback
|
Откат ВМ к одному из её снимков
|
|
VM.Snapshot
|
Создание/удаление снимков ВМ
|
|
Права, связанные с хранилищем
|
|
|
Datastore.Allocate
|
Создание/удаление/изменение хранилища данных
|
|
Datastore.AllocateSpace
|
Выделение места в хранилище
|
|
Datastore.AllocateTemplate
|
Размещение шаблонов контейнеров и ISO-образов в хранилище
|
|
Datastore.Audit
|
Просмотр хранилища данных
|
Примечание
/nodes/{node} — доступ к узлам PVE;
/vms — распространяется на все ВМ;
/vms/{vmid} — доступ к определенным ВМ;
/storage/{storeid} — доступ к определенным хранилищам;
/pool/{poolid} — доступ к ресурсам из определенного пула ресурсов;
/access/groups — администрирование групп;
/access/realms/{realmid} — административный доступ к области аутентификации.


# pveum acl modify / --groups admin --roles Administrator
# pveum acl modify /vms --users test@pve --roles PVEAuditor
# pveum acl modify /access --users test@pve --roles PVEUserAdmin
#pveum acl modify /access/realm/test.alt --users orlov@test.alt --roles PVEUserAdmin#pveum acl modify /access/groups/office-test.alt --users orlov@test.alt --roles PVEUserAdmin
# pveum acl modify /pool/IT/ --groups developers --roles PVEAdmin
# pveum acl delete /vms --users test@pve --roles PVEAuditor
Примечание
pvenode task, а также через веб-интерфейс PVE.
pvenode task и их параметры приведены в таблице Команды pvenode task.
Таблица 43.1. Команды pvenode task
|
Команда
|
Описание
|
|---|---|
pvenode task list [Параметры]
|
Вывести список задач узла.
Параметры:
|
pvenode task log <upid> [Параметры]
|
Вывести журнал указанной задачи.
Параметры:
|
pvenode task status <upid>
|
Вывести сведения о состоянии указанной задачи.
|
Примечание
UPID:$node:$pid:$pstart:$starttime:$dtype:$id:$userПоля
pid, pstart и starttime представлены в шестнадцатеричном формате. Поле starttime содержит время начала задачи в формате Unix time.
pvenode task:
# pvenode task list --errors --vmid 104
Список задач будет представлен в виде таблицы:

# pvenode task list --userfilter user
# pvenode task log UPID:pve01:0002277F:0033E9A0:681B87A1:qmsnapshot:102:root@pam:
Пример вывода:
snapshotting 'drive-scsi0' (local-lvm:vm-102-disk-0) Logical volume "snap_vm-102-disk-0_first" created. TASK OK
# pvenode task status UPID:pve01:0002277F:0033E9A0:681B87A1:qmsnapshot:102:root@pam:
Пример вывода:
┌────────────┬────────────────────────────────────────────────────────────────┐ │ key │ value │ ╞════════════╪════════════════════════════════════════════════════════════════╡ │ exitstatus │ OK │ ├────────────┼────────────────────────────────────────────────────────────────┤ │ id │ 102 │ ├────────────┼────────────────────────────────────────────────────────────────┤ │ node │ pve01 │ ├────────────┼────────────────────────────────────────────────────────────────┤ │ pid │ 141183 │ ├────────────┼────────────────────────────────────────────────────────────────┤ │ pstart │ 3402144 │ ├────────────┼────────────────────────────────────────────────────────────────┤ │ starttime │ 1746634657 │ ├────────────┼────────────────────────────────────────────────────────────────┤ │ status │ stopped │ ├────────────┼────────────────────────────────────────────────────────────────┤ │ type │ qmsnapshot │ ├────────────┼────────────────────────────────────────────────────────────────┤ │ upid │ UPID:pve01:0002277F:0033E9A0:681B87A1:qmsnapshot:102:root@pam: │ ├────────────┼────────────────────────────────────────────────────────────────┤ │ user │ root@pam │ └────────────┴────────────────────────────────────────────────────────────────┘


Примечание
Примечание




pvesh (см. ниже) предоставляет интерфейс командной строки для выполнения операций через API PVE.
Примечание
--data-urlencode.
curl.
Примечание
/var/lib/rrdcached/, например, выполнив команду:
# find /var/lib/rrdcached -type f -mtime +5 -delete
Или, добавив соответствующее задание в crontab.
https://server:8006/api2/json/
application/x-www-form-urlencoded — для методов POST и PUT.
$ curl -k -d 'username=root@pam' --data-urlencode 'password=xxxxxxxxx' \
https://192.168.0.186:8006/api2/json/access/ticket
Примечание
$ curl -k -d 'username=root@pam' --data-urlencode "password@$HOME/.pve-pass-file" \
https://192.168.0.186:8006/api2/json/access/ticket
Примечание
.pve-pass-file должен содержать пароль без завершающего символа перевода строки. Доступ к файлу необходимо ограничить, например, разрешив чтение только его владельцу:
$echo -n "пароль" > ./.pve-pass-file$chmod 600 "$HOME/.pve-pass-file"
Примечание
jq (должен быть установлен пакет jq):
$ curl -k -d 'username=root@pam' --data-urlencode "password@$HOME/.pve-pass-file" \
https://192.168.0.186:8006/api2/json/access/ticket | jq
{
"data": {
"ticket":"PVE:root@pam:66AA52D6::d85E+IIFAuG731…",
"CSRFPreventionToken":"66AA52D6:Y2zvIXjRVpxx4ZG74F14Ab0EHn8NRoso/WmVqZEnAuM",
"username":"root@pam"
}
}
Примечание
$ curl -k -b "PVEAuthCookie=PVE:root@pam:66AA52D6::d85E+IIFAuG731…" \
https://192.168.0.186:8006/api2/json/
Ответ:
{
"data": [
{ "subdir": "version" },
{ "subdir": "cluster" },
{ "subdir": "nodes" },
{ "subdir": "storage" },
{ "subdir": "access" },
{ "subdir": "pools" }
]
}
Примечание
--cookie (-b).
$ curl -k -X 'DELETE' \
'https://pve01:8006/api2/json/access/users/testuser@pve' \
-b "PVEAuthCookie=PVE:root@pam:66AA52D6::d85E+IIFAuG731…" \
-H "CSRFPreventionToken: 66AA52D6:Y2zvIXjRVpxx4ZG74F14Ab0EHn8NRoso/WmVqZEnAuM"
$ curl -H 'Authorization: PVEAPIToken=root@pam!test=373007e1-4ecb-4e56-b843-d0fbed543375' \
https://192.168.0.186:8006/api2/json/access/users
$ curl -k -X 'POST' \
'https://pve01:8006/api2/json/access/users' \
--data-urlencode 'userid=testuser@pve' \
-H 'Authorization: PVEAPIToken=root@pam!test=373007e1-4ecb-4e56-b843-d0fbed543375'
$ curl -k -X 'DELETE' \
'https://pve01:8006/api2/json/access/users/testuser@pve' \
-H 'Authorization: PVEAPIToken=root@pam!test=373007e1-4ecb-4e56-b843-d0fbed543375'
Примечание
curl: (60) SSL certificate problem: unable to get local issuer certificateможно дополнить запрос опцией
--insecure (-k), чтобы отключить проверку сертификата сервера:
$ curl -k -H 'Authorization: PVEAPIToken=root@pam!test=373007e1-4ecb-4e56-b843-d0fbed543375' \
https://192.168.0.186:8006/api2/json/
Примечание
cookie — файл, содержащий cookie аутентификации;
csrftoken — файл, содержащий CSRF-токен.
$export APINODE=pve01$export TARGETNODE=pve03
$ response=$(curl --silent --show-error --fail --insecure \
--data-urlencode 'username=root@pam' \
--data-urlencode "password@$HOME/.pve-pass-file" \
"https://$APINODE:8006/api2/json/access/ticket")
В примере предполагается, что пароль сохранён в файле $HOME/.pve-pass-file.
$printf'PVEAuthCookie=%s' \ "$(printf '%s' "$response" | jq -er '.data.ticket')" > cookie $printf'CSRFPreventionToken: %s' \ "$(printf '%s' "$response" | jq -er '.data.CSRFPreventionToken')" > csrftoken $chmod 600 cookie csrftoken
$ curl --silent --show-error --fail --insecure \
--cookie "$(<cookie)" \
"https://$APINODE:8006/api2/json/nodes/$TARGETNODE/status" | jq .
$ curl --silent --show-error --fail --insecure \
--cookie "$(<cookie)" \
--header "$(<csrftoken)" \
--request POST \
--data-urlencode 'net0=name=eth0,bridge=vmbr0' \
--data-urlencode 'ostemplate=nfs-storage:vztmpl/alt-p11-rootfs-systemd-x86_64.tar.xz' \
--data-urlencode storage="local" \
--data-urlencode 'vmid=601' \
"https://$APINODE:8006/api2/json/nodes/$TARGETNODE/lxc" | jq .
Пример ответа:
{
"data": "UPID:pve03:00005470:00083F6D:66A76C80:vzcreate:601:root@pam:"
}
Ответ содержит идентификатор задачи (UPID), запущенной для создания контейнера.
Примечание
pvesh) позволяет вызывать методы API непосредственно из командной строки, без обращения к серверу REST/HTTPS:
# pvesh ls /
Dr--- access
Dr--- cluster
Dr--- nodes
Drwcd pools
Dr-c- storage
-r--- version
Примечание
pvesh необходимы права пользователя root.
# pvesh get /version
# pvesh get /nodes
# pvesh usage cluster/options -v
# pvesh create /access/users --userid testuser@pve
# pvesh delete /access/users/testuser@pve
# pvesh set cluster/options -console html5
# pvesh create nodes/pve03/lxc -vmid 210 -hostname test --storage local \
--password "supersecret" \
--ostemplate nfs-storage:vztmpl/alt-p11-rootfs-systemd-x86_64.tar.xz \
--memory 512 --swap 512
Команда возвращает идентификатор задачи, выполняющей создание контейнера:
UPID:pve03:0000286E:0003553C:66A75FE7:vzcreate:210:root@pam:
# pvesh create /nodes/pve03/lxc/210/status/start
Пример ответа:
UPID:pve03:0000294B:00036B33:66A7601F:vzstart:210:root@pam

# pvedaemon help
# pvedaemon restart
# pvedaemon start
# pvedaemon start --debug 1
# pvedaemon status
# pvedaemon stop
pvedaemon предоставляет весь API PVE на 127.0.0.1:85. Она работает от имени пользователя root и имеет разрешение на выполнение всех привилегированных операций.
Примечание
pveproxy.
pvedaemon передаёт обработку входящих запросов рабочим процессам. По умолчанию запускаются три рабочих процесса, чего достаточно для большинства нагрузок.
MAX_WORKERS в файле /etc/default/pvedaemon. Например:
MAX_WORKERS=5
pveproxy.
pveproxy предоставляет весь PVE API на TCP-порту 8006 с использованием HTTPS. Она работает от имени пользователя www-data и имеет минимальные разрешения. Операции, требующие дополнительных разрешений, перенаправляются локальному pvedaemon.
pveproxy можно настроить списки контроля доступа, аналогичные спискам, используемым в Apache HTTP Server. Параметры задаются в файле /etc/default/pveproxy. Например:
ALLOW_FROM="10.0.0.1-10.0.0.5,192.168.0.0/22" DENY_FROM="all" POLICY="allow"IP-адреса можно указывать в форматах, поддерживаемых модулем Perl Net::IP. Значение
all обозначает все адреса IPv4 и IPv6 (0/0 и ::/0).
POLICY имеет значение allow.
Таблица 45.1. Правила обработки запросов
|
Соответствие
|
POLICY=deny
|
POLICY=allow
|
|---|---|---|
|
Соответствует только Allow
|
Запрос разрешён
|
Запрос разрешён
|
|
Соответствует только Deny
|
Запрос отклонён
|
Запрос отклонён
|
|
Нет соответствий
|
Запрос отклонён
|
Запрос разрешён
|
|
Соответствует и Allow, и Deny
|
Запрос отклонён
|
Запрос разрешён
|
pveproxy и spiceproxy прослушивают подстановочный адрес, принимая соединения по IPv4 и IPv6.
LISTEN_IP в файле /etc/default/pveproxy позволяет указать IP-адрес, на котором будут принимать соединения службы pveproxy и spiceproxy. IP-адрес должен быть настроен в системе.
sysctl net.ipv6.bindv6only в значение 1 (sysctl net.ipv6.bindv6only=1), службы будут принимать соединения только по IPv6. Это может нарушить доступ к службам по IPv4. В таком случае следует восстановить значение параметра, обеспечивающее требуемое поведение, либо явно задать адрес прослушивания в LISTEN_IP.
LISTEN_IP="0.0.0.0"Чтобы ограничить прослушивание конкретным адресом IPv4:
LISTEN_IP="192.168.0.186"Для IPv6 можно указать:
LISTEN_IP="2001:db8:85a3::1"Если используется локальный IPv6-адрес, необходимо указать имя интерфейса:
LISTEN_IP="fe80::c463:8cff:feb9:6a4e%vmbr0"
Примечание
LISTEN_IP в кластерной конфигурации без необходимости: ограничение адреса прослушивания может нарушить взаимодействие между узлами.
pveproxy и spiceproxy:
# systemctl restart pveproxy.service spiceproxy.service
Примечание
pveproxy может прервать текущие подключения к веб-интерфейсу, включая сеансы консоли или оболочки виртуальных машин. Выполняйте перезапуск в подходящее время, учитывая возможное прерывание активных сеансов.
/etc/default/pveproxy:
CIPHERS — наборы шифров для TLS 1.2 и более ранних версий, поддерживаемых службой;
CIPHERSUITES — наборы шифров для TLS 1.3.
CIPHERS="ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256" CIPHERSUITES="TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256"
HONOR_CIPHER_ORDER определяет, учитывается ли порядок наборов шифров, заданный на стороне сервера, при согласовании соединения. Например:
HONOR_CIPHER_ORDER=0
/etc/default/pveproxy:
DISABLE_TLS_1_2=1или:
DISABLE_TLS_1_3=1
Примечание
/etc/default/pveproxy, указав в DHPARAMS путь к файлу, содержащему параметры DH в формате PEM, например:
DHPARAMS="/path/to/dhparams.pem"Если этот параметр не задан, используются встроенные параметры skip2048.
Примечание
/etc/pve/local/pveproxy-ssl.pem и /etc/pve/local/pveproxy-ssl.key существуют, pveproxy использует их. В противном случае используются файлы /etc/pve/local/pve-ssl.pem и /etc/pve/local/pve-ssl.key.
TLS_KEY_FILE в /etc/default/pveproxy. Например:
TLS_KEY_FILE="/secrets/pveproxy.key"
pveproxy использует сжатие HTTP-ответов методом gzip, если клиент поддерживает его. Чтобы отключить сжатие, задайте в файле /etc/default/pveproxy:
COMPRESSION=0
Примечание
pveproxy записывает в журнал IP-адрес клиента, отправившего запрос. Если перед pveproxy установлен прокси-сервер, может потребоваться регистрировать IP-адрес исходного клиента, а не прокси-сервера.
PROXY_REAL_IP_HEADER. Например:
PROXY_REAL_IP_HEADER="X-Forwarded-For"
PROXY_REAL_IP_ALLOW_FROM. Например:
PROXY_REAL_IP_ALLOW_FROM="192.168.0.2"
PROXY_REAL_IP_ALLOW_FROM поддерживает форматы адресов, аналогичные используемым в параметрах ALLOW_FROM и DENY_FROM.
pveproxy передаёт обработку входящих запросов рабочим процессам. По умолчанию запускаются три рабочих процесса, чего достаточно для большинства нагрузок.
MAX_WORKERS в файле /etc/default/pveproxy. Например:
MAX_WORKERS=5
pvedaemon.
pvestatd периодически собирает сведения о состоянии ВМ, контейнеров и хранилищ и обновляет данные о состоянии системы.
spiceproxy прослушивает TCP-порт 3128 и работает как HTTP-прокси, перенаправляя запросы CONNECT от SPICE-клиентов к ВМ. Служба работает от имени пользователя www-data и имеет ограниченные привилегии.
spiceproxy можно настроить списки контроля доступа по аналогии с pveproxy. Параметры задаются в файле /etc/default/pveproxy. Подробнее см. раздел pveproxy — служба PVE API Proxy.
pvescheduler отвечает за выполнение запланированных задач, в том числе задач резервного копирования и репликации.
/etc/pve/jobs.cfg.
Примечание



apt-get или через веб-интерфейс ( → ).

# apt-get update


Примечание
Примечание
Важно
/etc.
alt-virtualization-pve-11.1-x86_64.iso.
Предупреждение
/etc/network/interfaces;
/etc/pve/storage.cfg для подключения внешнего хранилища, используемого для резервного копирования;
/etc/pve/firewall/;
/etc/pve/nodes/<node>/host.fw (если применимо);
sysctl.conf параметр:
net.ipv4.ip_forward = 1
pvecm status).
alt-virtualization-pve-11.1-x86_64.iso.
Предупреждение
/etc/pve синхронизирован и узел появился в кластере.
Примечание
size=3, свободное место в кластере — не менее объёма данных одного OSD (желательно с запасом 30 %), а заполненность OSD не должна превышать 70–75 %. В кластере из трёх OSD любые операции по их выводу допустимы, но считаются пограничными и требуют повышенного контроля.
# pvecm status
…
Quorum information
------------------
Date: Wed Feb 4 16:34:33 2026
Quorum provider: corosync_votequorum
Nodes: 3
Node ID: 0x00000001
Ring ID: 1.27
Quorate: Yes
# ceph -s
cluster:
id: e2a86754-35d1-4e63-a41b-35aafa5e0542
health: HEALTH_OK
services:
mon: 3 daemons, quorum pve01,pve02,pve03 (age 38s)
mgr: pve03(active, since 2m), standbys: pve01
mds: 1/1 daemons up, 1 standby
osd: 3 osds: 3 up (since 24m), 3 in (since 58m)
data:
volumes: 1/1 healthy
pools: 3 pools, 65 pgs
objects: 24 objects, 595 KiB
usage: 222 MiB used, 315 GiB / 315 GiB avail
pgs: 65 active+clean
#pveceph mon destroy <mon_id>#pveceph mgr destroy <mgr_id>#pveceph mds destroy <mds_id>
Примечание
# ceph osd out <osd.id>
#Дождаться, пока все затронутые PG перейдут в состояние active+clean (завершение backfill и rebalancing).ceph -s#ceph pg stat
# ceph osd down <osd.id>
# systemctl stop ceph-osd@<osd.id>.service
#ceph osd rm <osd.id>#ceph osd crush remove <osd.id>#ceph auth del osd.<osd.id>
#ceph osd tree#ceph osd crush tree
Примечание
# ceph-volume lvm zap /dev/X --destroy
#lvremove#vgremove#wipefs -a /dev/X
Примечание
alt-virtualization-pve-11.1-x86_64.iso.
# ceph -s
apt-repo).
tmux или screen), чтобы избежать прерывания обновления при потере SSH-соединения.
Важно
Примечание
alt-virtualization-pve-11.0-x86_64.iso.
qm remote-migrate). При наличии технической возможности можно развернуть новый кластер параллельно и выполнить миграцию всех ВМ.
# ha-manager crm-command node-maintenance enable <Узел>
Примечание
ha-manager переместит все ресурсы, за которыми он следит (HA-ресурсы), на другие узлы кластера. Также данный режим помечает узел как недоступный для размещения новых ресурсов, предотвращая автоматическую миграцию ВМ с других узлов.
#apt-get update && apt-get dist-upgrade#update-kernel#apt-get clean#reboot
# ha-manager crm-command node-maintenance disable <Узел>
Примечание
pmxcfs. После обновления всех узлов эти ошибки, как правило, исчезают.
Содержание
Примечание
apt-get, которая позволяет устанавливать, удалять и обновлять пакеты с учётом зависимостей между ними.
Важно
/etc/apt/sources.list либо в любой файл с расширением .list (например, mysources.list) в каталоге /etc/apt/sources.list.d/.
rpm [подпись] метод:путь база название rpm-src [подпись] метод:путь база названиегде:
/etc/apt/vendor.list и в файлах с расширением .list каталога /etc/apt/vendors.list.d;
/etc/apt/sources.list.d/*.list обычно указывается интернет-репозиторий, совместимый с установленным дистрибутивом.
apt-repo.
Примечание
$ apt-repo
# apt-repo add репозиторий
# apt-repo rm репозиторий
# apt-repo update
apt-repo:
$ man apt-repo
или
$ apt-repo --help
#Эту же операцию можно выполнить одной командой:apt-repo#rm allapt-repoadd p11
# apt-repo set p11
sources.list репозитория на сменном диске в APT предусмотрена специальная утилита — apt-cdrom.
Acquire::CDROM::mount в конфигурации APT (/etc/apt/apt.conf). По умолчанию используется каталог /media/ALTLinux:
# mkdir /media/ALTLinux
# mount /dev/носитель /media/ALTLinux
здесь /dev/носитель — имя соответствующего блочного устройства (например, /dev/dvd для CD/DVD-диска).
# apt-cdrom -m add
rpm cdrom:[ALT Virtualization 11.2 x86_64 build 2026-10-13]/ ALTLinux main
Примечание
/dev/носитель /media/ALTLinux необходимо выполнять перед каждой командой apt-get install имя_пакета.
/etc/apt/sources.list.d/ в любом текстовом редакторе.
Примечание
alt.list могут содержаться следующие записи:
# ftp.altlinux.org (ALT Linux, Moscow) # ALT Platform 11 #rpm [p11] ftp://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/x86_64 classic #rpm [p11] ftp://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/x86_64-i586 classic #rpm [p11] ftp://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/noarch classic rpm [p11] http://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/x86_64 classic rpm [p11] http://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/x86_64-i586 classic rpm [p11] http://ftp.altlinux.org/pub/distributions/ALTLinux p11/branch/noarch classicКаждая запись описывает отдельный источник пакетов.
/etc/apt/sources.list.d/.
apt-get update или apt-repo update.
$ apt-get update
При выполнении этой команды APT загружает индексы пакетов из активных репозиториев и сохраняет их в локальном кеше.
apt-cache предназначена для поиска программных пакетов в репозиториях. Она позволяет искать пакеты не только по имени, но и по описанию.
apt-cache search подстрока позволяет найти все пакеты, в именах или описаниях которых встречается указанная подстрока. Пример поиска может выглядеть следующим образом:
$ apt-cache search ^telegraf
ceph-mgr-telegraf - Telegraf module for Ceph Manager Daemon
telegraf - The plugin-driven server agent for collecting and reporting metrics
Символ «^» в поисковом выражении указывает на то, что совпадение должно находиться в начале строки (в данном случае — в начале имени пакета).
apt-cache show:
$ apt-cache show telegraf
Package: telegraf
Section: Development/Other
Installed Size: 276056584
Maintainer: Alexey Shabalin (ALT Team) <shaba@altlinux.org>
Version: 1.33.0-alt1:p11+365214.100.2.1@1734429624
Pre-Depends: /bin/sh, /usr/sbin/groupadd, /usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/post_service, /usr/sbin/preun_service, rpmlib(PayloadIsXz)
Depends: /bin/kill, /bin/sh, /etc/logrotate.d, /etc/rc.d/init.d, /etc/rc.d/init.d(SourceIfNotEmpty), /etc/rc.d/init.d(msg_reloading), /etc/rc.d/init.d(msg_usage), /etc/rc.d/init.d(start_daemon), /etc/rc.d/init.d(status), /etc/rc.d/init.d(stop_daemon), /etc/rc.d/init.d/functions
Provides: telegraf (= 1.33.0-alt1:p11+365214.100.2.1)
Architecture: x86_64
Size: 46969532
MD5Sum: 92c284ee01d9657bebe670bb72468f5c
Filename: telegraf-1.33.0-alt1.x86_64.rpm
Description: The plugin-driven server agent for collecting and reporting metrics
Telegraf is an agent written in Go for collecting, processing, aggregating, and writing metrics.
Design goals are to have a minimal memory footprint with a plugin system so that developers
in the community can easily add support for collecting metrics from well known services
(like Hadoop, Postgres, or Redis) and third party APIs (like Mailchimp, AWS CloudWatch,
or Google Analytics).
Важно
# apt-get install имя_пакета
Важно
# apt-get update
apt-get позволяет устанавливать в систему пакеты, даже если для их работы требуются дополнительные, ещё не установленные зависимости. В этом случае она автоматически разрешает зависимости и устанавливает все необходимые пакеты, используя настроенные репозитории.
apt-get install telegraf приведёт к следующему диалогу с APT (если пакет еще не установлен):
# apt-get install telegraf
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Следующие НОВЫЕ пакеты будут установлены:
telegraf
0 будет обновлено, 1 новых установлено, 0 пакетов будет удалено и 31 не будет обновлено.
Необходимо получить 47,0MB архивов.
После распаковки потребуется дополнительно 276MB дискового пространства.
Получено: 1 http://ftp.altlinux.org p11/branch/x86_64/classic telegraf 1.33.0-alt1:p11+365214.100.2.1@1734429624 [47,0MB]
Получено 47,0MB за 15s (2942kB/s).
Совершаем изменения...
Подготовка... ################################### [100%]
Обновление / установка...
1: telegraf-1.33.0-alt1 ################################### [100%]
Завершено.
apt-get install имя_пакета можно использовать также для обновления уже установленного пакета до версии, доступной в подключённых репозиториях. В этом случае apt-get дополнительно проверяет, не обновилась ли версия пакета в репозитории по сравнению с установленным в системе.
apt-get install telegraf будет таким:
# apt-get install telegraf
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Последняя версия telegraf уже установлена.
0 будет обновлено, 0 новых установлено, 0 пакетов будет удалено и 2262 не будет обновлено.
# apt-get install /путь/к/файлу.rpm
При этом APT проведёт стандартную процедуру проверки зависимостей и конфликтов с уже установленными пакетами.
apt-get может отказаться устанавливать, удалять или обновлять пакеты.
-f (--fix-broken). В зависимости от ситуации APT может установить недостающие пакеты или удалить пакеты, препятствующие разрешению зависимостей. Любые действия в этом режиме обязательно требуют подтверждения со стороны пользователя.
apt-get: имя-пакета installed
Важно
# apt-get remove имя_пакета
apt-get remove удаляет пакет, но сохраняет его конфигурационные файлы.
# apt-get remove --purge имя_пакета
apt-get удалить базовый компонент системы появится запрос на подтверждение операции:
# apt-get remove filesystem
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Следующие пакеты будут УДАЛЕНЫ:
...
ВНИМАНИЕ: Будут удалены важные для работы системы пакеты
Обычно этого делать не следует. Вы должны точно понимать возможные последствия!
...
0 будет обновлено, 0 новых установлено, 2648 пакетов будет удалено и 0 не будет обновлено.
Необходимо получить 0B архивов.
После распаковки будет освобождено 8994MB дискового пространства.
Вы делаете нечто потенциально опасное!
Введите фразу 'Yes, do as I say!' чтобы продолжить.
Предупреждение
apt-get: имя-пакета removed
#apt-get update&&apt-get dist-upgrade
apt-get update) обновляет индексы пакетов. Вторая (apt-get dist-upgrade) обновляет установленные пакеты до доступных версий с учётом изменений зависимостей. При необходимости APT может установить дополнительные пакеты или удалить пакеты, мешающие обновлению.
Примечание
apt-get dist-upgrade обновит систему, но ядро ОС не будет обновлено.
# update-kernel
Примечание
update-kernel необходимо выполнить команду apt-get update.
update-kernel также устанавливает или обновляет соответствующие модули ядра, если необходимые пакеты доступны в репозиториях.
# remove-old-kernels
Содержание
/, в отличие от DOS и Windows, где используются отдельные обозначения дисков (например, C:).
/media/cdrom (путь в дистрибутиве обозначается с использованием /, а не \, как в DOS/Windows).
/:
/bin — командные оболочки (shell), основные утилиты;
/boot — содержит ядро системы;
/dev — псевдофайлы устройств, позволяющие работать с устройствами напрямую. Файлы в /dev создаются сервисом udev
/etc — общесистемные конфигурационные файлы для большинства программ в системе;
/etc/rc?.d, /etc/init.d, /etc/rc.boot, /etc/rc.d — каталоги, где расположены командные файлы, выполняемые при запуске системы или при смене её режима работы;
/etc/passwd — база данных пользователей, в которой содержится информация об имени пользователя, его настоящем имени, личном каталоге, его зашифрованный пароль и другие данные;
/etc/shadow — теневая база данных пользователей. При этом информация из файла /etc/passwd перемещается в /etc/shadow, который недоступен для чтения всем, кроме пользователя root. В случае использования альтернативной схемы управления теневыми паролями (TCB), все теневые пароли для каждого пользователя располагаются в каталоге /etc/tcb/имя пользователя/shadow;
/home — домашние каталоги пользователей;
/lib — содержит файлы динамических библиотек, необходимых для работы большей части приложений, и подгружаемые модули ядра;
/lost+found — восстановленные файлы;
/media — подключаемые носители (каталоги для монтирования файловых систем сменных устройств);
/mnt — точки временного монтирования;
/opt — вспомогательные пакеты;
/proc — виртуальная файловая система, хранящаяся в памяти компьютера при загруженной ОС. В данном каталоге расположены самые свежие сведения обо всех процессах, запущенных на компьютере;
/root — домашний каталог администратора системы;
/run — файлы состояния приложений;
/sbin — набор программ для административной работы с системой (системные утилиты);
/selinux — виртуальная файловая система SELinux;
/srv — виртуальные данные сервисных служб;
/sys — файловая система, содержащая информацию о текущем состоянии системы;
/tmp — временные файлы;
/usr — пользовательские двоичные файлы и данные, используемые только для чтения (программы и библиотеки);
/var — файлы для хранения изменяющихся данных (рабочие файлы программ, очереди, журналы).
/usr:
/usr/bin — дополнительные программы для всех учетных записей;
/usr/sbin — команды, используемые при администрировании системы и не предназначенные для размещения в файловой системе root;
/usr/local — место, где рекомендуется размещать файлы, установленные без использования пакетных менеджеров, внутренняя организация каталогов практически такая же, как и корневого каталога;
/usr/share — каталог для размещения общедоступных файлов большей части приложений, например, /usr/share/man — каталог, где хранятся файлы справочного руководства man.
/var:
/var/log — каталог для регистрации сообщений, системный журнал;
/var/spool — каталог для хранения файлов, находящихся в очереди на обработку для того или иного процесса (очереди печати, непрочитанные или не отправленные письма, задачи cron и т.д.).
/dev файловой системы дистрибутива. Диски (в том числе IDE/SATA/SCSI/SAS жёсткие диски, USB-диски) имеют имена:
/dev/sda — первый диск;
/dev/sdb — второй диск;
/dev/sdX, где X — a, b, c, d, e, … в зависимости от порядкового номера диска на шине.
/dev/sdb4 — четвертый раздел второго диска.
/) и раздел подкачки (swap). Размер последнего, как правило, составляет от однократной до двукратной величины оперативной памяти компьютера. Если на диске много свободного места, то можно создать отдельные разделы для каталогов /usr, /home, /var.
bash — широко распространённая командная оболочка, которая поддерживает историю команд, их редактирование и программирование с помощью сценариев;
zsh — командная оболочка с расширенными возможностями автодополнения, редактирования командной строки и настройки интерактивной работы.
$ echo $SHELL
history. Команды, присутствующие в истории, отображаются в списке пронумерованными. Чтобы запустить конкретную команду, необходимо набрать:
!номер командыЕсли ввести:
!!запустится последняя из набранных команд.
gunzip, можно набрать следующую команду:
guЗатем нажать клавишу Tab. Если существует несколько возможных вариантов завершения команды, необходимо повторно нажать клавишу Tab, чтобы получить список имен, начинающихся с gu.
$guguilegunzipgupnp-binding-tool
gunzip — это единственное имя, третьей буквой которого является «n»), а затем нажать клавишу Tab, оболочка самостоятельно дополнит имя. Чтобы запустить команду, нужно нажать Enter.
$PATH. По умолчанию в этот перечень каталогов не входит текущий каталог, обозначаемый ./ (точка слеш). Поэтому для запуска программы из текущего каталога необходимо использовать команду (в примере запускается команда prog):
$ ./prog
cal, выводящая календарь на текущий месяц.
$calОктябрь 2026 Пн Вт Ср Чт Пт Сб Вс 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Команда$cal1 2026Январь 2026 Пн Вт Ср Чт Пт Сб Вс 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
cal 1 2026 состоит из двух частей — собственно команды cal и «остального». То, что следует за командой, называется параметрами (или аргументами), и они вводятся для изменения поведения команды. В большинстве случаев, первое слово считается именем команды, а остальные — её параметрами.
date, только для работы по Гринвичу ей нужен дополнительный параметр -u (он же --universal).
$dateПт 23 окт 2026 15:57:55 EET$date-uПт 23 окт 2026 13:57:59 UTC
--help. К примеру, получить подсказку о том, что делает команда rm, можно, набрав в терминале rm --help.
man. Пример:
$manls
Примечание
ls -l -F можно ввести команду ls -lF
Учетные записи пользователей
susu позволяет изменить «владельца» текущего сеанса (сессии) без необходимости завершать сеанс и открывать новый.
su [ОПЦИИ...] [ПОЛЬЗОВАТЕЛЬ]
su - запрашивается пароль суперпользователя (root), и, если пароль введён правильно, пользователь получает права администратора. Чтобы вернуться к правам пользователя, необходимо ввести команду:
exit
idid выводит идентификаторы пользователя и групп, в которые он входит. Если имя пользователя не указано, отображаются сведения о текущем пользователе.
id [ОПЦИИ...] [ПОЛЬЗОВАТЕЛЬ]
passwdpasswd изменяет пароль, связанный с учетной записью пользователя.
Основные операции с файлами и каталогами
lsls (list) выводит в стандартный вывод содержимое каталогов.
ls [ОПЦИИ...] [ФАЙЛ...]
-a — вывести список всех файлов, включая файлы, имена которых начинаются с точки;
-l — выводить информацию в длинном формате;
-R — выводить рекурсивно информацию о подкаталогах.
cdcd предназначена для смены текущего каталога. Команда работает как с абсолютными, так и с относительными путями. Если каталог не указан, используется каталог, заданный переменной окружения $HOME (домашний каталог пользователя). Если указан абсолютный путь к каталогу, этот каталог становится текущим.
cd [-L|-P] [КАТАЛОГ]
-L — при изменении текущего каталога следовать по символическим ссылкам (режим по умолчанию);
-P — использовать физическую структуру каталогов, разрешая символические ссылки до перехода к каталогу.
$OLDPWD.
$CDPATH либо в качестве аргумента указан символ «-», после успешной смены каталога абсолютный путь к новому рабочему каталогу выводится в стандартный вывод.
docs/ (относительный путь):
cd docs/
/usr/bin (абсолютный путь):
cd /usr/bin/
cd ..
cd -
cd
pwdpwd выводит абсолютный путь текущего (рабочего) каталога.
pwd [-L|-P]
-P — выводить физический путь без символических ссылок;
-L — выводить символические ссылки.
rmrm служит для удаления файлов и каталогов. При удалении файла команда удаляет соответствующую запись из каталога. Если эта запись была последней жёсткой ссылкой на файл и файл не используется открытыми процессами, файловая система может освободить занимаемое им пространство.
Предупреждение
rm не предоставляет штатного средства для отмены удаления. Восстановление удалённых данных не гарантируется.
rm[ОПЦИИ...]<ФАЙЛ>
-f — не запрашивать подтверждение в случаях, когда оно предусмотрено поведением команды; игнорировать несуществующие файлы;
-i — запрашивать подтверждение перед каждым удалением;
-r, -R — рекурсивно удалять каталоги и их содержимое.
html в каталоге ~/html, запрашивая подтверждение перед удалением каждого файла:
$rm-i~/html/*.html
mkdirmkdir предназначена для создания каталогов.
mkdir [-p] [-m РЕЖИМ] <КАТАЛОГ...>
-m — установить права доступа для создаваемых каталогов;
-p — перед созданием нового каталога предварительно создать все несуществующие вышестоящие каталоги. Если каталог уже существует, ошибка не выводится;
-v — выводить сообщение о каждом созданном каталоге.
tmpdir/temp/dir, необходимо выполнить команду:
$ mkdir -p tmpdir/temp/dir
rmdirrmdir предназначена для удаления пустых каталогов.
rmdir [-p] <КАТАЛОГ...>
rmdir доступна опция -p. При указании пути к каталогу команда удаляет указанный каталог и его пустые вышестоящие каталоги.
$ rmdir -p a/b/c
В данном случае после удаления c команда попытается удалить b, а затем a, если они также пусты.
rmdir часто заменяется командой rm -rf, которая позволяет удалять каталоги, содержащие файлы и другие каталоги.
cpcp предназначена для копирования файлов и каталогов.
cp [-fip] ИСХ_ФАЙЛ... ЦЕЛ_ФАЙЛ...
cp [-fip] ИСХ_ФАЙЛ... КАТАЛОГ
cp [-R] [[-H] | [-L] | [-P]] [-fip] ИСХ_ФАЙЛ... КАТАЛОГ
-p — по возможности сохранять время изменения и время доступа к файлу, владельца, группу и права доступа;
-i — запрашивать подтверждение перед перезаписью существующего файла;
-r, -R — рекурсивно копировать содержимое каталогов.
mvmv предназначена для перемещения файлов и каталогов.
mv [-fi] ИСХ_ФАЙЛ... ЦЕЛ_ФАЙЛ...
mv [-fi] ИСХ_ФАЙЛ... КАТАЛОГ
mv перемещает исходный файл в целевой файл. При этом файл фактически переименовывается.
mv перемещает исходные файлы в указанный каталог, сохраняя их исходные имена.
-f — не запрашивать подтверждения перезаписи существующих файлов;
-i — запрашивать подтверждение перед перезаписью существующих файлов.
catcat позволяет просматривать содержимое файлов, копируя его в стандартный поток вывода и объединяя содержимое нескольких файлов.
cat [ОПЦИИ...] [ФАЙЛ...]
-n, --number — нумеровать выводимые строки;
-E, --show-ends — отображать символ «$» в конце каждой строки.
headhead выводит первые 10 строк каждого файла в стандартный вывод.
head [ОПЦИИ] [ФАЙЛ...]
-n, --lines=[-]K — вывести указанное количество выводимых строк. Если указано отрицательное значение, например -n -3, выводятся все строки, кроме трёх последних;
-q, --quiet — не выводить заголовки с именами файлов.
lessless позволяет просматривать текст постранично (для выхода необходимо нажать q).
less ФАЙЛ
grepgrep предназначена для поиска строк, соответствующих заданному шаблону, в файлах или стандартном вводе.
grep [шаблон_поиска] <ФАЙЛ>
Поиск файлов
findfind используется для поиска файлов.
find [-H] [-L] [-P] [-Oуровень] [-D help|tree|search|stat|rates|opt|exec] [ПУТЬ…] [ВЫРАЖЕНИЕ]
-print.
-name — поиск по имени файла;
-type — поиск по типу f=файл, d=каталог, l=ссылка(lnk);
-user — поиск по владельцу (имя или UID).
find, можно выполнять различные действия над найденными файлами. Основные действия:
-exec команда \; — выполнить указанную команду. Запись команды должна заканчиваться экранированной точкой с запятой. Строка {} заменяется именем текущего файла с указанием пути к нему;
-execdir команда \; — то же, что и -exec, но команда выполняется из подкаталога, содержащего текущий файл;
-ok команда — эквивалентно -exec за исключением того, что перед выполнением команды запрашивается подтверждение. Команда выполняется только после подтверждения пользователя;
-print — вывод имени файла на экран.
$ find . -type f -name "~*" -print
file.bak:
$ find . -newer file.bak -type f -print
a.out или *.o, доступ к которым не осуществлялся в течение недели:
find / \( -name a.out -o -name '*.o' \) -atime +7 -exec rm {} \;
find . -size 0c -ok rm {} \;
whereiswhereis сообщает путь к исполняемому файлу программы, ее исходным файлам (если они имеются) и соответствующим страницам справочного руководства.
whereis [ОПЦИИ...] <ФАЙЛ>
-b — выводить информацию только об исполняемых файлах;
-m — выводить информацию только о страницах справочного руководства;
-s — выводить информацию только об исходных файлах.
Мониторинг и управление процессами
psps отображает список текущих процессов.
ps [ОПЦИИ...]
ps, запущенная без параметров командной строки, выводит список процессов, связанных с текущим терминалом и принадлежащих текущему пользователю.
-a — выводить информацию о процессах, ассоциированных с терминалами;
-f — выводить «полный» список;
-l — выводить «длинный» список;
-p список — выводить информацию о процессах с перечисленными в списке PID;
-u список — выводить информацию о процессах с перечисленными идентификаторами или именами пользователей.
killkill посылает сигнал процессу с указанным идентификатором (по умолчанию — TERM, запрос на завершение процесса).
kill [-s] [сигнал] [идентификатор] [...]
kill [-l] [статус_завершения]
kill [-номер_сигнала] [идентификатор] [...]
-l — вывести список поддерживаемых сигналов;
-s сигнал, -сигнал — послать сигнал с указанным именем.
kill не дает желательного эффекта, необходимо использовать команду kill с параметром -9 (kill -9 PID_номер).
dfdf показывает количество доступного дискового пространства в файловой системе, в которой содержится файл, указанный в качестве аргумента. Если ни один файл не указан, показывается доступное место на всех смонтированных файловых системах. Размеры по умолчанию указываются в блоках по 1 Кбайт.
df [ОПЦИИ] [ФАЙЛ...]
--total — подсчитать общий объем в конце;
-h, --human-readable — печатать размеры в удобочитаемом формате (например, 1K, 234M, 2G).
dudu подсчитывает использование диска каждым файлом, для каталогов подсчет происходит рекурсивно.
du [ОПЦИИ] [ФАЙЛ...]
-a, --all — выводить общую сумму для каждого заданного файла, а не только для каталогов;
-c, --total — подсчитать общий объем в конце. Может быть использовано для выяснения суммарного использования дискового пространства для всего списка заданных файлов;
-d, --max-depth=N — выводить размер каталогов, находящихся не более чем на N уровней ниже каталогов, указанных в аргументах командной строки;
-S, --separate-dirs — выдавать отдельно размер каждого каталога, не включая размеры подкаталогов;
-s, --summarize — отобразить только сумму для каждого аргумента.
whichwhich выводит путь к исполняемому файлу, найденному при поиске по каталогам, указанным в переменной окружения PATH.
which [ОПЦИИ] <ФАЙЛ...>
-a позволяет вывести все найденные совпадения, а не только первое.
Использование многозадачности
bgbg позволяет перевести задание на задний план.
bg [ИДЕНТИФИКАТОР ...]
fgfg позволяет перевести задание на передний план.
fg [ИДЕНТИФИКАТОР ...]
Сжатие и упаковка файлов
tartar предназначена для объединения одного или нескольких файлов и каталогов в архив без сжатия (tarfile).
tar -cf [имя создаваемого файла архива] [упаковываемые файлы и/или каталоги]
$ tar -cf moi_dokumenti.tar Docs project.tex
$ tar -xf [имя файла архива]
gzip, bzip2 и 7z.
cat. По умолчанию команда cat читает данные из всех файлов, которые указаны в командной строке, и посылает эту информацию непосредственно в стандартный вывод (stdout). Следовательно, команда:
$ cat history-final masters-thesis
выведет на экран сначала содержимое файла history-final, а затем — файла masters-thesis.
cat читает входные данные из stdin и возвращает их в stdout. Пример:
$ cat
Hello there.
Hello there.
Bye.
Bye.
Ctrl-D
sort является простым фильтром — она сортирует входные данные и посылает результат в стандартный вывод. Совсем простым фильтром является команда cat — она ничего не делает с входными данными, а просто пересылает их на выход.
ls на stdin команды sort:
$ls|sort-r notes masters-thesis history-final english-list
$ls/usr/bin |more
$где командаls|sort-r |head-1
head -1 выводит на экран первую строку получаемого ей входного потока строк (в примере поток состоит из данных от команды ls), отсортированных в обратном алфавитном порядке.
$ ls > file-list
уничтожит содержимое файла file-list, если этот файл ранее существовал, и создаст на его месте новый файл. Если вместо этого перенаправление будет сделано с помощью символов >>, то вывод будет приписан в конец указанного файла, при этом исходное содержимое файла не будет уничтожено.
Примечание
chmod предназначена для изменения прав доступа файлов и каталогов.
chmod [ОПЦИИ] РЕЖИМ[,РЕЖИМ]... <ФАЙЛ>
chmod [ОПЦИИ] --reference=ИФАЙЛ <ФАЙЛ>
-R — рекурсивно изменять режим доступа к файлам, расположенным в указанных каталогах;
--reference=ИФАЙЛ — использовать режим файла ИФАЙЛ.
chmod изменяет права доступа каждого указанного файла в соответствии с правами доступа, указанными в параметре РЕЖИМ. Режим может быть представлен как в символьном виде, так и в числовом (восьмеричном) виде, представляющем битовую маску новых прав доступа.
[ugoa...][[+-=][разрешения...]...]Здесь разрешения — это ноль или более букв из набора «rwxXst» или одна из букв из набора «ugo».
Примечание
f1, а членам группы и прочим пользователям только читать. Команду можно записать двумя способами:
$chmod644 f1 $chmodu=rw,go=r f1
f2 всем пользователям:
$ chmod +x f2
f3:
$ chmod +t f3
f4:
$chmoda=rwx,g+s f4 $chmod2777 f4
chown изменяет владельца и/или группу для каждого заданного файла.
chown [КЛЮЧ]…[ВЛАДЕЛЕЦ][:[ГРУППА]] <ФАЙЛ>
chown [ОПЦИИ] --reference=ИФАЙЛ <ФАЙЛ>
-R — рекурсивно изменять файлы и каталоги;
--reference=ИФАЙЛ — использовать владельца и группу файла ИФАЙЛ.
/u на пользователя test:
chown test /u
/u:
chown test:staff /u
/u и вложенных файлов на test:
chown -hR test /u
chgrp изменяет группу для каждого заданного файла.
chgrp [ОПЦИИ] ГРУППА <ФАЙЛ>
chgrp [ОПЦИИ] --reference=ИФАЙЛ <ФАЙЛ>
-R — рекурсивно изменять файлы и каталоги;
--reference=ИФАЙЛ — использовать группу файла ИФАЙЛ.
umask задает маску создания файло и каталогов — набор прав доступа, которые не предоставляются при создании объектов файловой системы:
umask [-p] [-S] [режим]
-p — если РЕЖИМ не указан, выводит данные в форме, которую можно повторно использовать в качестве входных данных;
-S — выводит права доступа в символьном формате (по умолчанию маска выводится в восьмеричном формате).
$umask0022 $umask -Su=rwx,g=rx,o=rx
umask является встроенной командой командного интерпретатора bash.
chattr управляет расширенными атрибутами файловых систем ext3 и ext4.
chattr [ -RVf ] [+-=aAcCdDeFijmPsStTux] [ -v версия ] <ФАЙЛЫ> …
-R — рекурсивно изменять атрибуты каталогов и их содержимого. Символические ссылки игнорируются;
-V — выводить расширенную информацию и версию программы;
-f — подавлять сообщения об ошибках;
-v версия — установить номер версии/генерации файла.
+-=[aAcCdDeFijmPsStTux]
a — разрешена только запись в режиме добавления (append-only);
A — не обновлять время последнего доступа (atime) к файлу;
c — автоматически сжимать файл при записи на диск;
C — не использовать механизм Copy-on-Write для файла;
d — не включать файл в резервное копирование при использовании команды dump;
D — выполнять синхронное обновление каталогов;
e — использовать extents для сопоставления блоков файла с блоками на диске; этот атрибут нельзя снять с помощью chattr);
F — выполнять регистронезависимый поиск по именам внутри каталога;
i — неизменяемый файл (immutable);
j — записывать данные файла в журнал файловой системы перед записью непосредственно в файл;
m — не сжимать файл;
P — обеспечивать иерархическую структуру идентификаторов проектов для каталога;
s — безопасное удаление (перед удалением файла все его блоки заполняются нулями и записываются на диск);
S — выполнять синхронную запись изменений файла на диск;
t — не объединять фрагмент последнего блока файла с другими файлами в файловых системах, поддерживающих tail-merging;
T — считать каталог корнем иерархии каталогов при работе алгоритма распределения блоков Orlov;
u — сохранять содержимое файла при его удалении, что позволяет запросить восстановление удаленного файла;
x — запрашивать использование режима прямого доступа (DAX), если ядро поддерживает DAX.
lsattr показывает расширенные атрибуты файлов.
lsattr [ -RVadlpv ] <ФАЙЛЫ> …
-R — рекурсивно выводить атрибуты каталогов и их содержимого. Символические ссылки игнорируются;
-V — выводить расширенную информацию и версию программы;
-a — выводить все файлы в каталоге, включая скрытые файлы (имена которых начинаются с «.»);
-d — выводить каталоги так же, как и файлы, вместо того, чтобы просматривать их содержимое;
-l — выводить параметры, используя длинные имена вместо одного символа;
-p — выводить номер проекта файла;
-v — выводить номер версии/генерации файла.
getfacl показывает списки контроля доступа (ACL) — расширенные права, дополняющие традиционные.
getfacl [ --aceEsRLPtpndvh ] <ФАЙЛ> …
-a — выводить только ACL файла;
-d — выводить только ACL по умолчанию;
-c — не показывать заголовок (имя файла);
-e — показывать все эффективные права;
-E — не показывать эффективные права;
-s — пропускать файлы, имеющие только основные записи;
-R — для подкаталогов рекурсивно;
-L — следовать по символическим ссылкам, даже если они не указаны в командной строке;
-P — не следовать по символическим ссылкам, даже если они указаны в командной строке;
-t — использовать табулированный формат вывода;
-p — не удалять ведущие «/» из пути файла;
-n — показывать числовые значения пользователя/группы.
1: # file: somedir/ 2: # owner: lisa 3: # group: staff 4: # flags: -s- 5: user::rwx 6: user:joe:rwx #effective:r-x 7: group::rwx #effective:r-x 8: group:cool:r-x 9: mask:r-x 10: other:r-x 11: default:user::rwx 12: default:user:joe:rwx #effective:r-x 13: default:group::r-x 14: default:mask:r-x 15: default:other:---
setfacl изменяет ACL файлов и каталогов. Параметры задают операции над ACL, после чего указываются файлы и каталоги, к которым эти операции применяются.
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] <ФАЙЛ> …
setfacl --restore=file
-b — удалить все ACL;
-k — удалить ACL по умолчанию;
-n — не пересчитывать маску эффективных прав, обычно setfacl пересчитывает маску (кроме случая явного задания маски), чтобы маска включала максимальный набор прав доступа, предоставляемых отдельным пользователям и группам;
-d — установить ACL по умолчанию;
-R — рекурсивно для подкаталогов;
-L — переходить по символическим ссылкам на каталоги (имеет смысл только в сочетании с -R);
-P — не переходить по символическим ссылкам на каталоги (имеет смысл только в сочетании с -R);
--mask — пересчитать маску эффективных прав;
-m — изменить текущий ACL файла;
-M — прочитать записи ACL для модификации из файла;
-x — удалить записи из ACL файла;
-X — прочитать записи ACL для удаления из файла;
--restore=file — восстановить резервную копию прав доступа, созданную командой getfacl –R или ей подобной. Все права доступа дерева каталогов восстанавливаются, используя этот механизм. В случае если вводимые данные содержат элементы для владельца или группы-владельца, и команда setfacl выполняется пользователем с именем root, то владелец и группа-владелец всех файлов также восстанавливаются. Эта опция не может использоваться совместно с другими опциями за исключением опции --test;
--set=acl — установить ACL файла, заменив текущий ACL;
--set-file=file — прочитать записи ACL для установления из файла;
--test — режим тестирования (ACL не изменяются).
--set, -m и -x должны быть перечислены записи ACL в командной строке. Элементы ACL разделяются запятыми.
--set-file, -M и -X команда setfacl принимает множество элементов в формате вывода команды getfacl. В строке обычно содержится не больше одного элемента ACL.
setfacl использует следующие форматы элементов ACL:
[d[efault]:] [u[ser]:]uid [:perms]
[d[efault]:] g[roup]:gid [:perms]
[d[efault]:] m[ask][:] [:perms]
[d[efault]:] o[ther][:] [:perms]
setfacl создает права доступа, используя уже существующие, согласно следующим условиям:
test.txt, принадлежащего пользователю liza и группе docs, так, чтобы:
$Установить разрешения (от пользователя liza):ls -l test.txt-rw-r-r-- 1 liza docs 8 янв 22 15:54 test.txt $getfacl test.txt# file: test.txt # owner: liza # group: docs user::rw- group::r-- other::r--
$Просмотреть разрешения (от пользователя liza):setfacl -m u:ivan:rw- test.txt$setfacl -m u:misha:--- test.txt
$ getfacl test.txt
# file: test.txt
# owner: liza
# group: docs
user::rw-
user:ivan:rw-
user:misha:---
group::r--
mask::rw-
other::r--
Примечание
ls -l указывает на использование ACL:
$ ls -l test.txt
-rw-rw-r--+ 1 liza docs 8 янв 22 15:54 test.txt
su (shell of user), которая позволяет выполнить одну или несколько команд от лица другого пользователя. По умолчанию эта утилита выполняет команду sh от пользователя root, то есть запускает командный интерпретатор. Отличие от предыдущего способа в том, что всегда известно, кто именно запускал su, а значит, ясно, кто выполнил определённое административное действие.
su, а утилиту sudo, которая позволяет выполнять только заранее заданные команды.
Важно
su и sudo, необходимо быть членом группы wheel. Пользователь, созданный при установке системы, по умолчанию уже включён в эту группу.
control доступна только для суперпользователя (root). Для того чтобы посмотреть, что означает та или иная политика control (разрешения выполнения конкретной команды, управляемой control), надо запустить команду с ключом help:
# control su help
Запустив control без параметров, можно увидеть полный список команд, управляемых командой (facilities) вместе с их текущим состоянием и набором допустимых состояний.
su -
su без ключа, то происходит вызов командного интерпретатора с правами root. При этом значение переменных окружения, в частности $PATH, остаётся таким же, как у пользователя: в переменной $PATH не окажется каталогов /sbin, /usr/sbin, без указания полного имени будут недоступны команды route, shutdown, mkswap и другие. Более того, переменная $HOME будет указывать на каталог пользователя, все программы, запущенные в режиме суперпользователя, сохранят свои настройки с правами root в каталоге пользователя, что в дальнейшем может вызвать проблемы.
su -. В этом режиме su запустит командный интерпретатор в качестве login shell, и он будет вести себя в точности так, как если бы в системе зарегистрировался root.
id, вывод её может быть примерно следующим:
uid=1000(test) gid=1000(test) группы=1000(test),16(rpm)
Примечание
useradd[ОПЦИИ...]<ИМЯ ПОЛЬЗОВАТЕЛЯ>useradd -D[ОПЦИИ...]
-b каталог — базовый каталог для домашних каталогов пользователей;
-c комментарий — произвольная текстовая строка (обычно используется для указания фамилии и имени);
-d каталог — каталог, который будет использоваться в качестве домашнего каталога пользователя. По умолчанию имя домашнего каталога формируется на основе базового каталога и имени пользователя;
-D — показать или изменить настройки по умолчанию для useradd;
-e дата — дата устаревания новой учётной записи;
-g группа — имя или числовой идентификатор начальной группы пользователя. Указанная группа должна существовать;
-G группы — список дополнительных групп пользователя. Группы перечисляются через запятую без пробелов;
-m — создать домашний каталог пользователя;
-M — не создавать домашний каталог пользователя;
-p пароль — зашифрованное значение пароля, полученное с помощью функции crypt (не рекомендуется);
-s оболочка — регистрационная оболочка учётной записи (по умолчанию /bin/bash);
-u UID — числовой идентификатор пользователя.
useradd имеет множество параметров, которые позволяют менять её поведение по умолчанию. Например, можно принудительно указать, какой будет UID или какой группе будет принадлежать пользователь:
# useradd -u 1500 -G usershares new_user
passwd и утилит shadow.
passwd [ОПЦИИ...] [ИМЯ ПОЛЬЗОВАТЕЛЯ]
-d, --delete — удалить пароль для указанной учетной записи;
-f, --force — принудительно выполнить операцию;
-k, --keep-tokens — сохранить не истекшие пароли;
-l, --lock — заблокировать указанную учетную запись;
--stdin — прочитать новый пароль из стандартного ввода;
-S, --status — вывести сведения о состоянии пароля в указанной учетной записи;
-u, --unlock — разблокировать указанную учетную запись;
-?, --help — показать справку и выйти;
--usage — показать короткую справку по использованию;
-V, --version — показать версию программы и выйти.
passwd возвращает код выхода 0. Код выхода 1 означает ошибку. Текстовое описание ошибки выводится в стандартный поток ошибок.
useradd и passwd:
#useraddtest1 #passwdtest1 passwd: updating all authentication tokens for user test1. You can now choose the new password or passphrase. A valid password should be a mix of upper and lower case letters, digits, and other characters. You can use a password containing at least 7 characters from all of these classes, or a password containing at least 8 characters from just 3 of these 4 classes. An upper case letter that begins the password and a digit that ends it do not count towards the number of character classes used. A passphrase should be of at least 3 words, 11 to 72 characters long, and contain enough different characters. Alternatively, if no one else can see your terminal now, you can pick this as your password: "Burst*texas$Flow". Enter new password: Weak password: too short. Re-type new password: passwd: all authentication tokens updated successfully.
passwd — но если он попытается поставить слабый пароль, система откажет ему (в отличие от root) в изменении.
/etc/passwdqc.conf.
passwdqc.conf состоит из 0 или более строк следующего формата:
опция=значениеПустые строки и строки, начинающиеся со знака решетки («#»), игнорируются. Символы пробела между опцией и значением не допускаются.
min=N0,N1,N2,N3,N4 (min=disabled,24,11,8,7) — минимально допустимая длина пароля.
Примечание
min не должно превышать предыдущее.
max=N (max=72) — максимально допустимая длина пароля. Эта опция может быть использована, чтобы запретить пользователям устанавливать пароли, которые могут быть слишком длинными для некоторых системных служб. При max=8 длинные пароли обрабатываются особым образом: пароли длиннее 8 символов не отклоняются, а обрезаются до 8 символов при проверке надежности (пользователь при этом предупреждается), но сохраняются целиком.
passphrase=N (passphrase=3) — минимальное число слов в парольной фразе (значение 0 отключает поддержку парольных фраз).
match=N (match=4) — минимальная длина подстроки, совпадающей с известными данными (имя, логин и т.д.). При обнаружении такая подстрока игнорируется при оценке сложности, но пароль не отклоняется. Значение 0 отключает поиск подстроки. Поиск подстроки нечувствителен к регистру и может обнаружить и удалить общую подстроку, написанную в обратном направлении.
similar=permit|deny (similar=deny) — запрет (deny) или разрешение (permit) установки пароля, похожего на старый. Пароли считаются похожими, если имеется достаточно длинная общая подстрока, и при этом новый пароль с частично удаленной подстрокой будет слабым.
random=N[,only] (random=47) — длина случайно сгенерированной парольной фразы (в битах). При флаге only пользователь не может задавать собственные пароли. Длина может быть от 24 до 136. Значение 0 отключает эту функцию. Любая парольная фраза, содержащая предложенную случайно сгенерированную строку, будет разрешена вне зависимости от других возможных ограничений.
enforce=none|users|everyone (enforce=users) — область применения политики:
users — политика применяется к обычным пользователям;
everyone — политика применяется ко всем, включая root;
none — модуль PAM будет только предупреждать о слабых паролях.
retry=N (retry=3) — количество запросов нового пароля, если пользователь с первого раза не сможет ввести достаточно надежный пароль и повторить его ввод.
min=8,7,4,4,4 enforce=everyoneВ указанном примере пользователи (включая root) не смогут задать:
chage.
Примечание
# apt-get install shadow-change
chage изменяет количество дней между сменой пароля и датой последнего изменения пароля.
chage [опции] логин
-d, --lastday LAST_DAY — дата последней смены пароля (YYYY-MM-DD) или количество дней с 1 января 1970;
-E, -expiredate EXPIRE_DAYS — дата окончания действия учетной записи (количество дней с 1 января 1970). Дата также может быть указана в формате ГГГГ-ММ-ДД. Значение -1 удаляет дату окончания действия учетной записи;
-I, --inactive INACTIVE — количество дней неактивности до блокировки учетной записи. Пользователь, чья учетная запись заблокирована, должен обратиться к системному администратору, прежде чем снова сможет использовать систему. Значение -1 отключает этот режим;
-l, --list — показать текущие настройки;
-m, --mindays MIN_DAYS — минимальный интервал между сменами пароля (0 — без ограничений);
-M, --maxdays MAX_DAYS — максимальный срок действия пароля. Когда сумма MAX_DAYS и LAST_DAY меньше текущего дня, у пользователя будет запрошен новый пароль до начала работы в системе. Эта операция может предваряться предупреждением (параметр -W). При установке значения -1 проверка действительности пароля выполняться не будет;
-W, --warndays WARN_DAYS — за сколько дней до истечения срока предупреждать пользователя о необходимости смены пароля.
# chage -M 5 test
# chage -l test
Последний раз пароль был изменён : мар 13, 2025
Срок действия пароля истекает : мар 18, 2025
Пароль будет деактивирован через : никогда
Срок действия учётной записи истекает : никогда
Минимальное количество дней между сменой пароля : -1
Максимальное количество дней между сменой пароля : 5
Количество дней с предупреждением перед деактивацией пароля : -1
Примечание
/etc/login.defs (параметры PASS_MAX_DAYS, PASS_MIN_DAYS и др.).
Предупреждение
Предупреждение
/etc/security/opasswd, в который пользователи должны иметь доступ на чтение и запись. При этом они могут читать хеши паролей остальных пользователей. Не рекомендуется использовать на многопользовательских системах.
/etc/security/opasswd и дайте права на запись пользователям:
#install -Dm0660 -gpw_users /dev/null /etc/security/opasswd#chgrp pw_users /etc/security#chmod g+w /etc/security
/etc/pam.d/system-auth-local-only, добавив директиву pam_pwhistory.so после директивы pam_passwdqc.so в стеке password:
password required pam_passwdqc.so config=/etc/passwdqc.conf password required pam_pwhistory.so debug use_authtok remember=10 retry=3
use_authtok — использовать пароль, полученный от предыдущего модуля PAM;
remember=10 — хранить историю из 10 предыдущих паролей пользователя;
retry=3 — разрешить пользователю до трёх попыток ввода нового пароля.
/etc/security/opasswd. В нём содержатся хеши предыдущих паролей пользователей.
Password has been already used. Choose another.
enforce_for_root:
password required pam_pwhistory.so use_authtok enforce_for_root remember=10 retry=3
usermod.
# usermod -G audio,rpm,test1 test1
заменяет список дополнительных групп пользователя test1 указанными группами: audio, rpm и test1. Членство в других дополнительных группах при этом удаляется.
-aG:
# usermod -aG audio,rpm,test1 test1
# usermod -l test2 test1
Она изменяет имя учётной записи test1 на test2. При этом домашний каталог автоматически не переименовывается.
# usermod -L
блокирует пароль пользователя test2, а команда:
# usermod -U
снимает блокировку пароля.
chpasswd. На стандартный вход ей передают список паролей, в котором каждая строка содержит имя пользователя и пароль, разделённые двоеточием:
имя_пользователя:пароль
userdel.
# userdel test2
удаляет учётную запись пользователя test2, но не удаляет его домашний каталог.
-r:
# userdel -r test2
userdel.
$ pstree -p 1
systemctl. Команды service и chkconfig, применявшиеся в системах с SysVinit, в некоторых случаях сохраняют совместимость с systemd. Однако для управления службами рекомендуется использовать systemctl.
Таблица 57.1. Команды управления службами
|
Команды service и chkconfig
|
Команды systemd
|
Назначение
|
|---|---|---|
|
service <name_service> start
|
systemctl start <name_service>.service
|
Запускает службу
|
|
service <name_service> stop
|
systemctl stop <name_service>.service
|
Останавливает службу
|
|
service <name_service> restart
|
systemctl restart <name_service>.service
|
Перезапускает службу
|
|
service <name_service> reload
|
systemctl reload <name_service>.service
|
Перечитывает конфигурацию службы, если она поддерживает эту операцию
|
|
service <name_service> condrestart
|
systemctl try-restart <name_service>.service
|
Перезапускает службу, только если она уже работает
|
|
service <name_service> status
|
systemctl status <name_service>.service
|
Показывает текущее состояние службы
|
|
chkconfig <name_service> on
|
systemctl enable <name_service>.service
|
Настраивает автоматический запуск службы
|
|
chkconfig <name_service> off
|
systemctl disable <name_service>.service
|
Отключает автоматический запуск службы
|
|
chkconfig <name_service>
|
systemctl is-enabled <name_service>.service
|
Показывает, включён ли автоматический запуск службы
|
|
chkconfig --list
|
systemctl list-unit-files --type=service
|
Выводит список файлов модулей служб и состояние их включения
|
journalctl.
/var/log/journal.
journalctl. Например:
journalctl -b — выводит сообщения с момента текущей загрузки системы;
journalctl -f — выводит последние записи журнала и продолжает отображать новые записи по мере их поступления.
journalctl _PID=1 — выводит сообщения, связанные с процессом с идентификатором PID 1.
$ man journalctl
/var/log/.
/etc/systemd/journald.conf. Справочную информацию о нём можно получить с помощью команды man journald.conf.
# journalctl --disk-usage
--vacuum-size — удаляет наиболее старые архивные файлы, пока их суммарный размер не станет меньше указанного значения. Например, следующая команда удаляет архивные файлы журналов, пока их суммарный размер не станет меньше указанного значения:
# journalctl --vacuum-size=200M
--vacuum-time — удаляет архивные файлы, содержащие записи старше указанного периода. Например, для удаления архивных файлов старше одного месяца выполните:
# journalctl --vacuum-time=1months
Примечание
journalctl --disk-usage учитывает как активные, так и архивные файлы.
/etc/systemd/journald.conf. Например:
SystemMaxUse=1G — ограничивает общий объём дискового пространства, используемого постоянными журналами;
SystemMaxFileSize=200M — ограничивает размер отдельного файла постоянного журнала;
MaxFileSec=20day — задаёт максимальный период хранения записей в одном файле до перехода к следующему файлу журнала;
MaxRetentionSec=1months — задаёт максимальный период хранения записей журнала.
Примечание
/etc/systemd/journald.conf необходимо перезапустить службу systemd-journald:
# systemctl restart systemd-journald
Примечание
last — выводит сведения о предыдущих сеансах входа пользователей в систему;
w — показывает сведения о пользователях, вошедших в систему в данный момент, и выполняемых ими процессах;
who — выводит сведения о пользователях, вошедших в систему в данный момент.
ps, top, vmstat — для получения сведений о процессах, использовании процессорного времени и оперативной памяти;
du, df — для анализа использования дискового пространства;
ss — для просмотра состояния сетевых соединений и сокетов.
man (сокращение от manual). Каждая страница руководства посвящена одному объекту системы. Для просмотра страницы руководства по программе, необходимо выполнить команду man название_программы. К примеру, если вы хотите узнать, какие опции есть у команды date, вы можете ввести команду:
$mandate
man осуществляется командой apropos. Если вы точно не знаете, как называется необходимая вам программа, то поиск осуществляется по ключевому слову, к примеру, apropos date или при помощи ввода слова, обозначающего нужное действие, после команды man -k (например, man -k copy). Слово, характеризующее желаемое для вас действие, можно вводить и на русском языке. При наличии русского перевода страниц руководства man результаты поиска будут выведены на запрашиваемом языке.
man запускает программу постраничного просмотра текстов. Страницы перелистывают пробелом, для выхода из режима чтения описания команд man необходимо нажать на клавиатуре q. Команда man man выдаёт справку по пользованию самой командой man.
man по умолчанию будет отображать их на русском языке.
info info. Команда info, введённая без параметров, предлагает пользователю список всех документов info, установленных в системе.
/usr/share/doc — место хранения разнообразной документации.
/usr/share/doc/имя_пакета. Например, документация к пакету file-5.45 находится в /usr/share/doc/file-5.45. Для получения полного списка файлов документации, относящихся к пакету, воспользуйтесь командой rpm -qd имя_установленного_пакета.
README, FAQ, TODO, СhangeLog и другие. В файле README содержится основная информация о программе — имя и контактные данные авторов, назначение, полезные советы и пр. FAQ содержит ответы на часто задаваемые вопросы; этот файл стоит прочитать в первую очередь, если у вас возникли проблемы или вопросы по использованию программы, поскольку большинство проблем и сложностей типичны, вполне вероятно, что в FAQ вы тут же найдёте готовое решение. В файле TODO перечислены задачи, которые разработчики планируют реализовать. В файле СhangeLog записана история изменений в программе от версии к версии.
rpm -qi имя_установленного_пакета. В выводе команды среди прочих сведений будет указан адрес сайта, если он задан в метаданных пакета.