Редакция июнь, 2025
Аннотация
qm
Примечание
apt-get
позволяют пользователям легко обновлять свои системы и быть в курсе актуальных новинок мира свободных программ.
Содержание
SCDWriter.exe
;
Предупреждение
Предупреждение
Предупреждение
Предупреждение
dd
:
#где <файл-образа.iso> — ISO-образ установочного диска с дистрибутивом, аdd
oflag=direct if=<файл-образа.iso> of=/dev/sdX bs=1M status=progress;sync
/dev/sdX
— устройство, соответствующее flash-диску.
#где <файл-образа.iso> — ISO-образ диска, аpv
<файл-образа.iso> | dd oflag=direct of=/dev/sdX bs=1M;sync
/dev/sdX
— устройство, соответствующее flash-диску.
lsblk
или (если такой команды нет) blkid
.
$ 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-диск имеет имя устройства sdc.
# dd oflag=direct if=/iso/alt-virtualization-pve-11.0-x86_64.iso of=/dev/sdc bs=1M status=progress; sync
# pv /iso/alt-virtualization-pve-11.0-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
Предупреждение
sudo dd if=
alt-virtualization-pve-11.0-x86_64.iso
of=/dev/rdiskX bs=10Msync
alt-virtualization-pve-11.0-x86_64.iso
— ISO-образ диска, а /dev/rdiskX — flash-диск.
diskutil list
Предупреждение
$ du -b alt-virtualization-pve-11.0-x86_64.iso | cut -f1
2268246016
$ md5sum alt-virtualization-pve-11.0-x86_64.iso
76c041e0772734f3f65c10b579a1d7a6 alt-virtualization-pve-11.0-x86_64.iso
# head -c 2268246016 /dev/sdd | md5sum
76c041e0772734f3f65c10b579a1d7a6
где размер после -c — вывод в п.1, а /dev/sdd — устройство DVD или USB Flash, на которое производилась запись.
Предупреждение
Примечание
vncviewer --listen
):
Log in as root localhost 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 12G 0 lvm /
├─pve-data_tmeta 253:2 0 84M 0 lvm
│ └─pve-data 253:4 0 83,8G 0 lvm
└─pve-data_tdata 253:3 0 83,8G 0 lvm
└─pve-data 253:4 0 83,8G 0 lvm
sr0 11:0 1 1024M 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 и гарантирует загрузку вновь установленной ОС;
Примечание
Примечание
Примечание
Примечание
Примечание
Важно
#apt-get update
#apt-get dist-upgrade
#update-kernel
#apt-get clean
#reboot
Примечание
$ su -
или зарегистрировавшись в системе под именем root. Про режим суперпользователя можно почитать в главе Режим суперпользователя.
Примечание
Важно
Важно
nomodeset
— не использовать modeset-драйверы для видеокарты;
vga=normal
— отключить графический экран загрузки установщика;
xdriver=vesa
— явно использовать видеодрайвер vesa. Данным параметром можно явно указать нужный вариант драйвера;
acpi=off noapic
— отключение ACPI (управление питанием), если система не поддерживает ACPI полностью.
apm=off acpi=off mce=off barrier=off vga=normal
). В безопасном режиме отключаются все параметры ядра, которые могут вызвать проблемы при загрузке. В этом режиме установка будет произведена без поддержки APIC. Возможно, у вас какое-то новое или нестандартное оборудование, но может оказаться, что оно отлично настраивается со старыми драйверами.
Log in as root localhost login:После ввода логина логина суперпользователя (root) появится приглашение командной строки:
[root@localhost /]#
. Начиная с этого момента, система готова к вводу команд.
fixmbr
без параметров. Программа попытается переустановить загрузчик в автоматическом режиме.
Содержание
Важно
Содержание
qm
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 5404, 5405
|
Широковещательный CMAN для применения настроек кластера
|
/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>
#systemctl start pve-cluster
#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 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)Данную ошибку можно проигнорировать, так как она не означает фактического сбоя при удалении узла, а скорее сбоя в corosync, пытающемся уничтожить автономный узел.
# pvecm nodes
Membership information
----------------------
Nodeid Votes Name
1 1 pve01 (local)
3 1 pve03
Важно
# 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)
|
|
glusterfs
|
файл
|
да
|
нет (возможны в формате 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-storage
export /export/storage
path /mnt/nfs-vol
server 192.168.0.105
content images,iso,backup,vztmpl
options vers=3,nolock,tcp
/var/lib/vz
, описание LVN-thin хранилища local-lvm, которое ссылается на группу томов pve, и описание NFS-хранилища nfs-storage.
Таблица 26.2. Параметры хранилищ
Свойство
|
Описание
|
---|---|
nodes
|
Список узлов кластера, где хранилище можно использовать/доступно. Можно использовать это свойство, чтобы ограничить доступ к хранилищу.
|
content
|
Хранилище может поддерживать несколько типов содержимого. Это свойство указывает, для чего используется это хранилище.
Доступные опции:
|
shared
|
Указать, что это единое хранилище с одинаковым содержимым на всех узлах (или на всех перечисленных в опции
nodes ). Данное свойство не делает содержимое локального хранилища автоматически доступным для других узлов, он просто помечает как таковое уже общее хранилище!
|
disable
|
Отключить хранилище
|
maxfiles
|
Устарело, следует использовать свойство prune-backups. Максимальное количество файлов резервных копий на ВМ
|
prune-backups
|
Параметры хранения резервных копий
|
format
|
Формат образа по умолчанию (raw|qcow2|vmdk)
|
preallocation
|
Режим предварительного выделения (off|metadata|falloc|full) для образов raw и qcow2 в файловых хранилищах. По умолчанию используется значение metadata (равносильно значению off для образов raw). При использовании сетевых хранилищ в сочетании с большими образами qcow2, использование значения off может помочь избежать таймаутов.
|
Примечание
local:iso/slinux-10.2-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-10.2-x86_64.iso
/var/lib/vz/template/iso/slinux-10.2-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
, а затем определить хранилище каталогов для этой точки монтирования. Таким образом, можно использовать любую файловую систему (ФС), поддерживаемую Linux.
Примечание
/mnt/iso
:
path
— указание каталога (это должен быть абсолютный путь к файловой системе);
content-dirs
(опционально) — позволяет изменить макет по умолчанию. Состоит из списка идентификаторов, разделенных запятыми, в формате:
vtype=pathгде vtype — один из разрешенных типов контента для хранилища, а 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).
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-имени (чтобы избежать задержек при поиске DNS);
export
— совместный ресурс с сервера NFS (список можно просмотреть, выполнив команду pvesm scan nfs <server>
);
path
— локальная точка монтирования (по умолчанию /mnt/pve/<STORAGE_ID>/
);
content-dirs
(опционально) — позволяет изменить макет по умолчанию. Состоит из списка идентификаторов, разделенных запятыми, в формате:
vtype=pathгде vtype — один из разрешенных типов контента для хранилища, а 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
Примечание
soft
, в этом случае будет выполняться только три запроса.
Примечание
# systemctl enable --now nfs-client.target
/export/storage
.
pvesm
:
# pvesm add nfs nfs-storage --path /mnt/nfs-vol --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/
.
/mnt/data
:
pvesm
:
# pvesm add btrfs btrfs-storage --path /mnt/data/btrfs-storage --is_mountpoint /mnt/data/ --content images,rootdir
# mkfs.btrfs -m single -d single -L My-Storage /dev/sdd
Параметры -m
и -d
используются для установки профиля для метаданных и данных соответственно. С помощью необязательного параметра -L
можно установить метку.
# mkfs.btrfs -m raid1 -d raid1 -L My-Storage /dev/sdb1 /dev/sdc1
#mkdir /mnt/data
#mount /dev/sdd /mnt/data
/etc/fstab
. Рекомендуется использовать значение UUID (выведенное командой mkfs.btrfs
), например:
UUID=5a556184-43b2-4212-bc21-eee3798c8322 /mnt/data btrfs defaults 0 0Выполнить проверку монтирования:
# mount -a
Результатом выполнения команды должен быть пустой вывод без ошибок.
Примечание
# 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
, который всегда установлен. Кроме того, для настройки CIFS используются следующие свойства:
server
— IP-адрес сервера или DNS-имя. Предпочтительнее использовать IP-адрес вместо DNS-имени (чтобы избежать задержек при поиске DNS);
share
— совместный ресурс с сервера CIFS (список можно просмотреть, выполнив команду pvesm scan cifs <server>
);
username
— имя пользователя для хранилища CIFS (опционально, по умолчанию «guest»);
password
— пароль пользователя (опционально). Пароль будет сохранен в файле, доступном только для чтения root-пользователю (/etc/pve/priv/storage/<STORAGE-ID>.pw
);
domain
— устанавливает домен пользователя (рабочую группу) для этого хранилища (опционально);
smbversion
— версия протокола SMB (опционально, по умолчанию 3). Версия 1 не поддерживается;
path
— локальная точка монтирования (по умолчанию /mnt/pve/<STORAGE_ID>/
);
content-dirs
(опционально) — позволяет изменить макет по умолчанию. Состоит из списка идентификаторов, разделенных запятыми, в формате:
vtype=pathгде vtype — один из разрешенных типов контента для хранилища, а 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
Примечание
server
— IP-адрес или DNS-имя сервера GlusterFS;
server2
— IP-адрес или DNS-имя резервного сервера GlusterFS;
volume
— том GlusterFS;
transport
— транспорт GlusterFS: tcp, unix или rdma.
/etc/pve/storage.cfg
):
glusterfs: gluster-01 server 192.168.0.105 server2 192.168.0.110 volume glustervol content images,iso
Примечание
# modprobe zfs
#zfsв файле
/etc/modules-load.d/zfs.conf
.
pool
— пул/файловая система ZFS;
blocksize
— размер блока;
sparse
— использовать тонкое выделение ресурсов;
mountpoint
— точка монтирования пула/файловой системы ZFS. Изменение этого параметра не влияет на свойство точки монтирования набора данных, видимого 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
— обнуление данных при удалении LV (гарантирует, что при удалении тома все данные будут удалены);
saferemove_throughput
— очистка пропускной способности (значение параметра cstream -t
).
/etc/pve/storage.cfg
):
lvm: vg vgname vg content rootdir,images nodes pve03 shared 0
Примечание
/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.
/etc/pve/storage.cfg
):
iscsi: test1-iSCSI portal 192.168.0.105 target iqn.2021-7.local.omv:test content images
Примечание
content noneВ этом случае нельзя будет создавать ВМ с использованием iSCSI LUN напрямую.
Примечание
# 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 не работает на кластере PVE);
pool
— название пула Ceph (rbd);
username
— идентификатор пользователя Ceph (только если Ceph не работает на кластере PVE);
krbd
(опционально) — обеспечивает доступ к блочным устройствам rados через модуль ядра 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 не работает на кластере PVE);
path
— локальная точка монтирования (по умолчанию используется /mnt/pve/<STORAGE_ID>/
);
username
— идентификатор пользователя (только если Ceph не работает на кластере PVE);
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
server
— IP-адрес или DNS-имя сервера резервного копирования;
username
— имя пользователя на сервере резервного копирования (например, root@pam, backup_u@pbs);
password
— пароль пользователя. Значение будет сохранено в файле /etc/pve/priv/storage/<STORAGE-ID>.pw
, доступном только суперпользователю;
datastore
— идентификатор хранилища на сервере резервного копирования;
fingerprint
— отпечаток TLS-сертификата API Proxmox Backup Server. Требуется, если сервер резервного копирования использует самоподписанный сертификат. Отпечаток можно получить в веб-интерфейсе сервера резервного копирования или с помощью команды proxmox-backup-manager cert info
;
encryption-key
— ключ для шифрования резервной копии. В настоящее время поддерживаются только те файлы, которые не защищены паролем (без функции получения ключа (kdf)). Ключ будет сохранен в файле /etc/pve/priv/storage/<STORAGE-ID>.enc
, доступном только суперпользователю. Опционально;
master-pubkey
— открытый ключ RSA, используемый для шифрования копии ключа шифрования (encryption-key
) в рамках задачи резервного копирования. Зашифрованная копия будет добавлена к резервной копии и сохранена на сервере резервного копирования для целей восстановления. Опционально, требуется 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
— имя администратора на сервере ESXi;
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 на 1000GB виден по четырем путям.
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
В данном примере один LUN на 1000GB виден по четырем путям.
Примечание
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 #lsblk
NAME 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 #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
/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
# apt-get install ocfs2-tools
Примечание
/etc/ocfs2/cluster.conf
. Этот файл должен быть одинаков на всех узлах кластера, при изменении в одном месте его нужно скопировать на остальные узлы. При добавлении нового узла в кластер, описание этого узла должно добавлено быть на всех остальных узлах до монтирования раздела ocfs2 с нового узла.
/etc/ocfs2/cluster.conf
.
# o2cb_ctl -C -n mycluster -t cluster -a name=mycluster
# o2cb_ctl -C -n <имя_узла> -t node -a number=0 -a ip_address=<IP_узла> -a ip_port=7777 -a cluster=mycluster
/etc/ocfs2/cluster.conf
:
cluster: node_count = 3 heartbeat_mode = local name = mycluster node: ip_port = 7777 ip_address = <IP_узла-01> number = 0 name = <имя_узла-01> cluster = mycluster node: ip_port = 7777 ip_address = <IP_узла-02> number = 1 name = <имя_узла-02> cluster = mycluster node: ip_port = 7777 ip_address = <IP_узла-03> number = 2 name = <имя_узла-03> cluster = mycluster
Примечание
/etc/hostname
.
/etc/init.d/o2cb
:
# /etc/init.d/o2cb configure
Для ручного запуска кластера нужно выполнить:
#/etc/init.d/o2cb load
checking debugfs... Loading filesystem "ocfs2_dlmfs": OK Creating directory '/dlm': OK Mounting ocfs2_dlmfs filesystem at /dlm: OK #/etc/init.d/o2cb online mycluster
checking debugfs... Setting cluster stack "o2cb": OK Registering O2CB cluster "mycluster": OK Setting O2CB cluster timeouts : OK
/dev/mapper/mpatha-part1
на диске /dev/mapper/mpatha
:
# fdisk /dev/mapper/mpatha
# mkfs.ocfs2 -b 4096 -C 4k -L DBF1 -N 3 /dev/mapper/mpatha-part1
mkfs.ocfs2 1.8.7
Cluster stack: classic o2cb
Label: DBF1
…
mkfs.ocfs2 successful
Таблица 26.4. Параметры команды mkfs.ocfs2
Параметр
|
Описание
|
---|---|
-L метка_тома
|
Метка тома, позволяющая его однозначно идентифицировать при подключении на разных узлах. Для изменения метки тома можно использовать утилиту
tunefs.ocfs2
|
-C размер_кластера
|
Размер кластера — это наименьшая единица пространства, выделенная файлу для хранения данных. Возможные значения: 4, 8, 16, 32, 64, 128, 256, 512 и 1024 КБ. Размер кластера невозможно изменить после форматирования тома
|
-N количество_узлов_кластера
|
Максимальное количество узлов, которые могут одновременно монтировать том. Для изменения количества узлов можно использовать утилиту
tunefs.ocfs2
|
-b размер_блока
|
Наименьшая единица пространства, адресуемая ФС. Возможные значения: 512 байт (не рекомендуется), 1 КБ, 2 КБ или 4 КБ (рекомендуется для большинства томов). Размер блока невозможно изменить после форматирования тома
|
Примечание
# dd if=/dev/zero of=/dev/mapper/mpathX bs=512 count=1 conv=notrunc
/mnt/ocfs2
):
#mkdir /mnt/ocfs2
#mount /dev/mapper/mpatha-part1 /mnt/ocfs2
/etc/fstab
строку (каталог /mnt/ocfs2
должен существовать):
/dev/mapper/mpatha-part1 /mnt/ocfs2 ocfs2 _netdev,defaults 0 0Выполнить проверку монтирования:
# mount -a
Результатом выполнения команды должен быть пустой вывод без ошибок.
Примечание
_netdev
позволяет монтировать данный раздел только после успешного старта сетевой подсистемы.
Примечание
/etc/fstab
по его уникальному идентификатору, а не по имени /dev/mapper/mpatha
:
UUID=<uuid> /<каталог> ocfs2 _netdev,defaults 0 0Например, определить UUID uuid разделов:
# blkid
/dev/mapper/mpatha-part1: LABEL="DBF1" UUID="df49216a-a835-47c6-b7c1-6962e9b7dcb6" BLOCK_SIZE="4096" TYPE="ocfs2" PARTUUID="15f9cd13-01"
Добавить монтирование этого UUID в /etc/fstab
:
UUID=df49216a-a835-47c6-b7c1-6962e9b7dcb6 /mnt/ocfs2 ocfs2 _netdev,defaults 0 0
# pvesm add dir mpath --path /mnt/ocfs2 --shared 1
или в веб-интерфейсе PVE ( → , нажать кнопку → ):
Примечание
Примечание
/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
и т.д.), не создавая огромной нагрузки на кластер хранения Ceph.
Таблица 26.5. Системные требования к оборудованию для 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. Файл /etc/pve/ceph.conf
автоматически распространяется на все узлы PVE с помощью pmxcfs
. Будет также создана символическая ссылка /etc/ceph/ceph.conf
, которая указывает на файл /etc/pve/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 в распределение данных. Вторая команда останавливает службу OSD. До этого момента данные не теряются.ceph osd out <ID>
#systemctl stop ceph-osd@<ID>.service
-cleanup
, чтобы дополнительно уничтожить таблицу разделов):
# pveceph osd destroy <ID>
Предупреждение
pveceph pool create
):
-size
) — количество реплик на объект. Ceph всегда пытается иметь указанное количество копий объекта (по умолчанию 3);
warn
, выводится предупреждающее сообщение, если в пуле неоптимальное количество PG (по умолчанию warn
);
-add_storages
) — настроить хранилище с использованием нового пула. Доступно только при создании пула (по умолчанию true);
-min_size
) — минимальное количество реплик для объекта. Ceph отклонит ввод-вывод в пуле, если в PG меньше указанного количества реплик (по умолчанию 2);
-crush_rule
) — правило, используемое для сопоставления размещения объектов в кластере. Эти правила определяют, как данные размещаются в кластере;
-pg_num
) — количество групп размещения, которые должен иметь пул в начале (по умолчанию 128);
-target_size_ratio
) — соотношение ожидаемых данных в пуле. Автомасштабирование PG использует соотношение относительно других наборов соотношений. Данный параметр имеет приоритет над целевым размером, если установлены оба;
-target_size
) — предполагаемый объем данных, ожидаемых в пуле. Автомасштабирование PG использует этот размер для оценки оптимального количества PG;
-pg_num_min
) — минимальное количество групп размещения. Этот параметр используется для точной настройки нижней границы количества PG для этого пула. Автомасштабирование PG не будет объединять PG ниже этого порогового значения.
Примечание
min_size
равным 1. Реплицированный пул с min_size
равным 1 разрешает ввод-вывод для объекта, при наличии только одной реплики, что может привести к потере данных, неполным PG или ненайденным объектам.
# pveceph pool create <pool-name> -add_storages
size
), тогда как в пуле EC данные разбиваются на k
фрагментов данных с дополнительными m
фрагментами кодирования (проверки). Эти фрагменты кодирования можно использовать для воссоздания данных, если фрагменты данных отсутствуют.
m
определяет, сколько OSD может быть потеряно без потери данных. Общее количество хранимых объектов равно k + m
.
pveceph
. При планировании пула EC необходимо учитывать тот факт, что они работают иначе, чем реплицированные пулы.
min_size
для пула EC зависит от параметра m
. Если m = 1
, значение min_size
для пула EC будет равно k
. Если m > 1
, значение min_size
будет равно k + 1
. В документации Ceph рекомендуется использовать консервативное значение min_size
, равное k + 2
.
min_size
OSD, любой ввод-вывод в пул будет заблокирован до тех пор, пока снова не будет достаточно доступных OSD.
Примечание
min_size
, так как он определяет, сколько OSD должно быть доступно. В противном случае ввод-вывод будет заблокирован.
k = 2
и m = 1
будет иметь size = 3, min_size = 2
и останется работоспособным, если один OSD выйдет из строя. Если пул настроен с k = 2, m = 2
, будет иметь size = 4
и min_size = 3
и останется работоспособным, если один OSD будет потерян.
# 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
будут использоваться для реплицированного пула метаданных, но не для пула данных EC. Если нужно изменить min_size
в пуле данных, это можно будет сделать позже. Параметры size
и crush_rule
нельзя изменить в пулах EC.
profile
. Например:
# pveceph pool create <pool-name> --erasure-coding profile=<profile-name>
Существующий пул EC можно добавить в качестве хранилища в PVE:
# 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 не производятся, и предупреждение не выдается, если количество PG не является оптимальным.
target_size
, target_size_ratio
и pg_num_min
.
# 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
— какой тип хранилища резервных копий OSD использовать (например, 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>
Примечание
Примечание
hotstandby
при создании сервера, или, после его создания, установив в соответствующем разделе MDS в /etc/pve/ceph.conf
параметр:
mds standby replay = trueЕсли этот параметр включен, указанный MDS будет находиться в состоянии warm, опрашивая активный, чтобы в случае возникновения каких-либо проблем быстрее взять на себя управление.
Примечание
# pveceph mds create
pveceph
, например:
# 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
Это автоматически уничтожит базовые пулы Ceph, а также удалит хранилища из конфигурации PVE.
Примечание
size + 1
. Причина этого в том, что балансировщик объектов Ceph CRUSH по умолчанию использует полный узел в качестве «домена отказа».
# ceph osd out osd.<id>
# ceph osd safe-to-destroy osd.<id>
#systemctl stop ceph-osd@<id>.service
#pveceph osd destroy <id>
fstrim
(discard) на ВМ и контейнерах. Это освобождает блоки данных, которые файловая система больше не использует. В результате снижается нагрузка на ресурсы. Большинство современных ОС регулярно отправляют такие команды discard своим дискам. Нужно только убедиться, что ВМ включают опцию disk discard.
#Эти команды также предоставляют обзор действий, которые необходимо предпринять если кластер находится в неработоспособном состоянии.ceph -s
# однократный вывод #ceph -w
# непрерывный вывод изменений статуса
/var/log/ceph/
.
pvesr
.
Примечание
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-хостов всегда идёт по определённому каналу (обеспечивается более равномерная балансировка трафика, особенно в случае, когда большая его часть передаётся через промежуточные маршрутизаторы). Для протоколов 3 уровня, отличных от 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. В этом режиме нагрузка трафика на интерфейсы постоянно измеряется, и если один из интерфейсов сильно загружен, часть трафика перемещается на менее загруженные интерфейсы. Параметр
bond-rebalance-interval определяет, как часто OVS должен выполнять измерение нагрузки трафика (по умолчанию 10 секунд). Этот режим не требует какой-либо специальной настройки на коммутаторах.
|
bond_mode=balance-tcp
|
Этот режим выполняет балансировку нагрузки, принимая во внимание данные уровней 2-4 (например, MAC-адрес, IP -адрес и порт TCP). На коммутаторе должен быть настроен LACP. Этот режим похож на режим mode=4 Linux Bond. Всегда, когда это возможно, рекомендуется использовать этот режим
|
lacp=[active|passive|off]
|
Управляет поведением протокола управления агрегацией каналов (LACP). На коммутаторе должен быть настроен протокол LACP. Если коммутатор не поддерживает LACP, необходимо использовать
bond_mode=balance-slb или bond_mode=active-backup .
|
other-config:lacp-fallback-ab=true
|
Устанавливает поведение LACP для переключения на
bond_mode=active-backup в качестве запасного варианта
|
other_config:lacp-time=[fast|slow]
|
Определяет, с каким интервалом управляющие пакеты LACPDU отправляются по каналу LACP: каждую секунду (fast) или каждые 30 секунд (slow). По умолчанию slow
|
other_config:bond-detect-mode=[miimon|carrier]
|
Режим определения состояния канала. По умолчанию carrier
|
other_config:bond-miimon-interval=100
|
Устанавливает периодичность MII мониторинга в миллисекундах
|
other_config:bond_updelay=1000
|
Задает время задержки в миллисекундах, перед тем как поднять линк при обнаружении восстановления канала
|
other_config:bond-rebalance-interval=10000
|
Устанавливает периодичность выполнения измерения нагрузки трафика в миллисекундах (по умолчанию 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"
Примечание
Trunk
выставляется на это новом интерфейсе.
/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
Примечание
# pveam update
# pveam update
update successful
# pveam available
mail proxmox-mail-gateway-8.2-standard_8.2-1_amd64.tar.zst
mail proxmox-mailgateway-7.3-standard_7.3-1_amd64.tar.zst
system almalinux-9-default_20240911_amd64.tar.xz
system alpine-3.19-default_20240207_amd64.tar.xz
system alpine-3.20-default_20240908_amd64.tar.x
…
Примечание
pveam available
, указав нужный раздел, например, базовые образы системы:
# pveam available --section system
system almalinux-9-default_20240911_amd64.tar.xz
system alpine-3.19-default_20240207_amd64.tar.xz
system alpine-3.20-default_20240908_amd64.tar.xz
system alpine-3.21-default_20241217_amd64.tar.xz
system archlinux-base_20240911-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
Таблица 29.1. Каталоги локального хранилища
Каталог
|
Тип шаблона
|
---|---|
/var/lib/vz/template/iso/
|
ISO-образы
|
/var/lib/vz/template/cache/
|
Шаблоны контейнеров LXC
|
Таблица 29.2. Каталоги общих хранилищ
Каталог
|
Тип шаблона
|
---|---|
/mnt/pve/<storage_name>/template/iso/
|
ISO-образы
|
/mnt/pve/<storage_name>/template/cache/
|
Шаблоны контейнеров LXC
|
qm
Примечание
Примечание
Примечание
# qm set <vmid> -onboot 1
Примечание
Порядок запуска и отключения
всегда будут запускаться после тех, для которых этот параметр установлен . Кроме того, этот параметр может применяться только для ВМ, работающих на одном хосте, а не в масштабе кластера.
qm
qm
— это инструмент для управления ВМ Qemu/KVM в PVE. Утилиту qm
можно использовать для создания/удаления ВМ, для управления работой ВМ (запуск/остановка/приостановка/возобновление), для установки параметров в соответствующем конфигурационном файле, а также для создания виртуальных дисков.
qm <КОМАНДА> [АРГУМЕНТЫ] [ОПЦИИ]Чтобы просмотреть доступные для управления ВМ команды можно выполнить следующую команду:
# qm help
qm
.
Таблица 30.1. Команды qm
Команда
|
Описание
|
---|---|
qm agent
|
Псевдоним для
qm guest cmd
|
qm block <vmid>
|
Заблокировать ВМ.
|
qm cleanup <vmid> <clean-shutdown> <guest-requested>
|
Очищает ресурсы, такие как сенсорные устройства, 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 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 109
qm>help
Примечание
quit
или последовательно нажать CTRL+O и CTRL+C.
/var/lib/vz/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"; # First argument is the vmid my $vmid = shift; # Second argument is the phase 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);
#!/bin/bash if [ $2 == "pre-start" ] then echo "Запуск ВМ $1" >> /root/test.txt date >> /root/test.txt fi
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
позволяет выполнять операции по созданию образов различных форматов, конвертировать файлы-образы между этими форматами, получать информацию об образах и объединять снимки ВМ для тех форматов, которые это поддерживают.
qemu-img
:
# qemu-img convert -f vmdk test.vmdk -O qcow2 test.qcow2
# qemu-img create -f raw test.raw 40G
# 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 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/
).
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
и info usbhost
:
Предупреждение
# qm set <vm_id> -efidisk0 <storage>:1,format=<format>,efitype=4m,pre-enrolled-keys=1
где:
efitype
— указывает, какую версию микропрограммы OVMF следует использовать. Для новых ВМ необходимо указывать 4м (это значение по умолчанию в графическом интерфейсе);
pre-enroll-keys
— указывает, должен ли efidisk поставляться с предварительно загруженными ключами безопасной загрузки для конкретного дистрибутива и Microsoft Standard Secure Boot. Включает безопасную загрузку по умолчанию.
# qm set <vm_id> -tpmstate0 <storage>:1,version=<version>
где:
Примечание
intel_iommu=on
(для процессоров AMD он должен быть включен автоматически).
/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 — идентификаторы поставщика и устройства.
# lspci -nn
/etc/modprobe.d/blacklist.conf
:
blacklist DRIVERNAME
# qm set VMID -hostpci0 00:02.0
# qm set VMID -hostpci0 02:00,device-id=0x10f6,sub-vendor-id=0x0000
# pvesh create /cluster/mapping/<тип> <опции>
где <тип> — это тип оборудования (pci или usb), а <опции> — сопоставления устройств и другие параметры конфигурации.
# 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
<dirid> <точка монтирования> virtiofs rw,relatime 0 0
# apt-get install qemu-guest-agent
# systemctl enable --now qemu-guest-agent
# qm set <vmid> --agent 1
Для вступления изменений в силу необходим перезапуск ВМ.
trim
гостевой системе после следующих операций, которые могут записать нули в хранилище:
/var/run/qemu-server/<my_vmid>.qga
. Проверить связь с агентом можно помощью команды:
# qm agent <vmid> ping
Если гостевой агент правильно настроен и запущен в ВМ, вывод команды будет пустой.
/etc/pve/qemu-server/<VMID>.conf
). Как и другие файлы, находящиеся в /etc/pve/
, они автоматически реплицируются на все другие узлы кластера.
Примечание
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
для генерации и изменения этих файлов, либо выполнять такие действия в веб-интерфейсе.
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
parent
при этом используется для хранения родительских/дочерних отношений между снимками, а snaptime
— это отметка времени создания снимка (эпоха Unix).
pct
для создания контейнера:
#!/bin/bash hostname="altLXC" vmid="108" template_path="/var/lib/vz/template/cache" storage="local" 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" if="eth0" #### Execute pct create using variable substitution #### pct create $vmid \ $template_path/$template \ -description $description \ -rootfs $rootfs \ -hostname $hostname \ -memory $ram \ -nameserver $nameserver \ -storage $storage \ -password $rootpw \ -net0 name=$if,bridge=$bridge,gw=$gateway,ip=$ip
tty
— открывать соединение с одним из доступных tty-устройств (по умолчанию);
shell
— вызывать оболочку внутри контейнера (без входа в систему);
/dev/console
— подключаться к /dev/console.
Примечание
pct
— утилита управления контейнерами LXC в PVE. Чтобы просмотреть доступные для контейнеров команды 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
# pct set <ct_id> -memory <int_value>
# pct set <ct_id> -rootfs <volume>,size=<int_value for GB>
Например, изменить размер диска контейнера #105 до 10 ГБ:
# pct set 105 -rootfs nfs-storage:105/vm-105-disk-0.raw,size=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>
Если необходимо также удалить контейнер из заданий репликации, заданий резервного копирования и конфигураций ресурсов HA, следует использовать параметр --purge
.
/etc/pve/lxc
, а файлы конфигураций ВМ — в /etc/pve/qemu-server/
.
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 <ct_id> -- <command>
#pct exec 105 mkdir /home/demouser
#pct exec 105 ls /home
demouser
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
) — базовый тип зоны, предназначенный для простого локального управления VNet, без использования VLAN, VXLAN, маршрутизации или оверлеев.
type vlan
) — зона, в которой каждый виртуальный сегмент (VNet) соответствует определённому VLAN ID. Внутри зоны создаются VNet, указывающие, какие VLAN ID они используют и через какие интерфейсы осуществляется маршрутизация. Плагин VLAN использует существующий локальный мост (Linux или OVS) для подключения к физическому интерфейсу узла.
Примечание
type qinq
) — расширение обычной VLAN-зоны, позволяющее использовать двойную VLAN-тегировку (802.1ad), то есть VLAN внутри VLAN. Зона QinQ определяет внешний VLAN-тег (сервисную VLAN, S-tag), тогда как внутренний тег (C-tag) определяется VNet.
Примечание
type vxlan
) — используются для создания оверлей-сетей, которые позволяют соединять ВМ на разных физических узлах через виртуальные сети (VNet), изолированные друг от друга. Это обеспечивает масштабируемость, гибкость и независимость от физической топологии. Плагин VXLAN инкапсулирует Ethernet-кадры уровня 2 в UDP-датаграммы уровня 4, используя порт назначения по умолчанию 4789.
Предупреждение
type evpn
) в PVE SDN позволяет реализовать распределённую L2-сеть поверх L3-инфраструктуры с использованием BGP EVPN как протокола маршрутизации. Данная зона подходит для крупных сетей и дата-центров с мультиузловой маршрутизацией.
Примечание
# pvesh get /cluster/sdn/ipams/pve/status --output-format yaml
Примечание
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/110/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/myvxlan --output-format yaml
--- digest: ee2782a86911fd35fc37d478b4d3aadce2380ce6 tag: 200000 type: vnet vnet: myvxnet zone: myvxlan
# pvesh set /cluster/sdn
# pvesh set /nodes/pve03/lxc/110/config \
--net0 name=eth0,bridge=myvxlan,gw=192.168.100.1,ip=192.168.100.94/24
Примечание
Примечание
# qm migrate <vmid> <target> [OPTIONS]
--online
.
# 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
# qmrestore /path/to/vzdump-qemu-<VMID>.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
Примечание
Полное клонирование
и Связанная копия
;
Примечание
Примечание
Связанная копия
):
# qm set ID --tags 'myfirsttag;mysecondtag'
Например:
# qm set 103 --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
Примечание
pvesh set /cluster/options --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
) в зависимости от типа гостевой системы.
Примечание
--tmpdir
). Затем контейнер приостанавливается и rsync
копирует измененные файлы, после чего контейнер возобновляет свою работу. Это приводит к минимальному времени простоя, но требует дополнительное пространство для хранения копии контейнера. Если контейнер находится в локальной файловой системе, а целевое хранилище резервной копии — сервер NFS/CIFS, для повышения производительности --tmpdir
необходимо указать на локальную файловую систему. Локальный tmpdir также необходим, если нужно сделать резервную копию локального контейнера с использованием списков контроля доступа (ACL) в режиме ожидания, при хранении резервных копий на 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 для других пользователей.
# vzdump 777 --prune-backups keep-last=3,keep-daily=13,keep-yearly=9
lzop
). Особенностью этого алгоритма является скоростная распаковка. Следовательно, любая резервная копия, созданная с помощью этого алгоритма, может при необходимости быть развернута за минимальное время.
Zip
, использующей мощный алгоритм Deflate. Упор делается на максимальное сжатие данных, что позволяет сократить место на диске, занимаемое резервными копиями. Главным отличием от LZO является то, что процедуры компрессии/декомпрессии занимают достаточно большое количество времени.
dump
. Имя файла резервной копии будет иметь вид:
vzdump
.
Предупреждение
/etc/pve/jobs.cfg
, которые анализируются и выполняются демоном pvescheduler
.
man 7 systemd.time
).
[WEEKDAY] [[YEARS-]MONTHS-DAYS] [HOURS:MINUTES[:SECONDS]]
Таблица 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 минут с 8 часов до 18 и с 22 до 23 в будний день
|
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
|
2023-10-22
|
-
|
22 октября 2023 года в 00:00
|
vzdump
будет учитывать параметры mailto
/mailnotification
и отправлять электронные письма на указанные адреса с помощью команды sendmail
. Если установлено значение notification-system, уведомление будет отправлено через систему уведомлений PVE, а параметры mailto
/mailnotification
будут проигнорированы. Если установлено значение auto (настройка по умолчанию) и установлено значение параметра mailto
, будет использоваться режим legacy-sendmail, если значение параметра mailto
не установлено, будет использоваться режим notification-system;
Примечание
# systemctl enable --now postfix
/etc/pve/jobs.cfg
):
pct restore
— утилита восстановления контейнера;
qmrestore
— утилита восстановления ВМ.
per-restore limit
— максимальный объем полосы пропускания для чтения из архива резервной копии;
per-storage write limit
— максимальный объем полосы пропускания, используемый для записи в конкретное хранилище.
bwlimit
. В качестве единицы ограничения используется КиБ/с, это означает, что значение 10240 ограничит скорость чтения резервной копии до 10 МиБ/с, гарантируя, что остальная часть возможной пропускной способности хранилища будет доступна для уже работающих гостевых систем, и, таким образом, резервное копирование не повлияет на их работу.
Примечание
0
для параметра bwlimit
. Это может быть полезно, если требуется как можно быстрее восстановить ВМ.
# pvesm set <ID хранилища> --bwlimit restore=<KIBs>
live-restore
.
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)
|
Сжатие файла резервной копии
|
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)
|
Устарело: следует использовать цели и триггеры уведомлений. Указание, когда следует отправить отчет по электронной почте
|
mailto: <строка>
|
Устарело: следует использовать цели и триггеры уведомлений. Разделенный запятыми список адресов электронной почты или пользователей, которым будут приходить уведомления
|
maxfiles: <целое число> (1 — N) (по умолчанию 1)
|
Устарело: следует использовать prune-backups. Максимальное количество файлов резервных копий ВМ
|
mode: (snapshot|stop|suspend) (по умолчанию snapshot)
|
Режим резервного копирования
|
notes-template: <строка>
|
Строка шаблона для создания заметок для резервных копий. Может содержать переменные, которые будут заменены их значениями. В настоящее время поддерживаются следующие переменные {{cluster}}, {{guestname}}, {{node}} и {{vmid}}. Шаблон должен быть записан в одну строку, новая строка и обратная косая черта должны быть экранированы как \n и \\ соответственно
|
notification-mode: <auto | legacy-sendmail | notification-system> (по умолчанию auto)
|
Определяет, какую систему уведомлений использовать. Если установлено значение legacy-sendmail,
vzdump будет учитывать параметры mailto /mailnotification и отправлять электронные письма на указанные адреса с помощью команды sendmail . Если установлено значение notification-system, уведомление будет отправлено через систему уведомлений PVE, а параметры mailto /mailnotification будут проигнорированы. Если установлено значение auto (настройка по умолчанию) и установлено значение параметра mailto , будет использоваться режим legacy-sendmail, если значение параметра mailto не установлено, будет использоваться режим notification-system
|
pbs-change-detection-mode: <data | legacy | metadata>
|
Определяет метод, используемый PBS для обнаружения изменений в файлах контейнера и выбора оптимального формата кодирования при резервном копировании:
|
performance: [max-workers=<целое число>][,pbs-entries-max=<целое число>]
max-workers=<целое число> (1 — 256) (по умолчанию 16)
pbs-entries-max=<целое число> (1 — N) (по умолчанию 1048576)
|
Другие настройки, связанные с производительностью:
|
pigz: <целое число> (по умолчанию 0)
|
Если N=0 при сжатии резервных копий используется gzip. Если N>0 — используется pigz.
При N=1 pigz использует половину ядер CPU, при N>1 pigz работает в многопоточном режиме с указанным количеством потоков (N)
|
pool: <строка>
|
Резервное копирование всех гостевых систем, включенных в указанный пул
|
protected: boolean
|
Если true, резервная копия будет помечена как защищенная
|
prune-backups: [keep-all=<1|0>] [,keep-daily=<N>] [,keep-hourly=<N>] [,keep-last=<N>] [,keep-monthly=<N>] [,keep-weekly=<N>] [,keep-yearly=<N>]
|
Использовать данные параметры хранения вместо параметров из конфигурации хранилища (см.выше)
|
remove: boolean (по умолчанию 1)
|
Удалить старые резервные копии, если их больше, чем установлено опцией prune-backups
|
script: <строка>
|
Использовать указанный скрипт
|
stdexcludes: boolean (по умолчанию 1)
|
Исключить временные файлы и файлы журналов
|
stopwait: <целое число> (0 — N) (по умолчанию 10)
|
Максимальное время ожидания до остановки гостевой системы (минуты)
|
storage: <строка>
|
Хранить полученный файл в этом хранилище
|
tmpdir: <строка>
|
Хранить временные файлы в указанном каталоге
|
zstd: <целое число> (default = 1)
|
Количество потоков zstd.
При N=1 zstd использует половину доступных ядер CPU, при N>1 zstd работает в многопоточном режиме с указанным количеством потоков (N)
|
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
по умолчанию пропускает следующие файлы (отключается с помощью опции --stdexcludes 0
):
/tmp/?* /var/tmp/?* /var/run/?*pid
# vzdump 777 --exclude-path /tmp/ --exclude-path '/var/foo*'
# vzdump 777 --exclude-path bar
исключает любые файлы и каталоги с именами /bar, /var/bar, /var/foo/bar и т.д.
/etc/vzdump/
) и будут корректно восстановлены.
/var/lib/vz/dump/
):
# vzdump 103
rsync
и режим приостановки для создания снимка (минимальное время простоя):
# vzdump 103 --mode suspend
# vzdump --all --mode suspend --mailto root --mailto admin
/mnt/backup
:
# vzdump 103 --dumpdir /mnt/backup --mode snapshot
# vzdump 101 102 103 --mailto root
# 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).
/etc/pve/notifications.cfg
и /etc/pve/priv/notifications.cfg
. Файл /etc/pve/priv/notifications.cfg
содержит конфиденциальные параметры конфигурации (пароли, токены аутентификации) и доступен для чтения только пользователю root.
sendmail
для отправки электронных писем списку настроенных пользователей или адресов электронной почты. Если в качестве получателя выбран пользователь, будет использоваться адрес электронной почты, указанный в настройках пользователя Адрес электронной почты пользователя можно настроить в разделе → → . Если для пользователя не указан адрес электронной почты, письмо не будет отправлено.
Примечание
sendmail
предоставляется Postfix. Может потребоваться настроить 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/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==
Примечание
/etc/pve/priv/notifications.cfg
).
$ echo -n 'pve_backup_job_186' | base64 -w 0
cHZlX2JhY2t1cF9qb2JfMTg2
{{ title }}
— заголовок отображаемого уведомления;
{{ message }}
— тело отображаемого уведомления;
{{ severity }}
— серьезность уведомления (info, notice, warning, error, unknown);
{{ timestamp }}
— временная метка уведомления в виде эпохи UNIX (в секундах);
{{ fields.<name> }}
— подпространство имен для любых полей метаданных уведомления. Например, fields.type содержит тип уведомления — для всех доступных полей;
{{ secrets.<name> }}
— подпространство имен для секретов. Например, секретный именованный токен доступен через secrets.token.
{{ url-encode <value/property> }}
— URL-кодирование свойства/литерала;
{{ escape <value/property> }}
— экранировать любые управляющие символы, которые не могут быть безопасно представлены как строка JSON;
{{ json <value/property> }}
— отобразить значение как JSON. Это может быть полезно для передачи целого подпространства имен (например, полей) как части полезной нагрузки JSON (например, {{{ json fields }}
).
Примечание
matcher: always-matches comment Это сопоставление всегда срабатывает mode all target mail-to-root
match-calendar
использует специальный синтаксис для определения временных интервалов, в которые уведомления должны быть активны.
match-calendar 8-12
— каждый день с 8 до 12 часов;
match-calendar 8:00-15:30
— каждый день с 8 часов до 15:30;
match-calendar mon..fri 9:00-17:00
— каждый будний день с 9 до 17 часов;
match-calendar sun,tue..wed,fri 9-17
— в воскресенье вторник, среду и пятницу с 9 до 17 часов.
match-field
используется для фильтрации уведомлений на основе определённых полей в сообщениях о событиях.
exact
, в качестве разделителя можно использовать запятую. Правило сопоставления срабатывает, если поле метаданных имеет любое из указанных значений.
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. Список событий уведомлений
Событие
|
Тип
|
Серьезность
|
Поля метаданных (в дополнение к типу)
|
---|---|---|---|
Доступны обновления пакетов
|
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
|
Таблица 38.2. Описание полей метаданных
Поле метаданных
|
Описание
|
---|---|
type
|
Тип события уведомления
|
hostname
|
Имя хоста PVE без домена (например, pve01)
|
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
/mapping/notifications
.
/mapping/notifications
.
notification-mode
(Режим отправки уведомлений), который может принимать одно из трёх значений:
auto
) — использовать режим legacy-sendmail
если email-адрес указан в поле mailto, в противном случае использовать режим notification-system;
legacy-sendmail
) — отправлять уведомления по электронной почте с помощью системной команды sendmail
. Система уведомлений будет проигнорирована. Этот режим эквивалентен поведению уведомлений для версии PVE<8.1;
notification-system
) — использовать систему уведомлений.
notification-mode
не установлен, PVE по умолчанию будет использовать auto
.
# smartctl -a /dev/sdX
где /dev/sdX
— это путь к одному из локальных дисков.
# smartctl -s on /dev/sdX
/dev
каждые 30 минут на наличие ошибок и предупреждений, а также отправляет сообщение электронной почты пользователю root в случае обнаружения проблемы (для пользователя root в PVE должен быть введен действительный адрес электронной почты).
Примечание
/etc/modprobe.d/nohpwdt.conf
со следующим содержимым:
# Do not load the 'hpwdt' module on boot. blacklist hpwdtДля применения изменений следует перезагрузить систему.
# ha-manager status
quorum OK
master pve01 (active, Wed May 14 22:55:44 2025)
lrm pve01 (active, Wed May 14 22:55:44 2025)
lrm pve02 (active, Wed May 14 22:55:44 2025)
lrm pve03 (active, Wed May 14 22:55:48 2025)
service ct:101 (pve01, started)
service ct:105 (pve03, stopped)
service vm:100 (pve01, started)
restart
и relocate
. Если все попытки окажутся неудачными, HA PVE поместит ресурсы в ошибочное состояние и не будет выполнять для них никаких задач.
/etc/pve/firewall/
).
/etc/pve/firewall/cluster.fw
используется для хранения конфигурации PVE Firewall на уровне всего кластера. Этот файл содержит глобальные правила и параметры, которые применяются ко всем узлам и ВМ в кластере. Файл автоматически синхронизируется между всеми узлами кластера через PVE Cluster File System (pmxcfs).
/etc/pve/firewall/cluster.fw
состоит из нескольких секций, каждая из которых отвечает за определённые аспекты конфигурации firewall. В файле содержатся следующие секции:
Таблица 41.1. Опции секции [OPTIONS] файла cluster.fw
Опция
|
Описание
|
---|---|
ebtables: <1|0> (по умолчанию = 1)
|
Включить правила ebtables для всего кластера
|
enable: <1|0>
|
Включить или отключить межсетевой экран для всего кластера
|
log_ratelimit: [enable=]<1|0> [,burst=<integer>] [,rate=<rate>]
|
Настройки ограничения частоты записи логов (rate limiting) в PVE Firewall.
|
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
. Здесь можно перезаписать правила из конфигурации cluster.fw
или увеличить уровень детализации журнала и задать параметры, связанные с netfilter.
host.fw
содержатся следующие секции:
Таблица 41.2. Опции секции [OPTIONS] конфигурации узла
Опция
|
Описание
|
---|---|
enable: <1|0>
|
Включить или отключить межсетевой экран узла
|
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)
|
log_nf_conntrack: <1|0> (по умолчанию = 0)
|
Включить регистрацию информации о conntrack
|
ndp: <1|0> (по умолчанию = 0)
|
Включить NDP (протокол обнаружения соседей)
|
nf_conntrack_allow_invalid: <1|0> (по умолчанию = 0)
|
Разрешить недействительные пакеты при отслеживании соединения
|
nf_conntrack_helpers: <string> (по умолчанию = ``)
|
Включить conntrack helpers для определенных протоколов. Поддерживаемые протоколы: amanda, ftp, irc, netbios-ns, pptp, sane, sip, snmp, tftp
|
nf_conntrack_max: <integer> (32768 — N) (по умолчанию = 262144)
|
Максимальное количество отслеживаемых соединений
|
nf_conntrack_tcp_timeout_installed: <integer> (7875 — N) (по умолчанию = 432000)
|
Тайм-аут, установленный для conntrack
|
nf_conntrack_tcp_timeout_syn_recv: <integer> (30 — 60) (по умолчанию = 60)
|
Тайм-аут syn recv conntrack
|
nosmurfs: <1|0>
|
Включить фильтр SMURFS
|
protection_synflood: <1|0> (по умолчанию = 0)
|
Включить защиту от synflood
|
protection_synflood_burst: <integer> (по умолчанию = 1000)
|
Уровень защиты от Synflood rate burst по IP-адресу источника
|
protection_synflood_rate: <integer> (по умолчанию = 200)
|
Скорость защиты Synflood syn/sec по 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
. Этот файл используется для установки параметров межсетевого экрана, связанных с ВМ/контейнером.
Таблица 41.3. Опции секции [OPTIONS] файла конфигурации ВМ/контейнера
Опция
|
Описание
|
---|---|
dhcp: <1|0> (по умолчанию = 0)
|
Включить DHCP
|
enable: <1|0>
|
Включить или отключить межсетевой экран
|
ipfilter: <1|0>
|
Включить фильтры IP по умолчанию. Это эквивалентно добавлению пустого ipfilter-net<id> ipset для каждого интерфейса. Такие ipset неявно содержат разумные ограничения по умолчанию, такие как ограничение локальных адресов ссылок 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> (по умолчанию = 0)
|
Включить NDP (протокол обнаружения соседей)
|
policy_in: <ACCEPT | DROP | REJECT>
|
Политика по умолчанию для входящего трафика. Возможные значения:
|
policy_out: <ACCEPT | DROP | REJECT>
|
Политика по умолчанию для исходящего трафика (аналогично policy_in)
|
radv: <1|0>
|
Разрешить отправку объявлений маршрутизатора
|
[RULES] DIRECTION ACTION [OPTIONS] |DIRECTION ACTION [OPTIONS] # отключенное правило DIRECTION MACRO(ACTION) [OPTIONS] # использовать предопределенный макрос
Таблица 41.4. Параметры файла конфигурации
Опция
|
Описание
|
---|---|
--dest <string>
|
Ограничить адрес назначения пакета. Может быть указан одиночный IP-адрес, набор IP-адресов (+ipsetname) или псевдоним IP (alias). Можно указать диапазон адресов (например, 200.34.101.207-201.3.9.99) или список IP-адресов и сетей (записи разделяются запятой). Не следует смешивать адреса IPv4 и IPv6 в таких списках
|
--dport <string>
|
Ограничить порт назначения TCP/UDP. Можно использовать имена служб или простые числа (0-65535), как определено в
/etc/services . Диапазоны портов можно указать с помощью \d+:\d+, например, 80:85. Для сопоставления нескольких портов или диапазонов можно использовать список, разделенный запятыми
|
--icmp-type <string>
|
Тип icmp. Действителен, только если proto равен icmp
|
--iface <string>
|
Сетевой интерфейс, к которому применяется правило. В правилах для ВМ и контейнеров необходимо указывать имена ключей конфигурации сети net\d+, например, net0. Правила, связанные с узлом, могут использовать произвольные строки
|
--log <alert | crit | debug | emerg | err | info | nolog | notice | warning>
|
Уровень журналирования для правила межсетевого экрана
|
--proto <string>
|
IP-протокол. Можно использовать названия протоколов (tcp/udp) или простые числа, как определено в
/etc/protocols
|
--source <string>
|
Ограничить исходный адрес пакета. Может быть указан одиночный IP-адрес, набор IP-адресов (+ipsetname) или псевдоним IP (alias). Можно указать диапазон адресов (например, 200.34.101.207-201.3.9.99) или список IP-адресов и сетей (записи разделяются запятой). Не следует смешивать адреса IPv4 и IPv6 в таких списках
|
--sport <string>
|
Ограничить исходный порт TCP/UDP. Можно использовать имена служб или простые числа (0-65535), как определено в
/etc/services . Диапазоны портов можно указать с помощью \d+:\d+, например, 80:85. Для сопоставления нескольких портов или диапазонов можно использовать список, разделенный запятыми
|
[RULES] IN SSH(ACCEPT) -i net0 IN SSH(ACCEPT) -i net0 # a comment 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 для ipset 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-адрес
IN HTTP(ACCEPT) -source +management
# /etc/pve/firewall/cluster.fw [IPSET management] 192.168.0.90 192.168.0.90/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] # only allow specified IPs on net0 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создает вывод журнала, помеченный уровнем отладки.
Таблица 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)
|
Живая миграция (память виртуальной машины и данные локального диска)
|
/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-токена в секундах с начала эпохи (по умолчанию срок действия API-токена совпадает со сроком действия пользователя). Значение 0 указывает, что срок действия токена не ограничен;
--privsep <логическое значение>
— ограничить привилегии API-токена с помощью отдельных списков контроля доступа (по умолчанию) или предоставить полные привилегии соответствующего пользователя (значение 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
# 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
.
adduser
) на всех узлах, на которых пользователю разрешено войти в систему. Если пользователи PAM существуют в хост-системе PVE, соответствующие записи могут быть добавлены в PVE, чтобы эти пользователи могли входить в систему, используя свое системное имя и пароль.
/etc/pve/priv/shadow.cfg
). Пароль шифруется с использованием метода хеширования SHA-256.
# 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
/etc/pve/priv/realm/<realmname>.pw
);
Примечание
# pveum realm sync test.alt
oathkeygen
), который печатает случайный ключ в нотации Base32. Этот ключ можно использовать непосредственно с различными инструментами OTP, такими как инструмент командной строки 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
|
Извлечение/изменение CDROM
|
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.Migrate
|
Миграция ВМ на альтернативный сервер в кластере
|
VM.Monitor
|
Доступ к монитору виртуальной машины (kvm)
|
VM.PowerMgmt
|
Управление питанием (запуск, остановка, сброс, выключение)
|
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
приведены в таблице Команды pvenode task.
Таблица 43.1. Команды pvenode task
Команда
|
Описание
|
---|---|
pvenode task list [Параметры]
|
Вывести список выполненных задач для данного узла.
|
pvenode task log <vmid> [Параметры]
|
Вывести журнал задачи.
|
pvenode task status <upid>
|
Вывести статус задачи.
|
Примечание
UPID:$node:$pid:$pstart:$starttime:$dtype:$id:$userpid, pstart и starttime имеют шестнадцатеричную кодировку.
pvenode task
:
# pvenode task list --errors --vmid 105
Список задач будет представлен в виде таблицы:
# 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, поскольку они используют одну и ту же конечную точку.
-H
или --header
для отправки заголовков HTTP) и т. д.;
-d
или --data
при запросах POST, PUT, PATCH или DELETE.
Примечание
--data-urlencode
.
curl
.
Примечание
/var/lib/rrdcached/
, например, выполнив команду:
# find /var/lib/rrdcached -type f -mtime +5 -delete
Или, добавив соответствующее задание в crontab.
$ 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
Примечание
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 -XDELETE \
'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
cookie
:
$ curl
--silent --insecure --data "username=root@pam&password=yourpassword" \
https://$APINODE:8006/api2/json/access/ticket \
| jq --raw-output '.data.ticket' | sed 's/^/PVEAuthCookie=/' > cookie
csrftoken
:
$ curl
--silent --insecure --data "username=root@pam&password=yourpassword" \
https://$APINODE:8006/api2/json/access/ticket \
| jq --raw-output '.data.CSRFPreventionToken' | sed 's/^/CSRFPreventionToken:/' > csrftoken
$ curl --insecure --cookie "$(<cookie)" https://$APINODE:8006/api2/json/nodes/$TARGETNODE/status | jq '.'
$ curl
--silent --insecure --cookie "$(<cookie)" --header "$(<csrftoken)" -X POST\
--data-urlencode net0="name=myct0,bridge=vmbr0" \
--data-urlencode ostemplate="local:vztmpl/alt-p11-rootfs-systemd-x86_64.tar.xz" \
--data vmid=601 \
https://$APINODE:8006/api2/json/nodes/$TARGETNODE/lxc
{"data":"UPID:pve03:00005470:00083F6D:66A76C80:vzcreate:601:root@pam:"}
Команда должна вернуть структуру JSON, содержащую идентификатор задачи (UPID).
Примечание
# 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
.
pveproxy
предоставляет весь PVE API на TCP-порту 8006 с использованием HTTPS. Она работает от имени пользователя www-data и имеет минимальные разрешения. Операции, требующие дополнительных разрешений, перенаправляются локальному pvedaemon.
/etc/default/pveproxy
. Например:
ALLOW_FROM="10.0.0.1-10.0.0.5,192.168.0.0/22" DENY_FROM="all" POLICY="allow"IP-адреса можно указывать в любом формате, поддерживаемом Net::IP. Ключевое слово all является псевдонимом для 0/0 и ::/0 (все адреса IPv4 и IPv6).
Таблица 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
приведет к тому, что службы будут принимать соединения только от клиентов IPv6, что может вызвать множество проблем. Если устанавливается эта конфигурация, рекомендуется либо удалить настройку sysctl
, либо установить LISTEN_IP
в значение 0.0.0.0 (что позволит использовать только клиентов IPv4).
LISTEN_IP
можно использовать только для ограничения сокета внутренним интерфейсом, например:
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
, в отличие от перезагрузки конфигурации (reload), может прервать некоторые рабочие процессы, например, запущенную консоль или оболочку ВМ. Поэтому следует дождаться остановки системы на обслуживание, чтобы это изменение вступило в силу.
/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"
/etc/default/pveproxy
(по умолчанию используется первый шифр в списке, доступном как клиенту, так и pveproxy):
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"
Примечание
pveproxy
использует /etc/pve/local/pveproxy-ssl.pem
и /etc/pve/local/pveproxy-ssl.key
, если они есть, или /etc/pve/local/pve-ssl.pem
и /etc/pve/local/pve-ssl.key
в противном случае. Закрытый ключ не может использовать парольную фразу.
/etc/pve/local/pveproxy-ssl.key
, установив TLS_KEY_FILE
в /etc/default/pveproxy
, например:
TLS_KEY_FILE="/secrets/pveproxy.key"
pveproxy
использует сжатие gzip HTTP-уровня для сжимаемого контента, если клиент его поддерживает. Это поведение можно отключить в /etc/default/pveproxy
:
COMPRESSION=0
pveproxy
регулярно опрашивает состояние ВМ, хранилищ и контейнеров и рассылает обновления на все узлы кластера.
spiceproxy
прослушивает TCP-порт 3128 и реализует HTTP-прокси для пересылки запроса CONNECT от SPICE-клиента к ВМ PVE. Она работает от имени пользователя www-data и имеет минимальные разрешения.
/etc/default/pveproxy
. Подробнее см. pveproxy — служба PVE API Proxy
pvescheduler
отвечает за запуск заданий по расписанию, например, заданий репликации и vzdump.
/etc/pve/jobs.cfg
.
Примечание
apt-get
или через графический интерфейс ( → ).
# apt-get update
Примечание
Содержание
Примечание
apt-get
. Она автоматически определяет зависимости между пакетами и строго следит за её соблюдением при выполнении любой из следующих операций: установка, удаление или обновление пакетов.
Важно
/etc/apt/sources.list
, либо в любой файл .list
(например, mysources.list
) в каталоге /etc/apt/sources.list.d/
. Описания репозиториев заносятся в эти файлы в следующем виде:
rpm [подпись] метод:путь база название rpm-src [подпись] метод:путь база названиеЗдесь:
/etc/apt/vendor.list
;
/etc/apt/sources.list.d/*.list
обычно указывается интернет-репозиторий, совместимый с установленным дистрибутивом.
sources.list
, необходимо обновить локальную базу данных APT о доступных пакетах. Это делается командой apt-get update
.
sources.list
присутствует репозиторий, содержимое которого может изменяться (например, постоянно разрабатываемый репозиторий или репозиторий обновлений по безопасности), то прежде чем работать с APT, необходимо синхронизировать локальную базу данных с удалённым сервером командой apt-get update
. Локальная база данных создаётся заново при каждом изменении в репозитории: добавлении, удалении или переименовании пакета.
/etc/apt/sources.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 all
apt-repo
add 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
sources.list
появится запись о подключённом носителе:
rpm cdrom:[ALT Virtualization PVE 11.0 x86_64 build 2025-05-07]/ ALTLinux main
/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
apt-get update
или apt-repo update
).
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-cache
можно использовать русскую подстроку. В этом случае будут найдены пакеты, имеющие описание на русском языке. К сожалению, описание на русском языке в настоящее время есть не у всех пакетов, но наиболее актуальные описания переведены.
Важно
apt-get install имя_пакета
.
Важно
# apt-get update
apt-get
позволяет устанавливать в систему пакеты, требующие для работы наличие других, пока ещё не установленных пакетов. В этом случае он определяет, какие пакеты необходимо установить. 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 /путь/к/файлу.rpm
При этом APT проведёт стандартную процедуру проверки зависимостей и конфликтов с уже установленными пакетами.
apt-get
отказывается выполнять операции установки, удаления или обновления. В этом случае необходимо повторить операцию, задав опцию -f
, заставляющую apt-get
исправить нарушенные зависимости, удалить или заменить конфликтующие пакеты. В этом случае необходимо внимательно следить за сообщениями, выводимыми apt-get
. Любые действия в этом режиме обязательно требуют подтверждения со стороны пользователя.
apt-get remove имя_пакета
. Для того чтобы не нарушать целостность системы, будут удалены и все пакеты, зависящие от удаляемого. В случае удаления пакета, который относится к базовым компонентам системы, apt-get
потребует дополнительное подтверждение с целью предотвращения возможной случайной ошибки.
Важно
apt-get
удалить базовый компонент системы, вы увидите следующий запрос на подтверждение операции:
# apt-get remove filesystem
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Следующие пакеты будут УДАЛЕНЫ:
...
ВНИМАНИЕ: Будут удалены важные для работы системы пакеты
Обычно этого делать не следует. Вы должны точно понимать возможные последствия!
...
0 будет обновлено, 0 новых установлено, 2648 пакетов будет удалено и 0 не будет обновлено.
Необходимо получить 0B архивов.
После распаковки будет освобождено 8994MB дискового пространства.
Вы делаете нечто потенциально опасное!
Введите фразу 'Yes, do as I say!' чтобы продолжить.
Предупреждение
#apt-get
&&update
apt-get
dist-upgrade
apt-get update
) обновит индексы пакетов. Вторая команда (apt-get dist-upgrade
) позволяет обновить только те установленные пакеты, для которых в репозиториях, перечисленных в /etc/apt/sources.list
, имеются новые версии.
Примечание
apt-get upgrade
существует, использовать её следует осторожно, либо не использовать вовсе.
/etc/apt/sources.list
, имеются новые версии.
apt-get upgrade
, в результате чего происходит нарушение целостности системы: появляются неудовлетворённые зависимости. Для разрешения этой проблемы существует режим обновления в масштабе дистрибутива — apt-get dist-upgrade
.
apt-get
, которым APT предварит само обновление.
Примечание
apt-get dist-upgrade
обновит систему, но ядро ОС не будет обновлено.
# update-kernel
Примечание
update-kernel
необходимо выполнить команду apt-get update
.
update-kernel
обновляет и модули ядра, если в репозитории обновилось что-то из модулей без обновления ядра.
# remove-old-kernels
Содержание
/
.
/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/man
— каталог, где хранятся файлы справочного руководства man;
/usr/share
— каталог для размещения общедоступных файлов большей части приложений.
/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
.
command.com
в DOS, но несравненно мощнее. При помощи командных интерпретаторов можно писать небольшие программы — сценарии (скрипты). В Linux доступны следующие командные оболочки:
bash
— самая распространенная оболочка под linux. Она ведет историю команд и предоставляет возможность их редактирования;
pdksh
— клон korn shell, хорошо известной оболочки в UNIX™ системах.
$ echo
$SHELL
history
. Команды, присутствующие в истории, отображаются в списке пронумерованными. Чтобы запустить конкретную команду необходимо набрать:
!номер команды
!!запустится последняя из набранных команд.
gunzip
, можно набрать следующую команду:
gu
$
guguile
gunzip
gupnp-binding-tool
gunzip
— это единственное имя, третьей буквой которого является «n»), а затем нажать клавишу Tab, то оболочка самостоятельно дополнит имя. Чтобы запустить команду нужно нажать Enter.
$PATH
. По умолчанию в этот перечень каталогов не входит текущий каталог, обозначаемый ./
(точка слеш) (если только не выбран один из двух самых слабых уровней защиты). Поэтому, для запуска программы из текущего каталога, необходимо использовать команду (в примере запускается команда prog
):
./prog
cal
, выводящая календарь на текущий месяц.
$
cal
Март 2025 Пн Вт Ср Чт Пт Сб Вс 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
Январь 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
Чт 13 мар 2025 12:10:52 EET
$date
-u
Чт 13 мар 2025 10:11:05 UTC
--help
. К примеру, получить подсказку о том, что делает команда rm
, можно, набрав в терминале rm
--help
.
man
. Пример:
$man
ls
Примечание
ls
-l
-F
можно ввести команду ls
-lF
Учетные записи пользователей
su
su
позволяет изменить «владельца» текущего сеанса (сессии) без необходимости завершать сеанс и открывать новый.
su
[ОПЦИИ...] [ПОЛЬЗОВАТЕЛЬ]
su -
будет запрошен пароль суперпользователя (root), и, в случае ввода корректного пароля, пользователь получит права администратора. Чтобы вернуться к правам пользователя, необходимо ввести команду:
exit
id
id
выводит информацию о пользователе и группах, в которых он состоит, для заданного пользователя или о текущем пользователе (если ничего не указано).
id
[ОПЦИИ...] [ПОЛЬЗОВАТЕЛЬ]
passwd
passwd
меняет (или устанавливает) пароль, связанный с входным_именем пользователя.
Основные операции с файлами и каталогами
ls
ls
(list) печатает в стандартный вывод содержимое каталогов.
ls
[ОПЦИИ...] [ФАЙЛ...]
-a
— просмотр всех файлов, включая скрытые;
-l
— отображение более подробной информации;
-R
— выводить рекурсивно информацию о подкаталогах.
cd
cd
предназначена для смены каталога. Команда работает как с абсолютными, так и с относительными путями. Если каталог не указан, используется значение переменной окружения $HOME
(домашний каталог пользователя). Если каталог задан полным маршрутным именем, он становится текущим. По отношению к новому каталогу нужно иметь право на выполнение, которое в данном случае трактуется как разрешение на поиск.
cd
[-L|-P] [КАТАЛОГ]
$OLDPWD
. Если переход был осуществлен по переменной окружения $CDPATH
или в качестве аргумента был задан «-» и смена каталога была успешной, то абсолютный путь нового рабочего каталога будет выведен на стандартный вывод.
docs/
(относительный путь):
cd
docs/
/usr/bin
(абсолютный путь):
cd
/usr/bin/
cd
..
cd
-
cd
pwd
pwd
выводит абсолютный путь текущего (рабочего) каталога.
pwd
[-L|-P]
-P
— не выводить символические ссылки;
-L
— выводить символические ссылки.
rm
rm
служит для удаления записей о файлах. Если заданное имя было последней ссылкой на файл, то файл уничтожается.
Предупреждение
rm
[ОПЦИИ...]
<ФАЙЛ>
-f
— никогда не запрашивать подтверждения;
-i
— всегда запрашивать подтверждение;
-r, -R
— рекурсивно удалять содержимое указанных каталогов.
html
в каталоге ~/html
:
rm
-i
~/html/*.html
mkdir
mkdir
— команда для создания новых каталогов.
mkdir
[-p] [-m права] <КАТАЛОГ...>
rmdir
rmdir
удаляет каталоги из файловой системы. Каталог должен быть пуст перед удалением.
rmdir
[ОПЦИИ...] <КАТАЛОГ...>
-p
— удалить каталог и его потомки.
rmdir
часто заменяется командой rm -rf
, которая позволяет удалять каталоги, даже если они не пусты.
cp
cp
предназначена для копирования файлов из одного в другие каталоги.
cp
[-fip] [ИСХ_ФАЙЛ...] [ЦЕЛ_ФАЙЛ...]
cp
[-fip] [ИСХ_ФАЙЛ...] [КАТАЛОГ]
cp
[-R] [[-H] | [-L] | [-P]] [-fip] [ИСХ_ФАЙЛ...] [КАТАЛОГ]
-p
— сохранять по возможности времена изменения и доступа к файлу, владельца и группу, права доступа;
-i
— запрашивать подтверждение перед копированием в существующие файлы;
-r, -R
— рекурсивно копировать содержимое каталогов.
mv
mv
предназначена для перемещения файлов.
mv
[-fi] [ИСХ_ФАЙЛ...] [ЦЕЛ_ФАЙЛ...]
mv
[-fi] [ИСХ_ФАЙЛ...] [КАТАЛОГ]
mv
перемещает исх_файл в цел_файл (происходит переименование файла).
mv
перемещает исходные файлы в указанный каталог под именами, совпадающими с краткими именами исходных файлов.
-f
— не запрашивать подтверждения перезаписи существующих файлов;
-i
— запрашивать подтверждение перезаписи существующих файлов.
cat
cat
последовательно выводит содержимое файлов.
cat
[ОПЦИИ...] [ФАЙЛ...]
-n, --number
— нумеровать все строки при выводе;
-E, --show-ends
— показывать $ в конце каждой строки.
head
head
выводит первые 10 строк каждого файла на стандартный вывод.
head
[ОПЦИИ] [ФАЙЛ...]
-n, --lines=[-]K
— вывести первые К строк каждого файла, а не первые 10;
-q, --quiet
— не печатать заголовки с именами файлов.
less
less
позволяет постранично просматривать текст (для выхода необходимо нажать q).
less
ФАЙЛ
grep
grep
имеет много опций и предоставляет возможности поиска символьной строки в файле.
grep
[шаблон_поиска] <ФАЙЛ>
Поиск файлов
find
find
предназначена для поиска всех файлов, начиная с корневого каталога. Поиск может осуществляться по имени, типу или владельцу файла.
find
[-H] [-L] [-P] [-Oуровень] [-D help|tree|search|stat|rates|opt|exec] [ПУТЬ…] [ВЫРАЖЕНИЕ]
-name
— поиск по имени файла;
-type
— поиск по типу f=файл, d=каталог, l=ссылка(lnk);
-user
— поиск по владельцу (имя или UID).
find
, можно выполнять различные действия над найденными файлами. Основные действия:
-exec команда \;
— выполнить команду. Запись команды должна заканчиваться экранированной точкой с запятой. Строка «{}» заменяется текущим маршрутным именем файла;
-execdir команда \;
— то же самое что и -exec
, но команда вызывается из подкаталога, содержащего текущий файл;
-ok команда
— эквивалентно -exec
за исключением того, что перед выполнением команды запрашивается подтверждение (в виде сгенерированной командной строки со знаком вопроса в конце) и она выполняется только при ответе: «y»;
-print
— вывод имени файла на экран.
-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 {} \;
whereis
whereis
сообщает путь к исполняемому файлу программы, ее исходным файлам (если есть) и соответствующим страницам справочного руководства.
whereis
[ОПЦИИ...] <ФАЙЛ>
-b
— вывод информации только об исполняемых файлах;
-m
— вывод информации только о страницах справочного руководства;
-s
— вывод информации только об исходных файлах.
Мониторинг и управление процессами
ps
ps
отображает список текущих процессов.
ps
[ОПЦИИ...]
-a
— вывести информацию о процессах, ассоциированных с терминалами;
-f
— вывести «полный» список;
-l
— вывести «длинный» список;
-p список
— вывести информацию о процессах с перечисленными в списке PID;
-u список
— вывести информацию о процессах с перечисленными идентификаторами или именами пользователей.
kill
kill
позволяет прекратить исполнение процесса или передать ему сигнал.
kill
[-s] [сигнал] [идентификатор] [...]
kill
[-l] [статус_завершения]
kill
[-номер_сигнала] [идентификатор] [...]
-l
— вывести список поддерживаемых сигналов;
-s сигнал, -сигнал
— послать сигнал с указанным именем.
kill
не дает желательного эффекта, необходимо использовать команду kill
с параметром -9
(kill
-9
PID_номер).
df
df
показывает количество доступного дискового пространства в файловой системе, в которой содержится файл, переданный как аргумент. Если ни один файл не указан, показывается доступное место на всех смонтированных файловых системах. Размеры по умолчанию указаны в блоках по 1КБ.
df
[ОПЦИИ] [ФАЙЛ...]
--total
— подсчитать общий объем в конце;
-h, --human-readable
— печатать размеры в удобочитаемом формате (например, 1K, 234M, 2G).
du
du
подсчитывает использование диска каждым файлом, для каталогов подсчет происходит рекурсивно.
du
[ОПЦИИ] [ФАЙЛ...]
-a, --all
— выводить общую сумму для каждого заданного файла, а не только для каталогов;
-c, --total
— подсчитать общий объем в конце. Может быть использовано для выяснения суммарного использования дискового пространства для всего списка заданных файлов;
-d, --max-depth=N
— выводить объем для каталога (или файлов, если указано --all
) только если она на N или менее уровней ниже аргументов командной строки;
-S, --separate-dirs
— выдавать отдельно размер каждого каталога, не включая размеры подкаталогов;
-s, --summarize
— отобразить только сумму для каждого аргумента.
which
which
отображает полный путь к указанным командам или сценариям.
which
[ОПЦИИ] <ФАЙЛ...>
-a, --all
— выводит все совпавшие исполняемые файлы по содержимому в переменной окружения $PATH
, а не только первый из них;
-c, --total
— подсчитать общий объем в конце. Может быть использовано для выяснения суммарного использования дискового пространства для всего списка заданных файлов;
-d, --max-depth=N
— выводить объем для каталога (или файлов, если указано --all
) только если она на N или менее уровней ниже аргументов командной строки;
-S, --separate-dirs
— выдавать отдельно размер каждого каталога, не включая размеры подкаталогов;
--skip-dot
— пропускает все каталоги из переменной окружения $PATH
, которые начинаются с точки.
Использование многозадачности
bg
bg
позволяет перевести задание на задний план.
bg
[ИДЕНТИФИКАТОР ...]
fg
fg
позволяет перевести задание на передний план.
fg
[ИДЕНТИФИКАТОР ...]
Сжатие и упаковка файлов
tar
tar
, которая преобразует файл или группу файлов в архив без сжатия (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
cat
немедленно возвращает на экран. При вводе информации со стандартного ввода конец текста сигнализируется вводом специальной комбинации клавиш, как правило, Ctrl+D. Сокращённое название сигнала конца текста — EOT (end of text).
sort
является простым фильтром — она сортирует входные данные и посылает результат на стандартный вывод. Совсем простым фильтром является команда cat
— она ничего не делает с входными данными, а просто пересылает их на выход.
ls
на stdin команды sort
:
ls
|sort
-r notes masters-thesis history-final english-list
ls
/usr/bin |more
где командаls
|sort
-r |head
-1 notes
head -1
выводит на экран первую строку получаемого ей входного потока строк (в примере поток состоит из данных от команды ls
), отсортированных в обратном алфавитном порядке.
ls
> file-list
уничтожит содержимое файла file-list
, если этот файл ранее существовал, и создаст на его месте новый файл. Если вместо этого перенаправление будет сделано с помощью символов >>, то вывод будет приписан в конец указанного файла, при этом исходное содержимое файла не будет уничтожено.
Примечание
chmod
предназначена для изменения прав доступа файлов и каталогов.
chmod
[ОПЦИИ] РЕЖИМ[,РЕЖИМ]... <ФАЙЛ>
chmod
[ОПЦИИ] --reference=ИФАЙЛ <ФАЙЛ>
-R
— рекурсивно изменять режим доступа к файлам, расположенным в указанных каталогах;
--reference=ИФАЙЛ
— использовать режим файла ИФАЙЛ.
chmod
изменяет права доступа каждого указанного файла в соответствии с правами доступа, указанными в параметре режим, который может быть представлен как в символьном виде, так и в виде восьмеричного, представляющего битовую маску новых прав доступа.
[ugoa...][[+-=][разрешения...]...]Здесь разрешения — это ноль или более букв из набора «rwxXst» или одна из букв из набора «ugo».
f1
, а членам группы и прочим пользователям только читать. Команду можно записать двумя способами:
$chmod
644 f1 $chmod
u=rw,go=r f1
f2
:
$ chmod
+x f2
f3
:
$ chmod
+t f3
f4
:
$chmod
=rwx,g+s f4 $chmod
2777 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] [режим]
$ umask
0022
или то же самое в символьном режиме:
$ umask -S
u=rwx,g=rx,o=rx
umask
распознается и выполняется командным интерпретатором bash.
chattr
изменяет атрибуты файлов на файловых системах ext3, ext4.
chattr
[ -RVf ] [+-=aAcCdDeFijmPsStTux] [ -v версия ] <ФАЙЛЫ> …
-R
— рекурсивно изменять атрибуты каталогов и их содержимого. Символические ссылки игнорируются;
-V
— выводит расширенную информацию и версию программы;
-f
— подавлять сообщения об ошибках;
-v версия
— установить номер версии/генерации файла.
+-=aAcCdDeFijmPsStTux
a
— только добавление к файлу;
A
— не обновлять время последнего доступа (atime) к файлу;
c
— сжатый файл;
C
— отключение режима «Copy-on-write» для указанного файла;
d
— не архивировать (отключает создание архивной копии файла командой dump);
D
— синхронное обновление каталогов;
e
— включает использование extent при выделении места на устройстве (атрибут не может быть отключён с помощью chattr
);
F
— регистронезависимый поиск в каталогах;
i
— неизменяемый файл (файл защищен от изменений: не может быть удалён или переименован, к этому файлу не могут быть созданы ссылки, и никакие данные не могут быть записаны в этот файл);
j
— ведение журнала данных (данные файла перед записью будут записаны в журнал ext3/ext4);
m
— не сжимать;
P
— каталог с вложенными файлами является иерархической структурой проекта;
s
— безопасное удаление (перед удалением все содержимое файла полностью затирается «00»);
S
— синхронное обновление (аналогичен опции монтирования «sync» файловой системы);
t
— отключает метод tail-merging для файлов;
T
— вершина иерархии каталогов;
u
— неудаляемый (при удалении файла его содержимое сохраняется, это позволяет пользователю восстановить файл);
x
— прямой доступ к файлам (атрибут не может быть установлен с помощью chattr
).
lsattr
выводит атрибуты файла расширенной файловой системы.
lsattr
[ -RVadlpv ] <ФАЙЛЫ> …
-R
— рекурсивно изменять атрибуты каталогов и их содержимого. Символические ссылки игнорируются;
-V
— выводит расширенную информацию и версию программы;
-a
— просматривает все файлы в каталоге, включая скрытые файлы (имена которых начинаются с «.»);
-d
— отображает каталоги так же, как и файлы вместо того, чтобы просматривать их содержимое;
-l
— отображает параметры, используя длинные имена вместо одного символа;
-p
— выводит номер проекта файла;
-v
— выводит номер версии/генерации файла.
getfacl
выводит атрибуты файла расширенной файловой системы.
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:oter:---
setfacl
изменяет 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
);
-L
— следовать по символическим ссылкам, даже если они не указаны в командной строке;
-P
— не следовать по символическим ссылкам, даже если они указаны в командной строке;
--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=500(test) gid=500(test) группы=500(test),16(rpm)
Примечание
useradd
[ОПЦИИ...]
<ИМЯ ПОЛЬЗОВАТЕЛЯ>useradd -D
[ОПЦИИ...]
-b каталог
— базовый каталог для домашнего каталога новой учётной записи;
-c комментарий
— текстовая строка (обычно используется для указания фамилии и мени);
-d каталог
— домашний каталог новой учётной записи;
-D
— показать или изменить настройки по умолчанию для useradd;
-e дата
— дата устаревания новой учётной записи;
-g группа
— имя или ID первичной группы новой учётной записи;
-G группы
— список дополнительных групп (через запятую) новой учётной записи;
-m
— создать домашний каталог пользователя;
-M
— не создавать домашний каталог пользователя;
-p пароль
— зашифрованный пароль новой учётной записи (не рекомендуется);
-s оболочка
— регистрационная оболочка новой учётной записи (по умолчанию /bin/bash
);
-u UID
— пользовательский ID новой учётной записи.
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
:
#useradd
test1 #passwd
test1 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) — минимально допустимая длина пароля.
Примечание
max=N
(max=72) — максимально допустимая длина пароля. Эта опция может быть использована для того, чтобы запретить пользователям устанавливать пароли, которые могут быть слишком длинными для некоторых системных служб. Значение 8 обрабатывается особым образом: пароли длиннее 8 символов, не отклоняются, а обрезаются до 8 символов для проверки надежности (пользователь при этом предупреждается).
passphrase=N
(passphrase=3) — число слов, необходимых для ключевой фразы (значение 0 отключает поддержку парольных фраз).
match=N
(match=4) — длина общей подстроки, необходимой для вывода, что пароль хотя бы частично основан на информации, найденной в символьной строке (значение 0 отключает поиск подстроки). Если найдена слабая подстрока пароль не будет отклонен; вместо этого он будет подвергаться обычным требованиям к прочности при удалении слабой подстроки. Поиск подстроки нечувствителен к регистру и может обнаружить и удалить общую подстроку, написанную в обратном направлении.
similar=permit|deny
(similar=deny) — параметр similar=permit
разрешает задать новый пароль, если он похож на старый (параметр similar=deny
— запрещает). Пароли считаются похожими, если есть достаточно длинная общая подстрока, и при этом новый пароль с частично удаленной подстрокой будет слабым.
random=N[,only]
(random=47) — размер случайно сгенерированных парольных фраз в битах (от 26 до 81) или 0, чтобы отключить эту функцию. Любая парольная фраза, которая содержит предложенную случайно сгенерированную строку, будет разрешена вне зависимости от других возможных ограничений. Значение only
используется для запрета выбранных пользователем паролей.
enforce=none|users|everyone
(enforce=users) — параметр enforce=users
задает ограничение задания паролей в passwd на пользователей без полномочий root. Параметр enforce=everyone
задает ограничение задания паролей в passwd и на пользователей, и на суперпользователя root. При значении none
модуль PAM будет только предупреждать о слабых паролях.
retry=N
(retry=3) — количество запросов нового пароля, если пользователь с первого раза не сможет ввести достаточно надежный пароль и повторить его ввод.
/etc/passwdqc.conf
:
min=8,7,4,4,4 enforce=everyoneВ указанном примере пользователям, включая суперпользователя root, будет невозможно задать пароли:
chage
.
Примечание
# apt-get install shadow-change
chage
изменяет количество дней между сменой пароля и датой последнего изменения пароля.
chage [опции] логин
-d
, --lastday LAST_DAY
— установить последний день смены пароля в LAST_DAY на день (число дней с 1 января 1970). Дата также может быть указана в формате ГГГГ-ММ-ДД;
-E
, -expiredate EXPIRE_DAYS
— установить дату окончания действия учётной записи в 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
Примечание
PASS_MAX_DAYS
в файле /etc/login.defs
.
Предупреждение
Предупреждение
/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 после первого появления строки с паролем:
password required pam_passwdqc.so config=/etc/passwdqc.conf password required pam_pwhistory.so debug use_authtok remember=10 retry=3
/etc/security/opasswd
будут храниться последние 10 паролей пользователя (содержит хэши паролей всех учетных записей пользователей) и при попытке использования пароля из этого списка будет выведена ошибка:
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
# usermod
-l test2 test1
usermod -L
test2
и usermod -U
test2
соответственно временно блокируют возможность входа в систему пользователю test2 и возвращают всё на свои места.
chpasswd
. На стандартный вход ей следует подавать список, каждая строка которого будет выглядеть как имя:пароль
.
userdel
.
userdel test2
удалит пользователя test2 из системы. Если будет дополнительно задан параметр -r
, то будет уничтожен и домашний каталог пользователя. Нельзя удалить пользователя, если в данный момент он еще работает в системе.
pstree
.
/etc/inittab
, откуда вызываются другие программы и скрипты на определенном этапе запуска.
service
и chkconfig
продолжат работать в мире systemd практически без изменений. Тем не менее, в этой таблице показано как выполнить те же действия с помощью встроенных утилит systemctl.
Таблица 56.1. Команды управления службами
Команды Sysvinit
|
Команды Systemd
|
Примечания
|
---|---|---|
service frobozz start
|
systemctl start frobozz.service
|
Используется для запуска службы (не перезагружает постоянные)
|
service frobozz stop
|
systemctl stop frobozz.service
|
Используется для остановки службы (не перезагружает постоянные)
|
service frobozz restart
|
systemctl restart frobozz.service
|
Используется для остановки и последующего запуска службы
|
service frobozz reload
|
systemctl reload frobozz.service
|
Если поддерживается, перезагружает файлы конфигурации без прерывания незаконченных операций
|
service frobozz condrestart
|
systemctl condrestart frobozz.service
|
Перезапускает службу, если она уже работает
|
service frobozz status
|
systemctl status frobozz.service
|
Сообщает, запущена ли уже служба
|
ls /etc/rc.d/init.d/
|
systemctl list-unit-files --type=service (preferred)
ls /lib/systemd/system/*.service /etc/systemd/system/*.service
|
Используется для отображения списка служб, которые можно запустить или остановить.
Используется для отображения списка всех служб.
|
chkconfig frobozz on
|
systemctl enable frobozz.service
|
Включает службу во время следующей перезагрузки, или любой другой триггер
|
chkconfig frobozz off
|
systemctl disable frobozz.service
|
Выключает службу во время следующей перезагрузки, или любой другой триггер
|
chkconfig frobozz
|
systemctl is-enabled frobozz.service
|
Используется для проверки, сконфигурирована ли служба для запуска в текущем окружении
|
chkconfig --list
|
systemctl list-unit-files --type=service(preferred)
ls /etc/systemd/system/*.wants/
|
Выводит таблицу служб. В ней видно, на каких уровнях загрузки они (не)запускаются
|
chkconfig frobozz --list
|
ls /etc/systemd/system/*.wants/frobozz.service
|
Используется, для отображения на каких уровнях служба (не)запускается
|
chkconfig frobozz --add
|
systemctl daemon-reload
|
Используется, когда вы создаете новую службу или модифицируете любую конфигурацию
|
/var/log/journal
, что исключает возможность просмотра содержимого данных файлов стандартными утилитами обработки текстовых данных. Для просмотра логов используется утилита journalctl.
journalctl
с разными ключами:
journalctl
-b
— покажет сообщения только с текущей загрузки;
journalctl
-f
— покажет только последние сообщения и продолжит печатать новые записи при добавлении их в журнал.
journalctl
_PID
=1 — покажет сообщения первого процесса (init).
man journalctl
.
/var/log/
).
/etc/systemd/journald.conf
. Справку по этому файлу можно получить, выполнив команду man journald.conf
.
# journalctl
--disk-usage
--vacuum-size
. Например, удалить журналы, оставив только последние 200 Мб:
# journalctl
--vacuum-size=200M
--vacuum-time
. Например, удалить журналы, оставив только журналы за последний месяц:
# journalctl
--vacuum-time=1months
Примечание
--vacuum-size=
оказывает лишь косвенное влияние на вывод, показанный --disk-usage
, поскольку последний включает активные файлы журнала, в то время как операция очистки работает только с архивными файлами журнала. Аналогично, --vacuum-time=
может фактически не уменьшить количество файлов журнала ниже указанного числа, так как не удалит активные файлы журнала.
/etc/systemd/journald.conf
, например:
SystemMaxUse=1G
SystemMaxFileSize=200M
MaxFileSec=20day
MaxRetentionSec=1months
Примечание
/etc/systemd/journald.conf
необходимо перезапустить службу systemd-journald:
# systemctl restart systemd-journald
/var/log/
— не текстовые, они являются неполноценными журналами и представляют собой «свалку событий» для служб авторизации и учёта. Текстовую информацию о входе пользователей в систему и выходе оттуда можно получить по команде last
, а узнать о тех, кто в данный момент пользуется системой, помогут команды w
и who
.
ps
, top
, vmstat
), сведения об использовании дискового пространства (du
, df
) и сведения о работе сетевых устройств (netstat
).
man
(сокращение от manual). Каждая страница руководства посвящена одному объекту системы. Для того чтобы прочесть страницу руководства по программе, необходимо набрать man
название_программы. К примеру, если вы хотите узнать, какие опции есть у команды date
, вы можете ввести команду:
$
man
date
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
имя_установленного_пакета. В информационном заголовке соответствующего пакета, среди прочей информации, будет выведена искомая ссылка.