Product SiteDocumentation Site

Альт Виртуализация редакция PVE 11.0

Документация

Руководство пользователя

Редакция июнь, 2025

Елена Мишина

ООО «Базальт СПО»

Юридическое уведомление

Данный документ распространяется на условиях свободной лицензии FDL (Free Documentation License) версии 1.3.
Данный документ не содержит текста, помещаемого на первой или последней странице обложки. Данный документ не содержит неизменяемого текста.

Аннотация

Добро пожаловать в документацию дистрибутива Альт Виртуализация редакция PVE. Данное руководство предназначено как для начинающих, так и для опытных пользователей. Руководство описывает подготовку системы для установки, процесс установки дистрибутива, а также процедуру настройки и использования системы.
Названия компаний и продуктов, встречающихся в руководстве, могут являться торговыми знаками соответствующих компаний.
Данное руководство соответствует текущему состоянию сведений, но какие-либо окончательные правки могли не попасть в него. В случае обнаружения ошибок и неточностей в руководство вносятся изменения.
I. Что такое Альт Виртуализация редакция PVE?
1. Что такое Альт Виртуализация редакция PVE
1.1. Системные требования
1.2. Ограничения для логических объектов виртуализации
2. Что такое Linux
2.1. Свободные программы
2.2. Разработка Linux
2.3. Защищённость
2.4. Дистрибутивы Linux
2.5. Новичку
3. Что такое системы Альт
3.1. ALT Linux Team
3.2. Сизиф
3.3. Что такое одиннадцатая платформа
3.3.1. Основные новшества одиннадцатой платформы
II. Установка дистрибутива
4. Подготовка установочного диска
4.1. Запись ISO-образа дистрибутива на DVD
4.1.1. Запись образа диска под операционной системой MS Windows
4.1.2. Запись образа диска под операционной системой Linux
4.2. Запись установочного образа на USB Flash
4.2.1. В операционной системе Windows
4.2.2. В операционной системе Linux
4.2.3. В операционной системе OS X
4.2.4. Проверка целостности записанного образа
5. Сохранение данных и меры предосторожности
6. Начало установки: загрузка системы
6.1. Способы первоначальной загрузки
6.2. Загрузка системы
7. Последовательность установки
8. Язык
9. Лицензионное соглашение
10. Дата и время
11. Подготовка диска
11.1. Профиль LVM
11.2. Профиль Btrfs RAID
12. Установка системы
13. Сохранение настроек
14. Установка загрузчика
15. Ethernet-интерфейсы
16. Администратор системы
17. Системный пользователь
18. Завершение установки
19. Обновление системы до актуального состояния
20. Первая помощь
20.1. Проблемы при установке системы
20.2. Проблемы с загрузкой системы
20.3. Полезные ссылки
III. Начало использования Альт Виртуализация редакция PVE
21. Загрузка системы
22. Вход в систему
IV. Средство управления виртуальными окружениями PVE
23. Системные требования
24. Краткое описание возможностей
24.1. Веб-интерфейс
24.2. Хранилище данных
24.3. Сетевая подсистема
25. Создание кластера PVE
25.1. Настройка узлов кластера
25.2. Создание кластера в веб-интерфейсе
25.3. Создание кластера в консоли
25.4. Удаление узла из кластера
25.5. Кворум
25.6. Поддержка внешнего арбитра corosync
25.7. Кластерная файловая система PVE (pmxcfs)
26. Системы хранения PVE
26.1. Типы хранилищ в PVE
26.2. Конфигурация хранилища
26.3. Идентификатор тома
26.4. Работа с хранилищами в PVE
26.4.1. Использование командной строки
26.4.2. Добавление хранилища в веб-интерфейсе PVE
26.4.3. Каталог
26.4.4. NFS
26.4.5. BTRFS
26.4.6. CIFS
26.4.7. GlusterFS
26.4.8. Локальный ZFS
26.4.9. LVM
26.4.10. LVM-Thin
26.4.11. iSCSI
26.4.12. iSCSI/libiscsi
26.4.13. Ceph RBD
26.4.14. CephFS
26.4.15. Proxmox Backup Server
26.4.16. ESXi
26.5. FC/iSCSI SAN
26.5.1. Подключение СХД
26.5.2. Настройка Multipath
26.5.3. Multipath в веб-интерфейсе PVE
26.5.4. Файловые системы на multipath
26.5.5. LVM/LVM-Thin хранилища на multipath
26.5.6. Изменение размера multipath-устройства
26.6. Кластер Ceph
26.6.1. Системные требования
26.6.2. Начальная конфигурация Ceph
26.6.3. Монитор Ceph
26.6.4. Менеджер Ceph
26.6.5. Ceph OSD
26.6.6. Пулы Ceph
26.6.7. Ceph CRUSH и классы устройств
26.6.8. Клиент Ceph
26.6.9. CephFS
26.6.10. Техническое обслуживание Ceph
26.6.11. Мониторинг и устранение неполадок Ceph
27. Репликация хранилища
27.1. Управление заданиями
27.2. Обработка ошибок
27.3. Миграция гостевой системы в случае ошибки
28. Сетевая подсистема
28.1. Применение изменений сетевых настроек
28.2. Имена сетевых устройств
28.3. Конфигурирование сети в PVE
28.4. Конфигурация сети с использованием моста
28.4.1. Конфигурация с одним мостом
28.4.2. Внутренняя сеть для ВМ
28.5. Объединение/агрегация интерфейсов
28.5.1. Параметры Linux Bond
28.5.2. Параметры OVS Bond
28.5.3. Агрегированный bond-интерфейс с фиксированным IP-адресом
28.5.4. Агрегированный bond-интерфейс в качестве порта моста
28.6. Настройка VLAN
28.6.1. Мост с поддержкой VLAN
28.6.2. Мост на VLAN
29. Управление ISO-образами и шаблонами LXC
30. Виртуальные машины на базе KVM
30.1. Создание виртуальной машины на базе KVM
30.2. Запуск и остановка ВМ
30.2.1. Изменение состояния ВМ в веб-интерфейсе
30.2.2. Автоматический запуск ВМ
30.2.3. Массовый запуск и остановка ВМ
30.3. Управление ВМ с помощью qm
30.4. Сценарии перехвата (hookscripts)
30.5. Доступ к ВМ
30.6. Внесение изменений в ВМ
30.6.1. Управление образами виртуальных дисков
30.6.2. Настройки дисплея
30.6.3. Дополнительные функции SPICE
30.6.4. Проброс USB
30.6.5. BIOS и UEFI
30.6.6. Доверенный платформенный модуль (TPM)
30.6.7. Проброс PCI(e)
30.6.8. Сопоставление устройств
30.6.9. VirtioFS (проброс каталогов)
30.6.10. Гостевой агент QEMU
30.7. Файлы конфигурации ВМ
31. Создание и настройка контейнера LXC
31.1. Создание контейнера в графическом интерфейсе
31.2. Создание контейнера из шаблона в командной строке
31.3. Изменение настроек контейнера
31.3.1. Изменение настроек в веб-интерфейсе
31.3.2. Настройка ресурсов в командной строке
31.3.3. Настройка ресурсов прямым изменением
31.4. Запуск и остановка контейнеров
31.4.1. Изменение состояния контейнера в веб-интерфейсе
31.4.2. Изменение состояния контейнера в командной строке
31.5. Доступ к LXC контейнеру
32. Программно-определяемые сети (SDN)
32.1. Технология и конфигурация
32.2. Зоны
32.2.1. Простые (Simple) зоны
32.2.2. Зоны VLAN
32.2.3. Зоны QinQ
32.2.4. Зоны VXLAN
32.2.5. Зоны EVPN
32.3. Виртуальные сети
32.4. Подсети
32.5. IPAM
32.5.1. Плагин PVE IPAM
32.5.2. Плагин NetBox IPAM
32.5.3. Плагин phpIPAM
32.6. DNS
32.6.1. Плагин PowerDNS
32.7. DHCP
32.7.1. Плагин Dnsmasq
32.8. Интеграция с межсетевым экраном
32.8.1. Виртуальные сети и подсети
32.8.2. IPAM
32.9. Примеры настройки SDN
32.9.1. Настройка Simple Zone
32.9.2. Настройка зоны VLAN
32.9.3. Настройка зоны QinQ
32.9.4. Настройка зоны VXLAN
33. Миграция ВМ и контейнеров
33.1. Миграция с применением графического интерфейса
33.2. Миграция в командной строке
33.3. Миграция ВМ из внешнего гипервизора
33.3.1. Импорт из ESXi-хранилища
33.3.2. Импорт OVA/OVF
33.3.3. Импорт OVA/OVF в консоли
33.3.4. Резервное копирование и восстановление
33.3.5. Миграция KVM ВМ в PVE
33.3.6. Миграция ВМ из VMware в PVE
34. Клонирование ВМ
35. Шаблоны ВМ
36. Теги (метки) ВМ
36.1. Работа с тегами
36.2. Настройка тегов
36.2.1. Стиль тегов
36.2.2. Права
37. Резервное копирование (Backup)
37.1. Режимы резервного копирования
37.2. Хранилище резервных копий
37.3. Сжатие файлов резервной копии
37.4. Файлы резервных копий
37.5. Шифрование резервных копий
37.6. Выполнение резервного копирования в веб-интерфейсе
37.7. Задания резервного копирования
37.7.1. Формат расписания
37.7.2. Настройка заданий резервного копирования в графическом интерфейсе
37.8. Восстановление
37.9. Ограничение пропускной способности
37.10. Восстановление в реальном времени (Live-Restore)
37.11. Восстановление отдельных файлов
37.12. Файл конфигурация vzdump.conf
37.13. Сценарии перехвата (hookscripts)
37.14. Файлы, не включаемые в резервную копию
37.15. Примеры создания резервных копий в командной строке
37.16. Снимки (snapshot)
38. Уведомления
38.1. Цели уведомлений (Notification Targets)
38.1.1. Sendmail
38.1.2. SMTP
38.1.3. Webhook
38.2. Триггеры уведомлений (Notification Matchers)
38.2.1. Правила сопоставления календаря (match-calendar)
38.2.2. Правила сопоставления полей (match-field)
38.2.3. Правила сопоставления серьезности (match-severity)
38.2.4. События уведомления
38.2.5. Создание триггера уведомлений
38.3. Пересылка системной почты
38.4. Разрешения
38.5. Режим уведомления
39. Встроенный мониторинг PVE
40. Высокая доступность PVE
40.1. Как работает высокая доступность PVE
40.2. Требования для настройки высокой доступности
40.3. Настройка высокой доступности PVE
40.3.1. Создание группы высокой доступности
40.3.2. Добавление ресурсов
40.4. Тестирование настройки высокой доступности PVE
41. Межсетевой экран PVE (firewall)
41.1. Зоны
41.2. Файлы конфигурации
41.2.1. Настройка кластера
41.2.2. Конфигурация узла
41.2.3. Конфигурация ВМ/контейнера
41.2.4. Правила межсетевого экрана
41.2.5. Группы безопасности
41.2.6. IP-псевдонимы
41.2.7. Наборы IP-адресов
41.2.8. Службы и команды
41.3. Правила по умолчанию
41.3.1. Входящий/исходящий DROP/REJECT центра обработки данных
41.3.2. Входящий/исходящий DROP/REJECT ВМ/Контейнера
41.4. Ведение журнала
41.5. Особенности IPv6
41.6. Порты, используемые PVE
42. Пользователи и их права
42.1. API-токены
42.2. Пулы ресурсов
42.3. Области аутентификации
42.3.1. Стандартная аутентификация Linux PAM
42.3.2. Сервер аутентификации PVE
42.3.3. LDAP аутентификация
42.3.4. AD аутентификация
42.4. Двухфакторная аутентификация
42.5. Управление доступом
43. Просмотр событий PVE
43.1. Просмотр событий с помощью pvenode task
43.2. Просмотр событий в веб-интерфейсе PVE
43.2.1. Панель журнала
43.2.2. Журнал задач узла PVE
43.2.3. Журнал задач ВМ
44. PVE API
44.1. URL API
44.2. Аутентификация
44.2.1. Билет Cookie
44.2.2. API-токены
44.3. Пример создания контейнера с использованием API
44.4. Утилита pvesh
45. Основные службы PVE
45.1. pvedaemon — служба PVE API
45.2. pveproxy — служба PVE API Proxy
45.2.1. Управление доступом на основе хоста
45.2.2. Прослушиваемый IP-адрес
45.2.3. Набор SSL-шифров
45.2.4. Поддерживаемые версии TLS
45.2.5. Параметры Диффи-Хеллмана
45.2.6. Альтернативный сертификат HTTPS
45.2.7. Сжатие ответа
45.3. pvestatd — служба PVE Status
45.4. spiceproxy — служба SPICE Proxy
45.4.1. Управление доступом на основе хоста
45.5. pvescheduler — служба PVE Scheduler
46. Обновление системы
46.1. Управление репозиториями в PVE
46.2. Обновление системного ПО
V. Установка пакетов для опытных пользователей
Введение
47. Источники программ (репозитории)
47.1. Редактирование репозиториев
47.1.1. Утилита apt-repo для работы с репозиториями
47.1.2. Добавление репозитория на сменном носителе
47.1.3. Добавление репозиториев вручную
48. Поиск пакетов
49. Установка или обновление пакета
50. Удаление установленного пакета
51. Обновление системы
51.1. Обновление всех установленных пакетов
51.2. Обновление ядра
VI. Основы администрирования Linux
52. Общие принципы работы ОС
52.1. Процессы и файлы
52.1.1. Процессы функционирования ОС
52.1.2. Файловая система ОС
52.1.3. Структура каталогов
52.1.4. Организация файловой структуры
52.1.5. Имена дисков и разделов
52.1.6. Разделы, необходимые для работы ОС
52.2. Работа с наиболее часто используемыми компонентами
52.2.1. Виртуальная консоль
52.2.2. Командные оболочки (интерпретаторы)
52.2.3. Командная оболочка Bash
52.2.4. Команда
52.2.5. Команда и параметры
52.2.6. Команда и ключи
52.2.7. Обзор основных команд системы
52.3. Стыкование команд в системе Linux
52.3.1. Стандартный ввод и стандартный вывод
52.3.2. Перенаправление ввода и вывода
52.3.3. Использование состыкованных команд
52.3.4. Недеструктивное перенаправление вывода
53. Средства управления дискреционными правами доступа
53.1. Команда chmod
53.2. Команда chown
53.3. Команда chgrp
53.4. Команда umask
53.5. Команда chattr
53.6. Команда lsattr
53.7. Команда getfacl
53.8. Команда setfacl
54. Режим суперпользователя
54.1. Какие бывают пользователи?
54.2. Как получить права суперпользователя?
54.3. Как перейти в режим суперпользователя?
55. Управление пользователями
55.1. Общая информация
55.2. Команда useradd
55.3. Команда passwd
55.4. Добавление нового пользователя
55.5. Настройка парольных ограничений
55.6. Управление сроком действия пароля
55.7. Настройка неповторяемости пароля
55.8. Модификация пользовательских записей
55.9. Удаление пользователей
56. Система инициализации systemd и sysvinit
56.1. Запуск операционной системы
56.1.1. Запуск системы
56.1.2. Система инициализации
56.2. Системы инициализации systemd и sysvinit
56.2.1. sysvinit
56.2.2. systemd
56.3. Примеры команд управления службами, журнал в systemd
57. Что происходит в системе
58. Документация
58.1. Экранная документация
58.1.1. man
58.1.2. info
58.2. Документация по пакетам
VII. Техническая поддержка продуктов «Базальт СПО»
59. Покупателям нашей продукции
60. Пользователям нашей продукции

Часть I. Что такое Альт Виртуализация редакция PVE?

Глава 1. Что такое Альт Виртуализация редакция PVE

Операционная система Альт Виртуализация редакция PVE — это комплексное решение для управления виртуализацией на базе открытого программного обеспечения. Оно объединяет технологии виртуальных машин (KVM) и контейнеров (LXC) в единую удобную платформу с веб-интерфейсом, мощной системой управления и встроенными средствами резервного копирования и кластеризации.
Основные возможности PVE:
  • полноценная поддержка KVM и LXC — запуск полноценных виртуальных машин (ВМ) и легковесных контейнеров в одной среде;
  • кластеризация и High Availability (HA) — объединение нескольких узлов в кластер с возможностью автоматического перезапуска ВМ при сбоях;
  • интеграция с хранилищами — поддержка локальных и сетевых хранилищ (LVM, ZFS, Btrfs, NFS, iSCSI, Ceph и др.);
  • резервное копирование и восстановление — встроенные механизмы резервного копирования и репликации;
  • гибкая сетевая настройка — поддержка VLAN, мостов, агрегирования интерфейсов (bonding), виртуальных сетей SDN (Software Defined Networking).
В PVE доступны три основных способа управления системой виртуализации, обеспечивающие гибкость и удобство администрирования:
  • веб-интерфейс — интуитивно понятный графический интерфейс для управления ВМ (KVM), контейнерами (LXC), хранилищами, сетями и кластерами. Позволяет выполнять все основные операции: создание, запуск, миграцию, резервное копирование ВМ и контейнеров. Веб-интерфейс доступен по HTTPS с поддержкой ролевой модели доступа (RBAC);
  • командная строка (CLI) — полноценное управление через утилиту pvesh и стандартные Linux-команды;
  • REST API — программное управление PVE через HTTP-запросы. Может использоваться для интеграции с внешними системами (Ansible, Terraform, Zabbix и др.).
PVE подходит для создания частных облаков, тестовых сред, серверов приложений и развёртывания виртуальной инфраструктуры с минимальными затратами.

1.1. Системные требования

  • Минимальный размер RAM (без учета ВМ) — 1 ГБ;
  • Рекомендуемый размер RAM (без учета ВМ) — от 2 ГБ;
  • Минимальное количество CPU — 1;
  • Место на жёстком диске (без учета ВМ) — от 10 ГБ.

1.2. Ограничения для логических объектов виртуализации

  • Максимальное число узлов в кластере — явного ограничения нет (на практике максимальное количество узлов зависит от производительности хостов и пропускной способности сети).
  • Максимальные лимиты на хост:
    • CPU — до 8192 ядер (с учетом Hyper-Threading). Например, на двухпроцессорном сервере с включённым HT могут быть установлены два 2048-ядерных процессора (8192 ÷ 2 ÷ 2 = 2048);
    • RAM — 32 ТБ;
    • HDD — ограничений со стороны PVE нет;
    • NIC — ограничений нет.
  • Максимальные лимиты на ВМ:
    • CPU — 240;
    • RAM — 4 ТБ. Поддерживает максимальную память которую вы можете выделить ВМ. 32-х разрядные ВМ с поддержкой расширения физических адресов (PAE) могут получить доступ только к 64 ГБ — это ограничение виртуального оборудования;
    • HDD — ограничений со стороны PVE нет (зависит от самой файловой системы);
    • NIC — 32;
    • PCI — 16.

Примечание

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

Глава 2. Что такое Linux

2.1. Свободные программы

Операционная система (далее — ОС) Linux — ядро, основные компоненты системы и большинство её пользовательских приложений — свободные программы. Свободные программы можно:
  • запускать на любом количестве компьютеров;
  • распространять бесплатно или за деньги без каких-либо ограничений;
  • получать исходные тексты этих программ и вносить в них любые изменения.
Свобода программ обеспечила их широкое использование и интерес к ним со стороны тысяч разработчиков. Основные программы для Linux выходят под лицензией GNU General Public License (далее — GPL). Лицензия GNU не только гарантирует свободу, но и защищает её. Она допускает дальнейшее распространение программ только под той же лицензией, поэтому исходный код ядра Linux, компиляторов, библиотеки glibc, пользовательских графических оболочек не может быть использован для создания приложений с закрытым кодом. В этом принципиальное отличие Linux от свободных ОС семейства BSD (FreeBSD, NetBSD, OpenBSD), фрагменты которых вошли в Microsoft Windows и даже стали основой OS X. Linux включает в себя многие разработки BSD, но его компиляторы и системные библиотеки разработаны в рамках проекта GNU (http://www.gnu.org/home.ru.html).

2.2. Разработка Linux

В отличие от распространённых несвободных ОС, Linux не имеет географического центра разработки. Нет фирмы, которая владела бы этой ОС, нет и единого координационного центра. Программы для Linux — результат работы тысяч проектов. Большинство из них объединяет программистов из разных стран, связанных друг с другом только перепиской. Лишь некоторые проекты централизованы и сосредоточены в фирмах. Создать свой проект или присоединиться к уже существующему может любой программист, и, в случае успеха, результаты этой работы станут известны миллионам пользователей. Пользователи принимают участие в тестировании свободных программ, общаются с разработчиками напрямую. Это позволяет за короткий срок добавлять в программное обеспечение новые возможности, оперативно находить ошибки и исправлять их.
Именно гибкая и динамичная система разработки, невозможная для проектов с закрытым кодом, определяет исключительную экономическую эффективность Linux. Низкая стоимость свободных разработок, отлаженные механизмы тестирования и распространения, привлечение независимых специалистов, обладающих индивидуальным, самостоятельным видением проблем, защита исходного текста программ лицензией GPL — всё это стало причиной успеха свободных программ.
Такая высокая эффективность разработки не могла не заинтересовать крупные фирмы. Они стали создавать свои свободные проекты, основывающиеся на тех же принципах. Так появились Mozilla, LibreOffice, свободный клон Interbase, SAP DB. IBM способствовала переносу Linux на свои мейнфреймы.
Открытый код программ значительно снизил себестоимость разработки закрытых систем для Linux и позволил снизить цену решения для пользователя. Вот почему Linux стала платформой, часто рекомендуемой для таких продуктов, как Oracle, DB2, Informix, Sybase, SAP ERP, Lotus Domino.

2.3. Защищённость

ОС Linux унаследовала от UNIX надёжность и отличную систему защиты. Система разграничения доступа к файлам позволяет не бояться вирусов. Но всё же, программ без ошибок не бывает, и Linux не исключение. Благодаря открытости исходного кода программ, аудит системы может осуществить любой специалист без подписок о неразглашении и без необходимости работы в стенах нанявшей его компании. Сообщества разработчиков и пользователей свободных программ создали множество механизмов оповещения об ошибках и их исправления. Сообщить об ошибке и принять участие в её исправлении независимому программисту или пользователю так же просто, как специалисту фирмы-разработчика или автору проекта. Благодаря этому ошибки защиты эффективно выявляются и быстро исправляются.

2.4. Дистрибутивы Linux

Большинство пользователей для установки Linux используют дистрибутивы. Дистрибутив — это не просто набор программ, а готовое решение для выполнения различных задач пользователя, обладающее идентичностью установки, управления, обновления, а также едиными системами настройки и поддержки.

2.5. Новичку

Linux — самостоятельная операционная система. Все операционные системы разные: Linux — не Windows, не OS X и не FreeBSD. В Linux свои правила, их необходимо изучить и к ним необходимо привыкнуть. Терпение и настойчивость в изучении Linux обернётся значительным повышением эффективности и безопасности вашей работы. То, что сегодня кажется странным и непривычным, завтра понравится и станет нормой.
Не стесняйтесь задавать вопросы, ведь самый простой способ найти ответ — совет опытного специалиста. Взаимопомощь и общение — традиция в мире Linux. Всегда можно обратиться за помощью к сообществу пользователей и разработчиков Linux. Большинство вопросов повторяются, поэтому для начала стоит поискать ответ на свой вопрос в документации, затем в сети Интернет. Если вы не нашли ответа в перечисленных источниках, не стесняйтесь, пишите на форум или в списки рассылки так, как писали бы своим друзьям, и вам обязательно помогут.

Глава 3. Что такое системы Альт

3.1. ALT Linux Team

Команда ALT Linux (https://www.altlinux.org/ALT_Linux_Team) — это интернациональное сообщество, насчитывающее более 300 разработчиков свободного программного обеспечения.

3.2. Сизиф

Sisyphus (https://packages.altlinux.org) — наш ежедневно обновляемый банк программ (часто называемый репозиторием). Поддерживаемая командой ALT Linux Team целостность Sisyphus, оригинальная технология сборки программ и утилита apt-get позволяют пользователям легко обновлять свои системы и быть в курсе актуальных новинок мира свободных программ.
Ежедневно изменяющийся репозиторий содержит самое новое программное обеспечение со всеми его преимуществами и недостатками (иногда ещё неизвестными). Поэтому, перед обновлением вашей системы из Sisyphus, мы советуем взвесить преимущества новых возможностей, реализованных в последних версиях программ, и вероятность возникновения неожиданностей в работе с ними (https://www.altlinux.org/Sisyphus_changes).
Разработка Sisyphus полностью открыта. У нас нет секретных изменений кода и закрытого тестирования с подписками о неразглашении. Всё, что мы сделали сегодня, завтра вы найдёте в сети. По сравнению с другими аналогичными банками программ (Debian unstable, Mandriva Cooker, PLD, Fedora), в Sisyphus есть немало самобытного. Особое внимание уделяется защите системы, локализации на русский язык, полноте и корректности зависимостей.
Название Sisyphus (Сизиф) заимствовано из греческой мифологии. С кропотливым Сизифом, непрерывно закатывающим в гору камни, команду ALT Linux Team объединяет постоянная работа над усовершенствованием технологий, заложенных в репозиторий.
Sisyphus, в первую очередь, — открытая лаборатория решений. Если вам это интересно, если вы хотите дополнить Sisyphus новыми решениями, если вы считаете, что можете собрать какую-то программу лучше — присоединяйтесь к проекту ALT Linux Team (https://www.altlinux.org/Join).

3.3. Что такое одиннадцатая платформа

Как уже говорилось ранее, Sisyphus — это часто обновляемый репозиторий, ориентированный прежде всего для разработчиков. Для пользователей, которым стабильность и предсказуемость работы системы важнее расширенной функциональности (а это в первую очередь начинающие и корпоративные пользователи), предназначены дистрибутивы Альт. Такие дистрибутивы базируются на стабильном срезе репозитория Sisyphus. Эти срезы называются платформами.
Одиннадцатая платформа (p11) была создана в июне 2024 года и её поддержка продлится до января 2028 года.

3.3.1. Основные новшества одиннадцатой платформы

  • Одиннадцатая платформа основана на ядре Linux 6.12 (LTS) с расширенной поддержкой современного оборудования: процессорных архитектур Intel, включая Intel Meteor Lake, Intel Xeon Sapphire Rapids, AMD Ryzen 7000 (Zen 4) и EPYC Genoa; аппаратных интерфейсов — PCI Express Gen5, USB4, Thunderbolt 4, Wi-Fi 6/6E, NVMe 1.4/2.0; улучшенной поддержкой виртуализации;
  • Программное обеспечение на одиннадцатой платформе использует обновленный OpenSSL 3.1. Платформа сохраняет поддержку OpenSSL 1.1 для совместимости с устаревшим ПО;
  • Произошел переход на Python 3.12;
  • Добавлены PHP 8.3 и 8.4;
  • Системный интерпретатор сценариев /bin/sh теперь основан на Bash 5.2;
  • Обновлены основные системные библиотеки и компиляторы: glibc 2.38, компилятор GCC 13 и LLVM/Clang 19;
  • Пакет systemd обновлён до версии 255;
  • Подсистема начальной загрузки установщика propagator заменена на altboot;
  • Основным фрэймворком приложений графической подсистемы стал Qt6, с поддержкой Qt5 для обратной совместимости приложений. Qt6 в качестве основного стека также использует системный установщик;
  • Включена поддержка нового Kerberos 1.21, полностью совместимого с Samba 4.20+. В дистрибутивах 11 платформы также доступны и ключевые изменения Samba 4.20+;
  • Существенно обновлён Альтератор в качестве Центра Управления Системой — новый интерфейс, взаимодействие с D-Bus, модульная архитектура. Новый Альтератор поддерживает модули предыдущих версий;
  • ALT Diagnostic Tool — графическая утилита диагностики ОС. ADT использует заранее подготовленный набор проверок, предоставляет возможность пользователю выполнить тесты без дополнительных привилегий и единый вид отчета по проверкам;
  • Копидел — средство тиражирования установленной системы (alterator-kopidel);
  • Платформа доступна для архитектур x86_64 и ARM64.

Часть II. Установка дистрибутива

В этой части рассматривается процесс установки дистрибутива.

Содержание

4. Подготовка установочного диска
4.1. Запись ISO-образа дистрибутива на DVD
4.1.1. Запись образа диска под операционной системой MS Windows
4.1.2. Запись образа диска под операционной системой Linux
4.2. Запись установочного образа на USB Flash
4.2.1. В операционной системе Windows
4.2.2. В операционной системе Linux
4.2.3. В операционной системе OS X
4.2.4. Проверка целостности записанного образа
5. Сохранение данных и меры предосторожности
6. Начало установки: загрузка системы
6.1. Способы первоначальной загрузки
6.2. Загрузка системы
7. Последовательность установки
8. Язык
9. Лицензионное соглашение
10. Дата и время
11. Подготовка диска
11.1. Профиль LVM
11.2. Профиль Btrfs RAID
12. Установка системы
13. Сохранение настроек
14. Установка загрузчика
15. Ethernet-интерфейсы
16. Администратор системы
17. Системный пользователь
18. Завершение установки
19. Обновление системы до актуального состояния
20. Первая помощь
20.1. Проблемы при установке системы
20.2. Проблемы с загрузкой системы
20.3. Полезные ссылки

Глава 4. Подготовка установочного диска

Наиболее частый способ установки операционной системы на компьютер представляет собой установку с установочного DVD-диска. В этой главе описываются различные способы записи дистрибутива на DVD-диск.
Установочные образы являются гибридными, что позволяет производить установку, записав такой образ на USB Flash. О записи установочного образа на USB Flash также рассказано в этой главе.

4.1. Запись ISO-образа дистрибутива на DVD

4.1.1. Запись образа диска под операционной системой MS Windows

Файл ISO-образа диска — это файл специального формата, подготовленный для записи на диск. Для записи ISO-образа под операционной системой MS Windows используйте специальные программы: SCDWriter, Nero BurningROM и другие. Рекомендуем для записи использовать новые диски от известных производителей, таких как: Verbatim, TDK. Записанный на плохой диск образ может вызвать неразрешимые проблемы при установке.

4.1.1.1. Запись образа диска с помощью Small CD-Writer

Весь процесс записи установочного диска при помощи Small CD-Writer состоит из следующих шагов:
  • скачать образ дистрибутива;
  • скачать архив программы Small CD-Writer http://gluek.info/wiki/_media/software/scdwriter14.zip;
  • распаковать файлы программы из архива в любой каталог;
  • вставить чистый диск в привод;
  • войти в распакованный каталог и запустить программу SCDWriter.exe;
  • открыть пункт меню ДискЗаписать ISO-образ на диск и, в появившемся окне, указать путь к образу диска;
  • нажать кнопку Записать.
Окно программы Small CD-Writer

4.1.1.2. Запись образа диска с помощью Nero BurningROM

Процесс записи установочного диска при помощи Nero BurningROM состоит из следующих шагов:
  • скачать образ дистрибутива;
  • скачать программу Nero BurningROM с сайта производителя http://www.nero.com и установить её;
  • запустить программу и выбрать в списке устройств необходимый для записи CD/DVD дисковод;
  • нажать кнопку Открыть в главном окне. В появившемся окне выбрать необходимый ISO-образ для записи и нажать кнопку Открыть;
  • в окне Записать проект на вкладке Запись установить отметку в поле Запись и настроить необходимые параметры прожига;
  • записать ISO-образ на диск, щёлкнув по кнопке Прожиг.

4.1.2. Запись образа диска под операционной системой Linux

Для записи ISO-образов можно использовать множество утилит и программ с графическим или текстовым интерфейсом. Наиболее удобно использовать программы K3b или Brasero, которые поставляются в комплекте любого дистрибутива операционной системы Linux.

4.1.2.1. Запись образа диска с помощью K3b

Весь процесс записи установочного диска при помощи K3b состоит из следующих шагов:
  • если программа k3b отсутствует, необходимо установить её в систему, используя стандартные для вашего дистрибутива инструменты установки программ;
  • запустить программу k3b. При правильных настройках программа сообщит об отсутствии проблем с системой и предложит перейти к записи на диск;
  • в меню главного окна Сервис (Service) выбрать пункт Записать образ DVD (Burn DVD image);
  • в появившемся окне Записать образ DVD (Burn DVD image) нажать на кнопку Выбор файла для записи. Откроется диалог, в котором необходимо выбрать ISO-образ для записи и после выбора нажать кнопку ОК;
  • программа k3b покажет информацию о ISO-файле и начнёт вычислять контрольную сумму. Эта операция может занять несколько минут. Полученную контрольную сумму можно сравнить с MD5SUM суммой на странице дистрибутива;
  • если контрольные суммы не совпадают, значит, для записи был выбран не тот файл или скачанный ISO-образ был испорчен во время передачи данных по сети;
  • если контрольные суммы совпадают, вставить диск для записи в дисковод. Дождаться активации кнопки Начать (Start);
  • нажать на кнопку Начать (Start).

4.2. Запись установочного образа на USB Flash

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

Запись образа дистрибутива на flash-диск приведёт к изменению таблицы разделов на носителе, таким образом, если flash-диск выполнил функцию загрузочного\установочного устройства и требуется вернуть ему функцию переносного накопителя данных, то необходимо удалить все имеющиеся разделы на flash-диске и создать нужное их количество заново.
Для восстановления совместимости flash-диска с операционными системами семейства Windows может понадобиться также пересоздание таблицы разделов (например, при помощи parted). Нужно удалить таблицу GPT и создать таблицу типа msdos. Кроме того, должен быть только один раздел с FAT или NTFS.
Для создания загрузочного flash-диска понадобится файл ISO-образа установочного диска с дистрибутивом. Установочные ISO-образы являются гибридными (Hybrid ISO/IMG), что позволяет производить установку, записав такой образ на flash-накопитель.

4.2.1. В операционной системе Windows

Для создания загрузочного flash-диска под операционной системой MS Windows используйте специальные программы: ALT Media Writer, Win32 Disk Imager, HDD Raw Copy Tool и другие.
ALT Media Writer — это инструмент, который помогает записывать образы ALT на портативные накопители, такие как flash-диски. Он может автоматически загружать образы из интернета и записывать их. Для записи образа на flash-диск необходимо:
  • скачать и установить ALT Media Writer;
  • вставить flash-диск в USB-разъем;
  • запустить ALT Media Writer;
  • выбрать дистрибутив и нажать кнопку Создать Live USB…, начнётся загрузка образа из интернета, также можно выбрать локальный ISO-файл, нажав кнопку Другой образ;
  • выбрать устройство (flash-диск);
  • после окончания загрузки нажать кнопку Записать на диск (если был отмечен пункт Записать образ после загрузки, запись образа начнётся автоматически).
    ALT Media Writer (altmediawriter)
Инструкция для записи образа в программе Win32 Disk Imager:
  • скачать и установить программу Win32 Disk Imager;
  • скачать образ дистрибутива;
  • вставить flash-диск в USB-разъем (размер flash-диска должен быть не меньше размера скачанного образа диска);
  • запустить Win32 Disk Imager;
  • в появившимся окне выбрать ISO-образ дистрибутива, выбрать устройство (flash-диск):
    Win32 Disk Imager
  • нажать кнопку Write для записи образа на flash-диск.
Для записи образа на flash-диск подойдёт и утилита HDD Raw Copy Tool. На первом шаге нужно выбрать файл с образом диска:
Выбор файла с образом диска
На втором шаге нужно выбрать flash-диск, на который будет записан образ:
Выбор flash-диска

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

Будьте внимательны при указании имени USB-устройства — запись образа по ошибке на свой жёсткий диск приведёт к почти гарантированной потере данных на нём!
После проверки правильности выбранных параметров и нажатия кнопки Continue можно приступать к записи, нажав кнопку START. По успешному завершению записи окно с индикацией процесса записи закроется, после чего можно закрыть и окно самой программы.

4.2.2. В операционной системе Linux

Для записи образа на flash-диск можно воспользоваться одной из программ с графическим интерфейсом:
  • ALT Media Writer (altmediawriter):
    ALT Media Writer (altmediawriter)
    ALT Media Writer может автоматически загружать образы из интернета и записывать их, при необходимости извлекая сжатые образы (img.xz).
  • Impression (impression):
    Impression
  • SUSE Studio Imagewriter (imagewriter):
    SUSE Studio Imagewriter (imagewriter)

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

Будьте внимательны при указании имени USB-устройства — запись образа по ошибке на свой жёсткий диск приведёт к почти гарантированной потере данных на нём!

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

Не добавляйте номер раздела, образ пишется на flash-диск с самого начала!
Для записи установочного образа можно воспользоваться утилитой командной строки dd:
# dd oflag=direct if=<файл-образа.iso> of=/dev/sdX bs=1M status=progress;sync
где <файл-образа.iso> — ISO-образ установочного диска с дистрибутивом, а /dev/sdX — устройство, соответствующее flash-диску.
Для удобства показа прогресса записи можно установить пакет pv и использовать команду:
# pv <файл-образа.iso> | dd oflag=direct of=/dev/sdX bs=1M;sync
где <файл-образа.iso> — ISO-образ диска, а /dev/sdX — устройство, соответствующее flash-диску.
Просмотреть список доступных устройств можно командой lsblk или (если такой команды нет) blkid.
Например, так можно определить имя flash-диска:
$ 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

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

Не извлекайте USB-диск, пока образ не запишется до конца! Определить финал процесса можно по прекращению моргания индикатора USB-диска либо посредством виджета Безопасное извлечение съемных устройств.

4.2.3. В операционной системе OS X

В операционной системе OS X для создания загрузочного USB-диска можно использовать команду:
sudo dd if=alt-virtualization-pve-11.0-x86_64.iso of=/dev/rdiskX bs=10M
sync
где alt-virtualization-pve-11.0-x86_64.iso — ISO-образ диска, а /dev/rdiskX — flash-диск.
Просмотреть список доступных устройств можно командой:
diskutil list

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

Будьте внимательны при указании имени USB-устройства — запись образа по ошибке на свой жёсткий диск приведёт к почти гарантированной потере данных на нём!

4.2.4. Проверка целостности записанного образа

Для проверки целостности записанного образа необходимо выполнить следующие шаги:
  • определить длину образа в байтах:
    $ du -b alt-virtualization-pve-11.0-x86_64.iso | cut -f1
    2268246016
    
  • посчитать контрольную сумму образа (или просмотреть контрольную сумму образа из файла MD5SUM на сервере FTP):
    $ md5sum alt-virtualization-pve-11.0-x86_64.iso
    76c041e0772734f3f65c10b579a1d7a6  alt-virtualization-pve-11.0-x86_64.iso
    
  • подсчитать контрольную сумму записанного образа на DVD или USB Flash (выполняется под правами пользователя root):
    # head -c 2268246016 /dev/sdd | md5sum
    76c041e0772734f3f65c10b579a1d7a6
    
    где размер после -c — вывод в п.1, а /dev/sdd — устройство DVD или USB Flash, на которое производилась запись.

Глава 5. Сохранение данных и меры предосторожности

Если необходимо установить ОС Альт Виртуализация редакция PVE и при этом сохранить уже установленную на компьютере операционную систему (например, другую версию GNU/Linux или Microsoft Windows), то нужно обязательно позаботиться о подготовке компьютера к установке второй системы и о сохранении ценных для вас данных.
Если у вас нет загрузочного диска для уже установленной системы, создайте его. В случае прерванной установки ОС Альт Виртуализация редакция PVE или неправильной настройки загрузчика, вы можете потерять возможность загрузиться в вашу предыдущую ОС.
Если на диске, выбранном для установки ОС Альт Виртуализация редакция PVE, не осталось свободного раздела, то программа установки должна будет изменить размер существующего раздела. От этой операции могут пострадать ваши данные, поэтому предварительно надо сделать следующие действия:
  • Выполнить проверку раздела, который вы собираетесь уменьшать. Для этого воспользуйтесь соответствующим программным обеспечением (далее — ПО), входящим в состав уже установленной ОС. Программа установки Альт Виртуализация редакция PVE может обнаружить некоторые очевидные ошибки при изменении размера раздела, но специализированное ПО предустановленной ОС справится с этой задачей лучше.
  • Выполнить дефрагментацию уменьшаемого раздела в целях повышения уровня безопасности данных. Это действие не является обязательным, но мы настоятельно рекомендуем его произвести: изменение размера раздела пройдёт легче и быстрее.

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

Полной гарантией от проблем, связанных с потерей данных, является резервное копирование!

Глава 6. Начало установки: загрузка системы

6.1. Способы первоначальной загрузки

Для загрузки компьютера с целью установки системы необходимо воспользоваться носителем, содержащим начальный загрузчик.
Простейший способ запустить программу установки — загрузить компьютер с помощью загрузочного носителя, находящегося на установочном DVD с дистрибутивом (при условии, что система поддерживает загрузку с устройства для чтения DVD).
Программу установки можно также запустить с другого загрузочного носителя. Например, в качестве загрузочного носителя может использоваться загрузочный USB flash-накопитель.

6.2. Загрузка системы

Для того чтобы начать установку ОС Альт Виртуализация редакция PVE, достаточно загрузиться с носителя, на котором записан дистрибутив.

Примечание

Предварительно следует включить в BIOS опцию загрузки с оптического привода или с USB-устройства.
В большинстве случаев указание способа входа в BIOS отображается на вашем мониторе непосредственно после включения компьютера. Способ входа в меню BIOS и информация о расположении настроек определяется производителем используемого оборудования. За информацией можно обратиться к документации на ваше оборудование.
Начальный загрузчик EFI
Загрузка с установочного диска или специально подготовленного USB-flash-накопителя начинается с меню, в котором перечислено несколько вариантов загрузки. Кроме установки системы с установочного диска, в данном меню доступны несколько вариантов сетевой установки:
  • Install ALT Virtualization PVE 11.0 — установка операционной системы;
  • VNC install (edit to set server IP address) — установка по VNC с соединением с устанавливаемой машины на сервер VNC с заданным IP-адресом. Параметры установки по VNC передаются как параметры ядра. Нажатие клавиши E позволяет задать IP-адрес компьютера, с которого будет происходить управление (для приёма подключения на сервере VNC следует запустить, например, vncviewer --listen):
    Параметры установки по VNC (в сторону VNC-сервера)
  • VNC install (edit to set password and connect here) — установка по VNC с соединением в сторону устанавливаемой машины. Параметры установки по VNC передаются как параметры ядра. Нажатие клавиши E позволяет задать пароль (по умолчанию — VNCPWD):
    Параметры установки по VNC (в сторону устанавливаемой машины)
  • Rescue LiveCD — восстановление уже установленной, но так или иначе поврежденной ОС Linux путем запуска небольшого образа ОС в оперативной памяти. Восстановление системы потребует некоторой квалификации. Этот пункт также может быть использован для сбора информации об оборудовании компьютера, которую можно отправить разработчикам, если ОС Альт Виртуализация редакция PVE устанавливается и работает неправильно. Загрузка восстановительного режима заканчивается запросом на ввод логина суперпользователя (root):
    Log in as root
    localhost login:
    
  • Change language (press F2) — позволяет выбрать язык интерфейса загрузчика и программы установки (нажатие клавиши F2 вызывает такое же действие);
  • Memory Test (may not work with Secure Boot) — проверка целостности оперативной памяти. Процесс диагностики заключается в проведении нескольких этапов тестирования каждого отдельного модуля ОЗУ (данный процесс будет выполняться бесконечно, пока его не остановят, необходимо дождаться окончания хотя бы одного цикла проверки);
  • UEFI Shell (may not work with Secure Boot) — оболочка/терминал для прошивки, позволяющий запускать EFI-приложения, в том числе загрузчики UEFI;
  • UEFI Firmware Settings — позволяет получить доступ к настройкам UEFI.

Примечание

Начальный загрузчик в режиме Legacy:
Начальный загрузчик в режиме Legacy
Пункт Boot from hard drive — позволяет запустить уже установленную на жёсткий диск операционную систему.

Примечание

Мышь на этом этапе установки не поддерживается. Для выбора опций установки и различных вариантов необходимо использовать клавиатуру.
Нажатием клавиши E можно вызвать редактор параметров текущего пункта загрузки. Если система настроена правильно, то редактировать их нет необходимости.
Чтобы начать процесс установки, нужно клавишами перемещения курсора вверх и вниз выбрать пункт меню Install ALT Virtualization PVE 11.0 и нажать Enter. Начальный этап установки не требует вмешательства пользователя: происходит автоматическое определение оборудования и запуск компонентов программы установки. Сообщения о происходящем на данном этапе можно просмотреть, нажав клавишу ESC.

Примечание

В начальном загрузчике установлено небольшое время ожидания: если в этот момент не предпринимать никаких действий, то будет загружена та система, которая уже установлена на жестком диске. Если вы пропустили нужный момент, перезагрузите компьютер и вовремя выберите пункт Install ALT Virtualization PVE 11.0.

Глава 7. Последовательность установки

До того как будет произведена установка базовой системы на жёсткий диск, программа установки работает с образом системы, загруженным в оперативную память компьютера.
Если инициализация оборудования завершилась успешно, будет запущен графический интерфейс программы-установщика. Процесс установки разделён на шаги. Каждый шаг посвящён настройке или установке определённого свойства системы. Шаги нужно проходить последовательно. Переход к следующему шагу происходит по нажатию кнопки Далее. При помощи кнопки Назад, при необходимости, можно вернуться к уже пройденному шагу и изменить настройки. Однако возможность перехода к предыдущему шагу ограничена теми шагами, в которых нет зависимости от данных, введённых ранее.
Если по каким-то причинам возникла необходимость прекратить установку, необходимо нажать кнопку <Reset> на корпусе системного блока компьютера.

Примечание

Совершенно безопасно выполнить отмену установки только до шага Подготовка диска, поскольку до этого момента не производится никаких изменений на жёстком диске. Если прервать установку между шагами Подготовка диска и Установка загрузчика, существует вероятность, что после этого с жёсткого диска не сможет загрузиться ни одна из установленных систем (если такие имеются).
Технические сведения о ходе установки можно посмотреть, нажав Ctrl+Alt+F1, вернуться к программе установки — Ctrl+Alt+F7. По нажатию Ctrl+Alt+F2 откроется отладочная виртуальная консоль.
Каждый шаг сопровождается краткой справкой, которую можно вызвать, щёлкнув кнопку Справка или нажав клавишу F1.
Нажатие на кнопку позволяет показать/скрыть панель со списком шагов установки:
Список шагов

Глава 8. Язык

Язык
Установка Альт Виртуализация редакция PVE начинается с выбора основного языка — языка интерфейса программы установки и устанавливаемой системы. В списке, помимо доступных языков региона (выбранного на этапе начальной загрузки), указан и английский язык.
На этом же этапе выбирается вариант переключения раскладки клавиатуры. Раскладка клавиатуры — это привязка букв, цифр и специальных символов к клавишам на клавиатуре. Помимо ввода символов на основном языке, в любой системе Linux необходимо иметь возможность вводить латинские символы (имена команд, файлов и т.п.). Для этого обычно используется стандартная английская раскладка клавиатуры. Переключение между раскладками осуществляется при помощи специально зарезервированных для этого клавиш. Для русского языка доступны следующие варианты переключения раскладки:
  • клавиши Alt и Shift одновременно;
  • клавиша CapsLock;
  • клавиши Control и Shift одновременно;
  • клавиша Control;
  • клавиша Alt.
Если выбранный основной язык имеет всего одну раскладку (например, при выборе английского языка в качестве основного), эта единственная раскладка будет принята автоматически.

Глава 9. Лицензионное соглашение

Лицензионное соглашение
Перед продолжением установки следует внимательно прочитать условия лицензии. В лицензии говорится о ваших правах. В частности, за вами закрепляются права на:
  • эксплуатацию программ на любом количестве компьютеров и в любых целях;
  • распространение программ (сопровождая их копией авторского договора);
  • получение исходных текстов программ.
Если вы приобрели дистрибутив, то данное лицензионное соглашение прилагается в печатном виде к вашей копии дистрибутива. Лицензия относится ко всему дистрибутиву Альт Виртуализация редакция PVE. Если вы согласны с условиями лицензии, отметьте пункт Да, я согласен с условиями и нажмите кнопку Далее.

Глава 10. Дата и время

На данном этапе выполняется выбор региона и города, по которым будет определен часовой пояс и установлены системные часы.
Дата и время (выбор часового пояса)
Для корректной установки даты и времени достаточно правильно указать часовой пояс и выставить желаемые значения для даты и времени.
На этом шаге следует выбрать часовой пояс, по которому нужно установить часы. Для этого в соответствующих списках выберите регион, а затем город. Поиск по списку можно ускорить, набирая на клавиатуре первые буквы искомого слова.
Пункт Хранить время в BIOS по Гринвичу выставляет настройки даты и времени в соответствии с часовыми поясами, установленными по Гринвичу, и добавляет к местному времени часовую поправку для выбранного региона.
После выбора часового пояса будут предложены системные дата и время по умолчанию.
Для ручной установки текущих даты и времени нужно нажать кнопку Изменить…. Откроется окно ручной настройки системных параметров даты и времени.
Дата и время
Для синхронизации системных часов с удалённым сервером времени (NTP) по локальной сети или по сети Интернет нужно отметить пункт Получать точное время с NTP-сервера и указать предпочитаемый NTP-сервер. В большинстве случаев можно указать сервер pool.ntp.org.
Если выбрана опция Получать точное время с NTP-сервера, то компьютер может и сам быть сервером точного времени. Например, использоваться как сервер точного времени машинами локальной сети. Для активации этой возможности необходимо отметить пункт Работать как NTP-сервер.
Для сохранения настроек и продолжения установки системы в окне ручной установки даты и времени необходимо нажать кнопку ОК и затем в окне Дата и время нажать кнопку Далее.

Примечание

В случае если ОС Альт Виртуализация редакция PVE устанавливается как вторая ОС, необходимо снять отметку с пункта Хранить время в BIOS по Гринвичу, иначе время в уже установленной ОС может отображаться некорректно.

Глава 11. Подготовка диска

На данном этапе установки необходимо выбрать конфигурацию хранилища будущей системы.
Возможные варианты разметки:
  • установка на LVM (с тонким пулом под образы виртуальных машин);
  • программный Btrfs RAID массив.
Профиль разбиения диска можно выбрать в поле Схема разметки:
Возможные варианты разметки

11.1. Профиль LVM

LVM — соответствует пункту ext4 (LVM). При данной схеме разбивки будет создана группа томов (VG) с именем pve. Также будут созданы следующие логические тома (LV):
  • root — корневой том ('/') с файловой системой ext4;
  • swap — том для подкачки (рекомендуемый размер ≥ 2 ГиБ);
  • data — том с тонким пулом (Thin Pool) для хранения образов виртуальных дисков и данных контейнеров.
Размеры перечисленных выше томов выставляются оптимально на основе общего выделяемого пространства.
По умолчанию используется весь диск, но при этом сохраняется 1-2 ГиБ свободного места в VG (оно может быть полезно при создании мгновенного снимка системы).

Примечание

При установке системы в режиме UEFI раздел EFI будет создан автоматически.
Установка системы на LVM
Для установки системы на LVM необходимо:
  1. В списке Схема разметки выбрать файловую систему ext4 (LVM).
  2. В списке Диск для установки выбрать диск, на который будет установлена система.
  3. В поле Общее выделяемое пространство на диске указать, если это необходимо, размер выделяемого пространства (по умолчанию весь диск).
В таблице будут показаны все запланированные логические тома.
Для добавления дополнительного тома необходимо:
  1. Нажать кнопку Добавить.
  2. В открывшемся окне:
    • в списке Том (точка монтирования) выбрать точку монтирования из списка или выбрать пункт Указать произвольную точку монтирования и указать точку монтирования в поле Путь монтирования;
    • в списке Тип размещения выбрать:
      • Логический том LVM — для размещения тома как еще один LV в VG;
      • Отдельный раздел — для размещения тома в отдельном разделе на диске (например, для /boot);
    • в поле Размер указать размер тома;
    • в поле Опции монтирования при необходимости указать опции монтирования.
Добавление дополнительного тома LVM

Примечание

Для добавления новых томов может потребоваться уменьшить размер уже созданного тома.
Все дополнительные тома будут использовать файловую систему ext4 (как корневой раздел).
Изменить или удалить том можно, выбрав его и нажав кнопку Изменить или Удалить.

Примечание

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

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

С выбранного диска будут удалены все данные без возможности восстановления.

Примечание

Результат автоматического разбиения диска (100 ГБ) при выборе схемы разметки ext4 (LVM):
# 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

11.2. Профиль Btrfs RAID

При установке дистрибутива можно выбрать Btrfs в качестве корневой файловой системы и указать тип RAID:
  • RAID 0 — чередование без отказоустойчивости. Ёмкость тома равна сумме ёмкостей всех дисков. RAID0 не обеспечивает избыточности, поэтому отказ одного из дисков приведет к потере всех данных;
  • RAID 1 — зеркалированный массив. Данные записываются одинаково на все диски. Для работы требуется не менее двух дисков одинакового размера. Эффективная ёмкость равна ёмкости одного диска;
  • RAID 10 (RAID 1+ RAID0) — зеркалированный массив с чередованием. Данные записываются последовательно на несколько дисков, как в RAID 0, но каждый блок зеркалируется, как в RAID 1. Требуется не менее четырёх дисков;
  • Single — одиночный режим. Используется один диск без отказоустойчивости.

Примечание

При установке системы в режиме UEFI раздел EFI будет создан автоматически.
Установка системы на Btrfs RAID
Для установки системы на Btrfs RAID необходимо:
  1. В списке Схема разметки выбрать файловую систему Btrfs и нужный тип RAID.
  2. В списке Диски для установки выбрать диски, на которых будет создан RAID и установлена система.
В результате такой разбивки будет создан Btrfs-массив в выбранном режиме RAID с корневым подтомом (subvolume). Также для PVE автоматически создается дополнительный подтом с точкой монтирования /var/lib/pve/local-btrfs — он используется для хранения данных, необходимых для работы виртуализации.
Для добавления дополнительного тома или подтома необходимо:
  1. Нажать кнопку Добавить.
  2. В открывшемся окне:
    • в списке Том (точка монтирования) выбрать точку монтирования из списка или выбрать пункт Указать произвольную точку монтирования и указать точку монтирования в поле Путь монтирования;
    • в списке Тип размещения выбрать:
      • Дополнительный btrfs подтом — новый подтом будет создан в корневом томе;
      • Отдельный btrfs том — будут созданы отдельные разделы на дисках, из которых будет собран соответствующий btrfs RAID том (это позволяет ограничить размер тома, сделав его независимым от корневого);
    • если выбран тип размещения Отдельный btrfs том, в поле Размер указать размер тома;
    • в поле Опции монтирования указать, если это необходимо, опции монтирования.
Добавление дополнительного тома 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
Для продолжения установки следует нажать кнопку Далее. Появится окно с предупреждением о том, что данные на выбранных дисках будут уничтожены. Если вы уверены в том, что диски выбраны верно, подтвердите переход к следующему шагу нажатием кнопки ОК.
Подготовка диска. Предупреждение об удалении данных на дисках

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

С выбранных дисков будут удалены все данные без возможности восстановления.

Глава 12. Установка системы

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

Глава 13. Сохранение настроек

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

Глава 14. Установка загрузчика

Загрузчик ОС — это программа, которая позволяет загружать Альт Виртуализация редакция PVE и другие ОС, если они установлены на данной машине.
При установке на EFI модуль установки загрузчика предложит вариант установить загрузчик в специальный раздел «EFI» (рекомендуется выбрать автоматическое разбиение на этапе разметки диска для создания необходимых разделов для загрузки с EFI):
Установка загрузчика при установке в режиме EFI
Варианты установки загрузчика при установке в режиме EFI:
  • EFI (рекомендуемый) — при установке загрузчика в NVRAM будет добавлена запись, без которой большинство компьютеров не смогут загрузиться во вновь установленную ОС;
  • EFI (сначала очистить NVRAM) — перед добавлением записи в NVRAM её содержимое будет сохранено в /root/.install-log, после чего из неё будут удалены все загрузочные записи, что приведёт к восстановлению полностью заполненной NVRAM и гарантирует загрузку вновь установленной ОС;
  • EFI (запретить запись в NVRAM) — этот вариант следует выбрать, только если инсталлятор не может создать запись в NVRAM или если заведомо известно, что запись в NVRAM может вывести компьютер из строя (вероятно, запись в NVRAM придётся создать после установки ОС средствами BIOS Setup);
  • EFI (для съёмных устройств) — этот вариант следует выбрать, только если ОС устанавливается на съёмный накопитель. Этот вариант также можно использовать вместо варианта EFI (запретить запись в NVRAM) при условии, что это будет единственная ОС на данном накопителе. Создавать запись в NVRAM не потребуется.
Выбор варианта установки загрузчика, зависит от вашего оборудования. Если не работает один вариант, попробуйте другие.

Примечание

Установка загрузчика при установке в режиме Legacy:
Установка загрузчика
Программа установки автоматически определяет, в каком разделе жёсткого диска следует располагать загрузчик для возможности корректного запуска ОС Альт Виртуализация редакция PVE. Положение загрузчика, в случае необходимости, можно изменить в списке Устройство, выбрав другой раздел.
Если же вы планируете использовать и другие ОС, уже установленные на этом компьютере, тогда имеет значение, на каком жёстком диске или в каком разделе будет расположен загрузчик.
Для ограничения доступа к опциям загрузки можно установить пароль на загрузчик. Для этого необходимо отметить пункт Установить или сбросить пароль и задать пароль в появившихся полях для ввода.
Установка загрузчика

Примечание

При необходимости изменения опций загрузки при старте компьютера потребуется ввести имя пользователя «boot» и заданный на этом шаге пароль.
Для подтверждения выбора и продолжения работы программы установки необходимо нажать кнопку Далее.

Глава 15. Ethernet-интерфейсы

На этом этапе выполняется настройка сети для PVE с созданием моста vmbr0.

Примечание

Для установки PVE должен быть настроен сетевой мост vmbr0 с указанием статического IP-адреса. Это обусловлено тем, что сетевые интерфейсы виртуальных окружений должны подключаться к какому-то виртуальному устройству, обеспечивающему соединение с общей сетью передачи данных.
Настройка сети
Для настройки сети необходимо выполнить следующие действия:
  1. В поле Имя хоста (FQDN) указать полное имя компьютера с доменом (FQDN).
  2. В списке Интерфейсы выбрать интерфейс, который будет входить в мост.
  3. В поле IP-адрес (CIDR) ввести IP-адрес и выбрать в выпадающем поле предпочтительную маску сети.
  4. В поле Шлюз по умолчанию указать адрес шлюза, который будет использоваться сетью по умолчанию.
  5. В поле DNS-серверы, при необходимости, можно указать список (через пробел) предпочтительных DNS-серверов, которые будут получать информацию о доменах, выполнять маршрутизацию почты и управлять обслуживающими узлами для протоколов в домене.
  6. В поле Домены поиска можно указать список предпочтительных доменов, по которым будет выполняться поиск.
  7. Если на выбранный сетевой интерфейс приходит тегированный трафик, в поле VLAN ID можно указать номер VLAN.

Примечание

Остальные интерфейсы можно будет настроить после установки системы в веб-интерфейсе PVE.
Для сохранения настроек и продолжения работы программы установки необходимо нажать кнопку Далее.

Глава 16. Администратор системы

На данном этапе загрузчик создает учетную запись администратора. В открывшемся окне необходимо ввести пароль учетной записи администратора (root). Чтобы исключить опечатки при вводе пароля, пароль учетной записи вводится дважды.
Администратор системы

Примечание

Чтобы избежать последствий неверной раскладки клавиатуры можно просмотреть пароль, который будет сохранен. Для этого нажмите на значок глаза в поле ввода:
Просмотр пароля
Для автоматической генерации пароля необходимо отметить пункт Создать автоматически. Система предложит пароль, сгенерированный автоматическим образом в соответствии с требованиями по стойкости паролей.
В любой системе Linux всегда присутствует один специальный пользователь — администратор системы, он же суперпользователь. Для него зарезервировано стандартное системное имя — root.
Администратор системы отличается от всех прочих пользователей тем, что ему позволено производить любые, в том числе самые разрушительные изменения в системе. Поэтому выбор пароля администратора системы — очень важный момент для безопасности. Любой, кто сможет ввести его правильно (узнать или подобрать), получит неограниченный доступ к системе. Даже ваши собственные неосторожные действия от имени root могут иметь катастрофические последствия для всей системы.

Важно

Стоит запомнить пароль root — его нужно будет вводить для получения права изменять настройки системы с помощью стандартных средств настройки Альт Виртуализация редакция PVE. Более подробную информацию о режиме суперпользователя вы можете прочитать в главе Режим суперпользователя.
Подтверждение введенного (или сгенерированного) пароля учетной записи администратора (root) и продолжение работы программы установки выполняется нажатием кнопки Далее.

Глава 17. Системный пользователь

На данном этапе программа установки создает учетную запись системного пользователя (пользователя) Альт Виртуализация редакция PVE.
Системный пользователь
Помимо администратора (root) в систему необходимо добавить, по меньшей мере, одного обычного системного пользователя. Работа от имени администратора системы считается опасной, поэтому повседневную работу в Linux следует выполнять от имени ограниченного в полномочиях системного пользователя.
При добавлении системного пользователя предлагается ввести имя учётной записи пользователя. Имя учётной записи всегда представляет собой одно слово, состоящее только из строчных латинских букв (заглавные запрещены), цифр и символа подчёркивания «_» (причём цифра и символ «_» не могут стоять в начале слова).
Для того чтобы исключить опечатки, пароль пользователя вводится дважды. Пароль пользователя можно создать автоматически, по аналогии с автоматическим созданием пароля суперпользователя.
Для автоматической генерации пароля необходимо отметить пункт Создать автоматически. Система предложит пароль, сгенерированный автоматическим образом в соответствии с требованиями по стойкости паролей.
В процессе установки предлагается создать только одну учётную запись системного пользователя — от его имени можно выполнять задачи, не требующие привилегий суперпользователя. Учётные записи для всех прочих пользователей системы можно будет создать в любой момент после установки операционной системы.
Подтверждение введенного (или сгенерированного) пароля учетной записи системного пользователя и продолжение работы программы установки выполняется нажатием кнопки Далее.

Глава 18. Завершение установки

На экране последнего шага установки отображается информация о завершении установки Альт Виртуализация редакция PVE.
Завершение установки
После нажатия кнопки Завершить автоматически начнется перезагрузка системы.
Не забудьте извлечь установочный DVD (если это не происходит автоматически). Далее можно загружать установленную систему в обычном режиме.

Глава 19. Обновление системы до актуального состояния

После установки системы, её лучше сразу обновить до актуального состояния. Можно не обновлять систему и сразу приступать к работе только в том случае, если вы не планируете подключаться к сети или Интернету, не собираетесь устанавливать дополнительных программ.
Для обновления системы необходимо выполнить команды (с правами администратора):
# apt-get update
# apt-get dist-upgrade
# update-kernel
# apt-get clean
# reboot

Примечание

Получить права администратора можно, выполнив команду:
$ su -
или зарегистрировавшись в системе под именем root. Про режим суперпользователя можно почитать в главе Режим суперпользователя.

Примечание

Подробнее про обновление пакетов можно прочитать в главах Обновление всех установленных пакетов и Обновление ядра.

Глава 20. Первая помощь

Важно

В случае возникновения каких-либо неприятностей не паникуйте, а спокойно разберитесь в сложившейся ситуации. Linux не так уж просто довести до полной неработоспособности и утраты ценных данных. Поспешные действия отчаявшегося пользователя могут привести к плачевным результатам. Помните, что решение есть, и оно обязательно найдётся!

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

Важно

При возникновении проблем с UEFI или Legacy/CSM рекомендуется изменить выбор используемого вида прошивки на другой. Не следует выбирать режим смешанной загрузки Legacy/UEFI! Рекомендуется отключить всевозможные оптимизации и ускорение UEFI-загрузки, а также отключить на время установки SecureBoot.
Если в системе не произошла настройка какого-либо компонента после стадии установки пакетов, не отчаивайтесь, доведите установку до конца, загрузитесь в систему и попытайтесь в спокойной обстановке повторить настройку.
Нажатием клавиши E можно вызвать редактор параметров текущего пункта загрузки. В открывшемся редакторе следует найти строку, начинающуюся с linux /boot/vmlinuz, в её конец дописать требуемые параметры, отделив пробелом и нажать F10.
Редактор параметров пункта загрузки
Примеры параметров пункта загрузки:
  • nomodeset — не использовать modeset-драйверы для видеокарты;
  • vga=normal — отключить графический экран загрузки установщика;
  • xdriver=vesa — явно использовать видеодрайвер vesa. Данным параметром можно явно указать нужный вариант драйвера;
  • acpi=off noapic — отключение ACPI (управление питанием), если система не поддерживает ACPI полностью.
Если вы вообще не смогли установить систему (не произошла или не завершилась стадия установки пакетов), то сначала попробуйте повторить попытку в безопасном режиме (apm=off acpi=off mce=off barrier=off vga=normal). В безопасном режиме отключаются все параметры ядра, которые могут вызвать проблемы при загрузке. В этом режиме установка будет произведена без поддержки APIC. Возможно, у вас какое-то новое или нестандартное оборудование, но может оказаться, что оно отлично настраивается со старыми драйверами.
Если вы хотите получить точный ответ, то сообщите, пожалуйста, подробный состав вашего оборудования и подробное описание возникшей проблемы в нашей системе отслеживания ошибок.

20.2. Проблемы с загрузкой системы

Если не загружается ни одна из установленных операционных систем, то значит, есть проблема в начальном загрузчике. Такие проблемы могут возникнуть после установки системы, в случае если загрузчик все-таки не установлен или установлен с ошибкой. При установке или переустановке Windows на вашем компьютере загрузчик Linux будет перезаписан в принудительном порядке, и станет невозможно запускать Linux.
Повреждение или перезапись загрузчика никак не затрагивает остальные данные на жёстком диске, поэтому в такой ситуации очень легко вернуть работоспособность: для этого достаточно восстановить загрузчик.
Если у вас исчез загрузчик другой операционной системы или другого производителя, то внимательно почитайте соответствующее официальное руководство на предмет его восстановления. Но в большинстве случаев вам это не потребуется, так как загрузчик, входящий в состав Альт Виртуализация редакция PVE, поддерживает загрузку большинства известных операционных систем.
Для восстановления загрузчика достаточно любым доступным способом загрузить Linux и получить доступ к тому жёсткому диску, на котором находится повреждённый загрузчик. Для этого проще всего воспользоваться восстановительным режимом, который предусмотрен на установочном диске дистрибутива (пункт Rescue LiveCD).
Загрузка восстановительного режима заканчивается запросом на ввод логина суперпользователя (root):
Log in as root
localhost login:
После ввода логина логина суперпользователя (root) появится приглашение командной строки: [root@localhost /]#. Начиная с этого момента, система готова к вводу команд.
Восстановительный режим
В большинстве случаев для восстановления загрузчика можно просто воспользоваться командой fixmbr без параметров. Программа попытается переустановить загрузчик в автоматическом режиме.

20.3. Полезные ссылки

Если у вас что-то не получается, вы всегда можете поискать решение на ресурсах, указанных в разделе Техническая поддержка продуктов «Базальт СПО».

Часть III. Начало использования Альт Виртуализация редакция PVE

В этой части рассматривается загрузка установленной операционной системы.

Глава 21. Загрузка системы

Запуск Альт Виртуализация редакция PVE выполняется автоматически после запуска компьютера и отработки набора программ BIOS.
На экране появляется меню, в котором перечислены возможные варианты загрузки операционной системы.
Загрузка системы

Важно

При первом старте, в условиях установки нескольких ОС на один компьютер, возможно отсутствие в загрузочном меню пункта/пунктов с другой/другими операционными системами, они будут добавлены в список при последующей перезагрузке. Все перечисленные в меню после перезагрузки варианты могут быть загружены загрузчиком Linux.
Стрелками клавиатуры Вверх и Вниз выберите нужную операционную систему. Дополнительно к основным вариантам запуска ОС из этого меню можно загрузить Linux в безопасном режиме или запустить проверку памяти.
Загрузка операционной системы по умолчанию (первая в списке) начинается автоматически после небольшого времени ожидания (обычно несколько секунд). Нажав клавишу Enter, можно начать загрузку немедленно.
Нажатием клавиши E можно вызвать редактор параметров текущего пункта загрузки. Если система настроена правильно, то редактировать их нет необходимости.
В процессе загрузки Альт Виртуализация редакция PVE пользователь может следить за информацией процесса загрузки, которая отображает этапы запуска различных служб и программных серверов в виде отдельных строк, на экране монитора.
Информация процесса загрузки системы
При этом каждая строка начинается словом вида [XXXXXXX] (FAILED или OK), являющегося признаком нормального или ненормального завершения этапа загрузки. Слово XXXXXXX=FAILED (авария) свидетельствует о неуспешном завершении этапа загрузки, что требует вмешательства и специальных действий администратора системы.
Загрузка операционной системы может занять некоторое время, в зависимости от производительности компьютера. Основные этапы загрузки операционной системы — загрузка ядра, подключение (монтирование) файловых систем, запуск системных служб — периодически могут дополняться проверкой файловых систем на наличие ошибок. В этом случае время ожидания может быть занять больше времени, чем обычно. Подробную информацию о шагах загрузки можно получить, нажав клавишу Esc.

Глава 22. Вход в систему

Стандартная установка Альт Виртуализация редакция PVE включает базовую систему, работающую в консольном режиме.
Работа загрузчика Альт Виртуализация редакция PVE завершается запросом на ввод логина и пароля учетной записи.
После загрузки будут показаны имя и IP-адрес компьютера, а также, адрес доступа к панели управления:
IP адрес компьютера и адрес панели управления PVE
В случае успешного прохождения процедуры аутентификации и идентификации будет выполнен вход в систему. ОС Альт Виртуализация редакция PVE перейдет к штатному режиму работы и предоставит дальнейший доступ к консоли.
В процессе работы ОС Альт Виртуализация редакция PVE активно несколько виртуальных консолей. Каждая виртуальная консоль доступна по одновременному нажатию клавиши Alt и функциональной клавиши с номером этой консоли от F1 до F6.
На первых шести виртуальных консолях (от Alt+F1 до Alt+F6) пользователь может зарегистрироваться и работать в текстовом режиме. Двенадцатая виртуальная консоль (Alt+F12) выполняет функцию системной консоли — на нее выводятся сообщения о происходящих в системе событиях.

Часть IV. Средство управления виртуальными окружениями PVE

Proxmox Virtual Environment (PVE) — средство управления виртуальными окружениями на базе гипервизора KVM и системы контейнерной изоляции LXC. Основными компонентами среды являются:
  • физические серверы, на которых выполняются процессы гипервизора KVM, и процессы, работающие в контейнерах LXC;
  • хранилища данных, в которых хранятся образы установочных дисков, образы дисков виртуальных машин KVM и файлы, доступные из контейнеров LXC;
  • виртуальные сетевые коммутаторы, к которым подключаются сетевые интерфейсы виртуальных окружений.
PVE состоит из веб-интерфейса, распределённого хранилища данных конфигурации виртуальных окружений и утилит конфигурирования, работающих в командной строке. Все эти инструменты предназначены только для управления средой выполнения виртуальных окружений. За формирование среды отвечают компоненты системы, не входящие непосредственно в состав PVE. В первую очередь это сетевая и дисковая подсистемы, а также механизмы аутентификации.

Содержание

23. Системные требования
24. Краткое описание возможностей
24.1. Веб-интерфейс
24.2. Хранилище данных
24.3. Сетевая подсистема
25. Создание кластера PVE
25.1. Настройка узлов кластера
25.2. Создание кластера в веб-интерфейсе
25.3. Создание кластера в консоли
25.4. Удаление узла из кластера
25.5. Кворум
25.6. Поддержка внешнего арбитра corosync
25.7. Кластерная файловая система PVE (pmxcfs)
26. Системы хранения PVE
26.1. Типы хранилищ в PVE
26.2. Конфигурация хранилища
26.3. Идентификатор тома
26.4. Работа с хранилищами в PVE
26.4.1. Использование командной строки
26.4.2. Добавление хранилища в веб-интерфейсе PVE
26.4.3. Каталог
26.4.4. NFS
26.4.5. BTRFS
26.4.6. CIFS
26.4.7. GlusterFS
26.4.8. Локальный ZFS
26.4.9. LVM
26.4.10. LVM-Thin
26.4.11. iSCSI
26.4.12. iSCSI/libiscsi
26.4.13. Ceph RBD
26.4.14. CephFS
26.4.15. Proxmox Backup Server
26.4.16. ESXi
26.5. FC/iSCSI SAN
26.5.1. Подключение СХД
26.5.2. Настройка Multipath
26.5.3. Multipath в веб-интерфейсе PVE
26.5.4. Файловые системы на multipath
26.5.5. LVM/LVM-Thin хранилища на multipath
26.5.6. Изменение размера multipath-устройства
26.6. Кластер Ceph
26.6.1. Системные требования
26.6.2. Начальная конфигурация Ceph
26.6.3. Монитор Ceph
26.6.4. Менеджер Ceph
26.6.5. Ceph OSD
26.6.6. Пулы Ceph
26.6.7. Ceph CRUSH и классы устройств
26.6.8. Клиент Ceph
26.6.9. CephFS
26.6.10. Техническое обслуживание Ceph
26.6.11. Мониторинг и устранение неполадок Ceph
27. Репликация хранилища
27.1. Управление заданиями
27.2. Обработка ошибок
27.3. Миграция гостевой системы в случае ошибки
28. Сетевая подсистема
28.1. Применение изменений сетевых настроек
28.2. Имена сетевых устройств
28.3. Конфигурирование сети в PVE
28.4. Конфигурация сети с использованием моста
28.4.1. Конфигурация с одним мостом
28.4.2. Внутренняя сеть для ВМ
28.5. Объединение/агрегация интерфейсов
28.5.1. Параметры Linux Bond
28.5.2. Параметры OVS Bond
28.5.3. Агрегированный bond-интерфейс с фиксированным IP-адресом
28.5.4. Агрегированный bond-интерфейс в качестве порта моста
28.6. Настройка VLAN
28.6.1. Мост с поддержкой VLAN
28.6.2. Мост на VLAN
29. Управление ISO-образами и шаблонами LXC
30. Виртуальные машины на базе KVM
30.1. Создание виртуальной машины на базе KVM
30.2. Запуск и остановка ВМ
30.2.1. Изменение состояния ВМ в веб-интерфейсе
30.2.2. Автоматический запуск ВМ
30.2.3. Массовый запуск и остановка ВМ
30.3. Управление ВМ с помощью qm
30.4. Сценарии перехвата (hookscripts)
30.5. Доступ к ВМ
30.6. Внесение изменений в ВМ
30.6.1. Управление образами виртуальных дисков
30.6.2. Настройки дисплея
30.6.3. Дополнительные функции SPICE
30.6.4. Проброс USB
30.6.5. BIOS и UEFI
30.6.6. Доверенный платформенный модуль (TPM)
30.6.7. Проброс PCI(e)
30.6.8. Сопоставление устройств
30.6.9. VirtioFS (проброс каталогов)
30.6.10. Гостевой агент QEMU
30.7. Файлы конфигурации ВМ
31. Создание и настройка контейнера LXC
31.1. Создание контейнера в графическом интерфейсе
31.2. Создание контейнера из шаблона в командной строке
31.3. Изменение настроек контейнера
31.3.1. Изменение настроек в веб-интерфейсе
31.3.2. Настройка ресурсов в командной строке
31.3.3. Настройка ресурсов прямым изменением
31.4. Запуск и остановка контейнеров
31.4.1. Изменение состояния контейнера в веб-интерфейсе
31.4.2. Изменение состояния контейнера в командной строке
31.5. Доступ к LXC контейнеру
32. Программно-определяемые сети (SDN)
32.1. Технология и конфигурация
32.2. Зоны
32.2.1. Простые (Simple) зоны
32.2.2. Зоны VLAN
32.2.3. Зоны QinQ
32.2.4. Зоны VXLAN
32.2.5. Зоны EVPN
32.3. Виртуальные сети
32.4. Подсети
32.5. IPAM
32.5.1. Плагин PVE IPAM
32.5.2. Плагин NetBox IPAM
32.5.3. Плагин phpIPAM
32.6. DNS
32.6.1. Плагин PowerDNS
32.7. DHCP
32.7.1. Плагин Dnsmasq
32.8. Интеграция с межсетевым экраном
32.8.1. Виртуальные сети и подсети
32.8.2. IPAM
32.9. Примеры настройки SDN
32.9.1. Настройка Simple Zone
32.9.2. Настройка зоны VLAN
32.9.3. Настройка зоны QinQ
32.9.4. Настройка зоны VXLAN
33. Миграция ВМ и контейнеров
33.1. Миграция с применением графического интерфейса
33.2. Миграция в командной строке
33.3. Миграция ВМ из внешнего гипервизора
33.3.1. Импорт из ESXi-хранилища
33.3.2. Импорт OVA/OVF
33.3.3. Импорт OVA/OVF в консоли
33.3.4. Резервное копирование и восстановление
33.3.5. Миграция KVM ВМ в PVE
33.3.6. Миграция ВМ из VMware в PVE
34. Клонирование ВМ
35. Шаблоны ВМ
36. Теги (метки) ВМ
36.1. Работа с тегами
36.2. Настройка тегов
36.2.1. Стиль тегов
36.2.2. Права
37. Резервное копирование (Backup)
37.1. Режимы резервного копирования
37.2. Хранилище резервных копий
37.3. Сжатие файлов резервной копии
37.4. Файлы резервных копий
37.5. Шифрование резервных копий
37.6. Выполнение резервного копирования в веб-интерфейсе
37.7. Задания резервного копирования
37.7.1. Формат расписания
37.7.2. Настройка заданий резервного копирования в графическом интерфейсе
37.8. Восстановление
37.9. Ограничение пропускной способности
37.10. Восстановление в реальном времени (Live-Restore)
37.11. Восстановление отдельных файлов
37.12. Файл конфигурация vzdump.conf
37.13. Сценарии перехвата (hookscripts)
37.14. Файлы, не включаемые в резервную копию
37.15. Примеры создания резервных копий в командной строке
37.16. Снимки (snapshot)
38. Уведомления
38.1. Цели уведомлений (Notification Targets)
38.1.1. Sendmail
38.1.2. SMTP
38.1.3. Webhook
38.2. Триггеры уведомлений (Notification Matchers)
38.2.1. Правила сопоставления календаря (match-calendar)
38.2.2. Правила сопоставления полей (match-field)
38.2.3. Правила сопоставления серьезности (match-severity)
38.2.4. События уведомления
38.2.5. Создание триггера уведомлений
38.3. Пересылка системной почты
38.4. Разрешения
38.5. Режим уведомления
39. Встроенный мониторинг PVE
40. Высокая доступность PVE
40.1. Как работает высокая доступность PVE
40.2. Требования для настройки высокой доступности
40.3. Настройка высокой доступности PVE
40.3.1. Создание группы высокой доступности
40.3.2. Добавление ресурсов
40.4. Тестирование настройки высокой доступности PVE
41. Межсетевой экран PVE (firewall)
41.1. Зоны
41.2. Файлы конфигурации
41.2.1. Настройка кластера
41.2.2. Конфигурация узла
41.2.3. Конфигурация ВМ/контейнера
41.2.4. Правила межсетевого экрана
41.2.5. Группы безопасности
41.2.6. IP-псевдонимы
41.2.7. Наборы IP-адресов
41.2.8. Службы и команды
41.3. Правила по умолчанию
41.3.1. Входящий/исходящий DROP/REJECT центра обработки данных
41.3.2. Входящий/исходящий DROP/REJECT ВМ/Контейнера
41.4. Ведение журнала
41.5. Особенности IPv6
41.6. Порты, используемые PVE
42. Пользователи и их права
42.1. API-токены
42.2. Пулы ресурсов
42.3. Области аутентификации
42.3.1. Стандартная аутентификация Linux PAM
42.3.2. Сервер аутентификации PVE
42.3.3. LDAP аутентификация
42.3.4. AD аутентификация
42.4. Двухфакторная аутентификация
42.5. Управление доступом
43. Просмотр событий PVE
43.1. Просмотр событий с помощью pvenode task
43.2. Просмотр событий в веб-интерфейсе PVE
43.2.1. Панель журнала
43.2.2. Журнал задач узла PVE
43.2.3. Журнал задач ВМ
44. PVE API
44.1. URL API
44.2. Аутентификация
44.2.1. Билет Cookie
44.2.2. API-токены
44.3. Пример создания контейнера с использованием API
44.4. Утилита pvesh
45. Основные службы PVE
45.1. pvedaemon — служба PVE API
45.2. pveproxy — служба PVE API Proxy
45.2.1. Управление доступом на основе хоста
45.2.2. Прослушиваемый IP-адрес
45.2.3. Набор SSL-шифров
45.2.4. Поддерживаемые версии TLS
45.2.5. Параметры Диффи-Хеллмана
45.2.6. Альтернативный сертификат HTTPS
45.2.7. Сжатие ответа
45.3. pvestatd — служба PVE Status
45.4. spiceproxy — служба SPICE Proxy
45.4.1. Управление доступом на основе хоста
45.5. pvescheduler — служба PVE Scheduler
46. Обновление системы
46.1. Управление репозиториями в PVE
46.2. Обновление системного ПО

Глава 23. Системные требования

Минимальные cистемные требования (для тестирования):
  • CPU: 64bit (Intel EMT64 или AMD64), поддержка Intel VT/AMD-V CPU/Mainboard;
  • минимум 1 Гб ОЗУ;
  • жёсткий диск;
  • сетевая карта.
Рекомендуемые cистемные требования:
  • CPU: мультипроцессорный 64bit (Intel EMT64 или AMD64), поддержка Intel VT/AMD-V CPU/Mainboard;
  • минимум 2 Гб ОЗУ для ОС и сервисов PVE. Плюс выделенная память для гостевых систем. Для Ceph или ZFS требуется дополнительная память, примерно 1 ГБ ОЗУ на каждый ТБ используемого хранилища;
  • хранилище для ОС: аппаратный RAID;
  • хранилище для ВМ: аппаратный RAID для локального хранилища, или non-RAID для ZFS. Также возможно совместное и распределенное хранение;
  • быстрые жёсткие диски 15krpm SAS, Raid10;
  • сетевая карта.
Реальные системные требования определяются количеством и требованиями гостевых систем.

Глава 24. Краткое описание возможностей

24.1. Веб-интерфейс

Веб-интерфейс PVE предназначен для решения следующих задач:
  • создание, удаление, настройка виртуальных окружений;
  • управление физическими серверами;
  • мониторинг активности виртуальных окружений и использования ресурсов среды;
  • фиксация состояний (snapshot-ы), создание резервных копий и шаблонов виртуальных окружений, восстановление виртуальных окружений из резервных копий.
Кроме решения пользовательских задач, веб-интерфейс PVE можно использовать еще и для встраивания в интегрированные системы управления — например, в панели управления хостингом. Для этого он имеет развитый RESTful API с JSON в качестве основного формата данных.
Для аутентификации пользователей веб-интерфейса можно использовать как собственные механизмы PVE, так и PAM. Использование PAM дает возможность, например, интегрировать PVE в домен аутентификации.
Так как используется кластерная файловая система (pmxcfs), можно подключиться к любому узлу для управления всем кластером. Каждый узел может управлять всем кластером.
Веб-интерфейс PVE доступен по адресу https://<имя-компьютера>:8006. Потребуется пройти аутентификацию (логин по умолчанию: root, пароль указывается в процессе установки ОС):
Аутентификация в веб-интерфейсе PVE
Пользовательский интерфейс PVE состоит из четырех областей:
  • заголовок — верхняя часть. Показывает информацию о состоянии и содержит кнопки для наиболее важных действий;
  • дерево ресурсов — с левой стороны. Дерево навигации, где можно выбирать конкретные объекты;
  • панель контента — центральная часть. Здесь отображаются конфигурация и статус выбранных объектов;
  • панель журнала — нижняя часть. Отображает записи журнала для последних задач. Чтобы получить более подробную информацию или прервать выполнение задачи, следует дважды щелкнуть левой клавишей мыши по записи журнала.
Веб-интерфейс PVE

Примечание

Есть возможность работы с PVE из мобильного приложения, например, Proxmox. В приложении можно получить доступ к узлам, ВМ и контейнерам:
Работа с PVE из мобильного приложения
Можно зайти в консоль ВМ с помощью noVNC или SPICE, осуществлять необходимые манипуляции внутри ВМ:
Работа с ВМ из мобильного приложения

24.2. Хранилище данных

В случае локальной установки PVE для размещения данных виртуальных окружений можно дополнительно ничего не настраивать и использовать локальную файловую систему сервера. Но в случае кластера из нескольких серверов имеет смысл настроить сетевую или распределенную сетевую файловую систему, обеспечивающую параллельный доступ к файлам со всех серверов, на которых выполняются процессы виртуальных окружений. В качестве таких файловых систем могут выступать, например, NFS или CEPH.

24.3. Сетевая подсистема

В отличие от хранилища данных, сетевая подсистема требует специальной настройки даже в случае локальной установки PVE. Это обусловлено тем, что сетевые интерфейсы виртуальных окружений должны подключаться к какому-то виртуальному устройству, обеспечивающему соединение с общей сетью передачи данных. Перед началом настройки сети следует принять решение о том, какой тип виртуализации (LXC/KVM) и какой тип подключения будет использоваться (маршрутизация/мост).

Глава 25. Создание кластера PVE

Рекомендации:
  • все узлы должны иметь возможность подключаться друг к другу через UDP порты 5404 и 5405;
  • дата и время должны быть синхронизированы;
  • между узлами используется SSH туннель на 22 TCP порту;
  • если необходимо обеспечение высокой доступности (High Availability), необходимо иметь как минимум три узла для организации кворума. На всех узлах должна быть установлена одна версия PVE;
  • рекомендуется использовать выделенный сетевой адаптер для трафика кластера, особенно если используется общее хранилище.
PVE кластер может состоять из двух и более серверов.
Кластер не создается автоматически на только что установленном узле PVE. В настоящее время создание кластера может быть выполнено либо в консоли (вход через ssh), либо в веб-интерфейсе.

Важно

PVE при создании кластера включает парольную аутентификацию для root в sshd. В целях повышения безопасности, после включения всех серверов в кластер, рекомендуется отключить парольную аутентификацию для root в sshd:
# 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 для применения настроек кластера

25.1. Настройка узлов кластера

PVE должен быть установлен на всех узлах. Следует убедиться, что каждый узел установлен с окончательным именем хоста и IP-конфигурацией. Изменение имени хоста и IP-адреса невозможно после создания кластера.
Необходимо обеспечить взаимно однозначное прямое и обратное преобразование имен для всех узлов кластера. Крайне желательно использовать DNS, в крайнем случае, можно обойтись соответствующими записями в локальных файлах /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

Примечание

В PVE добавить записи в файл /etc/hosts можно в панели управления: выбрать узел, перейти в СистемаХосты, добавить все узлы, которые будут включены в состав кластера и нажать кнопку Сохранить:
Редактирование записей в файле /etc/hosts

Примечание

Имя машины не должно присутствовать в файле /etc/hosts разрешающимся в 127.0.0.1.

25.2. Создание кластера в веб-интерфейсе

Для создания кластера необходимо выполнить следующие действия:
  1. В панели управления любого узла кластера выбрать Центр обработки данныхКластер и нажать кнопку Создать кластер:
    Создание кластера в веб-интерфейсе
  2. В открывшемся окне задать название кластера, выбрать IP-адрес интерфейса, на котором узел кластера будет работать, и нажать кнопку Создать:
    Название кластера
  3. При успешном создании кластера будет выведена соответствующая информация:
    Информация о создании кластера
Для добавления узла в кластер необходимо выполнить следующие действия:
  1. В панели управления узла, на котором был создан кластер, выбрать Центр обработки данныхКластер и нажать кнопку Данные присоединения:
    Создание кластера в веб-интерфейсе. Получить данные присоединения
  2. В открывшемся окне, нажав кнопку Копировать данные, скопировать данные присоединения:
    Создание кластера. Данные присоединения
  3. Перейти в панель управления узла, который следует присоединить к кластеру. Выбрать Центр обработки данныхКластер и нажать кнопку Присоединить к кластеру:
    Узел, который следует присоединить к кластеру
  4. В поле Информация вставить данные присоединения, поля Адрес сервера и Отпечаток при этом будут заполнены автоматически. В поле Пароль ввести пароль пользователя root первого узла и нажать кнопку Присоединить <имя_кластера>:
    Присоединение узла к кластеру
    Чтобы ввести все необходимые данные вручную, следует снять отметку с поля Быстрое подключений.
  5. Через несколько минут, после завершения репликации всех настроек, узел будет подключен к кластеру:
    Узлы кластера в веб-интерфейсе
После присоединения узла к кластеру текущий сертификат узла будет заменен сертификатом, подписанным центром сертификации кластера (CA). Все активные соединения с узлом будут разорваны через несколько секунд после замены сертификата и веб-интерфейс перестанет отвечать. Необходимо обновить страницу в браузере и снова войти в систему.

Примечание

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

Примечание

Количество и тип локальных хранилищ данных зависит от схемы разбиения диска, выбранного на этапе установки Альт Виртуализация редакция PVE (см. Подготовка диска).

25.3. Создание кластера в консоли

Команда создания кластера:
# pvecm create <cluster_name>
На «головном» узле кластера необходимо выполнить команду инициализации конкретного кластера PVE, в данном случае — «pve-cluster»:
# 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

25.4. Удаление узла из кластера

Перед удалением узла из кластера необходимо переместить все ВМ с этого узла, а также убедиться, что нет никаких локальных данных или резервных копий, которые необходимо сохранить.
Для удаления узла из кластера необходимо выполнить следующие шаги:
  1. Войти в узел кластера, не подлежащий удалению (в примере pve01).
  2. Ввести команду pvecm nodes, чтобы определить идентификатор узла, который следует удалить:
    # pvecm nodes
    
    Membership information
    ----------------------
        Nodeid      Votes Name
             1          1 pve01 (local)
             2          1 pve02
             3          1 pve03
    
  3. Выключить подлежащий удалению узел (в данном случае pve02).
  4. Удалить узел из кластера, выполнив команду:
    # pvecm delnode pve02
    

    Примечание

    На этом этапе возможно получение сообщения об ошибке:
    Could not kill node (error = CS_ERR_NOT_EXIST)
    Данную ошибку можно проигнорировать, так как она не означает фактического сбоя при удалении узла, а скорее сбоя в corosync, пытающемся уничтожить автономный узел.
  5. Проверить, что узел удален (команда отобразит список узлов кластера без удаленного узла):
    # pvecm nodes
    Membership information
    ----------------------
        Nodeid      Votes Name
             1          1 pve01 (local)
             3          1 pve03
    

Важно

Крайне важно отключить узел перед удалением и убедиться, что он больше никогда не будет включен снова (в существующей сети кластера) с текущей конфигурацией. В противном случае кластер может выйти из строя, и восстановить его до рабочего состояния может быть сложно.
Если необходимо вернуть удаленный узел обратно в кластер, следует выполнить следующие действия:
  • переустановить PVE на этом узле (это гарантирует, что все секретные ключи кластера/ssh и любые данные конфигурации будут уничтожены);
  • присоединиться к кластеру.

25.5. Кворум

Для обеспечения согласованного состояния среди всех узлов кластера PVE использует метод на основе кворума. Кворум — это минимальное количество голосов, которые должны быть доступны для работы кластера.
Проверить наличие кворума можно, выполнив команду:
# pvecm status
…
Votequorum information
----------------------
Expected votes:   5
Highest expected: 5
Total votes:      5
Quorum:           3
Flags:            Quorate
…
В выводе команды видно, что в кластере пять узлов (Expected votes), из них для кворума необходимо не менее трёх (Quorum), сейчас все пять узлов активны (Total votes), кворум соблюден (Flags: Quorate).
Если количество голосов окажется меньше, чем требуется для кворума, кластер переключится в режим только для чтения (read-only): гостевые системы продолжат работать, но любые операции с узлами или гостевыми системами станут невозможными.
В PVE по умолчанию каждому узлу назначается один голос.

25.6. Поддержка внешнего арбитра corosync

Добавив в кластер PVE внешний арбитр, можно добиться того, что кластер сможет выдержать большее количество отказов узлов без нарушения работы кластера.
Для работы арбитра задействованы две службы:
  • Corosync Quroum (QDevice) — служба, которая работает на каждом узле кластера PVE. Она предоставляет настроенное количество голосов подсистеме кворума на основе решения внешнего управляющего арбитра. Основное назначение этой службы — позволить кластеру выдержать большее количество отказов узлов, чем это позволяют стандартные правила кворума. Арбитр видит все узлы и может выбрать только один набор узлов, чтобы отдать свой голос (это будет сделано только в том случае, если указанный набор узлов при получении голоса арбитра сможет иметь кворум).
  • Внешний арбитр, который работает на независимом сервере. Единственное требование к арбитру — наличие сетевого доступа к кластеру.

Примечание

В настоящее время Qdevices для кластеров с нечетным числом узлов не поддерживается. Это связано с разницей в количестве голосов, которые QDevice предоставляет для кластера.
Кластеры с чётным числом узлов получают один дополнительный голос, что только увеличивает доступность, поскольку сбой самого QDevice не влияет на работоспособность кластера.
Для кластера с нечётным числом узлов QDevice предоставляет (N-1) голосов, где N — количество узлов кластера. Этот алгоритм допускает сбой всех узлов, кроме одного и самого QDevice. При этом есть два недостатка:
  • если произойдет сбой арбитра, ни один другой узел не может выйти из строя, или кластер немедленно потеряет кворум. Например, в кластере с 15 узлами 7 могут выйти из строя, прежде чем кластер станет неработоспособным. Но если в этом кластере настроен QDevice и он сам выйдет из строя, ни один узел из 15 не может выйти из строя. В этом случае QDevice действует почти как единая точка отказа;
  • возможность выхода из строя всех узлов, кроме одного, плюс QDevice, может привести к массовому восстановлению служб высокой доступности (HA), что может привести к перегрузке единственного оставшегося узла. Кроме того, сервер Ceph прекратит предоставлять услуги, если в сети останется только ((N-1)/2) узлов или меньше.

Важно

При настройке QDevice PVE копирует ключи кластера на внешний сервер. Для добавления QDevice можно временно включить парольную аутентификацию для root в sshd на внешнем сервере:
# control sshd-permit-root-login enabled
# systemctl restart sshd
А после того, как QDevice будет добавлен, отключить:
# control sshd-permit-root-login without_password
# systemctl restart sshd
Для настройки работы арбитра необходимо выполнить следующие действия:
  1. На внешнем сервере:
    • установить пакет corosync-qnetd (из репозитория):
      # apt-get install corosync-qnetd
      
    • для работы TLS создать базу данных NSS:
      # corosync-qnetd-certutil -i
      

      Примечание

      Если TLS не нужен, следует в файле /etc/sysconfig/corosync-qnetd изменить значение опции COROSYNC_QNETD_OPTIONS:
      COROSYNC_QNETD_OPTIONS="-s off"
    • запустить и добавить в автозагрузку службу corosync-qnetd:
      # systemctl enable --now corosync-qnetd
      
  2. На всех узлах PVE установить пакет corosync-qdevice (из репозитория):
    # apt-get install corosync-qdevice
    
  3. На одном из узлов PVE настроить QDevice, выполнив команду:
    # pvecm qdevice setup 192.168.0.88
    
    где 192.168.0.88 — IP-адрес арбитра (внешнего сервера).
    SSH-ключи из кластера будут автоматически скопированы в QDevice.
  4. На любом узле PVE проверить статус кластера:
    # 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
    
Для добавления нового узла или удаления существующего из кластера с настроенным QDevice, сначала необходимо удалить QDevice. После можно добавлять или удалять узлы в обычном режиме.
Команда удаления QDevice:
# pvecm qdevice remove

25.7. Кластерная файловая система PVE (pmxcfs)

Кластерная файловая система PVE (pmxcfs) — это файловая система на основе базы данных для хранения файлов конфигурации виртуальных окружений, реплицируемая в режиме реального времени на все узлы кластера с помощью corosync. Эта файловая система используется для хранения всех конфигурационных файлов связанных c PVE. Хотя файловая система хранит все данные в базе данных на диске, копия данных находится в оперативной памяти, что накладывает ограничение на максимальный размер данных, который в настоящее время составляет 30 МБ.
Преимущества файловой системы pmxcfs:
  • мгновенная репликация и обновление конфигурации на все узлы в кластере;
  • исключается вероятность дублирования идентификаторов виртуальных машин;
  • в случае развала кворума в кластере, файловая система становится доступной только для чтения.
Все файлы и каталоги принадлежат пользователю root и имеют группу www-data. Только root имеет права на запись, но пользователи из группы www-data могут читать большинство файлов. Файлы в каталогах /etc/pve/priv/ и /etc/pve/nodes/${NAME}/priv/ доступны только root.
Файловая система смонтирована в /etc/pve/.

Глава 26. Системы хранения PVE

Образы ВМ могут храниться в одном или нескольких локальных хранилищах или в общем (совместно используемом) хранилище, например, NFS или iSCSI (NAS, SAN). Ограничений нет, можно настроить столько хранилищ, сколько необходимо.
В кластерной среде PVE наличие общего хранилища не является обязательным, однако оно делает управление хранением более простой задачей. Преимущества общего хранилища:
  • миграция ВМ в реальном масштабе времени;
  • плавное расширение пространства хранения с множеством узлов;
  • централизованное резервное копирование;
  • многоуровневое кэширование данных;
  • централизованное управление хранением.

26.1. Типы хранилищ в PVE

Существует два основных типа хранилищ:
  • файловые хранилища — хранят данные в виде файлов. Технологии хранения на уровне файлов обеспечивают доступ к полнофункциональной файловой системе (POSIX). В целом они более гибкие, чем любое хранилище на уровне блоков, и позволяют хранить контент любого типа;
  • блочное хранилище — позволяет хранить большие необработанные образы. Обычно в таких хранилищах невозможно хранить другие файлы (ISO-образы, резервные копии, и т.д.). Большинство современных реализаций хранилищ на уровне блоков поддерживают моментальные снимки и клонирование. RADOS и GlusterFS являются распределенными системами, реплицирующими данные хранилища на разные узлы.
Хранилищами данных удобно управлять через веб-интерфейс. В качестве бэкенда хранилищ PVE может использовать:
  • сетевые файловые системы, в том числе распределенные: NFS, CEPH, GlusterFS;
  • локальные системы управления дисковыми томами: LVM, ZFS;
  • удаленные (iSCSI) и локальные дисковые тома;
  • локальные дисковые каталоги.

Таблица 26.1. Доступные типы хранилищ

Хранилище
PVE тип
Уровень
Общее (shared)
Снимки (snapshots)
ZFS (локальный)
zfspool
файл
нет
да
dir
файл
нет
нет (возможны в формате qcow2)
btrfs
файл
нет
да
NFS
nfs
файл
да
нет (возможны в формате qcow2)
cifs
файл
да
нет (возможны в формате qcow2)
glusterfs
файл
да
нет (возможны в формате qcow2)
cephfs
файл
да
да
LVM
lvm
блок
нет*
нет
lvmthin
блок
нет
да
iscsi
блок
да
нет
iscsidirect
блок
да
нет
rbd
блок
да
да
ZFS over iSCSI
zfs
блок
да
да
pbs
файл/блок
да
-
esxi
-
да
-

Примечание

Можно использовать LVM поверх хранилища на базе iSCSI или FC, получив таким образом общее хранилище LVM.

26.2. Конфигурация хранилища

Вся связанная с PVE информация о хранилищах хранится в файле /etc/pve/storage.cfg. Поскольку этот файл находится в /etc/pve/, он автоматически распространяется на все узлы кластера. Таким образом, все узлы имеют одинаковую конфигурацию хранилища.
Совместное использование конфигурации хранилища имеет смысл для общего хранилища, поскольку одно и то же «общее» хранилище доступно для всех узлов. Но также полезно для локальных типов хранения. В этом случае такое локальное хранилище доступно на всех узлах, но оно физически отличается и может иметь совершенно разное содержимое.
Каждое хранилище имеет <тип> и уникально идентифицируется своим <STORAGE_ID>. Конфигурация хранилища выглядит следующим образом:
<type>: <STORAGE_ID>
        <property> <value>
        <property> <value>
        ...
Строка <type>: <STORAGE_ID> определяет хранилище, затем следует список свойств.
Пример файла /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
В данном случае файл содержит описание специального хранилища local, которое ссылается на каталог /var/lib/vz, описание LVN-thin хранилища local-lvm, которое ссылается на группу томов pve, и описание NFS-хранилища nfs-storage.

Таблица 26.2. Параметры хранилищ

Свойство
Описание
nodes
Список узлов кластера, где хранилище можно использовать/доступно. Можно использовать это свойство, чтобы ограничить доступ к хранилищу.
content
Хранилище может поддерживать несколько типов содержимого. Это свойство указывает, для чего используется это хранилище.
Доступные опции:
  • images — образы виртуальных дисков;
  • rootdir — данные контейнеров;
  • vztmpl — шаблоны контейнеров;
  • backup — резервные копии (vzdump);
  • iso — ISO-образы;
  • import — файлы OVF/OVA;
  • snippets — файлы фрагментов (сниппетов), например, скрипты-ловушки гостевой системы.
shared
Указать, что это единое хранилище с одинаковым содержимым на всех узлах (или на всех перечисленных в опции nodes). Данное свойство не делает содержимое локального хранилища автоматически доступным для других узлов, он просто помечает как таковое уже общее хранилище!
disable
Отключить хранилище
maxfiles
Устарело, следует использовать свойство prune-backups. Максимальное количество файлов резервных копий на ВМ
prune-backups
Параметры хранения резервных копий
format
Формат образа по умолчанию (raw|qcow2|vmdk)
preallocation
Режим предварительного выделения (off|metadata|falloc|full) для образов raw и qcow2 в файловых хранилищах. По умолчанию используется значение metadata (равносильно значению off для образов raw). При использовании сетевых хранилищ в сочетании с большими образами qcow2, использование значения off может помочь избежать таймаутов.

Примечание

Не рекомендуется использовать один и тот же пул хранения в разных PVE-кластерах. Для некоторых операций требуется монопольный доступ к хранилищу, поэтому требуется правильная блокировка. Блокировка реализована внутри кластера, но не работает между разными кластерами.

26.3. Идентификатор тома

Для обращения к данным хранилищ используется специальная нотация. Том идентифицируется по <STORAGE_ID>, за которым через двоеточие следует имя тома, зависящее от типа хранилища. Примеры <VOLUME_ID>:
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
Чтобы получить путь к файловой системе для <VOLUME_ID> используется команда:
# 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
Для томов типа image существует отношение владения. Каждый такой том принадлежит ВМ или контейнеру. Например, том local:101/vm-101-disk-0.qcow2 принадлежит ВМ 101. При удалении ВМ или контейнера система также удаляет все связанные тома, принадлежащие этой ВМ или контейнеру.

26.4. Работа с хранилищами в PVE

26.4.1. Использование командной строки

Утилита 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>]
Выделить том 4 ГБ в локальном хранилище (имя будет сгенерировано):
# pvesm alloc local <VMID> '' 4G
Освободить место (уничтожает все данные тома):
# pvesm free <VOLUME_ID>
Вывести список хранилищ:
# pvesm status
Вывести список содержимого хранилища:
# pvesm list <STORAGE_ID> [--vmid <VMID>]
Вывести список ISO-образов:
# pvesm list <STORAGE_ID> --content iso

26.4.2. Добавление хранилища в веб-интерфейсе PVE

Хранилища, которые могут быть добавлены в веб-интерфейсе PVE:
  • Локальные хранилища:
    • Каталог — хранение на существующей файловой системе;
    • LVM — локальные устройства, такие как, FC, DRBD и т.д.;
    • ZFS;
    • BTRFS;
  • Сетевые хранилища:
    • LVM — сетевая поддержка с iSCSI target;
    • NFS;
    • CIFS;
    • GlusterFS;
    • iSCSI;
    • CephFS;
    • RBD;
    • ZFS over iSCSI;
    • Proxmox Backup Server;
    • ESXi.
Выбор типа добавляемого хранилища
При создании каждому хранилищу данных присваивается роль или набор ролей. Например, хранение контейнеров, образов виртуальных дисков, ISO-файлов и так далее. Список возможных ролей зависит от бэкенда хранилища. Например, для NFS или каталога локальной файловой системы доступны любые роли или наборы ролей, а хранилища на базе RBD можно использовать только для хранения образов дисков и контейнеров:
Выбор ролей для хранилища

Примечание

Можно добавить локальные хранилища (ZFS, LVM и LVM-Thin), расположенные на других узлах кластера. Для этого в мастере добавления хранилища следует выбрать узел для сканирования:
LVM хранилище. Выбор узла для сканирования

26.4.3. Каталог

PVE может использовать локальные каталоги или локально смонтированные общие ресурсы для организации хранилища. Каталог — это файловое хранилище, поэтому в нем можно хранить данные любого типа, например, образы виртуальных дисков, контейнеры, шаблоны, ISO-образы или файлы резервных копий. Для хранения данных разного типа, используется предопределенная структура каталогов. Эта структура используется на всех файловых хранилищах.

Таблица 26.3. Структура каталогов

Тип данных
Подкаталог
Образы дисков ВМ
images/<VMID>/
ISO-образы
template/iso/
Шаблоны контейнеров
template/cache/
Резервные копии VZDump
dump/
Фрагменты (сниппеты)
snippets/
Импорт
import/

Примечание

Дополнительные хранилища можно подключить в /etc/fstab, а затем определить хранилище каталогов для этой точки монтирования. Таким образом, можно использовать любую файловую систему (ФС), поддерживаемую Linux.

Примечание

Большинство ФС «из коробки» не поддерживают моментальные снимки. Чтобы обойти эту проблему, этот бэкэнд может использовать возможности внутренних снимков qcow2.
Для создания нового хранилища типа Каталог необходимо выбрать Центр обработки данныхХранилище, нажать кнопку Добавить и в выпадающем меню выбрать пункт Каталог.
Диалог создания хранилища local-iso типа Каталог для хранения ISO-образов и шаблонов контейнеров, которое будет смонтировано в каталог /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
Данная конфигурация определяет пул хранения резервных копий. Этот пул может использоваться для последних 7 резервных копий на виртуальную машину. Реальный путь к файлам резервных копий — /mnt/backup/custom/backup.

Примечание

Флаг shared (Общий доступ) можно установить только для кластерных ФС (например, ocfs2).
Хранилище Каталог использует следующую схему именования образов ВМ:
VM-<VMID>-<NAME>.<FORMAT>
где:
  • <VMID> — идентификатор ВМ;
  • <NAME> — произвольное имя (ascii) без пробелов. По умолчанию используется disk-[N], где [N] заменяется целым числом;
  • <FORMAT> — определяет формат образа (raw|qcow2|vmdk).
Пример:
# ls /var/lib/vz/images/101
vm-101-disk-0.qcow2  vm-101-disk-1.qcow2
При создании шаблона ВМ все образы дисков ВМ переименовываются, чтобы указать, что они теперь доступны только для чтения и могут использоваться в качестве базового образа для клонов:
base-<VMID>-<NAME>.<FORMAT>

26.4.4. NFS

Хранилище NFS аналогично хранению каталогов и файлов на диске, с дополнительным преимуществом совместного хранения и миграции в реальном времени. Свойства хранилища NFS во многом совпадают с хранилищем типа Каталог. Структура каталогов и соглашение об именах файлов также одинаковы. Основным преимуществом является то, что можно напрямую настроить свойства сервера NFS, и общий ресурс будет монтироваться автоматически (без необходимости изменения /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

Примечание

По истечении времени ожидания запрос NFS по умолчанию повторяется бесконечно. Это может привести к неожиданным зависаниям на стороне клиента. Для содержимого, доступного только для чтения, следует рассмотреть возможность использования NFS-опции soft, в этом случае будет выполняться только три запроса.

Примечание

Для возможности монтирования NFS-хранилища должен быть запущен nfs-client:
# systemctl enable --now nfs-client.target
Присоединение хранилища NFS с именем nfs-storage с удаленного сервера 192.168.0.105:
Создание хранилища NFS
После ввода IP-адреса удаленного сервера доступные ресурсы будут автоматически просканированы и будут отображены в выпадающем списке Export. В данном примере обнаруженная в блоке диалога точка монтирования — /export/storage.
Пример добавления хранилища NFS в командной строке с помощью утилиты 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
Получить список совместных ресурсов с сервера NFS:
# pvesm nfsscan <server>

26.4.5. BTRFS

Свойства хранилища BTRFS во многом совпадают с хранилищем типа Каталог. Основное отличие состоит в том, что при использовании этого типа хранилища диски в формате raw будут помещены в subvolume (подтом), для возможности создания снимков (снапшотов) и поддержки автономной миграции хранилища с сохранением снимков.

Примечание

BTRFS учитывает флаг O_DIRECT при открытии файлов, что означает, что ВМ не должны использовать режим кеширования none, иначе возникнут ошибки контрольной суммы.
Данное хранилище настраивается аналогично хранилищу типа Каталог.

Примечание

При добавлении в качестве хранилища BTRFS каталога, который сам по себе не является точкой монтирования, настоятельно рекомендуется указать фактическую точку монтирования с помощью параметра 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/.
Диалог создания хранилища brtfs-storage типа BTRFS для хранения образов дисков и контейнеров, которое будет смонтировано в каталог /mnt/data:
Создание хранилища BTRFS
Пример добавления хранилища BTRFS в командной строке с помощью утилиты pvesm:
# pvesm add btrfs btrfs-storage --path /mnt/data/btrfs-storage --is_mountpoint /mnt/data/ --content images,rootdir

26.4.5.1. Администрирование BTRFS

В этом разделе приведены некоторые примеры работы с ФС BTRFS.
Пример создания ФС BTRFS на диске /dev/sdd:
# mkfs.btrfs -m single -d single -L My-Storage /dev/sdd
Параметры -m и -d используются для установки профиля для метаданных и данных соответственно. С помощью необязательного параметра -L можно установить метку.
Можно создать RAID1 на двух разделах /dev/sdb1 и/dev/sdc1:
# mkfs.btrfs -m raid1 -d raid1 -L My-Storage /dev/sdb1 /dev/sdc1
Новую ФС можно смонтировать вручную, например:
# mkdir /mnt/data
# mount /dev/sdd /mnt/data
Для автоматического монтирования BTRFS раздела, следует добавить этот раздел в /etc/fstab. Рекомендуется использовать значение UUID (выведенное командой mkfs.btrfs), например:
UUID=5a556184-43b2-4212-bc21-eee3798c8322 /mnt/data btrfs defaults 0 0
Выполнить проверку монтирования:
# mount -a
Результатом выполнения команды должен быть пустой вывод без ошибок.

Примечание

UUID можно также получить, выполнив команду:
# blkid
/dev/sdd: LABEL="My-Storage" UUID="5a556184-43b2-4212-bc21-eee3798c8322" BLOCK_SIZE="4096" TYPE="btrfs"
Создание подтома (файловая система 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

26.4.6. CIFS

Хранилище SMB/CIFS расширяет хранилище типа Каталог, поэтому ручная настройка монтирования CIFS не требуется.

Примечание

Для возможности просмотра общих ресурсов на каждом узле кластера необходимо установить пакет samba-client.
Данное хранилище поддерживает все общие свойства хранилищ кроме флага 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
Получить список совместных ресурсов с сервера CIFS можно, выполнив команду:
# pvesm cifsscan <server> [--username <username>] [--password]
Команда добавления общего ресурса в качестве хранилища:
# pvesm add cifs <storagename> --server <server> --share <share> [--username <username>] [--password]
Подключение хранилища SMB/CIFS с именем newCIFS с удаленного сервера 192.168.0.105:
Добавление SMB/CIFS хранилища
После ввода IP-адреса удаленного сервера доступные ресурсы будут автоматически просканированы и будут отображены в выпадающем списке Share.

Примечание

При создании CIFS хранилища в веб-интерфейсе, PVE предполагает, что удаленный сервер поддерживает CIFS v3. В веб-интерфейсе нет возможности указать версию CIFS, поэтому в случае, если удалённый сервер поддерживает версии CIFS отличные от v3, создать хранилище можно в командной строке, например:
# pvesm add cifs newCIFS --server 192.168.0.105 --share smb_data --smbversion 2.1

26.4.7. GlusterFS

GlusterFS — это масштабируемая сетевая файловая система. Система использует модульную конструкцию, работает на аппаратном оборудовании и может обеспечить высокодоступное корпоративное хранилище при низких затратах. Такая система способна масштабироваться до нескольких петабайт и может обрабатывать тысячи клиентов.

Примечание

После сбоя узла GlusterFS выполняет полную синхронизацию, чтобы убедиться в согласованности данных. Для больших файлов это может занять очень много времени, поэтому это хранилище не подходит для хранения больших образов ВМ.
Данное хранилище поддерживает все общие свойства хранилищ, и дополнительно используются следующие свойства:
  • 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
Подключение хранилища GlusterFS с именем gluster-01 с удаленного сервера 192.168.0.105:
Создание хранилища GlusterFS

26.4.8. Локальный ZFS

Примечание

Для работы с локальным ZFS хранилищем должен быть установлен модуль ядра kernel-modules-zfs-6,12. Включить модуль:
# modprobe zfs
Чтобы не вводить эту команду после перезагрузки, следует раскомментировать строку:
#zfs
в файле /etc/modules-load.d/zfs.conf.
Локальный ZFS позволяет получить доступ к локальным пулам ZFS (или файловым системам ZFS внутри таких пулов).
Данное хранилище поддерживает общие свойства (content, nodes, disable) хранилищ, кроме того, для настройки ZFS используются следующие свойства:
  • pool — пул/файловая система ZFS;
  • blocksize — размер блока;
  • sparse — использовать тонкое выделение ресурсов;
  • mountpoint — точка монтирования пула/файловой системы ZFS. Изменение этого параметра не влияет на свойство точки монтирования набора данных, видимого zfs. По умолчанию /<pool>.
Пул ZFS поддерживает следующие типы RAID:
  • RAID-0 (Single Disk) — размер такого пула — сумма емкостей всех дисков. RAID0 не добавляет избыточности, поэтому отказ одного диска делает том не пригодным для использования (минимально требуется один диск);
  • пул RAID-1 (Mirror) — данные зеркалируются на все диски (минимально требуется два диска);
  • пул RAID-10 — сочетание RAID0 и RAID1 (минимально требуется четыре диска);
  • пул RAIDZ-1 — вариация RAID-5, одинарная четность (минимально требуется три диска);
  • пул RAIDZ-2 — вариация на RAID-5, двойной паритет (минимально требуется четыре диска);
  • пул RAIDZ-3 — разновидность RAID-5, тройная четность (минимально требуется пять дисков).
Пример файла конфигурации (/etc/pve/storage.cfg):
zfspool: vmdata
    pool vmdata
    content images,rootdir
    mountpoint /vmdata
    nodes pve03
Возможные типы содержимого: rootdir (данные контейнера), images (образ виртуального диска в формате raw или subvol).
Используется следующая схема именования образов дисков ВМ:
  • vm-<VMID>-<NAME> — образ ВМ;
  • base-<VMID>-<NAME> — шаблон образа ВМ (только для чтения);
  • subvol-<VMID>-<NAME> — файловая система ZFS для контейнеров.

Примечание

Если в ВМ созданной в ZFS хранилище будет создан диск с LVM разделами, то гипервизор не позволит удалить этот диск. Пример ошибки:
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*|" ]

26.4.8.1. Создание локального хранилища ZFS в веб-интерфейсе

Для создания локального хранилища ZFS в веб-интерфейсе следует выбрать узел, на котором будет создано хранилище, в разделе Диски выбрать пункт ZFS и нажать кнопку Создать: ZFS:
Добавление ZFS хранилища
В открывшемся окне следует задать параметры ZFS хранилища: имя хранилища, выбрать диски, уровень RAID и нажать кнопку Создать:
Параметры ZFS хранилища
Статус пула можно просмотреть выбрав его в списке и нажав кнопку Подробно:
Локальное ZFS хранилище
Для того чтобы внести изменения в настройки ZFS хранилища, следует выбрать Центр обработки данныхХранилище, затем нужное хранилище и нажать кнопку Редактировать:
Выбор хранилища для редактирования
В открывшемся окне можно изменить тип содержимого контейнера, включить/отключить хранилище, включить дисковое резервирование:
Редактирование ZFS хранилища

26.4.8.2. Администрирование ZFS

Основными командами для управления ZFS являются zfs и zpool.
Для создания нового пула необходим как минимум один пустой диск.
Создание нового пула RAID-0 (минимум 1 диск):
# zpool create -f -o ashift=12 <pool> <device1> <device2>
Создание нового пула RAID-1 (минимум 2 диска):
# zpool create -f -o ashift=12 <pool> mirror <device1> <device2>
Создание нового пула RAID-10 (минимум 4 диска):
# zpool create -f -o ashift=12 <pool> mirror <device1> <device2> mirror <device3> <device4>
Создание нового пула RAIDZ-1 (минимум 3 диска):
# zpool create -f -o ashift=12 <pool> raidz1 <device1> <device2> <device3>
Создание нового пула RAIDZ-2 (минимум 4 диска):
# 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>
Получить список доступных ZFS файловых систем:
# pvesm zfsscan
Пример создания RAID1(mirror) с помощью zfs:
# 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

26.4.9. LVM

LVM (Logical Volume Management) — это система управления дисковым пространством. Позволяет логически объединить несколько дисковых пространств (физические тома) в одно, и уже из этого пространства (дисковой группы или группы томов — VG), можно выделять разделы (логические тома — LV), доступные для работы.
Использование LVM групп обеспечивает лучшую управляемость. Логические тома можно легко создавать/удалять/перемещать между физическими устройствами хранения. Если база хранения для группы LVM доступна на всех PVE узлах (например, ISCSI LUN) или репликах (например, DRBD), то все узлы имеют доступ к образам ВМ, и возможна live-миграция.
Данное хранилище поддерживает общие свойства (content, nodes, disable) хранилищ, кроме того, для настройки LVM используются следующие свойства:
  • 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
Возможные типы содержимого: rootdir (данные контейнера), images (образ виртуального диска в формате raw).

26.4.9.1. Создание локального LVM хранилища в веб-интерфейсе

Примечание

Для создания локального LVM хранилища в веб-интерфейсе необходимо, чтобы в системе имелся хотя бы один пустой жесткий диск.
Для создания локального LVM хранилища в веб-интерфейсе следует выбрать узел, на котором будет создано хранилище, в разделе Диски выбрать пункт LVM и нажать кнопку Создать: Volume Group:
Пункт LVM в разделе Диски
В открывшемся окне следует выбрать диск, задать имя группы томов, отметить пункт Добавить хранилище (если этот пункт не отмечен будет создана только группа томов) и нажать кнопку Создать:
Создание группы томов
Для того чтобы внести изменения в настройки LVM хранилища, следует выбрать Центр обработки данныхХранилище, затем нужное хранилище и нажать кнопку Редактировать. В открывшемся окне можно изменить тип содержимого контейнера, включить/отключить хранилище:
Редактирование LVM хранилища
Одним из преимуществ хранилища LVM является то, что его можно использовать поверх общего хранилища, например, iSCSI LUN. Сам бэкэнд реализует правильную блокировку на уровне кластера.
Добавление хранилища типа LVM (over iSCSI)

26.4.9.2. Создание хранилища LVM в командной строке

Пример создания LVM хранилища на пустом диске /dev/sdd:
  1. Создать физический том (PV):
    # pvcreate /dev/sdd
      Physical volume "/dev/sdd" successfully created.
    
  2. Создать группу томов (VG) с именем vg:
    # vgcreate vg /dev/sdd
      Volume group "vg" successfully created
    
  3. Показать информацию о физических томах:
    # pvs
      PV         VG        Fmt  Attr PSize   PFree
      /dev/sdd   vg        lvm2 a--  <18,00g <3,00g
    
  4. Показать информацию о группах томов:
    # vgs
      VG        #PV #LV #SN Attr   VSize   VFree
      vg          1   2   0 wz--n- <18,00g <3,00g
    
  5. Получить список доступных PVE групп томов:
    # pvesm lvmscan
    vg
    
  6. Создать LVM хранилище с именем myspace:
    # pvesm add lvm myspace --vgname vg --nodes pve03
    

26.4.10. LVM-Thin

LVM-Thin (thin provision) — это возможность использовать какое-либо внешнее блочное устройство в режиме только для чтения как основу для создания новых логических томов LVM. Такие разделы при создании уже будут выглядеть так, будто они заполнены данными исходного блочного устройства. Операции с томами изменяются налету таким образом, что чтение данных выполняется с исходного блочного устройства (или с тома, если данные уже отличаются), а запись — на том.
Такая возможность может быть полезна, например, при создании множества однотипных ВМ или для решения других аналогичных задач, т.е. задач, где нужно получить несколько изменяемых копий одних и тех же исходных данных.
Данное хранилище поддерживает все общие свойства хранилищ, кроме того, для настройки LVM-Thin используются следующие свойства:
  • vgname — имя группы томов LVM (должно указывать на существующую группу томов);
  • thinpool — название тонкого пула LVM.
Пример файла конфигурации (/etc/pve/storage.cfg):
lvmthin: vmstore
    thinpool vmstore
    vgname vmstore
    content rootdir,images
    nodes pve03
Возможные типы содержимого: rootdir (данные контейнера), images (образ виртуального диска в формате raw).
LVM-Thin является блочным хранилищем, но полностью поддерживает моментальные снимки и клоны. Новые тома автоматически инициализируются с нуля.
Тонкие пулы LVM не могут совместно использоваться несколькими узлами, поэтому их можно использовать только в качестве локального хранилища.

26.4.10.1. Создание локального LVM-Thin хранилища в веб-интерфейсе

Примечание

Для создания локального LVM-Thin хранилища в веб-интерфейсе необходимо, чтобы в системе имелся хотя бы один пустой жесткий диск.
Для создания локального LVM-Thin хранилища в веб-интерфейсе следует выбрать узел, на котором будет создано хранилище, в разделе Диски выбрать пункт LVM-Thin и нажать кнопку Создать: Thinpool:
Пункт LVM-Thin в разделе Диски
В открывшемся окне следует выбрать диск, задать имя группы томов, отметить пункт Добавить хранилище (если этот пункт не отмечен будет создана только группа томов) и нажать кнопку Создать:
Создание LVM-Thin хранилища
Для того чтобы внести изменения в настройки LVM-Thin хранилища, следует выбрать Центр обработки данныхХранилище, затем нужное хранилище и нажать кнопку Редактировать. В открывшемся окне можно изменить тип содержимого контейнера, включить/отключить хранилище:
Редактирование LVM-Thin хранилища

26.4.10.2. Создание хранилища LVM-Thin в командной строке

Для создания и управления пулами LVM-Thin можно использовать инструменты командной строки.
Пул LVM-Thin должен быть создан поверх группы томов.
Команда создания нового тонкого пула LVM (размер 80 ГБ) с именем vmstore (предполагается, что группа томов LVM с именем vg уже существует):
# lvcreate -L 80G -T -n vmstore vg
Получить список доступных LVM-Thin пулов в группе томов vg:
# pvesm lvmthinscan vg
vmstore
Команда создания LVM-Thin хранилища с именем vmstore на узле pve03:
# pvesm add lvmthin vmstore --thinpool vmstore --vgname vg --nodes pve03

26.4.11. iSCSI

iSCSI (Internet Small Computer System Interface) — широко применяемая технология, используемая для подключения к серверам хранения.
Данное хранилище поддерживает все общие свойства хранилищ, и дополнительно используются следующие свойства:
  • 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
Возможные типы содержимого: images (образ виртуального диска в формате raw).
iSCSI является типом хранилища блочного уровня и не предоставляет интерфейса управления. Поэтому обычно лучше экспортировать один большой LUN и установить LVM поверх этого LUN.

Примечание

Если планируется использовать LVM поверх iSCSI, имеет смысл установить:
content none
В этом случае нельзя будет создавать ВМ с использованием iSCSI LUN напрямую.

Примечание

Для работы с устройством, подключенным по интерфейсу iSCSI, на всех узлах необходимо выполнить команду (должен быть установлен пакет open-iscsi):
# systemctl enable --now iscsid
Добавление адресата iSCSI с именем test1-iSCSI, который настроен на удаленном узле 192.168.0.105:
Добавление хранилища типа iSCSI
Параметр Использовать LUN напрямую — разрешение/запрет прямого применения LUN (параметр должен быть установлен на запрет, разрешение может привести к потере данных).
Посмотреть доступные для подключения iSCSI цели:
# pvesm scan iscsi <IP-адрес сервера[:порт]>>
Команда создания хранилища iSCSI:
# pvesm add iscsi <ID> --portal <Сервер iSCSI> --target <Цель iSCSI> --content none

26.4.12. iSCSI/libiscsi

Это хранилище обеспечивает в основном ту же функциональность, что и iSCSI, но использует библиотеку пользовательского уровня. Так как при этом не задействованы драйверы ядра, то это можно рассматривать как оптимизацию производительности. Но поверх такого iSCSI LUN нельзя использовать LVM (управлять распределением пространства необходимо на стороне сервера хранения).

Примечание

Для использования этого хранилища должен быть установлен пакет libiscsi.
Данное хранилище поддерживает все свойства хранилища iscsi.
Пример файла конфигурации (/etc/pve/storage.cfg):
iscsidirect: test1-iSCSi
    portal 192.168.0.191
    target dc1.test.alt:server.target
Возможные типы содержимого: images (образ виртуального диска в формате raw).

26.4.13. Ceph RBD

Хранилище RBD (Rados Block Device) предоставляется распределенной системой хранения Ceph. По своей архитектуре Ceph является распределенной системой хранения. Хранилище RBD может содержать только форматы образов .raw.
Данное хранилище поддерживает все общие свойства хранилищ, и дополнительно используются следующие свойства:
  • monhost — список IP-адресов демона монитора (только если Ceph не работает на кластере PVE);
  • pool — название пула Ceph (rbd);
  • username — идентификатор пользователя Ceph (только если Ceph не работает на кластере PVE);
  • krbd (опционально) — обеспечивает доступ к блочным устройствам rados через модуль ядра krbd.

Примечание

Контейнеры будут использовать krbd независимо от значения параметра krbd.
Пример файла конфигурации (/etc/pve/storage.cfg):
rbd: new
    content images
    krbd 0
    monhost 192.168.0.105
    pool rbd
    username admin
Возможные типы содержимого: rootdir (данные контейнера), images (образ виртуального диска в формате raw).
Добавление хранилища RBD:
Добавление хранилища типа RBD
Если используется аутентификация cephx (включена по умолчанию), необходимо предоставить связку ключей из внешнего кластера Ceph.
При настройке хранилища в командной строке, предварительно следует сделать доступным файл, содержащий связку ключей. Один из способов — скопировать файл из внешнего кластера Ceph непосредственно на один из узлов PVE. Например, скопировать файл в каталог /root узла:
# scp <external cephserver>:/etc/ceph/ceph.client.admin.keyring /root/rbd.keyring
Команда настройки внешнего хранилища RBD:
# pvesm add rbd <name> --monhost "10.1.1.20 10.1.1.21 10.1.1.22" --content images --keyring /root/rbd.keyring
При настройке внешнего хранилища RBD в графическом интерфейсе, связку ключей можно указать в поле Keyring.
Связка ключей будет храниться в файле /etc/pve/priv/ceph/<STORAGE_ID>.keyring.
Пример добавления хранилища RBD, использующего пул Ceph под управлением PVE (см. Кластер Ceph):
Добавление хранилища типа RBD
Связка ключей в этом случае будет скопирована автоматически.

26.4.14. CephFS

CephFS реализует POSIX-совместимую файловую систему, использующую кластер хранения Ceph для хранения своих данных. Поскольку CephFS основывается на Ceph, он разделяет большинство свойств, включая избыточность, масштабируемость, самовосстановление и высокую доступность.

Примечание

PVE может управлять настройками Ceph (см. Кластер Ceph), что упрощает настройку хранилища CephFS. Поскольку современное оборудование предлагает большую вычислительную мощность и оперативную память, запуск служб хранения и ВМ на одном узле возможен без существенного влияния на производительность.
Данное хранилище поддерживает все общие свойства хранилищ, и дополнительно используются следующие свойства:
  • 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
Возможные типы содержимого: vztmpl (шаблон контейнера), iso (ISO-образ), backup (резервная копия), фрагменты (сниппеты), import (импорт).
Добавление хранилища CephFS:
Добавление хранилища CephFS

Примечание

Получить список доступных cephfs, для указания в поле Имя ФС, можно с помощью команды:
# ceph fs ls
Если используется аутентификация cephx (включена по умолчанию), необходимо указать ключ из внешнего кластера Ceph.
При настройке хранилища в командной строке, предварительно сделать файл с ключом доступным. Один из способов — скопировать файл из внешнего кластера Ceph непосредственно на один из узлов PVE. Например, скопировать файл в каталог /root узла:
# scp <external cephserver>:/etc/ceph/cephfs.secret /root/cephfs.secret
Команда настройки внешнего хранилища CephFS:
# pvesm add cephfs <name> --monhost "10.1.1.20 10.1.1.21 10.1.1.22" --content backup --keyring /root/cephfs.secret
При настройке внешнего хранилища CephFS в графическом интерфейсе, ключ можно указать в поле Секретный ключ.
Ключ будет храниться в файле /etc/pve/priv/ceph/<STORAGE_ID>.secret.
Ключ можно получить из кластера Ceph (как администратор Ceph), выполнив команду:
# ceph auth get-key client.userid > cephfs.secret

26.4.15. Proxmox Backup Server

Proxmox Backup Server — позволяет напрямую интегрировать сервер резервного копирования Proxmox в PVE.
Данное хранилище поддерживает только резервные копии, они могут быть на уровне блоков (для ВМ) или на уровне файлов (для контейнеров).
Серверная часть поддерживает все общие свойства хранилищ, кроме флага «общее» («shared»), который всегда установлен. Кроме того, для Proxmox Backup Server доступны следующие специальные свойства:
  • 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

26.4.15.1. Подключение хранилища

Подключение хранилища Proxmox Backup Server с именем pbs_backup с удаленного сервера 192.168.0.123:
Добавление хранилища Proxmox Backup Server
Добавление хранилища Proxmox Backup Server в командной строке:
# 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

26.4.15.2. Шифрование

На стороне клиента можно настроить шифрование с помощью AES-256 в режиме GCM. Шифрование можно настроить либо в командной строке с помощью опции 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

Важно

Без ключа шифрования резервные копии будут недоступны. Следует хранить ключи в надежном месте, отдельном от содержимого резервной копии.
Рекомендуется хранить ключ в безопасном, но при этом легкодоступном месте, чтобы можно было быстро восстановить его после сбоев. Лучшее место для хранения ключа шифрования — менеджер паролей. В качестве резервной копии также следует сохранить ключ на USB-накопитель. Таким образом, ключ будет отсоединен от системы, но его по-прежнему легко можно будет восстановить в случае возникновения чрезвычайной ситуации.
Кроме того, можно использовать пару мастер-ключей RSA для целей восстановления ключей: для этого необходимо настроить всех клиентов, выполняющих зашифрованное резервное копирование, на использование одного открытого мастер-ключа, и все последующие зашифрованные резервные копии будут содержать зашифрованную RSA копию использованного ключа шифрования AES. Соответствующий закрытый мастер-ключ позволяет восстановить ключ AES и расшифровать резервную копию, даже если клиентская система больше не доступна.

Важно

К паре мастер-ключей применяются те же правила хранения, что и к обычным ключам шифрования. Без копии закрытого ключа восстановление невозможно!

Примечание

Не следует использовать шифрование, если от него нет никакой пользы, например, если сервер запущен локально в доверенной сети. Восстановить данные из незашифрованных резервных копий всегда проще.

26.4.16. ESXi

Хранилище ESXi — используется для автоматического импорта ВМ из VMware ESXi в PVE.
Для ESXi доступны следующие специальные свойства:
  • 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
Подключение хранилища ESXi с именем myESXi с удаленного сервера 192.168.0.130:
Добавление хранилища ESXi
Если на сервере ESXi установлен самоподписанный сертификат, необходимо добавить ЦС в хранилище доверенных сертификатов системы или установить отметку Пропустить проверку сертификата.
Добавление хранилища ESXi в командной строке:
# pvesm add esxi myESXi --server 192.168.0.130 \
--username root --skip-cert-verification 1 --password

26.5. FC/iSCSI SAN

Данная конфигурация предполагает, что узлы кластера имеют доступ к устройствам хранения (LUN), экспортированным сервером сети хранения данных (SAN) с использованием протокола iSCSI или Fibre Channel (FC).
Соединение узла PVE к хранилищу называется путем. Если в подсистеме хранения данных существует несколько путей к устройству хранения данных (LUN), это называется многопутевым подключением (multipath). Необходимо использовать как минимум два выделенных сетевых адаптера для iSCSI/FC, использующих отдельные сети (и коммутаторы для защиты от сбоев коммутатора).
Основная цель многопутевого подключения (multipath) — обеспечить резервный доступ к устройству хранения данных. Еще одним преимуществом многопутевого доступа является увеличение пропускной способности за счет балансировки нагрузки. Типичным примером использования нескольких путей является добавление избыточности и получение максимальной производительности от устройства FC/iSCSI SAN.

Примечание

В данном разделе приведена общая информация. Для получения информации о настройках конкретной СХД следует обратиться к документации производителя хранилища.

26.5.1. Подключение СХД

26.5.1.1. Особенности подключения СХД по FC

Алгоритм подключения:
  1. Подготовить СХД (создать LUNы).
  2. На сервере установить FC HBA, драйверы к ним.
  3. Настроить сетевое подключение.
  4. Подключить СХД к серверу.
  5. Предоставить серверу доступ к СХД по WWPN.

Примечание

Для того чтобы узнать глобальные имена портов (WWPN), можно воспользоваться утилитой systool из пакета sysfsutils.
Пакет sysfsutils необходимо установить из репозитория:
# apt-get install sysfsutils
Чтобы найти WWPN, следует ввести следующую команду:
# 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 виден по четырем путям.

26.5.1.2. Особенности подключения СХД по ISCSI

Все необходимые соединения iSCSI должны запускаться во время загрузки узла. Сделать это можно, установив для параметра node.startup значение automatic. Значение по умолчанию для параметра node.session.timeo.replacement_timeout составляет 120 секунд. Рекомендуется использовать значение — 15 секунд.
Эти параметры можно указать в файле в /etc/iscsi/iscsid.conf (по умолчанию). Если iSCSI target уже подключен, то необходимо изменить настройки по умолчанию для конкретной цели в файле /etc/iscsi/nodes/<TARGET>/<PORTAL>/default.
На всех узлах PVE необходимо:
  1. Установить пакет open-iscsi, запустить и добавить в автозагрузку сервис iscsid:
    # apt-get install open-iscsi
    # systemctl enable --now iscsid
    
  2. Указать следующие параметры в файле /etc/iscsi/iscsid.conf:
    node.startup = automatic
    node.session.timeo.replacement_timeout = 15
    
  3. Присоединить iSCSI хранилище к кластеру:
    # iscsiadm -m discovery -t sendtargets -p <iscsi-target-1-ip>
    # iscsiadm -m discovery -t sendtargets -p <iscsi-target-2-ip>
    # iscsiadm -m node --login
    
  4. Настроить автоматическое подключение iSCSI-target-ов. Для этого необходимо поменять следующие параметры:
    • в файле /etc/iscsi/iscsid.conf:
      node.startup = automatic
    • в файлах /var/lib/iscsi/send_targets/<TargetServer>,<Port>/st_config:
      discovery.sendtargets.use_discoveryd = Yes
      
  5. После перезагрузки должны появиться подключенные устройства:
    # 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
    
  • переопросить устройства на ISCSI:
    # iscsiadm -m node -R
    
  • посмотреть все текущие подключения iSCSI:
    # iscsiadm -m session
    

26.5.2. Настройка Multipath

Многопутевой ввод-вывод (Multipath I/O) — технология подключения узлов СХД с использованием нескольких маршрутов. В случае отказа одного из контроллеров, ОС будет использовать другой для доступа к устройству. Это повышает отказоустойчивость системы и позволяет распределять нагрузку.
Multipath устройства объединяются в одно устройство с помощью специализированного ПО в новое устройство. Multipath обеспечивает выбор пути и переключение на новый маршрут при отказе текущего. Кроме того, Multipath позволяет увеличить пропускную способность за счет балансировки нагрузки.
На всех узлах должен быть установлен пакет для multipath:
# apt-get install multipath-tools
И запущена служба multipathd:
# systemctl enable --now multipathd && sleep 5; systemctl status multipathd

26.5.2.1. Конфигурация multipath

Примечание

Команда multipath используется для обнаружения и объединения нескольких путей к устройствам.
Некоторые параметры команды multipath:
  • -l — отобразить текущую multipath-топологию, полученную из sysfs и устройства сопоставления устройств;
  • -ll — отобразить текущую multipath-топологию, собранную из sysfs, устройства сопоставления устройств и всех других доступных компонентов системы;
  • -f device — удалить указанное multipath-устройство;
  • -F — удалить все неиспользуемые multipath-устройства;
  • -w device — удалить WWID указанного устройства из файла wwids;
  • -W — сбросить файл wwids, чтобы включить только текущие многопутевые устройства;
  • -r — принудительная перезагрузка multipath-устройства.
После подключения, устройство хранения данных должно автоматически определиться как 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-устройстве:
    • mpatha (3600c0ff00014f56ee9f3cf6301000000): алиас
    • dm-0: имя устройства dm
    • HP,P2000 G3 FC: поставщик, продукт
    • size=931G: размер
    • features='1 queue_if_no_path': функции
    • hwhandler='01 alua': аппаратный обработчик
    • wp=rw: права на запись
  • Информация о группе путей:
    • policy='service-time 0': политика планирования
    • prio=50: приоритет группы путей
    • status=active: статус группы путей
  • Информация о пути:
    • 7:0:1:1: хост:канал:идентификатор:Lun
    • sde: диск
    • 8:80: номера major:minor
    • active: статус dm
    • ready: статус пути
    • running: online статус
Для получения дополнительной информации об используемых устройствах можно выполнить команду:
# multipath -v3
Настройки multipath содержатся в файле /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:
# 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
Однако не гарантируется, что имя устройства будет одинаковым на всех узлах, использующих это multipath-устройство.
ОС при загрузке определяет пути к устройствам в изменяющейся среде выполнения (например, при новой загрузке в среде выполнения ОС появились новые устройства хранения или исчезли старые, и т.п.) по отношению к предыдущей загрузке или по отношению к заданной ранее конфигурации. Это может приводить к противоречиям при именовании устройств. Для того чтобы избежать такого поведения, рекомендуется:
  • Сделать явное исключение для устройства (раздела) хранения (например, для 3600c0ff00014f56ee9f3cf6301000000, которое в настоящее время определяется как /dev/mapper/mpatha). Для этого в файл /etc/multipath.conf добавить секции:
    blacklist {
            wwid .*
    }
    
    blacklist_exceptions {
            wwid "3600c0ff00014f56ee9f3cf6301000000"
    }
    
    Данная настройка предписывает внести в черный список любые найденные устройства хранения данных, за исключением нужного.
  • Создать еще одну секцию:
    multipaths {
      multipath {
            wwid "3600c0ff00014f56ee9f3cf6301000000"
            alias mpatha
      }
    }
    
    В этом случае устройство всегда будет доступно только по имени /dev/mapper/mpatha. Вместо mpatha можно вписать любое желаемое имя устройства.

Примечание

Получить WWID конкретного устройства можно, выполнив команду:
# /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

26.5.3. Multipath в веб-интерфейсе PVE

Диски, подключенные по mulipath, можно увидеть в веб-интерфейсе PVE:
Multipath в веб-интерфейсе PVE
Поверх хранилища на базе iSCSI или FC можно использовать LVM или хранилище файлового типа (если нужны снапшоты).

26.5.4. Файловые системы на multipath

На multipath-устройстве можно создать файловую систему (ФС) и подключить его как хранилище типа «Каталог» в PVE. Можно использовать любую ФС, но при использовании, например, ext4 или xfs, хранилище нельзя будет использовать как общее. Для возможности совместного использования хранилища необходимо использовать кластерную ФС.
Ниже показано создание кластерной ФС ocfs2 на multipath-устройстве и подключение этого устройства в PVE.

26.5.4.1. Кластерная ФС ocfs2

На всех узлах кластера необходимо установить пакет ocfs2-tools:
# apt-get install ocfs2-tools

Примечание

Основной конфигурационный файл для OCFS2 — /etc/ocfs2/cluster.conf. Этот файл должен быть одинаков на всех узлах кластера, при изменении в одном месте его нужно скопировать на остальные узлы. При добавлении нового узла в кластер, описание этого узла должно добавлено быть на всех остальных узлах до монтирования раздела ocfs2 с нового узла.
Создание кластерной конфигурации возможно с помощью команд или с помощью редактирования файла конфигурации /etc/ocfs2/cluster.conf.
Пример создания кластера из трёх узлов:
  • В командной строке:
    • Создать кластер с именем mycluster:
      # 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.
Для включения автоматической загрузки сервиса OCFS2 можно использовать скрипт /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
Далее на одном из узлов необходимо создать раздел OCFS2, для этого следует выполнить следующие действия:
  • создать физический раздел /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 КБ (рекомендуется для большинства томов). Размер блока невозможно изменить после форматирования тома

Примечание

Для создания нового раздела может потребоваться предварительно удалить существующие данные раздела на устройстве /dev/mpathX (следует использовать с осторожностью!):
# dd if=/dev/zero of=/dev/mapper/mpathX bs=512 count=1 conv=notrunc

26.5.4.2. OCFS2 в PVE

На каждом узле PVE необходимо смонтировать раздел (например, в /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 позволяет монтировать данный раздел только после успешного старта сетевой подсистемы.

Примечание

Так как имя является символической ссылкой, в некоторых случаях (например, при смене порядка опроса устройств на шине ISCSI) она может меняться (указывая на иное устройство). Поэтому если для устройства хранения не используется алиас, рекомендуется производить автоматическое монтирование этого устройства (раздела) в файле /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 (Центр обработки данныхХранилище, нажать кнопку ДобавитьКаталог):
Добавление multipath-устройства

26.5.5. LVM/LVM-Thin хранилища на multipath

Примечание

multipath-устройство не отображается в веб-интерфейсе PVE LVM/LVM-Thin, поэтому потребуется использовать CLI.

Примечание

LVM при запуске сканирует все устройства на предмет поиска конфигурации LVM, и если настроен multipath-доступ, он найдет конфигурацию LVM как на (виртуальных) multipath-устройствах, так и на базовых (физических) дисках. Поэтому рекомендуется создать фильтр LVM для фильтрации физических дисков и разрешить LVM сканировать только multipath-устройства.
Сделать это можно, добавив фильтр в раздел device в файле /etc/lvm/lvm.conf, например:
filter = [ "a|/dev/mapper/|", "a|/dev/sda.*|", "r|.*|" ]
В данном примере принимаются только multipath-устройства и /dev/sda.*, все остальные устройства отклоняются:
  • a|/dev/mapper/| — принять устройства /dev/mapper;
  • a|/dev/sda.*| — принять устройство /dev/sda;
  • r|.*| — отклонить все остальные устройства.
Пример создания LVM на multipath:
  1. Вывести список разделов /dev/mapper/mpatha:
    # 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
    
  2. Создать физический том (PV) на /dev/mapper/mpatha-part1:
    # pvcreate /dev/mapper/mpatha-part1
    Physical volume "/dev/mapper/mpatha-part1" successfully created.
    
  3. Создать группу томов (VG) с именем VG1:
    # vgcreate VG1 /dev/mapper/mpatha-part1
    Volume group "VG1" successfully created
    
  4. Вывести информацию о физических томах:
    # pvs
    PV                       VG  Fmt  Attr PSize   PFree
    /dev/mapper/mpatha-part1 VG1 lvm2 a--  931.32g 931.32g
    

26.5.5.1. LVM-хранилище

Получить список доступных PVE групп томов:
# pvesm lvmscan
VG1
Список доступных PVE групп томов можно также увидеть в веб-интерфейсе:
Список LVM томов
Пример создания LVM хранилища с именем mpath-lvm:
# pvesm add lvm mpath-lvm --vgname VG1 --content images,rootdir
Пример создания LVM хранилища в веб-интерфейсе (Центр обработки данныхХранилище, нажать кнопку ДобавитьLVM):
LVM хранилище на multipath

26.5.5.2. LVM-Thin хранилище

Создать тонкий пул LVM на multipath:
  1. Вывести информацию о физических томах:
    # pvs
      PV                       VG  Fmt  Attr PSize   PFree
      /dev/mapper/mpatha-part1 VG1 lvm2 a--  931.32g 931.32g
    
  2. Вывести информацию о группах томов:
    # vgs
      VG  #PV #LV #SN Attr   VSize   VFree
      VG1   1   0   0 wz--n- 931.32g 931.32g
    
  3. Создать тонкий пул LVM (размер 100 ГБ) с именем vmstore:
    # lvcreate -L 100G -T -n vmstore VG1
    Logical volume "vmstore" created.
    
Получить список доступных PVE LVM-thin пулов в группе томов VG1:
# pvesm lvmthinscan VG1
vmstore
Список доступных PVE LVM-thin пулов можно также увидеть в веб-интерфейсе:
Список LVM-thin пулов
Пример создания LVM-Thin хранилища с именем mpath-lvmthin:
# pvesm add lvmthin mpath-lvmthin --thinpool vmstore --vgname VG1 --nodes pve01
Пример создания LVM-Thin хранилища в веб-интерфейсе (Центр обработки данныхХранилище, нажать кнопку ДобавитьLVM-Thin):
LVM хранилище на multipath

26.5.6. Изменение размера multipath-устройства

Для изменения размера multipath-устройства необходимо:
  • Изменить размер физического устройства;
  • Определить пути к номеру логического устройства (LUN):
    # 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
    
    Данную команду необходимо выполнить для каждого диска, входящего в multipath-устройство:
    # 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
    
    Новый размер диска в выводе команды dmesg
  • Изменить размер multipath-устройства:
    # multipathd -k"resize map 3600c0ff00014f56ee9f3cf6301000000"
    
    где 3600c0ff00014f56ee9f3cf6301000000 — WWID multipath-устройства;
  • Изменить размер блочного устройства (если используется LVM):
    # pvresize /dev/mapper/mpatha
    
  • Изменить размер файловой системы (если разделы LVM или DOS не используются):
    # resize2fs /dev/mapper/mpatha
    

Примечание

Данную процедуру следует выполнить на каждом узле, к которому присоединён этот LUN.

26.6. Кластер Ceph

PVE позволяет использовать одни и те же физические узлы в кластере как для вычислений (обработка виртуальных машин и контейнеров), так и для реплицированного хранилища.
Ceph — программная объектная отказоустойчивая сеть хранения данных. Она реализует возможность файлового и блочного доступа к данным. Ceph интегрирован в PVE, поэтому запускать и управлять хранилищем Ceph можно непосредственно на узлах гипервизора.
Некоторые преимущества Ceph на PVE:
  • простая настройка и управление через веб-интерфейс и командную строку;
  • тонкое резервирование;
  • поддержка моментальных снимков;
  • самовосстановление;
  • масштабируемость до уровня эксабайт;
  • настройка пулов с различными характеристиками производительности и избыточности;
  • данные реплицируются, что делает их отказоустойчивыми;
  • работает на стандартном оборудовании;
  • нет необходимости в аппаратных RAID-контроллерах;
  • открытый исходный код.
pveceph — инструмент для установки и управления службами Ceph на узлах PVE.
Кластерная система хранения данных Ceph состоит из нескольких демонов:
  • монитор Ceph (ceph-mon) — хранит информацию о состоянии работоспособности кластера, карту всех узлов и правила распределения данных (карту CRUSH). Мониторы также отвечают за управление аутентификацией между демонами и клиентами. Обычно для обеспечения резервирования и высокой доступности требуется не менее трех мониторов;
  • менеджер Ceph (ceph-mgr) — собирает информацию о состоянии со всего кластера. Менеджер Ceph работает вместе с демонами монитора. Он обеспечивает дополнительный мониторинг и взаимодействует с внешними системами мониторинга и управления. Он также включает другие службы. Для обеспечения высокой доступности обычно требуется по крайней мере два менеджера;
  • OSD Ceph (ceph-osd; демон хранилища объектов) — демон, управляющий устройствами хранения объектов, которые представляют собой физические или логические единицы хранения (жесткие диски или разделы). Демон дополнительно отвечает за репликацию данных и перебалансировку в случае добавления или удаления узлов. Демоны Ceph OSD взаимодействуют с демонами монитора и предоставляют им состояние других демонов OSD. OSD являются основными демонами кластера, на которые ложится большая часть нагрузки. Для обеспечения резервирования и высокой доступности обычно требуется не менее трех OSD Ceph;
  • Сервер метаданных Ceph (Metadata Server) — хранит метаданные файловой системы CephFS (блочные устройства Ceph и хранилище объектов Ceph не используют MDS). Разделение метаданных от данных значительно увеличивает производительность кластера. Серверы метаданных Ceph позволяют пользователям файловой системы POSIX выполнять базовые команды (такие как ls, find и т.д.), не создавая огромной нагрузки на кластер хранения Ceph.

26.6.1. Системные требования

Чтобы построить гиперконвергентный кластер PVE + Ceph, необходимо использовать не менее трех (предпочтительно) идентичных серверов для настройки.
Требования к оборудованию для Ceph могут варьироваться в зависимости от размера кластера, ожидаемой нагрузки и других факторов.

Таблица 26.5. Системные требования к оборудованию для Ceph

Процесс
Критерий
Требования
Монитор Ceph
Процессор
2 ядра минимум, 4 рекомендуется
ОЗУ
5ГБ+ (большим/производственным кластерам нужно больше)
Жёсткий диск
100 ГБ на демон, рекомендуется SSD
Сеть
1 Гбит/с (рекомендуется 10+ Гбит/с)
Менеджер Ceph
Процессор
1 ядро
ОЗУ
1 ГБ
OSD Ceph
Процессор
  • 1 ядро минимум, 2 рекомендуется
  • 1 ядро на пропускную способность 200-500 МБ/с
  • 1 ядро на 1000-3000 IOPS
  • SSD OSD, особенно NVMe, выиграют от дополнительных ядер на OSD
ОЗУ
  • 4 ГБ+ на демон (больше – лучше)
  • 1 ГБ на 1 ТБ данных OSD
Жёсткий диск
1 SSD накопитель на демон
Сеть
1 Гбит/с (рекомендуется агрегированная сеть 10+ Гбит/с)
Сервер метаданных Ceph
Процессор
2 ядра
ОЗУ
2 ГБ+ (для производственных кластеров больше)
Жёсткий диск
1 ГБ на демон, рекомендуется SSD
Сеть
1 Гбит/с (рекомендуется 10+ Гбит/с)
Серверу в целом требуется как минимум сумма потребностей демонов, которые он размещает, а также ресурсы для журналов и других компонентов ОС. Следует также учитывать, что потребность сервера в ОЗУ и хранилище будет больше при запуске и при выходе из строя или добавлении компонентов и перебалансировке кластера.
Дополнительные рекомендации:
  • Память: при гиперконвергентной настройке необходимо тщательно контролировать потребление памяти. Помимо прогнозируемого использования памяти ВМ и контейнерами необходимо также учитывать наличие достаточного объема памяти для Ceph;
  • Сеть: Рекомендуется использовать сеть не менее 10 Гбит/с, которая используется исключительно для Ceph. Объем трафика, особенно во время восстановления, будет мешать другим службам в той же сети и может даже сломать стек кластера PVE. Кроме того, необходимо оценить потребность в пропускной способности. Например, один жесткий диск может не заполнить канал 1 Гбит, несколько жестких дисков OSD на узел могут, а современные твердотельные накопители NVMe быстро заполнят 10 Гбит/с. Развертывание сети, способной обеспечить еще большую пропускную способность, гарантирует, что это не станет узким местом. Возможны 25, 40 или даже 100 Гбит/с.
  • Жесткие диски: OSD-диски, намного меньшие одного терабайта, используют значительную часть своей емкости для метаданных, а диски меньше 100 ГБ будут вообще неэффективны. Настоятельно рекомендуется, чтобы SSD были предоставлены как минимум для узлов мониторов Ceph и менеджеров Ceph, а также для пулов метаданных CephFS и пулов индексов Ceph Object Gateway (RGW), даже если жесткие диски должны быть предоставлены для больших объемов данных OSD.
    Помимо типа диска, Ceph лучше всего работает с равномерным по размеру и распределенным количеством дисков на узел. Например, 4 диска по 500 ГБ в каждом узле лучше, чем смешанная установка с одним диском на 1 ТБ и тремя дисками по 250 ГБ.
    Необходимо также сбалансировать количество OSD и емкость одного OSD. Большая емкость позволяет увеличить плотность хранения, но это также означает, что один сбой OSD заставляет Ceph восстанавливать больше данных одновременно.
    Поскольку Ceph обрабатывает избыточность объектов данных и несколько параллельных записей на диски (OSD) самостоятельно, использование RAID-контроллера обычно не улучшает производительность или доступность. Напротив, Ceph разработан для самостоятельной обработки целых дисков, без какой-либо абстракции между ними. RAID-контроллеры не предназначены для рабочей нагрузки Ceph и могут усложнять ситуацию, а иногда даже снижать производительность, поскольку их алгоритмы записи и кеширования могут мешать алгоритмам Ceph.

Примечание

Приведенные выше рекомендации следует рассматривать как приблизительное руководство по выбору оборудования. Поэтому все равно важно адаптировать его к конкретным потребностям. Следует постоянно тестировать свои настройки и следить за работоспособностью и производительностью.

26.6.2. Начальная конфигурация Ceph

Для создания начальной конфигурации Ceph рекомендуется использовать мастер установки PVE Ceph. В случае использования мастер установки PVE Ceph следует перейти в раздел Центр обработки данныхCeph и нажать кнопку Настроить Ceph:
Инициализация кластера Ceph
В открывшемся окне необходимо выбрать открытую сеть в выпадающем списке Public Network и сеть кластера в списке Cluster Network:
  • Public Network — позволяет настроить выделенную сеть для Ceph. Настоятельно рекомендуется выделить трафик Ceph в отдельную сеть;
  • Cluster Network — позволяет разделить трафик репликации OSD и heartbeat. Это разгрузит общедоступную сеть и может привести к значительному повышению производительности, особенно в больших кластерах.
Настройка сетевых параметров Ceph

Примечание

Сеть в поле Cluster Network можно не указывать, по умолчанию сеть кластера совпадает с открытой сетью, указанной в поле Public Network.
После нажатия кнопки Далее будет выведено сообщение об успешной установке:
Сообщение об успешной установке Ceph
Создать начальную конфигурацию Ceph также можно, выполнив следующую команду на любом узле PVE:
# pveceph init --network 192.168.0.0/24
В результате инициализации Ceph будет создана начальная конфигурация в файле /etc/pve/ceph.conf с выделенной сетью для Ceph. Файл /etc/pve/ceph.conf автоматически распространяется на все узлы PVE с помощью pmxcfs. Будет также создана символическая ссылка /etc/ceph/ceph.conf, которая указывает на файл /etc/pve/ceph.conf. Таким образом, можно запускать команды Ceph без необходимости указывать файл конфигурации.
При инициализации Ceph будет создан один монитор. Далее необходимо создать несколько дополнительных мониторов, менеджер, OSD и по крайней мере один пул.

26.6.3. Монитор Ceph

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

Примечание

Если кластер небольшой или средних размеров, трёх мониторов будет достаточно, больше мониторов требуется только для действительно больших кластеров.

26.6.3.1. Создание монитора

Для создания монитора в веб-интерфейсе необходимо на любом узле перейти на вкладку УзелCephМонитор и создать необходимое количество мониторов на узлах. Для этого нажать кнопку Создать в разделе Монитор и в открывшемся окне выбрать имя узла, на котором будет создан монитор:
Создание монитора на узле pve02
Для создания монитора в командной строке следует на каждом узле, где нужно разместить монитор, выполнить команду:
# pveceph mon create

26.6.3.2. Удаление монитора

Чтобы удалить монитор в веб-интерфейсе, необходимо выбрать любой узел в дереве, перейти на панель УзелCephМонитор, выбрать монитор и нажать кнопку Уничтожить.
Для удаления монитора Ceph в командной строке необходимо подключиться к узлу, на котором запущен монитор, и выполнить команду:
# pveceph mon destroy <mon_id>

26.6.4. Менеджер Ceph

Менеджер Ceph работает вместе с мониторами. Он предоставляет интерфейс для мониторинга кластера. Требуется как минимум один демон ceph-mgr.

Примечание

Рекомендуется устанавливать менеджеры Ceph на тех же узлах, что и мониторы. Для высокой доступности следует установить более одного менеджера, но в любой момент времени будет активен только один менеджер:
Активный менеджер на узле pve01

26.6.4.1. Создание менеджера

Для создания менеджера в веб-интерфейсе следует на любом узле перейти на вкладку УзелCephМонитор и создать необходимое количество менеджеров на узлах. Для этого нажать кнопку Создать в разделе Диспетчер и в открывшемся окне выбрать имя узла, на котором будет создан менеджер Ceph:
Создание менеджера на узле pve02
Для создания менеджера в командной строке следует на каждом узле, где нужно разместить менеджер Ceph, выполнить команду:
# pveceph mgr create

26.6.4.2. Удаление менеджера

Чтобы удалить менеджер в веб-интерфейсе, необходимо выбрать любой узел в дереве, перейти на панель УзелCephМонитор, выбрать менеджер и нажать кнопку Уничтожить.
Для удаления менеджера Ceph в командной строке необходимо подключиться к узлу, на котором запущен менеджер, и выполнить команду:
# pveceph mgr destroy <mgr_id>

26.6.5. Ceph OSD

Рекомендуется использовать один OSD на каждый физический диск.

26.6.5.1. Создание OSD

Рекомендуется использовать кластер Ceph с не менее чем тремя узлами и не менее чем 12 OSD, равномерно распределенными по узлам.
Если диск использовался ранее (например, для ZFS или как OSD), сначала нужно удалить все следы этого использования. Чтобы удалить таблицу разделов, загрузочный сектор и любые другие остатки OSD, можно использовать команду:
# ceph-volume lvm zap /dev/[X] --destroy

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

Эта команда уничтожит все данные на диске!
Для создания OSD в веб-интерфейсе PVE необходимо перейти на вкладку УзелCephOSD и нажать кнопку Создать: OSD:
Создание OSD
В открывшемся окне выбрать локальный диск, который будет включен в Сeph-кластер. Отдельно можно указать диски для метаданных (Диск базы данных) и журналирования (Диск WAL).
Для создания OSD в командной строке можно выполнить команду:
# pveceph osd create /dev/[X]
Указать отдельные устройства для метаданных (DB) и журналирования (WAL) для OSD можно с помощью параметров -db_dev и -wal_dev:
# pveceph osd create /dev/[X] -db_dev /dev/[Y] -wal_dev /dev/[Z]
Если диск для журналирования не указан, WAL размещается вместе с DB.
Можно напрямую указать размер WAL и DB с помощью параметров -db_size и -wal_size соответственно. Если эти параметры не указаны, будут использоваться следующие значения (по порядку):
  • bluestore_block_{db,wal}_size из конфигурации Ceph:
    • … база данных, раздел [osd];
    • … база данных, раздел [global];
    • … файл, раздел [osd];
    • … файл, раздел [global];
  • 10% (DB)/1% (WAL) от размера OSD.

Примечание

В DB хранятся внутренние метаданные BlueStore, а WAL — это внутренний журнал BlueStore или журнал предварительной записи. Для лучшей производительности рекомендуется использовать высокопроизводительные диски.

26.6.5.2. Удаление OSD

Процедура удаления OSD в веб-интерфейсе:
  1. Выбрать узел PVE и перейти на панель CephOSD.
  2. Выбрать OSD, который нужно удалить и нажать кнопку Out.
  3. После того как статус OSD изменится с in на out, нажать кнопку Остановка.
  4. После того как статус изменится с up на down, выбрать раскрывающемся списке ДополнительноУничтожить.
Чтобы удалить OSD в консоли, следует выполнить следующие команды:
# ceph osd out <ID>
# systemctl stop ceph-osd@<ID>.service
Первая команда указывает Ceph не включать OSD в распределение данных. Вторая команда останавливает службу OSD. До этого момента данные не теряются.
Следующая команда уничтожит OSD (можно указать параметр -cleanup, чтобы дополнительно уничтожить таблицу разделов):
# pveceph osd destroy <ID>

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

Эта команда уничтожит все данные на диске!

26.6.6. Пулы Ceph

Пул — это логическая группа для хранения объектов. Он содержит набор объектов, известных как группы размещения (PG, pg_num).

26.6.6.1. Создание и редактирование пула

Создавать и редактировать пулы можно в командной строке или в веб-интерфейсе любого узла PVE в разделе УзелCephПулы.
Создание пула
Следующие параметры доступны при создании пула, а также частично при редактировании пула (в скобках приведены соответствующие опции команды pveceph pool create):
  • Имя — имя пула. Имя должно быть уникальным и не может быть изменено впоследствии;
  • Размер (-size) — количество реплик на объект. Ceph всегда пытается иметь указанное количество копий объекта (по умолчанию 3);
  • Режим автоматического масштабирования групп размещения — автоматический режим масштабирования PG пула. Если установлено значение warn, выводится предупреждающее сообщение, если в пуле неоптимальное количество PG (по умолчанию warn);
  • Добавить как хранилище (-add_storages) — настроить хранилище с использованием нового пула. Доступно только при создании пула (по умолчанию true);
  • Мин. Размер (-min_size) — минимальное количество реплик для объекта. Ceph отклонит ввод-вывод в пуле, если в PG меньше указанного количества реплик (по умолчанию 2);
  • Crush Rule (Правило Crush) (-crush_rule) — правило, используемое для сопоставления размещения объектов в кластере. Эти правила определяют, как данные размещаются в кластере;
  • # of PGs (Количество PG) (-pg_num) — количество групп размещения, которые должен иметь пул в начале (по умолчанию 128);
  • Целевое соотношение (-target_size_ratio) — соотношение ожидаемых данных в пуле. Автомасштабирование PG использует соотношение относительно других наборов соотношений. Данный параметр имеет приоритет над целевым размером, если установлены оба;
  • Целевой размер (-target_size) — предполагаемый объем данных, ожидаемых в пуле. Автомасштабирование PG использует этот размер для оценки оптимального количества PG;
  • Min # of PGs (Мин. количество PG) (-pg_num_min) — минимальное количество групп размещения. Этот параметр используется для точной настройки нижней границы количества PG для этого пула. Автомасштабирование PG не будет объединять PG ниже этого порогового значения.

Примечание

Не следует устанавливать min_size равным 1. Реплицированный пул с min_size равным 1 разрешает ввод-вывод для объекта, при наличии только одной реплики, что может привести к потере данных, неполным PG или ненайденным объектам.
Рекомендуется либо включить режим автоматического масштабирования PG (PG autoscaler), либо рассчитать количество PG на основе ваших настроек.
PG autoscaler может автоматически масштабировать количество PG для пула в фоновом режиме. Установка параметров Целевой размер или Целевое соотношение помогает PG Autoscaler принимать более обоснованные решения.
Команда создания пула в командной строке:
# pveceph pool create <pool-name> -add_storages

26.6.6.2. Пулы EC

Erasure coding (EC) — это метод коррекции ошибок, используемый для обеспечения надежности и восстановления данных в системах хранения. Основная цель EC — повысить доступность данных, минимизировав их избыточное копирование. Пулы EC могут предложить больше полезного пространства по сравнению с реплицированными пулами, но они делают это за счет производительности.
В классических реплицированных пулах хранится несколько реплик данных (size), тогда как в пуле EC данные разбиваются на k фрагментов данных с дополнительными m фрагментами кодирования (проверки). Эти фрагменты кодирования можно использовать для воссоздания данных, если фрагменты данных отсутствуют.
Количество фрагментов кодирования m определяет, сколько OSD может быть потеряно без потери данных. Общее количество хранимых объектов равно k + m.
Пулы EC можно создавать с помощью команды 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.

Примечание

При планировании пула EC необходимо следить за min_size, так как он определяет, сколько OSD должно быть доступно. В противном случае ввод-вывод будет заблокирован.
Например, пул EC с k = 2 и m = 1 будет иметь size = 3, min_size = 2 и останется работоспособным, если один OSD выйдет из строя. Если пул настроен с k = 2, m = 2, будет иметь size = 4 и min_size = 3 и останется работоспособным, если один OSD будет потерян.
Команда для создания пула EC:
# pveceph pool create <pool-name> --erasure-coding k=<integer> ,m=<integer> \
[,device-class=<class>] [,failure-domain=<domain>] [,profile=<profile>]
В результате выполнения этой команды будет создан новый пул EC для RBD с сопутствующим реплицированным пулом для хранения метаданных (<pool name>-data и <pool name>-metada). По умолчанию также будет создано соответствующее хранилище. Если такое поведение нежелательно, отключить создание хранилища можно, указав параметр --add_storages 0. При настройке конфигурации хранилища вручную необходимо будет задать параметр data-pool, только тогда пул EC будет использоваться для хранения объектов данных.

Примечание

Необязательные параметры --size, --min_size и --crush_rule будут использоваться для реплицированного пула метаданных, но не для пула данных EC. Если нужно изменить min_size в пуле данных, это можно будет сделать позже. Параметры size и crush_rule нельзя изменить в пулах EC.
Изменить настройки профиля EC нельзя, в этом случае нужно создать новый пул с новым профилем.
Если необходимо дополнительно настроить профиль EC, можно создать его напрямую с помощью инструментов Ceph и указать профиль в параметре 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>

Примечание

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

26.6.6.3. Удаление пула

Чтобы удалить пул в веб-интерфейсе, необходимо в разделе УзелCephПулы выбрать пул, который нужно удалить и нажать кнопку Уничтожить. Для подтверждения уничтожения пула, нужно в открывшемся диалоговом окне ввести имя пула и нажать кнопку Удалить:
Удаление пула
Команда для удаления пула:
# pveceph pool destroy <name>
Следующая команда уничтожит OSD (можно указать параметр -cleanup, чтобы дополнительно уничтожить таблицу разделов):
# pveceph osd destroy <ID>
Чтобы также удалить связанное хранилище следует указать опцию -remove_storages.

Примечание

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

26.6.6.4. Автомасштабирование PG

Автомасштабирование PG позволяет кластеру учитывать объем (ожидаемых) данных, хранящихся в каждом пуле, и автоматически выбирать соответствующие значения pg_num.

Примечание

Может потребоваться активировать модуль pg_autoscaler:
# 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.

26.6.7. Ceph CRUSH и классы устройств

В основе Ceph лежит алгоритм CRUSH (Controlled Replication Under Scalable Hashing). CRUSH вычисляет, где хранить и откуда извлекать данные. Этот алгоритм позволяет однозначно определить местоположение объекта на основе хеша имени объекта и определенной карты, которая формируется исходя из физической и логической структур. Карта не включает в себя информацию о местонахождении данных. Путь к данным каждый клиент определяет сам, с помощью CRUSH-алгоритма и актуальной карты, которую он предварительно спрашивает у монитора. При добавлении диска или падении сервера карта обновляется.
Карта Crush
Карту можно изменить, чтобы она отражала различные иерархии репликации. Реплики объектов можно разделить (например, домены отказов), сохраняя при этом желаемое распределение.
Классы устройств можно увидеть в выходных данных дерева OSD ceph. Эти классы представляют свой собственный корневой контейнер, который можно увидеть, выполнив команду:
# 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).
Пример создания политики replicated_nvme для реплицированных пулов, данные будут иметь домен отказа host, а размещаться — на nvme:
# ceph osd crush rule create-replicated my_rule default host nvme
Посмотреть настройки политик можно, выполнив команду:
# ceph osd crush rule dump
После того как политика будет создана в карте CRUSH, можно указать пулу использовать набор правил:
# ceph osd pool set <pool-name> crush_rule <rule-name>

Примечание

Если пул уже содержит объекты, их необходимо переместить соответствующим образом. В зависимости от настроек это может оказать большое влияние на производительность кластера. Либо можно создать новый пул и переместить диски по отдельности.

26.6.8. Клиент Ceph

Пулы Ceph можно использовать для создания хранилищ RBD (см. раздел Ceph RBD).
Для внешнего кластера Ceph необходимо скопировать связку ключей в предопределенное место. Если Ceph установлен на узлах PVE, то это будет сделано автоматически.

Примечание

Имя файла должно быть в формате <storage_id>.keyring, где <storage_id> — идентификатор хранилища rbd.

26.6.9. CephFS

Ceph предоставляет файловую систему, которая работает поверх того же хранилища объектов, что и блочные устройства RADOS. Сервер метаданных (MDS) используется для сопоставления поддерживаемых RADOS объектов с файлами и каталогами, что позволяет Ceph предоставлять POSIX-совместимую, реплицированную файловую систему. Это позволяет легко настраивать кластерную, высокодоступную, общую файловую систему. Серверы метаданных Ceph гарантируют, что файлы равномерно распределены по всему кластеру Ceph В результате даже случаи высокой нагрузки не перегрузят один хост, что может быть проблемой при традиционных подходах к общим файловым системам, например, NFS.
PVE поддерживает как создание гиперконвергентной CephFS, так и использование существующей CephFS в качестве хранилища для хранения резервных копий, ISO-файлов и шаблонов контейнеров.

26.6.9.1. Сервер метаданных (MDS)

В кластере можно создать несколько серверов метаданных, но по умолчанию только один может быть активным. Если MDS или его узел перестает отвечать, становится активным другой резервный MDS. Ускорить передачу данных между активным и резервным MDS можно, используя параметр hotstandby при создании сервера, или, после его создания, установив в соответствующем разделе MDS в /etc/pve/ceph.conf параметр:
mds standby replay = true
Если этот параметр включен, указанный MDS будет находиться в состоянии warm, опрашивая активный, чтобы в случае возникновения каких-либо проблем быстрее взять на себя управление.

Примечание

Этот активный опрос оказывает дополнительное влияние на производительность системы и активного MDS.
Для работы CephFS требуется настроить и запустить по крайней мере один сервер метаданных. MDS можно создать в веб-интерфейсе PVE (УзелCephCephFS и нажать кнопку Создать):
Создание сервера метаданных Ceph
Или из командной строки, выполнив команду:
# pveceph mds create

26.6.9.2. Создание CephFS

Создать CephFS можно либо в веб-интерфейсе PVE (УзелCephCephFS и нажать кнопку Создать CephFS):
Создание CephFS
Или с помощью инструмента командной строки pveceph, например:
# pveceph fs create --pg_num 128 --add-storage
В результате будет создана CephFS с именем cephfs, пул данных cephfs_data со 128 группами размещения и пул метаданных cephfs_metadata с четвертью групп размещения пула данных (32). Параметр --add-storage (опция Добавить как хранилище) добавит CephFS в конфигурацию хранилища PVE.
CephFS

26.6.9.3. Удаление CephFS

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

Уничтожение CephFS сделает все ее данные непригодными для использования. Это действие нельзя отменить!
Чтобы полностью и корректно удалить CephFS, необходимо выполнить следующие шаги:
  1. Отключить всех клиентов, не являющихся PVE (например, размонтировать CephFS в гостевых системах);
  2. Отключить все связанные записи хранилища CephFS PVE (чтобы предотвратить автоматическое монтирование);
  3. Удалить все используемые ресурсы из гостевых систем (например, ISO-образы), которые находятся на CephFS, которую нужно уничтожить;
  4. Вручную размонтировать хранилища CephFS на всех узлах кластера с помощью команды:
    # umount /mnt/pve/<STORAGE-NAME>
    
    где <STORAGE-NAME> — имя хранилища CephFS в PVE.
  5. Убедиться, что для этого CephFS не запущен ни один сервер метаданных (MDS), остановив или уничтожив их. Это можно сделать в веб-интерфейсе или в командной строке, выполнив команду:
    # pveceph stop --service mds.NAME
    
    чтобы остановить их, или команду:
    # pveceph mds destroy NAME
    
    чтобы уничтожить их.
    Следует обратить внимание, что резервные серверы будут автоматически повышены до активных при остановке или удалении активного MDS, поэтому лучше сначала остановить все резервные серверы.
  6. Теперь можно уничтожить CephFS, выполнив команду:
    # pveceph fs destroy NAME --remove-storages --remove-pools
    
    Это автоматически уничтожит базовые пулы Ceph, а также удалит хранилища из конфигурации PVE.
После этих шагов CephFS должен быть полностью удален, и при наличии других экземпляров CephFS, остановленные серверы метаданных можно снова запустить для работы в качестве резервных.

26.6.10. Техническое обслуживание Ceph

26.6.10.1. Замена OSD

Одной из наиболее распространенных задач по техническому обслуживанию Ceph является замена диска OSD. Если диск уже находится в состоянии сбоя, можно выполнить шаги, указанные в разделе Удаление OSD. Ceph воссоздаст копии на оставшихся OSD, если это возможно. Перебалансировка начнется, как только будет обнаружен сбой OSD или если OSD будет остановлен.

Примечание

При значениях size/min_size по умолчанию (3/2) восстановление начнется только при наличии узлов size + 1. Причина этого в том, что балансировщик объектов Ceph CRUSH по умолчанию использует полный узел в качестве «домена отказа».
Чтобы заменить работающий диск из веб-интерфейса, следует выполнить шаги, указанные в разделе Удаление OSD. Единственное дополнение — дождаться, пока кластер не покажет HEALTH_OK, прежде чем останавливать OSD для его уничтожения.
Для замены работающего диска в командной строке, следует выполнить следующие действия:
  1. Выполнить команду:
    # ceph osd out osd.<id>
    
  2. Проверить можно ли безопасно удалить OSD:
    # ceph osd safe-to-destroy osd.<id>
    
  3. После того как проверка покажет, что можно безопасно удалить OSD, выполнить команды:
    # systemctl stop ceph-osd@<id>.service
    # pveceph osd destroy <id>
    
Далее следует заменить старый диск новым и использовать ту же процедуру, что описана в разделе Создание OSD.

26.6.10.2. Trim/Discard

Рекомендуется регулярно запускать fstrim (discard) на ВМ и контейнерах. Это освобождает блоки данных, которые файловая система больше не использует. В результате снижается нагрузка на ресурсы. Большинство современных ОС регулярно отправляют такие команды discard своим дискам. Нужно только убедиться, что ВМ включают опцию disk discard.

26.6.10.3. Очистка (scrubing)

Ceph обеспечивает целостность данных, очищая группы размещения. Ceph проверяет каждый объект в PG на предмет его работоспособности. Существует две формы очистки: ежедневные проверки метаданных и еженедельные глубокие проверки данных. Еженедельная глубокая очистка считывает объекты и использует контрольные суммы для обеспечения целостности данных Если запущенная очистка мешает бизнес-потребностям (производительности), можно настроить время выполнения очисток.

26.6.11. Мониторинг и устранение неполадок Ceph

Важно постоянно контролировать работоспособность Ceph, либо с помощью инструментов Ceph, либо путем доступа к статусу через API PVE.
Следующие команды Ceph можно использовать для проверки работоспособности кластера (HEALTH_OK), наличия предупреждений (HEALTH_WARN) или ошибок (HEALTH_ERR):
# ceph -s # однократный вывод
# ceph -w # непрерывный вывод изменений статуса
Эти команды также предоставляют обзор действий, которые необходимо предпринять если кластер находится в неработоспособном состоянии.
Чтобы получить более подробную информацию можно воспользоваться файлами журнала Ceph в /var/log/ceph/.

Глава 27. Репликация хранилища

Репликация хранилища в PVE позволяет синхронизировать данные между двумя или более узлами кластера. Репликация хранилища обеспечивает избыточность для гостевых систем, использующих локальное хранилище, и сокращает время миграции. Репликация работает на уровне блоков, что делает её эффективной для синхронизации больших объёмов данных.
Инфраструктурой репликации хранилища PVE управляет инструмент командной строки pvesr.
Репликация использует моментальные снимки для минимизации трафика, отправляемого по сети. Поэтому новые данные отправляются только пошагово после первоначальной полной синхронизации.
Репликация выполняется автоматически с настраиваемыми интервалами. Минимальный интервал репликации составляет одну минуту, максимальный — раз в неделю. Формат, используемый для указания этих интервалов, является подмножеством событий календаря systemd, см. Формат расписания.
Можно реплицировать гостевую систему на несколько целевых узлов, но не дважды на один и тот же целевой узел.
Чтобы избежать перегрузки хранилища или сервера можно ограничить пропускную способность репликации.
Если ВМ/CT мигрирует на узел, на который он уже реплицирован, необходимо переносить только изменения с момента последней репликации (так называемые дельты). Это значительно сокращает время миграции. Направление репликации автоматически переключается, если гостевая система мигрировала на целевой узел репликации.
Например, если VM100 находилась на узле pve02 и реплицировалась на узел pve03, то после миграции VM100 на узел pve03, ВМ будет автоматически реплицироваться с узла pve03 на узел pve02.
В случае если ВМ/CT мигрирует на узел, на которую гостевая система не реплицируется, после миграции задание репликации продолжает реплицировать эту гостевую систему на настроенные узлы.

Примечание

Высокая доступность допускается в сочетании с репликацией хранилища, но может быть некоторая потеря данных между последним временем синхронизации и временем отказа узла.
Для репликации поддерживается тип хранилища Локальный ZFS.
Для использования функции репликации должны быть выполнены следующие условия:
  • исходный и целевой узлы должны находиться в одном кластере;
  • все диски ВМ или контейнера должны храниться в хранилище ZFS;
  • на исходном и целевом узле должно быть настроено хранилище ZFS с одинаковым идентификатором (именем);
  • целевой узел должен иметь достаточно места для хранения.

27.1. Управление заданиями

Управлять заданиями репликации можно как в веб-интерфейсе, так и с помощью инструмента командной строки (CLI) pvesr.
Панель репликации можно найти на всех уровнях (центр обработки данных, узел, ВМ/CT). В зависимости от уровня на панели репликации отображаются все задания (центр обработки данных) или задания, специфичные для узла или гостевой системы.
Список заданий репликации узла pve02
Добавление нового задания репликации в веб-интерфейсе:
  1. Перейти в раздел Репликация (центра обработки данных, узла, ВМ или контейнера, для которых настраивается репликация).
  2. Нажать кнопку Добавить.
  3. В открывшемся окне указать:
    • CT/VM ID — ID гостевой системы (если он еще не выбран);
    • Цель — узел, на который будут реплицироваться данные;
    • Расписание — расписание репликации;
    • Ограничение скорости (MB/s) — ограничение скорости репликации (если нужно);
  4. Нажать кнопку Создать.
Создание задания репликации
Задание репликации имеет уникальный идентификатор. Идентификатор состоит из VMID и номера задания. Идентификатор необходимо указывать вручную только при использовании инструмента CLI.
Примеры работы с заданиями репликации в командной строке:
  • создать задание репликации, которое запускается каждые 10 минут с ограниченной пропускной способностью 10 Мб/с для ВМ с идентификатором 214:
    # pvesr create-local-job 214-0 pve03 --schedule "*/10" --rate 10
    
  • отключить активное задание с идентификатором 214-0:
    # 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
    
  • включить деактивированное задание с идентификатором 214-0:
    # pvesr enable 214-0
    
  • изменить интервал расписания задания с идентификатором 214-0 на один раз в час:
    # pvesr update 214-0 --schedule '*/1:00'
    

27.2. Обработка ошибок

Если задание репликации сталкивается с проблемами, оно переводится в состояние ошибки. В этом состоянии настроенные интервалы репликации временно приостанавливаются. Неудачная репликация повторяется с интервалом в 30 минут. После успешного выполнения исходное расписание активируется снова.
Некоторые из наиболее распространенных проблем репликации:
  • проблемы с сетью;
  • недостаточно места в целевом хранилище репликации;
  • на целевом узле не доступно хранилище с тем же идентификатором хранилища.

Примечание

Чтобы выяснить, что является причиной проблемы можно использовать журнал репликации.

27.3. Миграция гостевой системы в случае ошибки

В случае серьезной ошибки гостевая система может застрять на неисправном узле. В этом случае её нужно вручную переместить на рабочий узел.
Предположим, что есть две гостевые системы (VM 100 и CT 200), работающие на узле pve02 и реплицирующихся на узел pve03. Узел pve02 вышел из строя и не может вернуться в сеть. Нужно вручную перенести гостевые системы на узел pve03. Для этого необходимо:
  1. Подключиться к узлу pve03 по SSH или открыть его оболочку в веб-интерфейсе.
  2. Проверить, является ли кластер кворумным:
    # pvecm status
    
    Если кворума нет, настоятельно рекомендуется сначала восстановить кворум и снова сделать узел работоспособным. Только если в данный момент это невозможно, можно использовать следующую команду для установки кворума на текущем узле:
    # pvecm expected 1
    

    Примечание

    Следует любой ценой избегать изменений, которые влияют на кластер, если установлено ожидаемое количество голосов (например, добавление/удаление узлов, хранилищ, ВМ/CT). Этот режим можно использовать только для повторного запуска и работы важных гостевых систем или для решения самой проблемы кворума.
  3. Переместить оба файла конфигурации с исходного узла pve02 на узел pve03:
    # 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
    
  4. Запустить гостевые системы:
    # qm start 100
    # pct start 200
    

Глава 28. Сетевая подсистема

В 8 версии PVE для управления сетью используется сетевая подсистема ifupdown2.

Примечание

В ОС «Альт Виртуализация» 10.x использовалась сетевая подсистема etcnet. При обновлении системы с платформы p10 (PVE v7) до p11 (PVE v8), необходимо установить пакет ifupdown2, отключить etcnet и включить ifupdown2 и перезагрузить узел:
# apt-get install ifupdown2
# systemctl disable network
# systemctl mask network
# systemctl enable networking.service
# reboot
PVE использует сетевой стек Linux, что обеспечивает большую гибкость в настройке сети на узлах PVE. Настройку сети можно выполнить либо через графический интерфейс (ХостСистемаСеть), либо вручную, редактируя файл /etc/network/interfaces, который содержит всю конфигурацию сети.
Сетевые интерфейсы узла pve01

Примечание

Подробнее о настройках в файле /etc/network/interfaces см. man interfaces(5)

Примечание

Интерфейс vmbr0 необходим для подключения гостевых систем к базовой физической сети. Это мост Linux, который можно рассматривать как виртуальный коммутатор, к которому подключены гостевые системы и физические интерфейсы.
Ниже приведены примеры настройки сети. Для организации более сложных виртуальных сетей в кластерах PVE используется программно-определяемая сеть (см. Программно-определяемые сети (SDN)).

28.1. Применение изменений сетевых настроек

Все изменения конфигурации сети, сделанные в веб-интерфейсе PVE, не записываются напрямую в /etc/network/interfaces. Изменения сначала записываются во временный файл (/etc/network/interfaces.new), что позволяет сделать несколько связанных изменений одновременно. Это также позволяет убедиться, что изменения сделаны верно, так как неправильная конфигурация сети может сделать узел недоступным.
Для применения изменений сетевых настроек, сделанных в веб-интерфейсе PVE, следует нажать кнопку Применить конфигурацию. В результате изменения из файла interfaces.new будут перенесены в файл /etc/network/interfaces и применены в реальном времени.
Если изменения вносились непосредственно в файл /etc/network/interfaces, применить их можно, выполнив команду:
# ifreload -a
Ещё один способ применить новую сетевую конфигурацию — перезагрузить узел. В этом случае служба systemd pvenetcommit активирует файл interfaces.new до того, как сетевая служба применит эту конфигурацию.

28.2. Имена сетевых устройств

В PVE используются следующие соглашения об именах устройств:
  • устройства Ethernet: en*, имена сетевых интерфейсов systemd;
  • мосты: vmbr[N], где 0 ≤ N ≤ 4094 (vmbr0 — vmbr4094);
  • сетевые объединения: bond[N], где 0 ≤ N (bond0, bond1, …);
  • VLAN: можно просто добавить номер VLAN к имени устройства, отделив точкой (eno1.50, bond1.30).
Systemd использует префикс en для сетевых устройств Ethernet. Следующие символы зависят от драйвера устройства и того факта, какая схема подходит первой:
  • o<index>[n<phys_port_name>|d<dev_port>] — встроенные устройства;
  • s<slot>[f<function>][n<phys_port_name>|d<dev_port>] — устройства по идентификатору горячего подключения;
  • [P<domain>]p<bus>s<slot>[f<function>][n<phys_port_name>|d<dev_port>] — устройства по идентификатору шины;
  • x<MAC> — устройство по MAC-адресу.
Наиболее распространенные шаблоны:
  • eno1 — первая сетевая карта;
  • enp0s3 — сетевая карта на PCI-шине 0, слот 3;
  • enp0s3 — сетевая карта на PCI-шине PCI-шина 3, слот 0, функция 1.

28.3. Конфигурирование сети в PVE

Новый сетевой интерфейс
Виды сетевых соединений в PVE:
  • Linux Bridge — способ соединения двух сегментов Ethernet на канальном уровне;
  • Linux Bond — реализация агрегации нескольких сетевых интерфейсов в единый логический bonded интерфейс на базе ядра Linux;
  • Linux VLAN — реализация VLAN на базе ядра Linux.
  • OVS Bridge — реализация моста на базе Open vSwitch. Мосты Open vSwitch могут содержать необработанные устройства Ethernet, а также виртуальные интерфейсы OVSBonds или OVSIntPorts. Эти мосты могут нести несколько VLAN и быть разбиты на «внутренние порты» для использования в качестве интерфейсов VLAN на хосте. Все интерфейсы, входящие в мост, должны быть перечислены в ovs_ports;
  • OVS Bond — реализация агрегации сетевых интерфейсов на базе Open vSwitch. Отличается от реализованной в ядре Linux режимами балансировки нагрузки;
  • OVS IntPort — виртуальный сетевой интерфейс, предназначенный для взаимодействия узла PVE с определённой VLAN через OVS-мост.
Мосты, VLAN и агрегированные интерфейсы Open vSwitch и Linux не должны смешиваться. Например, не нужно добавлять Linux Bond к OVSBridge или наоборот.

28.4. Конфигурация сети с использованием моста

Сетевой мост (bridge) — это программный аналог физического коммутатора L2. Мост объединяет виртуальные и физические интерфейсы в единый широковещательный домен и позволяет ВМ и контейнерам взаимодействовать друг с другом и с внешней сетью.
Все виртуальные системы могут использовать один мост, также можно создать несколько мостов для отдельных сетевых доменов. На каждом узле кластера можно создать до 4094 мостов.

28.4.1. Конфигурация с одним мостом

По умолчанию после установки на каждом узле PVE есть единственный мост (vmbr0), связанный с физической сетевой картой, которая была выбрана на этапе установки системы:
Узлы PVE с мостом vmbr0
При такой конфигурации сети ВМ будут вести себя так, как если бы они были напрямую подключены к физической сети. Каждая ВМ будет видна в сети со своим MAC-адресом.
Соответствующая конфигурация в /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.4.2. Внутренняя сеть для ВМ

Если необходимо объединить несколько ВМ во внутреннюю изолированную сеть, можно создать новый мост.
Для того чтобы создать мост, в разделе Сеть необходимо нажать кнопку Создать и в выпадающем меню выбрать пункт Linux Bridge или OVS Bridge:
Создать мост
В открывшемся окне в поле Имя следует указать имя моста и нажать кнопку Создать:
PVE. Создание Linux Bridge
Создание моста Open vSwitch отличается возможностью указания дополнительных параметров Open vSwitch (поле Параметры OVS):
PVE. Создание OVS Bridge

Примечание

IP-адреса для моста можно не указывать можно не указывать, настроенные на подключение к интерфейсу ВМ будут использовать его как обычный коммутатор. Если же указать IPv4 и/или IPv6-адрес, то он будет доступен извне на интерфейсах, перечисленных в поле Порты сетевого моста.
Для применения изменений следует нажать кнопку Применить конфигурацию.
Теперь мост vmbr1 можно назначать ВМ:
PVE. Назначение моста vmbr1 ВМ

28.5. Объединение/агрегация интерфейсов

Объединение/агрегация интерфейсов (bonding) — это объединение двух и более сетевых интерфейсов в один логический интерфейс (bondX) для достижения отказоустойчивости или увеличения пропускной способности. Поведение такого логического интерфейса зависит от выбранного режима работы.
Если на узлах PVE есть несколько портов Ethernet, можно распределить точки отказа, подключив сетевые кабели к разным коммутаторам, и в случае проблем с сетью агрегированное соединение переключится с одного кабеля на другой. Агрегация интерфейсов может сократить задержки выполнения миграции в реальном времени и повысить скорость репликации данных между узлами кластера PVE.
Кластерную сеть (Corosync) рекомендуется настраивать с несколькими сетями. Corosync не нуждается в агрегации для резервирования сети, поскольку может сам переключаться между сетями.

28.5.1. Параметры Linux Bond

Таблица 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 ответов локальной системы и перезаписью физического адреса на адрес одного из сетевых интерфейсов, в зависимости от загрузки).
Да
Да
В следующей таблице приведены алгоритмы выбора каналов (распределения пакетов между физическими каналами, входящими в многоканальное соединение) для режимов balance-alb, balance-tlb, balance-xor, 802.3ad (значение параметра 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.5.2. Параметры OVS Bond

Таблица 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 секунд).

28.5.3. Агрегированный bond-интерфейс с фиксированным IP-адресом

Агрегированный bond-интерфейс с фиксированным IP-адресом
Конфигурация с агрегированным bond-интерфейсом с фиксированным IP-адресом может использоваться для сети хранения. Преимущества такой конфигурации:
  • увеличенная пропускная способность;
  • отказоустойчивость;
  • снижение задержек при доступе к общему хранилищу.
Для настройки Linux Bond необходимо выполнить следующие действия:
  1. Перейти в раздел Сеть, нажать кнопку Создать и в выпадающем меню выбрать пункт Linux Bond:
    Создать Linux Bond
  2. В открывшемся окне указать имя агрегированного соединения, в выпадающем списке Режим выбрать режим агрегации (в примере balance-rr), в поле Устройства указать сетевые интерфейсы, которые будут входить в объединение, в поле IPv4/CIDR ввести IP-адрес объединения и нажать кнопку Создать:
    Редактирование параметров объединения bond0

    Примечание

    В зависимости от выбранного режима агрегации будут доступны разные поля.
  3. Для применения изменений нажать кнопку Применить конфигурацию.
    Получившаяся конфигурация:
    Агрегированный bond-интерфейс с фиксированным IP-адресом
Настройка Linux Bond в файле /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

28.5.4. Агрегированный bond-интерфейс в качестве порта моста

Чтобы сделать гостевую сеть отказоустойчивой можно использовать bond напрямую в качестве порта моста:
Агрегированный bond-интерфейс в качестве порта моста
Для настройки Linux Bond необходимо выполнить следующие действия:
  1. Перейти в раздел Сеть, выбрать существующий мост vmbr0 и нажать кнопку Редактировать:
    Мост vmbr0
  2. В открывшемся окне удалить содержимое поля Порты сетевого моста и нажать кнопку ОК:
    Редактирование параметров моста vmbr0
  3. Нажать кнопку Создать и в выпадающем меню выбрать пункт Linux Bond.
  4. В открывшемся окне в выпадающем списке Режим выбрать режим агрегации (в примере LACP), в поле Устройства указать сетевые интерфейсы, которые будут входить в объединение, в выпадающем списке Политика хэширования выбрать политику хэширования и нажать кнопку Создать:
    Редактирование параметров объединения bond0

    Примечание

    В зависимости от выбранного режима агрегации будут доступны разные поля.
  5. Выбрать мост vmbr0 и нажать кнопку Редактировать.
  6. В открывшемся окне в поле Порты сетевого моста вписать значение bond0 и нажать кнопку ОК:
    Редактирование параметров моста vmbr0
  7. Для применения изменений нажать кнопку Применить конфигурацию.
    Получившаяся конфигурация:
    bond в качестве порта моста
Настройка Linux Bond в качестве порта моста в файле /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
Для настройки OVS Bond необходимо выполнить следующие действия:
  1. Перейти в раздел Сеть, выбрать существующий мост vmbr0 и нажать кнопку Редактировать:
    Мост vmbr0
  2. В открывшемся окне удалить содержимое поля Порты сетевого моста и нажать кнопку ОК:
    Редактирование параметров моста vmbr0
  3. Нажать кнопку Создать и в выпадающем меню выбрать пункт OVS Bond.
  4. В открывшемся окне указать имя агрегированного интерфейса, в выпадающем списке Режим выбрать режим агрегации, в поле Устройства указать сетевые интерфейсы, которые будут входить в объединение, в выпадающем списке OVS Bridge выбрать мост, в который должен добавиться созданный интерфейс и нажать кнопку Создать:
    Редактирование параметров OVS Bond
  5. Для применения изменений нажать кнопку Применить конфигурацию.
    Получившаяся конфигурация:
    OVS Bond в качестве порта моста
Настройка OVS Bond в качестве порта моста в файле /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"

28.6. Настройка VLAN

Виртуальные локальные сети (VLAN) — это сетевой стандарт IEEE 802.1Q, позволяющий создавать логически изолированные сегменты сети на одном физическом интерфейсе для разделения трафика между разными сетями. Каждая VLAN идентифицируется уникальным тегом (ID от 1 до 4094).

Примечание

На стороне физического коммутатора порт должен быть настроен как trunk, от него должен приходить тегированный трафик 802.1Q.
Если на коммутаторе сделана агрегация портов (Portchannel или Etherchannel), то параметр Trunk выставляется на это новом интерфейсе.
Можно применять теги VLAN к любому сетевому устройству (NIC, Bond, Bridge). Рекомендуется настраивать VLAN на интерфейсе с минимальным уровнем абстракции.

28.6.1. Мост с поддержкой VLAN

PVE поддерживает настройку VLAN для гостевых систем «из коробки». Тег VLAN указывается при создании ВМ и становится частью конфигурации сети.
Если используется Linux Bridge, то для возможности использования тегов VLAN в настройках ВМ необходимо включить поддержку VLAN для моста. Для этого в веб-интерфейсе в настройках моста следует установить отметку в поле Поддержка VLAN:
Настройка сетевой конфигурации vmbr1
Если используется OVS Bridge, то никаких дополнительных настроек не требуется.
Тег VLAN можно указать в настройках сетевого интерфейса при создании ВМ, либо отредактировав параметры сетевого устройства:
Тег VLAN в настройках сетевого интерфейса ВМ

28.6.2. Мост на VLAN

Можно создать конфигурацию VLAN <интерфейс>.<vlan tag> (например, enp0s8.100), этот VLAN включить в мост Linux Bridge и указывать этот мост в настройках сетевого интерфейса ВМ.
Для создания такой конфигурации необходимо выполнить следующие действия:
  1. Перейти в раздел Сеть, нажать кнопку Создать и в выпадающем меню выбрать пункт Linux VLAN:
    Создать Linux VLAN
  2. В открывшемся окне в поле Имя указать имя интерфейса с добавлением номера VLAN и нажать кнопку Создать:
    Настройка VLAN с ID 100 на интерфейсе enp0s8
  3. В разделе Сеть, нажать кнопку Создать и в выпадающем меню выбрать пункт Linux Bridge:
    Создать Linux VLAN
  4. В открывшемся окне указать имя моста, в поле Порты сетевого моста указать интерфейс VLAN, в поле IPv4/CIDR ввести IP-адрес моста и нажать кнопку ОК:
    Настройка Ethernet-моста vmbr1
  5. Для применения изменений нажать кнопку Применить конфигурацию.
    Получившаяся конфигурация:
    Мост vmbr1 на VLAN
Эта же конфигурация в файле /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
Теперь в настройках сетевого интерфейса ВМ можно указать сетевой мост vmbr1 (трафик через этот интерфейс будет помечен тегом 100):
Настройки сетевого интерфейса ВМ

Глава 29. Управление ISO-образами и шаблонами LXC

Для загрузки ISO-образов и шаблонов LXC в хранилище PVE следует выполнить следующие шаги:
  1. Выбрать хранилище.
  2. Перейти на вкладку ISO-образы для загрузки ISO-образов (на вкладку Шаблоны контейнеров для загрузки шаблонов LXC):
    Локальное хранилище. Вкладка ISO-образы
  3. Для загрузки образа (шаблона) с локального компьютера следует нажать кнопку Отправить. В открывшемся окне необходимо нажать кнопку Выбрать файл, выбрать файл с ISO-образом и нажать кнопку Отправить:
    Выбор файла с ISO-образом

    Примечание

    Здесь же можно выбрать алгоритм хеширования и указать контрольную сумму. В этом случае после загрузки образа будет проверена его контрольная сумма.
  4. Для загрузки образа (шаблона) с сервера следует нажать кнопку Скачать по URL-адресу. В открывшемся окне необходимо указать ссылку на образ (шаблон) в поле URL-адрес, нажать кнопку Запрос URL-адреса, для того чтобы получить метаинформацию о файле. Нажать кнопку Скачивание для старта загрузки файла в хранилище:
    Выбор образа для загрузки файла с сервера
Для удаления ISO-образа или шаблона LXC следует выбрать файл из списка в хранилище и нажать кнопку Удалить.
PVE предоставляет базовые шаблоны для некоторых дистрибутивов Linux. Эти шаблоны можно загрузить в веб-интерфейсе или в командной строке.
Загрузка базового шаблона в веб-интерфейсе:
  1. Запустить обновление списка доступных шаблонов (например, на вкладке Командная оболочка):
    # pveam update
    
  2. Выбрать хранилище.
  3. Перейти на вкладку Шаблоны контейнеров и нажать кнопку Шаблоны:
    Локальное хранилище. Вкладка Шаблоны контейнеров
  4. В открывшемся окне выбрать шаблон и нажать кнопку Скачивание:
    Выбор шаблона контейнера
Загрузка базового шаблона в консоли:
  1. Запустить обновление списка доступных шаблонов:
    # pveam update
    update successful
    
  2. Просмотреть список доступных шаблонов:
    # 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
    …
    
  3. Загрузить шаблон в хранилище, например, в local:
    # pveam download local almalinux-9-default_20240911_amd64.tar.xz
    
  4. Просмотреть список загруженных шаблонов в хранилище local:
    # pveam list local
    NAME                                                         SIZE
    local:vztmpl/almalinux-9-default_20240911_amd64.tar.xz       99.60MB
    
Если используются только локальные хранилища, то ISO-образы и шаблоны LXC необходимо загрузить на все узлы в кластере. Если есть общее хранилище, то можно хранить все образы в одном месте, таким образом, сохраняя пространство локальных хранилищ.

Таблица 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

Глава 30. Виртуальные машины на базе KVM

Виртуальные машины являются строительными блоками виртуальной среды.

30.1. Создание виртуальной машины на базе KVM

Прежде чем создать в интерфейсе PVE виртуальную машину (ВМ), необходимо определиться со следующими моментами:
  • откуда будет загружен инсталлятор гостевой ОС;
  • на каком физическом узле будет выполняться процесс гипервизора kvm;
  • в каком хранилище данных будут располагаться образы дисков ВМ.
Все остальные параметры ВМ относятся к конфигурации виртуального компьютера и могут быть определены по ходу процесса создания ВМ (PVE пытается выбрать разумные значения по умолчанию для ВМ).
Чтобы установить ОС на ВМ, расположенную на этом узле, нужно обеспечить возможность загрузки инсталлятора на этой ВМ. Для этого необходимо загрузить ISO-образ инсталлятора в хранилище данных выбранного физического узла или общее хранилище. Это можно сделать в веб-интерфейсе (см. Управление ISO-образами и шаблонами LXC).
Для создания ВМ необходимо нажать кнопку Создать ВМ, расположенную в правом верхнем углу веб-интерфейса PVE:
Кнопка Создать ВМ
Процесс создания ВМ оформлен в виде «мастера», привычного для пользователей систем управления ВМ.
На вкладке Общее необходимо указать:
  • Узел — физический сервер, на котором будет работать ВМ;
  • VM ID — идентификатор ВМ в численном выражении. Одно и то же значение идентификатора не может использоваться более чем для одной машины. По умолчанию поле идентификатора ВМ заполняется автоматически инкрементально: первая созданная ВМ по умолчанию будет иметь VM ID со значением 100, следующая 101 и так далее;
  • Имя — текстовая строка названия ВМ;
  • Пул ресурсов — логическая группа ВМ. Чтобы иметь возможность выбора, пул должен быть предварительно создан.
Вкладка Общее

Примечание

Настроить диапазон, из которого выбираются новые VM ID при создании ВМ или контейнера можно, выбрав на вкладке Центр обработки данныхПараметры пункт Следующий свободный диапазон ID виртуальных машин:
Настройка диапазона VM ID
Установка нижнего значения (Нижний предел) равным верхнему (Верхний предел) полностью отключает автоподстановку VM ID.
На вкладке ОС необходимо указать источник установки ОС и тип ОС:
Вкладка ОС
В качестве источника установки ОС можно указать:
  • Использовать файл образа CD/DVD (iso) — использовать уже загруженный в хранилище ISO-образ:
    Выбор ISO-образа
  • Использовать физический привод CD/DVD — использовать физический диск хоста PVE;
  • Не использовать носители — не использовать ISO-образ или физический носитель.
Выбор типа гостевой ОС при создании ВМ позволяет PVE оптимизировать некоторые параметры низкого уровня.
На следующем этапе (вкладка Система) можно выбрать видеокарту, контроллер SCSI, указать нужно ли использовать Агент QEMU:
Вкладка Система

Примечание

Подробнее о выборе видеокарты см. Настройки дисплея.
PVE позволяет загружать ВМ с разными прошивками (SeaBIOS и OVMF). Прошивку OVMF следует выбирать, если планируется использовать канал PCIe. При выборе прошивки OVMF (UEFI) для сохранения порядка загрузки, должен быть добавлен диск EFI (см. BIOS и UEFI):
Выбор прошивки OVMF
Тип машины ВМ определяет аппаратную компоновку виртуальной материнской платы ВМ. Доступно два варианта набора микросхем: Intel 440FX (по умолчанию) и Q35 (предоставляет виртуальную шину PCIe).
Вкладка Диски содержит следующие настройки:
  • Шина/Устройство — тип устройства виртуального диска. Допустимые значения: IDE, SATA, VirtIO Block и SCSI (по умолчанию). Можно также указать идентификатор устройства;
  • Хранилище — выбор хранилища для размещения виртуального диска (выбор хранилища определяет возможный формат образа диска);
  • Размер диска (ГиБ) — размер виртуального диска в гигабайтах;
  • Формат — выбирается формат образа виртуального диска. Доступные значения: Несжатый образ диска (raw), Формат образа QEMU (qcow2) и Формат образа Vmware (vmdk). Формат образа RAW является полностью выделяемым (thick-provisioned), т.е. выделяется сразу весь объем образа. QEMU и VMDK поддерживают динамичное выделение пространства (thin-provisioned), т.е. объем растет по мере сохранения данных на виртуальный диск;
  • Кэш — выбор метода кэширования ВМ. По умолчанию выбирается работа без кэширования. Доступные значения: Direct sync, Write through, Write back и Writeback (не безопасно) и Нет кэша;
  • Отклонить — если эта опция активирована и если гостевая ОС поддерживает TRIM, то это позволит очищать неиспользуемое пространство образа виртуального диска и соответственно сжимать образ диска.
Вкладка Жёсткий диск
В мастере создания ВМ можно добавить несколько дисков (кнопка Добавить):
Вкладка Жёсткий диск. Создание нескольких дисков
Максимально можно добавить: 31 диск SCSI, 16 — VirtIO, 6 — SATA, 4 — IDE.
В разделе Пропускная способность можно задать максимальную скорость чтения/записи с диска (в мегабайтах в секунду или в операциях в секунду):
Скорость чтения/записи с диска

Примечание

SCSI и VirtIO дискам может быть добавлен атрибут read-only (отметка Только для чтения):
Отметка Только для чтения
На следующем этапе настраивается процессор (CPU):
  • Сокеты — число сокетов ЦПУ для ВМ;
  • Ядра — число ядер для ВМ;
  • Тип — тип процессора.
Вкладка ЦП
Максимальное количество виртуальных процессоров в ВМ — 512.
На вкладке Память необходимо указать объем оперативной памяти выделяемой ВМ:
Вкладка Память
Максимальное количество памяти, выделяемое ВМ — 2ТБ.
Вкладка Сеть содержит следующие настройки:
  • Нет сетевого устройства — выбор данного параметра пропускает шаг настройки сетевой среды;
  • Сетевой мост — установка сетевого интерфейса в режиме моста. Это предпочтительный параметр для сетевой среды ВМ. В этом режиме возможно создание множества мостов с виртуальными сетями для создания изолированных сетей в одной и той же платформе, поскольку ВМ не имеют прямого доступа к реальной локальной сетевой среде;
  • Тег VLAN — применяется для установки идентификатора VLAN для данного виртуального интерфейса;
  • Сетевой экран — разрешает использование для ВМ встроенных межсетевых экранов;
  • Модель — тип драйвера сетевого устройства. Для максимальной сетевой производительности ВМ следует выбрать пункт VirtIO (паравиртуализированно);
  • Адрес MAC — по умолчанию PVE автоматически создает уникальный MAC-адрес для сетевого интерфейса. Если есть такая необходимость, можно ввести пользовательский MAC-адрес вручную.
Вкладка Сеть
Последняя вкладка Подтверждение отобразит все введенные или выбранные значения для ВМ:
Вкладка Подтверждение
Для создания ВМ следует нажать кнопку Завершить. Если необходимо внести изменения в параметры ВМ, можно перейти по вкладкам назад. Если отметить пункт Запуск после создания ВМ будет запущена сразу после создания.

30.2. Запуск и остановка ВМ

30.2.1. Изменение состояния ВМ в веб-интерфейсе

Запустить ВМ можно, выбрав в контекстном меню ВМ пункт Запуск:
Контекстное меню ВМ
либо нажав на кнопку Запуск:
Кнопки управления состоянием ВМ
Запустить ВМ также можно, нажав кнопку Start Now в консоли гостевой машины:
Кнопка Start Now в консоли ВМ
Запущенная ВМ будет обозначена зеленой стрелкой на значке ВМ.
Для запущенной ВМ доступны следующие действия:
  • Приостановить — перевод ВМ в спящий режим;
  • Гибернация — перевод ВМ в ждущий режим;
  • Отключить — выключение ВМ;
  • Остановка — остановка ВМ, путем прерывания её работы;
  • Перезагрузить — перезагрузка ВМ.
Контекстное меню запущенной ВМ

30.2.2. Автоматический запуск ВМ

Для того чтобы ВМ запускалась автоматически при загрузке хост-системы, необходимо отметить опцию Запуск при загрузке на вкладке Параметры требуемой ВМ в веб-интерфейсе или установить её с помощью команды:
# qm set <vmid> -onboot 1
Иногда необходимо точно настроить порядок загрузки ВМ, например, если одна из ВМ обеспечивает межсетевой экран или DHCP для других гостевых систем. Для настройки порядка запуска ВМ можно использовать следующие параметры (опция Порядок запуска и отключения на вкладке Параметры требуемой ВМ):
  • Порядок запуска и отключения — определяет приоритет порядка запуска. Для того чтобы ВМ запускалась первой, необходимо установить этот параметр в значение 1. Для выключения используется обратный порядок: ВМ, с порядком запуска 1, будет выключаться последней. Если несколько хостов имеют одинаковый порядок, определенный на хосте, они будут дополнительно упорядочены в порядке возрастания VMID;
  • Задержка запуска — определяет интервал (в секундах) между запуском этой ВМ и последующими запусками ВМ;
  • Задержка отключения — определяет время в секундах, в течение которого PVE должен ожидать, пока ВМ не перейдет в автономный режим после команды выключения. Значение по умолчанию — 180, т.е. PVE выдаст запрос на завершение работы и подождет 180 секунд, пока машина перейдет в автономный режим. Если после истечения тайм-аута машина все еще находится в сети, она будет принудительно остановлена.
Настройка порядка запуска и выключения ВМ

Примечание

Виртуальные машины, управляемые стеком HA, не поддерживают опции запуска при загрузке и порядок загрузки. Запуск и остановку таких ВМ обеспечивает диспетчер HA.
ВМ без установленного параметра Порядок запуска и отключения всегда будут запускаться после тех, для которых этот параметр установлен . Кроме того, этот параметр может применяться только для ВМ, работающих на одном хосте, а не в масштабе кластера.

30.2.3. Массовый запуск и остановка ВМ

Для массового запуска или остановки ВМ необходимо в контекстном меню узла выбрать Массовый запуск или Массовое отключение соответственно:
Контекстное меню узла
В открывшемся окне необходимо отметить нужные ВМ и нажать кнопку Запуск/Отключить. Для массового отключения ВМ можно также переопределить параметры Время ожидания и Принудительная остановка:
Массовое отключение ВМ

30.3. Управление ВМ с помощью qm

Если веб-интерфейс PVE недоступен, можно управлять ВМ в командной строке (используя сеанс SSH, из консоли noVNC, или зарегистрировавшись на физическом хосте).
qm — это инструмент для управления ВМ Qemu/KVM в PVE. Утилиту qm можно использовать для создания/удаления ВМ, для управления работой ВМ (запуск/остановка/приостановка/возобновление), для установки параметров в соответствующем конфигурационном файле, а также для создания виртуальных дисков.
qm <КОМАНДА> [АРГУМЕНТЫ] [ОПЦИИ]
Чтобы просмотреть доступные для управления ВМ команды можно выполнить следующую команду:
# qm help
В таблице Команды qm приведены описания команд qm.

Таблица 30.1. Команды qm

Команда
Описание
qm agent
Псевдоним для qm guest cmd
qm block <vmid>
Заблокировать ВМ.
  • vmid — идентификатор ВМ.
qm cleanup <vmid> <clean-shutdown> <guest-requested>
Очищает ресурсы, такие как сенсорные устройства, vgpu и т.д. Вызывается после выключения, сбоя ВМ и т. д.
  • vmid — идентификатор ВМ (100 — 999999999);
  • clean-shutdown — указывает, корректно ли была завершена работа qemu;
  • guest-requested — указывает, было ли завершение работы запрошено гостем или через qmp.
qm clone <vmid> <newid> [ОПЦИИ]
Создать копию ВМ/шаблона.
  • vmid — идентификатор ВМ (100 — 999999999);
  • newid — VMID для клона (100 — 999999999);
  • --bwlimit <целое число> — переопределить ограничение пропускной способности ввода-вывода (в КиБ/с) (0–N);
  • --description <строка> — описание новой ВМ;
  • --format <qcow2 | raw | vmdk> — целевой формат хранения файлов (действительно только для полного клона);
  • --full <логическое значение> — создать полную копию всех дисков (используется по умолчанию при клонировании ВМ). Для шаблонов ВМ по умолчанию пытается создать связанный клон;
  • --name <строка> — имя новой ВМ;
  • --pool <строка> — пул, в который будет добавлена ВМ;
  • --snapname <строка> — имя снимка;
  • --storage <строка> — целевое хранилище для полного клона;
  • --target <строка> — целевой узел (доступно в случае, если исходная ВМ находится в общем хранилище).
qm cloudinit dump <vmid> <type>
Получить автоматически сгенерированную конфигурацию cloud-init.
  • vmid — идентификатор ВМ;
  • type — тип конфигурации (meta | network | user).
qm cloudinit pending <vmid>
Получить конфигурацию cloud-init с текущими и ожидающими значениями.
  • vmid — идентификатор ВМ.
qm cloudinit update <vmid>
Восстановить и изменить диск конфигурации cloud-init.
  • vmid — идентификатор ВМ.
qm config <vmid> <ОПЦИИ>
Вывести конфигурацию ВМ с применёнными ожидающими изменениями конфигурации. Для вывода текущей конфигурации следует указать параметр current.
  • vmid — идентификатор ВМ;
  • --current <логическое значение> — вывести текущие значения вместо ожидающих (по умолчанию 0);
  • --snapshot <строка> — вывести значения конфигурации из данного снимка.
qm create <vmid> <ОПЦИИ>
Создать или восстановить ВМ.
Некоторые опции:
  • vmid — идентификатор ВМ;
  • --acpi <логическое значение> — включить/отключить ACPI (по умолчанию 1);
  • --affinity <строка> — список ядер хоста, используемых для выполнения гостевых процессов, например: 0,5,8-11;
  • --agent [enabled=]<1|0> [,freeze-fs-on-backup=<1|0>] [,fstrim_cloned_disks=<1|0>] [,type=<virtio|isa>] — включить/отключить связь с гостевым агентом QEMU;
  • --amd-sev [type=]<sev-type> [,kernel-hashes=<1|0>] [,no-debug=<1|0>] [,no-key-sharing=<1|0>] — функции защищенной зашифрованной виртуализации (SEV) процессоров AMD;
  • --arch <aarch64 | x86_64> — архитектура виртуального процессора;
  • --archive <строка> — создать ВМ из архива. Указывается либо путь к файлу .tar или .vma, либо идентификатор тома резервной копии хранилища PVE;
  • --args <строка> — передача произвольных аргументов в KVM;
  • --audio0 device=<ich9-intel-hda|intel-hda|AC97>[,driver=<spice|none>] — настройка аудиоустройства;
  • --autostart <логическое значение> (по умолчанию 0) — автоматический перезапуск после сбоя (в настоящее время игнорируется);
  • --balloon <целое число> — объём целевой оперативной памяти для ВМ в МиБ (0 отключает Balloon Driver);
  • --bios <ovmf | seabios> — реализация BIOS (по умолчанию seabios);
  • --boot [order=<устройство[;устройство...]>] — порядок загрузки ВМ;
  • --bwlimit <целое число> — переопределить ограничение пропускной способности ввода-вывода (в КиБ/с);
  • --cdrom <volume> — псевдоним опции ide2;
  • --cicustom [meta=<volume>] [,network=<volume>] [,user=<volume>] [,vendor=<volume>] — cloud-init: указать пользовательские файлы для замены автоматически созданных;
  • --cipassword <пароль> — cloud-init: пароль для пользователя. Рекомендуется использовать ключи SSH вместо пароля;
  • --citype <configdrive2 | nocloud | opennebula> — формат конфигурации cloud-init;
  • --ciupgrade <логическое значение> — cloud-init: выполнить автоматическое обновление пакета после первой загрузки (по умолчанию 1);
  • --ciuser <строка> — cloud-init: имя пользователя для изменения пароля и ключей SSH вместо настроенного пользователя по умолчанию;
  • --cores <целое число> — количество ядер на сокет (по умолчанию 1);
  • --cpu <тип> — эмулируемый тип процессора;
  • --cpulimit <целое число (0–128)> — ограничение использования процессора (по умолчанию 0);
  • --cpuunits <целое число (1–262144)> — вес ЦП для ВМ будет ограничен значением [1, 10000] в cgroup v2 (по умолчанию cgroup v1: 1024, cgroup v2: 100);
  • --description <строка> — описание ВМ;
  • --efidisk0 [file=]<volume> [,efitype=<2m|4m>] [,format=<enum>] [,import-from=<source volume>] [,pre-enrolled-keys=<1|0>] [,size=<DiskSize>] — диск для хранения переменных EFI;
  • --force <логическое значение> — разрешить перезапись существующей ВМ (требуется опция --archive);
  • --freeze <логическое значение> — заморозить процессор при запуске;
  • --hookscript <строка> — скрипт, который будет выполняться на разных этапах жизненного цикла ВМ;
  • --hostpci[n] [[host=]<HOSTPCIID[;HOSTPCIID2...]>] ,device-id=<hex id>] [,legacy-igd=<1|0>] [,mapping=<mapping-id>] [,mdev=<строка>] [,pcie=<1|0>] [,rombar=<1|0>] [,romfile=<строка>] [,sub-device-id=<hex id>] [,sub-vendor-id=<hex id>] [,vendor-id=<hex id>] [,x-vga=<1|0>] — сопоставить устройства PCI хоста с гостевой системой;
  • --hotplug <строка> — выборочно включить функции горячего подключения (по умолчанию = network,disk,usb). Это список функций горячего подключения, разделенных запятыми: network, disk, cpu, memory, usb и cloudinit. Чтобы полностью отключить горячее подключение следует использовать 0. спользование 1 в качестве значения является псевдонимом для значения по умолчанию (network,disk,usb). Горячее подключение USB возможно для гостевых систем с версией машины >= 7.1 и ostype l26 или windows > 7;
  • --hugepages <1024 | 2 | any> — включить/отключить память hugepages;
  • --ide[n] [описание] — использовать в качестве жёсткого диска IDE или компакт-диск (n от 0 до 3). Чтобы выделить новый том используется синтаксис STORAGE_ID:SIZE_IN_GiB. Для импорта из существующего тома используется STORAGE_ID:0 и параметр import-from;
  • --import-working-storage <идентификатор хранилища> — файловое хранилище с включенным типом содержимого изображений, которое используется в качестве промежуточного хранилища для извлечения во время импорта. По умолчанию используется исходное хранилище;
  • --ipconfig[n] [gw=<GatewayIPv4>] [,gw6=<GatewayIPv6>] [,ip=<IPv4Format/CIDR>] [,ip6=<IPv6Format/CIDR>] — cloud-init: указать IP-адрес и шлюз для соответствующего интерфейса;
  • --ivshmem size=<целое число> [,name=<строка>] — общая память между виртуальными машинами. Полезно для прямого взаимодействия между ВМ или с хостом;
  • --keephugepages <логическое значение> — следует использовать вместе с hugepages (по умолчанию 0). Если включено, hugepages не будут удалены после выключения виртуальной машины и могут использоваться для последующих запусков;
  • --kvm <логическое значение> — включить/отключить аппаратную виртуализацию KVM (по умолчанию 1);
  • --live-restore <логическое значение> — запустить ВМ из резервной копии и восстановить её в фоновом режиме (только PBS). Требуется опция --archive;
  • --localtime <логическое значение> — установить часы реального времени (RTC) на местное время;
  • --lock <backup | clone | create | migrate | rollback | snapshot | snapshot-delete | suspended | suspending> — заблокировать/разблокировать ВМ;
  • --machine [[type=]<тип>] [,viommu=<intel|virtio>] — тип машины QEMU;
  • --memory [current=]<целое число> — свойства памяти;
  • --migrate_downtime <число> — максимально допустимое время простоя (в секундах) для миграции (по умолчанию 0,1);
  • --migrate_speed <целое число> — максимальная скорость (в МБ/с) для миграции (по умолчанию 0 — не ограничивать скорость);
  • --name <строка> — имя ВМ;
  • --nameserver <строка> — cloud-init: устанавливает IP-адрес DNS-сервера для контейнера;
  • --net[n] <сеть> — сетевые устройства;
  • --numa <логическое значение> — включить/отключить NUMA (по умолчанию 0);
  • --numa[n] <топология> — топология NUMA;
  • --onboot <логическое значение> — запускать ВМ во время загрузки системы (по умолчанию 0);
  • --ostype <l24 | l26 | other | solaris | w2k | w2k3 | w2k8 | win10 | win11 | win7 | win8 | wvista | wxp> — гостевая ОС;
  • --parallel[n] /dev/parport\d+|/dev/usb/lp\d+ — cопоставить параллельные устройства хоста (n от 0 до 2);
  • --pool <строка> — добавить ВМ в указанный пул;
  • --protection <логическое значение> — установить флаг защиты ВМ (по умолчанию 0). Флаг защиты отключит возможность удаления ВМ и удаления дисковых операций;
  • --reboot <логическое значение> — разрешить перезагрузку (по умолчанию 1). Если установлено значение 0, ВМ завершит работу при перезагрузке;
  • --rng0 [source=] </dev/urandom|/dev/random|/dev/hwrng> [,max_bytes=<целое число>] [,period=<целое число>] — настройть генератор случайных чисел на основе VirtIO;
  • --sata[n] <описание> — использовать в качестве жёсткого диска SATA или компакт-диск (n от 0 до 5). Чтобы выделить новый том используется синтаксис STORAGE_ID:SIZE_IN_GiB. Для импорта из существующего тома используется STORAGE_ID:0 и параметр import-from;
  • --scsi[n] <описание> — использовать в качестве жёсткого диска SCSI или компакт-диск (n от 0 до 30). Чтобы выделить новый том используется синтаксис STORAGE_ID:SIZE_IN_GiB. Для импорта из существующего тома используется STORAGE_ID:0 и параметр import-from;
  • --scsihw <lsi | lsi53c810 | megasas | pvscsi | virtio-scsi-pci | virtio-scsi-single> — модель контроллера SCSI (по умолчанию lsi);
  • searchdomain <строка> — cloud-init: устанавить домены поиска DNS для контейнера;
  • serial[n] (/dev/.+|socket) — последовательное устройство внутри ВМ (n от 0 до 3);
  • --shares <целое число (0–50000)> — объем разделяемой памяти (по умолчанию 1000);
  • --sockets <целое число> — количество сокетов процессора (по умолчанию 1);
  • --spice_enhancements [foldersharing=<1|0>] [,videostreaming=<off|all|filter>] — настройки для SPICE;
  • --sshkeys <путь к файлу> — cloud-init: настройка публичных ключей SSH (по одному ключу в строке, формат OpenSSH);
  • --start <логическое значение> — запустить ВМ после создания (по умолчанию 0);
  • --startup `[[order=]\d+] [,up=\d+] [,down=\d+] ` — поведение при запуске и выключении. order — неотрицательное число, определяющее общий порядок запуска. Выключение выполняется в обратном порядке. up/down — задержка включения/выключения в секундах;
  • --storage <строка> — хранилище;
  • --tablet <логическое значение> — включить/отключить USB-планшет (по умолчанию 1);
  • --tags <строка> — теги ВМ;
  • --template <логическое значение> — включить/отключить шаблон (по умолчанию 0);
  • --tpmstate0 <диск> — настроить диск для хранения состояния TPM. Формат фиксированный — raw;
  • --unique <логическое значение> — назначить уникальный случайный адрес Ethernet;
  • --usb[n] [[host=]<HOSTUSBDEVICE|spice>] [,mapping=<mapping-id>] [,usb3=<1|0>] — настройка USB-устройства (n — от 0 до 4, для версии машины >= 7.1 и ostype l26 или windows > 7, n может достигать 14);
  • --vcpus <целое число> — количество виртуальных процессоров с горячим подключением;
  • --vga [[type=]<enum>] [,clipboard=<vnc>] [,memory=<целое число>] — настройка VGA;
  • virtio[n] <описание> — использовать жёсткий диск VIRTIO (n от 0 до 15);
  • vmgenid <UUID> — установить идентификатор поколения ВМ (по умолчанию 1 — генерировать автоматически);
  • --vmstatestorage <строка>  — хранилище по умолчанию для томов/файлов состояния ВМ;
  • --watchdog [[model=]<i6300esb|ib700>] [,action=<enum>]  — создать сторожевое устройство виртуального оборудования.
qm delsnapshot <vmid> <snapname> <ОПЦИИ>
Удалить снимок ВМ.
  • vmid — идентификатор ВМ;
  • snapshot — имя снимка;
  • --force <логическое значение> — удалить из файла конфигурации, даже если удаление снимков диска не удалось.
qm destroy <vmid> [ОПЦИИ]
Уничтожить ВМ и все её тома (будут удалены все разрешения, специфичные для ВМ).
  • vmid — идентификатор ВМ;
  • --destroy-unreferenced-disks <логическое значение> — дополнительно уничтожить все диски, не указанные в конфигурации, но с совпадающим VMID из всех включенных хранилищ (по умолчанию 0);
  • --purge <логическое значение> — удалить VMID из конфигураций резервного копирования и высокой доступности;
  • --skiplock <логическое значение> — игнорировать блокировки (может использовать только root).
qm disk import <vmid> <source> <storage> [ОПЦИИ]
Импортировать образ внешнего диска в неиспользуемый диск ВМ. Формат образа должен поддерживаться qemu-img.
  • vmid — идентификатор ВМ;
  • source — путь к образу диска;
  • storage — идентификатор целевого хранилища;
  • --format <qcow2 | raw | vmdk> — целевой формат.
  • --target-disk <efidisk0 | ide0 | ide1 |…> — имя диска, на который будет импортирован том (например, scsi1).
qm disk move <vmid> <disk> <storage> [ОПЦИИ]
Переместить том в другое хранилище или в другую ВМ.
  • vmid — идентификатор ВМ;
  • disk — диск, который необходимо переместить (например, scsi1);
  • storage — целевое хранилище;
  • --bwlimit <целое число> — переопределить ограничение пропускной способности ввода-вывода (в КиБ/с);
  • --delete <логическое значение> — удалить исходный диск после успешного копирования. По умолчанию исходный диск сохраняется как неиспользуемый (по умолчанию 0);
  • --digest <строка> — запретить изменения, если текущий файл конфигурации имеет другой SHA1 дайджест (можно использовать для предотвращения одновременных изменений);
  • --format <qcow2 | raw | vmdk> — целевой формат;
  • --target-digest <строка> — запретить изменения, если текущий файл конфигурации целевой ВМ имеет другой SHA1 дайджест (можно использовать для обнаружения одновременных модификаций);
  • --target-disk <efidisk0 | ide0 | ide1| …| virtio9 > — ключ конфигурации, в который будет перемещен диск на целевой ВМ (например, ide0 или scsi1). По умолчанию используется ключ исходного диска;
  • --target-vmid <целое число> — идентификатор целевой ВМ.
qm disk rescan [ОПЦИИ]
Пересканировать все хранилища и обновить размеры дисков и неиспользуемые образы дисков.
  • --dryrun <логическое значение> — не записывать изменения в конфигурацию ВМ (по умолчанию 0);
  • --vmid <целое число> — идентификатор ВМ.
qm disk resize <vmid> <disk> <size> [ОПЦИИ]
Увеличить размер диска.
  • vmid — идентификатор ВМ;
  • disk — диск, размер которого необходимо увеличить (например, scsi1);
  • size — новый размер. Со знаком «+» значение прибавляется к фактическому размеру тома, а без него значение принимается как абсолютное. Уменьшение размера диска не поддерживается;
  • --digest <строка> — запретить изменения, если текущий файл конфигурации имеет другой SHA1 дайджест (можно использовать для предотвращения одновременных изменений);
  • --skiplock <логическое значение> — игнорировать блокировки (может использовать только root).
qm disk unlink <vmid> --idlist <строка> [ОПЦИИ]
Отсоединить/удалить образы дисков.
  • vmid — идентификатор ВМ;
  • --idlist <строка> — список идентификаторов дисков, которые необходимо удалить;
  • --force <логическое значение> — принудительное физическое удаление (иначе диск будет удалён из файла конфигурации и будет создана дополнительная запись конфигурации с именем unused[n], которая содержит идентификатор тома).
qm guest cmd <vmid> <команда>
Выполнить команды гостевого агента QEMU.
  • vmid — идентификатор ВМ;
  • команда — команда QGA (fsfreeze-freeze | fsfreeze-status | fsfreeze-thaw | fstrim | get-fsinfo | get-host-name | get-memory-block-info | get-memory-blocks | get-osinfo | get-time | get-timezone | get-users | get-vcpus | info | network-get-interfaces | ping | shutdown | suspend-disk | suspend-hybrid | suspend-ram).
qm guest exec <vmid> [<extra-args>] [ОПЦИИ]
Выполнить данную команду через гостевой агент.
  • vmid — идентификатор ВМ;
  • extra-args — дополнительные аргументы в виде массива;
  • --pass-stdin <логическое значение> — если установлено, читать STDIN до EOF и пересылать гостевому агенту через входные данные (по умолчанию 0). Допускается максимум 1 МБ;
  • --synchronous <логическое значение> — если установлено значение 0, возвращает pid немедленно, не дожидаясь завершения команды или тайм-аута (по умолчанию 1);
  • --timeout <целое число> — максимальное время синхронного ожидания завершения команды. Если достигнуто, возвращается pid. Для отключения следует установить значение 0 (по умолчанию 30).
qm guest exec-status <vmid> <pid>
Получить статус данного pid, запущенного гостевым агентом.
  • vmid — идентификатор ВМ;
  • pid — PID для запроса.
qm guest passwd <vmid> <username> [ОПЦИИ]
Установить пароль для данного пользователя.
  • vmid — идентификатор ВМ;
  • username — пользователь, для которого устанавливается пароль;
  • crypted <логическое значение> — если пароль уже был передан через crypt(), следует установить значение 1 (по умолчанию 0).
qm help [extra-args] [ОПЦИИ]
Показать справку по указанной команде.
  • extra-args — показать справку по конкретной команде;
  • --verbose <логическое значение> — подробный формат вывода.
qm importdisk
Псевдоним для qm disk import.
qm importovf <vmid> <manifest> <storage> [ОПЦИИ]
Создать новую ВМ, используя параметры, считанные из манифеста OVF.
  • vmid — идентификатор ВМ;
  • manifest — путь до файла ovf;
  • storage — идентификатор целевого хранилища;
  • --format <qcow2 | raw | vmdk> — целевой формат.
qm list [ОПЦИИ]
Вывести список ВМ узла.
  • --full <логическое значение> — определить полный статус активных ВМ.
qm listsnapshot <vmid>
Вывести список снимков ВМ.
  • vmid — идентификатор ВМ;
qm migrate <vmid> <target> [ОПЦИИ]
Перенос ВМ. Создаёт новую задачу миграции.
  • vmid — идентификатор ВМ;
  • target — целевой узел;
  • --bwlimit <целое число> — переопределить ограничение пропускной способности ввода-вывода (в КиБ/с);
  • --force <логическое значение> — разрешить миграцию ВМ, использующих локальные устройства (может использовать только root);
  • --migration_network <строка> — CIDR (под)сети, которая используется для миграции;
  • --migration_type <insecure | secure> — трафик миграции по умолчанию шифруется с использованием SSH-туннеля. В безопасных сетях эту функцию можно отключить для повышения производительности;
  • --online <логическое значение> — использовать онлайн-/живую миграцию, если ВМ запущена (игнорируется, если ВМ остановлена);
  • --targetstorage <строка> — сопоставление исходных и целевых хранилищ. Предоставление только одного идентификатора хранилища сопоставляет все исходные хранилища с этим хранилищем. Если указать специальное значение 1, каждое исходное хранилище будет сопоставлено самому себе;
  • --with-local-disks <логическое значение> — включить живую миграцию хранилища для локального диска.
qm monitor <vmid>
Войти в интерфейс монитора QEMU.
  • vmid — идентификатор ВМ.
qm move-disk
Псевдоним для qm disk move.
qm move_disk
Псевдоним для qm disk move.
qm nbdstop <vmid>
Остановить встроенный сервер NBD.
  • vmid — идентификатор ВМ.
qm pending <vmid>
Получить конфигурацию ВМ с текущими и ожидающими значениями.
  • vmid — идентификатор ВМ.
qm reboot <vmid> [ОПЦИИ]
Перезагрузить ВМ. Применяет ожидающие изменения.
  • vmid — идентификатор ВМ;
  • --timeout <целое число> — максимальное время ожидания для выключения.
qm remote-migrate <vmid> [<target-vmid>] <target-endpoint> --target-bridge <строка> --target-storage <строка> [ОПЦИИ]
Перенос ВМ в удалённый кластер. Создаёт новую задачу миграции. ЭКСПЕРИМЕНТАЛЬНАЯ функция!
  • vmid — идентификатор ВМ;
  • target-vmid — идентификатор целевой ВМ;
  • target-endpoint — удалённая целевая конечная точка. Удалённая точка указывается в формате: apitoken=<API-токен PVE, включая секретное значение> ,host=<имя или IP удалённого узла> [,fingerprint=<отпечаток сертификата удаленного хоста, если ему не доверяет системное хранилище>] [,port=<целое число>];
  • --bwlimit <целое число> — переопределить ограничение пропускной способности ввода-вывода (в КиБ/с);
  • --delete <логическое значение> — удалить исходную ВМ и связанные с ней данные после успешной миграции (по умолчанию 0). По умолчанию исходная ВМ остается в исходном кластере в остановленном состоянии;
  • --online <логическое значение> — использовать онлайн-/живую миграцию, если ВМ запущена (игнорируется, если ВМ остановлена);
  • --target-bridge <строка> — сопоставление исходных и целевых мостов. Предоставление только одного идентификатора моста сопоставляет все исходные мосты с этим мостом. Предоставление специального значения 1 сопоставит каждый исходный мост с самим собой;
  • --target-storage <строка> — сопоставление исходных и целевых хранилищ. Предоставление только одного идентификатора хранилища сопоставляет все исходные хранилища с этим хранилищем. Если указать специальное значение 1, каждое исходное хранилище будет сопоставлено самому себе
qm rescan
Псевдоним для qm disk rescan.
qm reset <vmid> [ОПЦИИ]
Сбросить ВМ.
  • vmid — идентификатор ВМ;
  • --skiplock <логическое значение> — игнорировать блокировки (может использовать только root).
qm resize
Псевдоним для qm disk resize.
qm resume <vmid> [ОПЦИИ]
Возобновить работу ВМ.
  • vmid — идентификатор ВМ;
  • --skiplock <логическое значение> — игнорировать блокировки (может использовать только root).
qm rollback <vmid> <snapname> [ОПЦИИ]
Откат состояния ВМ до указанного снимка.
  • vmid — идентификатор ВМ;
  • snapname — имя снимка;
  • --start <логическое значение> — запустить ВМ после отката (по умолчанию 0). ВМ будут запускаться автоматически, если снимок включает ОЗУ.
qm sendkey <vmid> <ключ> [ОПЦИИ]
Послать нажатия клавиш на ВМ.
  • vmid — идентификатор ВМ;
  • ключ — ключ (в кодировке qemu monitor, например, ctrl-shift);
  • --skiplock <логическое значение> — игнорировать блокировки (может использовать только root).
qm set <vmid> [ОПЦИИ]
Установить параметры ВМ.
Некоторые опции:
  • vmid — идентификатор ВМ;
  • --acpi <логическое значение> — включить/отключить ACPI (по умолчанию 1);
  • --affinity <строка> — список ядер хоста, используемых для выполнения гостевых процессов, например: 0,5,8-11;
  • --agent [enabled=]<1|0> [,freeze-fs-on-backup=<1|0>] [,fstrim_cloned_disks=<1|0>] [,type=<virtio|isa>] — включить/отключить связь с гостевым агентом QEMU;
  • --amd-sev [type=]<sev-type> [,kernel-hashes=<1|0>] [,no-debug=<1|0>] [,no-key-sharing=<1|0>] — функции защищенной зашифрованной виртуализации (SEV) процессоров AMD;
  • --arch <aarch64 | x86_64> — архитектура виртуального процессора;
  • --args <строка> — передача произвольных аргументов в KVM;
  • --audio0 device=<ich9-intel-hda|intel-hda|AC97>[,driver=<spice|none>] — настройка аудиоустройства;
  • --balloon <целое число> — объём целевой оперативной памяти для ВМ в МиБ (0 отключает Balloon Driver);
  • --bios <ovmf | seabios> — реализация BIOS (по умолчанию seabios);
  • --boot [order=<устройство[;устройство...]>] — порядок загрузки ВМ;
  • --cdrom <volume> — псевдоним опции ide2;
  • --cicustom [meta=<volume>] [,network=<volume>] [,user=<volume>] [,vendor=<volume>] — cloud-init: указать пользовательские файлы для замены автоматически созданных;
  • --cipassword <пароль> — cloud-init: пароль для пользователя. Рекомендуется использовать ключи SSH вместо пароля;
  • --citype <configdrive2 | nocloud | opennebula> — формат конфигурации cloud-init;
  • --ciupgrade <логическое значение> — cloud-init: выполнить автоматическое обновление пакета после первой загрузки (по умолчанию 1);
  • --ciuser <строка> — cloud-init: имя пользователя для изменения пароля и ключей SSH вместо настроенного пользователя по умолчанию;
  • --cores <целое число> — количество ядер на сокет (по умолчанию 1);
  • --cpu <тип> — эмулируемый тип процессора;
  • --cpulimit <целое число (0–128)> — ограничение использования процессора (по умолчанию 0);
  • --cpuunits <целое число (1–262144)> — вес ЦП для ВМ будет ограничен значением [1, 10000] в cgroup v2 (по умолчанию cgroup v1: 1024, cgroup v2: 100);
  • --delete <строка> — список настроек, которые необходимо удалить;
  • --description <строка> — описание ВМ;
  • --digest <строка> — запретить изменения, если текущий файл конфигурации имеет другой дайджест SHA1 (можно использовать для предотвращения одновременных изменений);
  • --efidisk0 [file=]<volume> [,efitype=<2m|4m>] [,format=<enum>] [,import-from=<source volume>] [,pre-enrolled-keys=<1|0>] [,size=<DiskSize>] — диск для хранения переменных EFI;
  • --force <логическое значение> — разрешить перезапись существующей ВМ (требуется опция --archive);
  • --freeze <логическое значение> — заморозить процессор при запуске;
  • --hookscript <строка> — описание ВМ;
  • --hostpci[n] [описание] — сопоставить PCI-устройства хоста с гостевыми устройствами;
  • --ide[n] [описание] — использовать в качестве жёсткого диска IDE или компакт-диск (n от 0 до 3). Чтобы выделить новый том используется синтаксис STORAGE_ID:SIZE_IN_GiB. Для импорта из существующего тома используется STORAGE_ID:0 и параметр import-from;
  • --ipconfig[n] [gw=<GatewayIPv4>] [,gw6=<GatewayIPv6>] [,ip=<IPv4Format/CIDR>] [,ip6=<IPv6Format/CIDR>] — cloud-init: указать IP-адрес и шлюз для соответствующего интерфейса;
  • --kvm <логическое значение> — включить/отключить аппаратную виртуализацию KVM (по умолчанию 1);
  • --localtime <логическое значение> — установите часы реального времени (RTC) на местное время;
  • --lock <backup | clone | create | migrate | rollback | snapshot | snapshot-delete | suspended | suspending> — заблокировать/разблокировать ВМ;
  • --machine <тип> — тип машины QEMU;
  • --memory [current=]<целое число> — свойства памяти;
  • --migrate_downtime <число> — максимально допустимое время простоя (в секундах) для миграции (по умолчанию 0,1);
  • --migrate_speed <целое число> — максимальная скорость (в МБ/с) для миграции (по умолчанию 0 — не ограничивать скорость);
  • --name <строка> — имя ВМ;
  • --nameserver <строка> — cloud-init: устанавливает IP-адрес DNS-сервера для контейнера;
  • --net <сеть> — сетевые устройства;
  • --numa <логическое значение> — включить/отключить NUMA (по умолчанию 0);
  • --numa[n] <топология> — топология NUMA;
  • --onboot <логическое значение> — запускать ВМ во время загрузки системы (по умолчанию 0);
  • --ostype <l24 | l26 | other | solaris | w2k | w2k3 | w2k8 | win10 | win11 | win7 | win8 | wvista | wxp> — гостевая ОС;
  • --protection <логическое значение> — установить флаг защиты ВМ (по умолчанию 0). Флаг защиты отключит возможность удаления ВМ и удаления дисковых операций;
  • --reboot <логическое значение> — разрешить перезагрузку (по умолчанию 1). Если установлено значение 0, ВМ завершит работу при перезагрузке;
  • --revert <строка> — отменить ожидающее изменение;
  • --rng0 [source=] </dev/urandom|/dev/random|/dev/hwrng> [,max_bytes=<целое число>] [,period=<целое число>] — настройть генератор случайных чисел на основе VirtIO;
  • --sata[n] <описание> — использовать в качестве жёсткого диска SATA или компакт-диск (n от 0 до 5). Чтобы выделить новый том используется синтаксис STORAGE_ID:SIZE_IN_GiB. Для импорта из существующего тома используется STORAGE_ID:0 и параметр import-from;
  • --scsi[n] <описание> — использовать в качестве жёсткого диска SCSI или компакт-диск (n от 0 до 30). Чтобы выделить новый том используется синтаксис STORAGE_ID:SIZE_IN_GiB. Для импорта из существующего тома используется STORAGE_ID:0 и параметр import-from;
  • --scsihw <lsi | lsi53c810 | megasas | pvscsi | virtio-scsi-pci | virtio-scsi-single> — модель контроллера SCSI (по умолчанию lsi);
  • searchdomain <строка> — cloud-init: устанавить домены поиска DNS для контейнера;
  • serial[n] (/dev/.+|socket) — последовательное устройство внутри ВМ (n от 0 до 3);
  • --shares <целое число (0–50000)> — объем разделяемой памяти (по умолчанию 1000);
  • --skiplock <логическое значение> — игнорировать блокировки (только root может использовать эту опцию);
  • --sockets <целое число> — количество сокетов процессора (по умолчанию 1);
  • --spice_enhancements [foldersharing=<1|0>] [,videostreaming=<off|all|filter>] — настройки для SPICE;
  • --sshkeys <путь к файлу> — cloud-init: настройка общедоступных ключей SSH (по одному ключу в строке, формат OpenSSH).;
  • --startup `[[порядок=]\d+] [,up=\d+] [,down=\d+] ` — поведение при запуске и выключении. Порядок — неотрицательное число, определяющее общий порядок запуска. Выключение выполняется в обратном порядке. up/down — задержка включения/выключения в секундах;
  • --tablet <логическое значение> — включить/отключить USB-планшет (по умолчанию 1);
  • --tags <строка> — теги ВМ;
  • --template <логическое значение> — включить/отключить шаблон (по умолчанию 0);
  • --tpmstate0 <диск> — настроить диск для хранения состояния TPM. Формат фиксированный — raw;
  • --usb[n] [[host=]<HOSTUSBDEVICE|spice>] [,mapping=<mapping-id>] [,usb3=<1|0>] — настройка USB-устройства (n — от 0 до 4, для версии машины >= 7.1 и ostype l26 или windows > 7, n может достигать 14);
  • --vcpus <целое число> — количество виртуальных процессоров с горячим подключением;
  • --vga [[type=]<enum>] [,clipboard=<vnc>] [,memory=<целое число>] — настройка VGA;
  • --virtio[n] <описание> — использовать жёсткий диск VIRTIO (n от 0 до 15);
  • --vmgenid <UUID> — установить идентификатор поколения ВМ (по умолчанию 1 — генерировать автоматически);
  • --vmstatestorage <строка>  — хранилище по умолчанию для томов/файлов состояния ВМ;
  • --watchdog [[model=]<i6300esb|ib700>] [,action=<enum>]  — создать сторожевое устройство виртуального оборудования.
qm showcmd <vmid> [ОПЦИИ]
Показать командную строку, которая используется для запуска ВМ (информация для отладки).
  • vmid — идентификатор ВМ;
  • --pretty <логическое значение> — поместить каждый параметр на новой строке;
  • --snapshot <строка> — получить значения конфигурации из данного снимка.
qm shutdown <vmid> [ОПЦИИ]
Выключение ВМ (эмуляция нажатия кнопки питания). Гостевой ОС будет отправлено событие ACPI.
  • vmid — идентификатор ВМ;
  • --forceStop <логическое значение> — убедиться, что ВМ остановлена (по умолчанию 0);
  • --keepActive <логическое значение> — не деактивировать тома хранения (по умолчанию 0);
  • --skiplock <логическое значение> — игнорировать блокировки (может использовать только root);
  • --timeout <целое число> — максимальный таймаут в секундах.
qm snapshot <vmid> <snapname> [ОПЦИИ]
Сделать снимок ВМ.
  • vmid — идентификатор ВМ;
  • snapname — имя снимка;
  • --description <строка> — описание или комментарий;
  • --vmstate <логическое значение> — учитывать ОЗУ.
qm start <vmid> [ОПЦИИ]
Запустить ВМ.
  • vmid — идентификатор ВМ;
  • --force-cpu <строка> — переопределить cpu QEMU заданной строкой;
  • --machine <тип> — указывает тип компьютера QEMU (например, pc+pve0);
  • --migratedfrom <строка> — имя узла кластера;
  • --migration_network <строка> — CIDR (под)сети, которая используется для миграции;
  • --migration_type <insecure | secure> — трафик миграции по умолчанию шифруется с использованием SSH-туннеля. В безопасных сетях эту функцию можно отключить для повышения производительности;
  • --keepActive <логическое значение> — не деактивировать тома хранения (по умолчанию 0);
  • --skiplock <логическое значение> — игнорировать блокировки (может использовать только root);
  • --stateuri <строка> — некоторые команды сохраняют/восстанавливают состояние из этого места;
  • --targetstorage <строка> — сопоставление исходных и целевых хранилищ. Предоставление только одного идентификатора хранилища сопоставляет все исходные хранилища с этим хранилищем. Если указать специальное значение 1, каждое исходное хранилище будет сопоставлено самому себе;
  • --timeout <целое число> — максимальный таймаут в секундах (по умолчанию max(30, память ВМ в ГБ)).
qm status <vmid> [ОПЦИИ]
Показать статус ВМ.
  • vmid — идентификатор ВМ;
  • --verbose <логическое значение> — подробный вывод.
qm stop <vmid> [ОПЦИИ]
Останов ВМ (эмуляция выдергивания вилки). Процесс qemu немедленно завершается.
  • vmid — идентификатор ВМ;
  • --keepActive <логическое значение> — не деактивировать тома хранения (по умолчанию 0);
  • --migratedfrom <строка> — имя узла кластера;
  • --skiplock <логическое значение> — игнорировать блокировки (может использовать только root);
  • --timeout <целое число> — максимальный таймаут в секундах.
qm suspend <vmid> [ОПЦИИ]
Приостановить ВМ.
  • vmid — идентификатор ВМ;
  • --skiplock <логическое значение> — игнорировать блокировки (может использовать только root);
  • --statestorage <строка>хранилище состояния ВМ (должна быть указана опция --todisk);
  • --todisk <логическое значение> — приостанавливает работу ВМ на диск. Будет возобновлено при следующем запуске ВМ (по умолчанию 0).
qm template <vmid> [ОПЦИИ]
Создать шаблон.
  • vmid — идентификатор ВМ;
  • --disk <диск> — если в базовый образ нужно преобразовать только один диск (например, sata1).
qm terminal <vmid> [ОПЦИИ]
Открыть терминал с помощью последовательного устройства (на ВМ должно быть настроено последовательное устройство, например, Serial0: Socket).
  • vmid — идентификатор ВМ;
  • --escape <строка> — escape-символ (по умолчанию ^O);
  • --iface <serial0 | serial1 | serial2 | serial3> — последовательное устройство (по умолчанию используется первое подходящее устройство).
qm unlink
Псевдоним для qm disk unlink.
qm unlock <vmid>
Разблокировать ВМ.
  • vmid — идентификатор ВМ.
qm vncproxy <vmid>
Проксировать VNC-трафик ВМ на стандартный ввод/вывод.
  • vmid — идентификатор ВМ.
qm wait <vmid> [ОПЦИИ]
Подождать, пока ВМ не будет остановлена.
  • vmid — идентификатор ВМ;
  • --timeout <целое число> — максимальный таймаут в секундах (по умолчанию — не ограничено).
Примеры использования утилиты qm:
  • создать ВМ, используя ISO-файл, загруженный в локальное хранилище, с диском IDE 21 ГБ, в хранилище local-lvm:
    # qm create 109 -ide0 local-lvm:21 -net0 e1000 -cdrom nfs-storage:iso/alt-server-11.0-x86_64.iso
    
  • запуск ВМ с VM ID 109:
    # qm start 109
    
  • отправить запрос на отключение, и дождаться остановки ВМ:
    # qm shutdown 109 && qm wait 109
    
  • отправить сочетание клавиш CTRL+SHIFT на ВМ:
    # qm sendkey 109 ctrl-shift
    
  • войти в интерфейс монитора QEMU и вывести список доступных команд:
    # qm monitor 109
    qm> help
    

    Примечание

    Для выхода из интерфейса монитора нужно выполнить команду quit или последовательно нажать CTRL+O и CTRL+C.

30.4. Сценарии перехвата (hookscripts)

Сценарии перехвата позволяют выполнить скрипт на узле виртуализации при запуске или остановке ВМ или контейнера. Скрипт может вызываться на разных этапах жизни ВМ: до запуска (pre-start), после запуска (post-start), до остановки (pre-stop), после остановки (post-stop). Сценарии перехвата должны находиться в хранилище, поддерживающем «мини-сценарии» (сниппеты).
Для возможности использовать данную функцию необходимо создать скрипт в каталоге сниппетов (например, для хранилища local по умолчанию это /var/lib/vz/snippets) и добавить его к ВМ или контейнеру.

Примечание

При переносе ВМ на другой узел, следует убедиться, что сценарий перехвата также доступен на целевом узле (хранилище с мини-сценариями, должно быть доступно на всех узлах, на которые будет выполняться миграция).
Добавить сценарий перехвата к ВМ или контейнеру можно с помощью свойства hookscript:
# qm set <vmid> --hookscript <storage>:snippets/<script_file>
# pct set <vmid> --hookscript <storage>:snippets/<script_file>
где <script_file> — исполняемый файл скрипта.
Например:
# qm set 103 --hookscript snippet:snippets/guest-hookscript.pl
update VM 103: -hookscript snippet:snippets/guest-hookscript.pl

Примечание

В настоящее время добавить сценарий перехвата можно только в командной строке. В веб-интерфейсе можно только просмотреть список скриптов в хранилище:
Хранилище snippet на узле pve01
и скрипт, добавленный к ВМ:
Скрипт-ловушка для ВМ 103
Пример сценария перехвата на Perl (файл 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);
Функция system() используется для вызова сценария bash которому передается VMID в качестве аргумента. Текст отладки выводится в «консоль»/stdout. Текст будет помещен в журналы задач ВМ и узла PVE. Сообщения pre-start, post-start и pre-stop будут опубликованы в обоих журналах. Сообщения post-stopt будут публиковаться только в журналах задач узла PVE (поскольку ВМ уже остановлена).
Выполнение скрипта guest-hookscript.pl при запуске ВМ
Пример сценария перехвата на bash:
#!/bin/bash
if [ $2 == "pre-start" ]
then
echo "Запуск ВМ $1" >> /root/test.txt
date >> /root/test.txt
fi

30.5. Доступ к ВМ

По умолчанию PVE предоставляет доступ к ВМ через noVNC и/или SPICE. Рекомендуется использовать их, когда это возможно.
Использование протокола SPICE позволяет задействовать множество возможностей, в том числе, проброс USB, смарт-карт, принтеров, звука, получить более тесную интеграцию с окном гостевой системы (бесшовную работу мыши, клавиатуры, динамическое переключение разрешения экрана, общий с гостевой системой буфер обмена для операций копирования/вставки). Для возможности использования SPICE:
  • на хосте, с которого происходит подключение, должен быть установлен клиент SPICE (например, пакет virt-viewer):
  • для параметра Экран ВМ должно быть установлено значение VirtIO, SPICE (qxl) (см. Настройки дисплея).
При подключении к ВМ с использованием noVNC, консоль открывается во вкладке браузера (не нужно устанавливать клиентское ПО).
Для доступа к ВМ следует выбрать её в веб-интерфейсе, нажать кнопку Консоль и в выпадающем меню выбрать нужную консоль:
Кнопка Консоль
Консоль noVNC также можно запустить, выбрав вкладку Консоль для ВМ:
Консоль noVNC
Если нужен независимый от браузера доступ, можно также использовать внешний клиент VNC. Для этого в файл конфигурации ВМ /etc/pve/qemu-server/<VMID>.conf необходимо добавить строку с указанием номера дисплея VNC (в примере — 55):
args: -vnc 0.0.0.0:55
Или, чтобы включить защиту паролем:
args: -vnc 0.0.0.0:55,password=on
Если была включена защита паролем, необходимо установить пароль (после запуска ВМ). Пароль можно установить на вкладке Монитор, выполнив команду:
set_password vnc newvnc -d vnc2
В данном примере, при подключении будет запрашиваться пароль: newvnc. Максимальная длина пароля VNC: 8 символов. После перезапуска ВМ указанную выше команду необходимо повторить, чтобы снова установить пароль.

Примечание

Номер дисплея VNC можно выбрать произвольно, но каждый номер должен встречаться только один раз. Служба VNC прослушивает порт 5900+номер_дисплея. Соединения noVNC используют номер дисплея 0 и последующие, поэтому во избежание конфликтов рекомендуется использовать более высокие номера.
Для подключения клиента VNC следует указать IP-адрес хоста с ВМ и порт (в приведенном выше примере — 5955).

30.6. Внесение изменений в ВМ

Вносить изменения в конфигурацию ВМ можно и после ее создания. Для того чтобы внести изменения в конфигурацию ВМ, необходимо выбрать ВМ и перейти на вкладку Оборудование. На этой вкладке следует выбрать ресурс и нажать кнопку Редактировать:
Оборудование ВМ

Примечание

В случаях, когда изменение не может быть выполнено в горячем режиме, оно будет зарегистрировано как ожидающее изменение (выделяется цветом). Такие изменения будут применены только после перезагрузки ВМ.
Изменения, которые будут применены после перезагрузки ВМ

30.6.1. Управление образами виртуальных дисков

Образ виртуального диска является файлом или группой файлов, в которых ВМ хранит свои данные.
qemu-img — утилита для манипулирования с образами дисков машин QEMU. qemu-img позволяет выполнять операции по созданию образов различных форматов, конвертировать файлы-образы между этими форматами, получать информацию об образах и объединять снимки ВМ для тех форматов, которые это поддерживают.
Примеры использования утилиты qemu-img:
  • преобразование (конвертация) vmdk-образа виртуального накопителя VMware под названием test в формат qcow2:
    # qemu-img convert -f vmdk test.vmdk -O qcow2 test.qcow2
    
  • создание образа test в формате RAW, размером 40 ГБ:
    # qemu-img create -f raw test.raw 40G
    
  • изменение размера виртуального диска:
    # qemu-img resize -f raw test.raw 80G
    
  • просмотр информации об образе:
    # qemu-img info test.raw
    
Для управления образами виртуальных дисков в веб-интерфейсе PVE необходимо выбрать ВМ и перейти на вкладку Оборудование. После выбора образа диска станут доступными кнопки: Добавить, Отключить, Редактировать, Переместить хранилище, Переназначить владельца, Изменить размер:
Управление образом виртуального диска

30.6.1.1. Добавление виртуального диска в ВМ

Для добавления образа виртуального диска к ВМ необходимо:
  1. Перейти на вкладку Оборудование;
  2. Нажать кнопку Добавить и выбрать в выпадающем списке пункт Жесткий диск:
    Кнопка «Добавить» → «Жесткий диск»
  3. Указать параметры жесткого диска и нажать кнопку Добавить:
    Опции добавления жесткого диска

30.6.1.2. Удаление образа виртуального диска

Для удаления образа виртуального диска к ВМ необходимо:
  1. Перейти на вкладку Оборудование;
  2. Выбрать образ диска ВМ;
  3. Нажать кнопку Отключить;
  4. В окне подтверждения нажать кнопку Да для подтверждения действия. При этом виртуальный диск будет отсоединен от ВМ, но не удален полностью. Он будет присутствовать в списке оборудования ВМ как Неиспользуемый диск:
    Неиспользуемый диск
Чтобы удалить образ диска окончательно, следует выбрать неиспользуемый диск и нажать кнопку Удалить.
Если образ диска был отключен от ВМ по ошибке, можно повторно подключить его к ВМ, выполнив следующие действия:
  1. Выбрать неиспользуемый диск;
  2. Нажать кнопку Редактировать;
  3. В открывшемся диалоговом окне изменить, если это необходимо, параметры Шина/Устройство:
    Подключение неиспользуемого диска
  4. Нажать кнопку Добавить для повторного подключения образа диска.

30.6.1.3. Изменение размера диска

Функция изменения размера поддерживает только увеличение размера файла образа виртуального диска.
При изменении размера образа виртуального диска изменяется только размер файла образа виртуального диска. После изменения размера файла, разделы жесткого диска должны быть изменены внутри самой ВМ.
Для изменения размера виртуального диска необходимо:
  1. Перейти на вкладку Оборудование;
  2. Выбрать образ диска ВМ;
  3. Нажать кнопку Действие над дискомИзменить размер;
  4. В открывшемся диалоговом окне в поле Увеличение размера ((ГиБ)) ввести значение, на которое необходимо увеличить размер диска. Например, если размер существующего диска составляет 20 ГиБ для изменения размера диска до 30 ГиБ следует ввести число 10:
    Изменение размера диска
  5. Нажать кнопку Изменить размер диска.
Команда изменения размера виртуального диска:
# qm resize <vm_id> <virtual_disk> [+]<size>

Примечание

Если указать размер диска со знаком «+», то данное значение добавится к реальному размеру тома, без знака «+» указывается абсолютное значение. Уменьшение размера диска не поддерживается. Например, изменить размер виртуального диска до 80 ГиБ:
# qm resize 100 scsi1 80G

30.6.1.4. Перемещение диска в другое хранилище

Образы виртуального диска могут перемещаться с одного хранилища на другое в пределах одного кластера.
Для перемещения образа диска необходимо:
  1. Перейти на вкладку Оборудование;
  2. Выбрать образ диска, который необходимо переместить;
  3. Нажать кнопку Действие над дискомПереместить хранилище;
  4. В открывшемся диалоговом окне в выпадающем меню Целевое хранилище выбрать хранилище-получатель, место, куда будет перемещен образ виртуального диска:
    Диалоговое окно перемещения диска
  5. В выпадающем меню Формат выбрать формат образ диска. Этот параметр полезен для преобразования образа диска из одного формата в другой;
  6. Отметить, если это необходимо, пункт Удалить источник для удаления образа диска из исходного хранилища после его перемещения в новое хранилище;
  7. Нажать кнопку Переместить диск.
Команда перемещения образа диска в другое хранилище:
# qm move-disk <vm_id> <virtual_disk> <storage>

30.6.1.5. Переназначение диска другой ВМ

При переназначении образа диска другой ВМ, диск будет удалён из исходной ВМ и подключен к целевой ВМ.
Для переназначения образа диска другой ВМ необходимо:
  1. Перейти на вкладку Оборудование;
  2. Выбрать образ диска, который необходимо переназначить;
  3. Нажать кнопку Действие над дискомПереназначить владельца;
  4. В открывшемся диалоговом окне в выпадающем меню Целевая гостевая система выбрать целевую ВМ, место, куда будет перемещен образ виртуального диска:
    Диалоговое окно переназначения диска
  5. Выбрать нужные параметры в выпадающем меню Шина/Устройство;
  6. Нажать кнопку Переназначить диск.
Команда переназначения образа диска другой ВМ:
# qm move-disk <vm_id> <virtual_disk> --target-vmid <vm_id> --target-disk <virtual_disk>
Пример удаления образа диска scsi0 из ВМ 107 и подключение его как scsi1 к ВМ 10007:
# qm move-disk 107 scsi0 --target-vmid 10007 --target-disk scsi1

30.6.2. Настройки дисплея

Настройки дисплея
QEMU может виртуализировать разные типы видеокарт, например:
  • std (Стандартный VGA) — эмулирует карту с расширениями Bochs VBE;
  • vmware (Совместим с VMware) — адаптер, совместимый с VMWare SVGA-II;
  • qxl (SPICE) — паравиртуализированная видеокарта QXL. Выбор этого параметра включает SPICE (протокол удаленного просмотра) для ВМ;
  • virtio (VirtIO-GPU) — стандартный драйвер графического процессора virtio;
  • virtio-gl (VirGL GPU) — виртуальный 3D-графический процессор для использования внутри ВМ, который может переносить рабочие нагрузки на графический процессор хоста.

Примечание

Для типов дисплеев VirtIO и VirGL по умолчанию включена поддержка SPICE.

Примечание

Для подключения к SPICE-серверу может использоваться любой SPICE-клиент (например, remote-viewer из пакета virt-viewer).
Можно изменить объем памяти, выделяемый виртуальному графическому процессору (поле Память (MiB)). Это может обеспечить более высокое разрешение внутри ВМ, особенно при использовании SPICE/QXL.
Поскольку память резервируется устройством дисплея, выбор режима нескольких мониторов для SPICE (например, qxl2 для двух мониторов) имеет некоторые последствия:
  • ВМ с ОС Windows требуется устройство для каждого монитора. Поэтому PVE предоставляет ВМ дополнительное устройство для каждого монитора. Каждое устройство получает указанный объем памяти;
  • ВМ с ОС Linux включают больше виртуальных мониторов, но при выборе режима нескольких мониторов, объём памяти, предоставленный устройству, умножается на количество мониторов.
Выбор serialX (Терминал) в качестве типа дисплея, отключает выход VGA и перенаправляет веб-консоль на выбранный последовательный порт. В этом случае настроенный параметр памяти дисплея игнорируется.

30.6.3. Дополнительные функции SPICE

Дополнительно в PVE можно включить две дополнительные функции SPICE:
  • общий доступ к папкам — доступ к локальной папке из ВМ;
  • потоковое видео — области быстрого обновления кодируются в видеопоток.
Включение дополнительных функций SPICE:
  • в веб-интерфейсе (пункт Улучшения SPICE в разделе Параметры ВМ):
    PVE. Дополнительные функции SPICE
  • в командной строке:
    # qm set VMID -spice_enhancements foldersharing=1,videostreaming=all
    

Примечание

Чтобы использовать дополнительные функции SPICE, для параметра Экран ВМ должно быть установлено значение VirtIO, SPICE (qxl) (см. Настройки дисплея).

30.6.3.1. Общий доступ к папкам

Для возможности получения доступа к локальной папке, внутри ВМ должен быть установлен пакет spice-webdavd. В этом случае общая папка будет доступна через локальный сервер WebDAV по адресу http://localhost:9843.

Примечание

Чтобы открыть общий доступ к папке, следует в меню remote-viewer выбрать пункт Настройки (Preferences), в открывшемся окне установить отметку Общая папка и выбрать папку для перенаправления:
virt-viewer. Разрешить общий доступ к папке
Если в ВМ общая папка не отображается, следует проверить, что служба WebDAV (spice-webdavd) запущена. Может также потребоваться перезапустить сеанс SPICE.

Примечание

Для возможности доступа к общей папке из файлового менеджера, а не из браузера, внутри ВМ должен быть установлен пакет davfs2.
Для доступа к общей папке из файлового менеджера:
  • Dolphin — выбрать пункт СетьСетевые службыСетевой каталог WebDavSpice client folder;
  • Thunar, Файловый менеджер GNOME — в адресной строке ввести адрес с указанием протокола dav или davs (dav://localhost:9843/).

30.6.3.2. Потоковое видео

Доступны две опции:
  • all — все области быстрого обновления кодируются в видеопоток;
  • filter — для принятия решения о том, следует ли использовать потоковое видео, используются дополнительные фильтры.

30.6.4. Проброс USB

В PVE есть два способа пробросить USB-устройства в ВМ:
  • динамический проброс через SPICE (SPICE USB Passthrough) — устройство подключается только когда ВМ запущена и SPICE-клиент активен;
  • прямой проброс USB с хоста (Host USB Passthrough) — устройство физически отключается от хоста и полностью передаётся ВМ.
Можно также сопоставлять устройства на уровне кластера, чтобы их можно было правильно использовать с HA, а изменения оборудования обнаруживались, и пользователи без прав root могли их настраивать. Подробнее см. Сопоставление устройств.
Для проброса USB-устройства в ВМ необходимо:
  1. Перейти на вкладку Оборудование;
  2. Нажать кнопку Добавить и выбрать в выпадающем списке пункт USB-устройство:
    Кнопка «Добавить» → «USB-устройство»
  3. Откроется окно добавления устройства, в котором можно выбрать режим проброса:
    • Порт Spice — сквозная передача SPICE USB (позволяет пробросить USB-устройство с клиента SPICE):
      Порт Spice
    • Использовать сопоставленное устройство — проброс в ВМ сопоставленного USB-устройства:
      Проброс сопоставленного устройства
    • Использовать идентификатор производителя/устройства USB — проброс в ВМ конкретного USB-устройства:
      Проброс конкретного USB-устройства
      USB-устройство можно выбрать в выпадающем списке Выберите устройство или указать вручную, указав <ID-производителя>:<ID-устройства> (можно получить из вывода команды lsusb).
    • Использовать USB-порт — проброс конкретного порта (в ВМ будет проброшено любое устройство, вставленное в этот порт):
      Использовать USB-порт
      USB-порт можно выбрать в выпадающем списке Выберите порт или указать вручную, указав <Номер_шины>:<Путь_к_порту> (можно получить из вывода команды lsusb -t).
  4. Нажать кнопку Добавить.
  5. Остановить и запустить ВМ (перезагрузки недостаточно).
Примеры добавления USB-устройств в консоли:
  • порт Spice:
    # qm set 100 --usb3 spice
    update VM 100: -usb3 spice
    
  • проброс конкретного USB-устройства:
    # qm set 100 --usb4 host=346d:5678
    update VM 100: -usb4 host=346d:5678
    

Примечание

Если выбран режим проброса Порт Spice, в клиенте можно динамически подключать/отключать USB:
Выбор USB-устройсва в SPICE клиенте

Примечание

Список подключенных к ВМ и хосту USB-устройств можно получить, введя на вкладке Монитор соответственно команды info usb и info usbhost:
Список подключенных к ВМ и хосту USB-устройств
Если напрямую проброшенное USB-устройство присутствует в конфигурации ВМ при запуске ВМ, но отсутствует на хосте, ВМ будет загружена без проблем. Как только устройство/порт станет доступным на хосте, оно будет проброшено в ВМ.

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

Использование прямого проброса не позволит переместить ВМ на другой хост, поскольку оборудование доступно только на хосте, на котором в данный момент находится ВМ.
Если в конфигурации ВМ присутствует USB-устройство для которого указано Использовать сопоставленное устройство, то такую ВМ можно будет переместить (в оффлайн режиме) на хост, у которого есть сопоставление данного устройства.

30.6.5. BIOS и UEFI

По умолчанию, в качестве прошивки, используется SeaBIOS, который эмулирует BIOS x86. Можно также выбрать OVMF, который эмулирует UEFI.
При использовании OVMF, необходимо учитывать несколько моментов:
  • Для сохранения порядка загрузки, должен быть добавлен диск EFI. Этот диск будет включен в резервные копии и моментальные снимки, и может быть только один.
  • При использовании OVMF с виртуальным дисплеем (без проброса видеокарты в ВМ) необходимо установить разрешение клиента в меню OVMF (которое можно вызвать нажатием кнопки ESC во время загрузки) или выбрать SPICE в качестве типа дисплея.
Пример изменения прошивки ВМ на UEFI:
  1. Поменять тип прошивки на UEFI:
    PVE. Настройка BIOS
  2. Добавить в конфигурацию ВМ диск EFI:
    PVE. Добавление диска EFI
Команда создания диска EFI:
# qm set <vm_id> -efidisk0 <storage>:1,format=<format>,efitype=4m,pre-enrolled-keys=1
где:
  • <storage> — хранилище, в котором будет размещён диск;
  • <format> — формат, поддерживаемый хранилищем;
  • efitype — указывает, какую версию микропрограммы OVMF следует использовать. Для новых ВМ необходимо указывать 4м (это значение по умолчанию в графическом интерфейсе);
  • pre-enroll-keys — указывает, должен ли efidisk поставляться с предварительно загруженными ключами безопасной загрузки для конкретного дистрибутива и Microsoft Standard Secure Boot. Включает безопасную загрузку по умолчанию.

30.6.6. Доверенный платформенный модуль (TPM)

TPM (англ. Trusted Platform Module) — спецификация, описывающая криптопроцессор, в котором хранятся криптографические ключи для защиты информации, а также обобщённое наименование реализаций указанной спецификации, например, в виде «чипа TPM» или «устройства безопасности TPM» (Dell).
Доверенный платформенный модуль можно добавить на этапе создания ВМ (вкладка Система) или для уже созданной ВМ.
Добавление TPM в веб-интерфейсе (ДобавитьФункция включения доверенного платформенного модуля):
PVE. Добавление TPM в веб-интерфейсе
Команда добавления TRM:
# qm set <vm_id> -tpmstate0 <storage>:1,version=<version>
где:
  • <storage> — хранилище, в которое будет помещён модуль;
  • <version> — версия (v1.2 или v2.0).

30.6.7. Проброс PCI(e)

Проброс PCI(e) — это механизм, позволяющий ВМ управлять устройством PCI(e) хоста.

Примечание

Если устройство передано на ВМ, его нельзя будет использовать на хосте или в любой другой ВМ.
Поскольку проброс PCI(e) — это функция, требующая аппаратной поддержки, необходимо убедиться, что ваше оборудование (ЦП и материнская плата) поддерживает IOMMU (I/O Memory Management Unit).
Если оборудование поддерживает проброс, необходимо выполнить следующую настройку:
  1. Включить поддержку IOMMU в BIOS/UEFI.
  2. Для процессоров Intel — передать ядру параметр intel_iommu=on (для процессоров AMD он должен быть включен автоматически).
  3. Убедиться, что следующие модули загружены (этого можно добиться, добавив их в файл /etc/modules):
    vfio
    vfio_iommu_type1
    vfio_pci
    vfio_virqfd
    
  4. Перезагрузить систему, чтобы изменения вступили в силу, и убедиться, что проброс действительно включен:
    # dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
    
Наиболее часто используемый вариант проброса PCI(e) — это проброс всей карты PCI(e), например, GPU или сетевой карты. В этом случае хост не должен использовать карту. Этого можно добиться двумя методами:
  • передать идентификаторы устройств в параметры модулей vfio-pci, добавив, например, в файл /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
    
Для применения изменений необходимо перезагрузить систему.
Добавления устройства PCI ВМ:
  • в веб-интерфейсе (ДобавитьУстройство PCI в разделе Оборудование):
    PVE. Добавление устройства PCI в веб-интерфейсе
    В веб-интерфейсе можно назначить ВМ до 16 устройств PCI(e).
  • в командной строке:
    # qm set VMID -hostpci0 00:02.0
    
    Если устройство имеет несколько функций (например, «00:02.0» и «00:02.1»), можно передать их с помощью сокращенного синтаксиса «00:02». Это эквивалентно установке отметки Все функции в веб-интерфейсе.
Идентификаторы поставщика и устройства PCI могут быть переопределены для сквозной записи конфигурации, и они необязательно должны соответствовать фактическим идентификаторам физического устройства. Доступные параметры: vendor-id, device-id, sub-vendor-id и sub-device-id. Можно установить любой или все из них, чтобы переопределить идентификаторы устройства по умолчанию:
# qm set VMID -hostpci0 02:00,device-id=0x10f6,sub-vendor-id=0x0000

30.6.8. Сопоставление устройств

При работе с локальными ресурсами (например, устройства PCI) прямое использование их необработанных адресов или идентификаторов может вызывать следующие проблемы:
  • при использовании HA на разных узлах могут существовать устройства с одинаковыми идентификаторами или путями, и при перемещении ВМ между узлами HA может ошибочно назначить неподходящее устройство, что приведёт к нарушению конфигурации;
  • замена или обновление оборудования может изменить идентификаторы или пути устройств, поэтому потребуется проверить все назначенные устройства для подтверждения их корректности.
Для устранения этих проблем можно настроить сопоставление ресурсов кластера, которое:
  • присваивает каждому устройству уникальный логический идентификатор в рамках кластера;
  • позволяет связывать этот идентификатор с разными физическими устройствами на разных узлах.
Создание сопоставления:
  1. На вкладке Центр обработки данныхСопоставления ресурсов в соответствующем разделе (Устройства PCI или USB-устройства) нажать кнопку Добавить:
    PVE. Сопоставления ресурсов
  2. В открывшемся окне указать название сопоставления, выбрать узел и устройство и нажать кнопку Создать:
    Добавление сопоставления PCI:
    PVE. Добавление сопоставления PCI
    Добавление сопоставления USB:
    PVE. Добавление сопоставления USB
  3. Нажать кнопку , расположенную в строке с созданным сопоставлением, и в открывшемся окне добавить сопоставление устройству на другом узле:
    PVE. Добавление сопоставления устройству на другом узле
    Результат добавления сопоставления STICK:
    PVE. Сопоставление STICK
Для создания сопоставленного устройства можно использовать команду:
# pvesh create /cluster/mapping/<тип> <опции>
где <тип> — это тип оборудования (pci или usb), а <опции> — сопоставления устройств и другие параметры конфигурации.
Следует обратить внимание, что конфигурация должна включать все идентифицирующие свойства устройства. Это позволяет проверять неизменность оборудования и гарантировать передачу корректного устройства.
Пример добавления сопоставления (device) PCI-устройства с разными путями на узлах кластера:
# 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 должен быть указан для каждого узла, для которого это устройство должно быть сопоставлено.

Примечание

Каждому сопоставлению на узле может соответствовать только одно USB-устройство.
Одно физическое PCI-устройство может предоставлять несколько виртуальных устройств на узле. Если такое устройство назначено гостевой системе, при запуске ВМ автоматически выбирается первое свободное устройство из сопоставленных. Порядок проверки устройств соответствует порядку их указания в конфигурации, это позволяет реализовать произвольные политики распределения (например, приоритизацию определенных устройств).
Назначить сопоставленное устройство ВМ можно в веб-интерфейсе (см. Проброс USB и Проброс PCI(e)), либо в командной строке:
  • устройство PCI:
    # qm set <vmid> -hostpci0 <сопоставление>
    
  • USB-устройство:
    # qm set <vmid> -usb0 <сопоставление>
    
где <vmid> — это идентификатор ВМ, а <сопоставление> — название сопоставления.
Для создания сопоставлений необходима привилегия Mapping.Modify на /mapping/<тип>/<сопоставление> (где <тип> — это тип устройства, <сопоставление> — название сопоставления). Для использования сопоставлений необходимо привилегия Mapping.Use на /mapping/<тип>/<сопоставление> (в дополнение к обычным привилегиям для редактирования конфигурации).

30.6.9. VirtioFS (проброс каталогов)

VirtioFS — это высокопроизводительная файловая система для совместного использования данных между хостом и виртуальными машинами без накладных расходов на сетевую файловую систему (позволяет обмениваться файлами между хостом и гостевой системой без участия сети). Виртуальные машины Linux с ядром >=5.4 поддерживают virtiofs по умолчанию (модуль ядра virtiofs).
Для использования virtiofs на узлах PVE должен быть установлен пакет virtiofsd:
# apt-get install virtiofsd

Примечание

Пакет virtiofsd не входит в состав ISO-образа дистрибутива, его можно установить из репозитория p11.
Для проброса каталога в ВМ необходимо:
  1. Настроить сопоставление каталогов.
  2. Добавить virtiofs в ВМ.

30.6.9.1. Настройка сопоставление каталогов

Создание сопоставления:
  1. На вкладке Центр обработки данныхDirectory Mappings нажать кнопку Добавить:
    PVE. Сопоставление каталогов
  2. В открывшемся окне указать указать название сопоставления, выбрать узел, указать абсолютный путь к каталогу и нажать кнопку Создать:
    PVE. Добавление сопоставления на узле pve01

    Примечание

    Каталог должен существовать.
  3. Добавить пути на других узлах. Для этого нажать кнопку , расположенную в строке с созданным сопоставлением:
    PVE. Добавление сопоставления каталогу на другом узле
    В открывшемся окне добавить каталог на другом узле:
Пример добавления сопоставления каталогов в командной строке:
# 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

30.6.9.2. Добавление VirtioFS в ВМ

Для добавления VirtioFS к ВМ необходимо:
  1. Перейти на вкладку Оборудование.
  2. Нажать кнопку Добавить и выбрать в выпадающем списке пункт Virtiofs:
    Кнопка «Добавить» → «Virtiofs»
  3. Откроется окно добавления устройства, в котором можно выбрать указать:
    • Directory ID — идентификатор сопоставления;
    • Кэш — режим кеширования (always, never, metadata или auto);
    • xaatr Support — включить расширенные атрибуты;
    • Posix ACLs — включить POSIX-права (автоматически включает xattr);
    • Allow Direct IO — прямой доступ (O_DIRECT).
    Проброс Virtiofs
  4. Нажать кнопку Добавить.
Примеры добавления VirtioFS к ВМ в командной строке:
# qm set 100 --virtiofs1 dirid=sharedir,cache=auto,expose-acl=1
# qm set 101 --virtiofs0 dirid=media,cache=always
Чтобы временно смонтировать virtiofs в ВМ с драйвером ядра Linux virtiofs, необходимо выполнить следующую команду внутри ВМ:
# mount -t virtiofs <dirid> <точка монтирования>
Например:
# mount -t virtiofs sharedir /mnt/pve_share
Для постоянного монтирования virtiofs можно создать запись fstab:
<dirid> <точка монтирования> virtiofs rw,relatime 0 0

30.6.10. Гостевой агент QEMU

Гостевой агент QEMU (QEMU Guest Agent) — это служба, которая работает внутри ВМ, обеспечивая канал связи между узлом и гостевой системой. Гостевой агент QEMU обеспечивает выполнение команд на ВМ и обмен информацией между ВМ и узлом кластера. Например, IP-адреса на панели сводки ВМ извлекаются с помощью гостевого агента.
Для правильной работы гостевого агента QEMU необходимо выполнить следующие действия:
  • установить агент в гостевой системе и убедиться, что он запущен;
  • включить связь гостевого агента с PVE.
Установка гостевого агента QEMU в ВМ с ОС «Альт»:
  1. Установить пакет qemu-guest-agent:
    # apt-get install qemu-guest-agent
    
  2. Добавить агент в автозапуск и запустить его:
    # systemctl enable --now qemu-guest-agent
    
Установка гостевого агента QEMU в ВМ с ОС «Windows»:
  1. Скачать и установить на ВМ драйверы Virtio.
  2. Скачать и установить на ВМ ПО QEMU Guest Agent.
  3. Убедиться, что в списке запущенных служб есть QEMU Guest Agent.
Связь PVE с гостевым агентом QEMU можно включить на вкладке Параметры требуемой ВМ в веб-интерфейсе:
PVE. Включить связь с гостевым агентом QEMU
или в командной строке:
# qm set <vmid> --agent 1
Для вступления изменений в силу необходим перезапуск ВМ.
Если включена опция Выполнять команду «trim»…, PVE выдаст команду trim гостевой системе после следующих операций, которые могут записать нули в хранилище:
  • перемещение диска в другое хранилище;
  • живая миграция ВМ на другой узел с локальным хранилищем.
В хранилище с тонким выделением ресурсов это может помочь освободить неиспользуемое пространство.
Связь с гостевым агентом QEMU происходит через UNIX-сокет, расположенный в /var/run/qemu-server/<my_vmid>.qga. Проверить связь с агентом можно помощью команды:
# qm agent <vmid> ping
Если гостевой агент правильно настроен и запущен в ВМ, вывод команды будет пустой.

30.7. Файлы конфигурации ВМ

Файлы конфигурации ВМ хранятся в файловой системе кластера PVE (/etc/pve/qemu-server/<VMID>.conf). Как и другие файлы, находящиеся в /etc/pve/, они автоматически реплицируются на все другие узлы кластера.

Примечание

VMID < 100 зарезервированы для внутренних целей. VMID должны быть уникальными для всего кластера.
Пример файла конфигурации:
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 для генерации и изменения этих файлов, либо выполнять такие действия в веб-интерфейсе.
При создании снимка ВМ, конфигурация ВМ во время снимка, сохраняется в этом же файле конфигурации в отдельном разделе. Например, после создания снимка «snapshot» файл конфигурации будет выглядеть следующим образом:
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).

Глава 31. Создание и настройка контейнера LXC

31.1. Создание контейнера в графическом интерфейсе

Перед созданием контейнера можно загрузить шаблоны LXC в хранилище. Это удобно делать в веб-интерфейсе (см. Управление ISO-образами и шаблонами LXC).
Для создания контейнера необходимо нажать кнопку Создать контейнер, расположенную в правом верхнем углу веб-интерфейса PVE:
Кнопка Создать контейнер
Будет запущен диалог Создать: Контейнер LXC, который предоставляет графический интерфейс для настройки контейнера.
На первой вкладке Общее необходимо указать:
  • Узел — узел назначения для данного контейнера;
  • CT ID — идентификатор контейнера в численном выражении;
  • Имя хоста — алфавитно-цифровая строка названия контейнера;
  • Непривилегированный контейнер — определяет, как будут запускаться процессы контейнера (если процессам внутри контейнера не нужны полномочия администратора, то необходимо снять отметку с этого пункта);
  • Вложенность — определяет возможность запуска контейнера в контейнере;
  • Пул ресурсов — логическая группа контейнеров. Чтобы иметь возможность выбора, пул должен быть предварительно создан;
  • Пароль — пароль для данного контейнера;
  • Открытый ключ(и) SSH — SSH-ключ.
Вкладка Общее диалога создания контейнера
На вкладке Шаблон следует выбрать:
  • Хранилище — хранилище, в котором хранятся шаблоны LXC;
  • Шаблон — шаблон контейнера.
Вкладка Шаблон диалога создания контейнера
На вкладке Диски определяется хранилище, где будут храниться диски контейнера. Здесь также можно определить размер виртуальных дисков (не следует выбирать размер диска менее 4 ГБ):
Вкладка Диски диалога создания контейнера
На вкладке Процессор определяется количество ядер процессора, которые будут выделены контейнеру:
Вкладка Процессор диалога создания контейнера
На вкладке Память настраиваются:
  • Память (MiB) — выделяемая память в мегабайтах;
  • Подкачка (MiB) — выделяемое пространство подкачки в мегабайтах.
Вкладка Память диалога создания контейнера
Вкладка Сеть включает следующие настройки:
  • Имя — определяет, как будет именоваться виртуальный сетевой интерфейс внутри контейнера (по умолчанию eth0);
  • MAC-адрес — можно задать определенный MAC-адрес, необходимый для приложения в данном контейнере (по умолчанию, все MAC-адреса для виртуальных сетевых интерфейсов назначаются автоматически);
  • Сетевой мост — выбор виртуального моста, к которому будет подключаться данный интерфейс (по умолчанию vmbr0);
  • Тег VLAN — применяется для установки идентификатора VLAN для данного виртуального интерфейса;
  • Сетевой экран — поддержка межсетевого экрана (если пункт отмечен, применяются правила хоста);
  • IPv4/IPv6 — можно настроить и IPv4, и IPv6 для виртуального сетевого интерфейса. IP-адреса можно устанавливать вручную или разрешить получать от DHCP-сервера для автоматического назначения IP. IP-адрес должен вводиться в нотации CIDR (например, 192.168.0.30/24).
Вкладка Сеть диалога создания контейнера
Вкладка DNS содержит настройки:
  • Домен DNS — имя домена (по умолчанию используются параметры хост системы);
  • Серверы DNS — IP-адреса серверов DNS (по умолчанию используются параметры хост системы).
Вкладка DNS диалога создания контейнера
Во вкладке Подтверждение отображаются все введенные или выбранные значения для данного контейнера:
Вкладка Подтверждение диалога создания контейнера
Для создания контейнера следует нажать кнопку Завершить. Если необходимо внести изменения в параметры контейнера, можно перейти по вкладкам назад.
Если отметить пункт Запуск после создания контейнер будет запущен сразу после создания.
После нажатия кнопки Завершить во вкладке Подтверждение диалог настройки закрывается и в браузере открывается новое окно, которое предлагает возможность наблюдать за построением PVE контейнера LXC из шаблона:
Создание контейнера

31.2. Создание контейнера из шаблона в командной строке

Контейнер может быть создан из шаблона в командной строке хоста PVE.
Следующий bash-сценарий иллюстрирует применение команды 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

31.3. Изменение настроек контейнера

Изменения в настройки контейнера можно вносить и после его создания. При этом изменения сразу же вступают в действие, без необходимости перезагрузки контейнера.
Есть три способа, которыми можно регулировать выделяемые контейнеру ресурсы:
  • веб-интерфейс PVE;
  • командная строка;
  • изменение файла конфигурации.

31.3.1. Изменение настроек в веб-интерфейсе

В большинстве случаев изменение настроек контейнера и добавление виртуальных устройств может быть выполнено в веб-интерфейсе.
Для изменения настроек контейнера можно использовать вкладки:
  • Ресурсы (оперативная память, подкачка, количество ядер ЦПУ, размер диска);
  • Сеть;
  • DNS;
  • Параметры.
Изменений настроек контейнера в веб-интерфейсе PVE
Для редактирования ресурсов следует выполнить следующие действия:
  1. В режиме просмотра по серверам выбрать контейнер;
  2. Перейти на вкладку Ресурсы;
  3. Выбрать элемент для изменения: Память, Подкачка или Ядра, и нажать кнопку Редактировать;
  4. В открывшемся диалоговом окне ввести нужные значения и нажать кнопку OK.
Если необходимо изменить размер диска контейнера, например, увеличить до 18 ГБ вместо предварительно созданного 8 ГБ, нужно выбрать элемент Корневой диск, нажать кнопку Действие над томомИзменить размер, в открывшемся диалоговом окне ввести значение увеличения размера диска и нажать кнопку Изменить размер диска:
Изменение размера диска
Для перемещения образа диска в другое хранилище нужно выбрать элемент Корневой диск, нажать кнопку Действие над томомПереместить хранилище, в открывшемся окне в выпадающем меню Целевое хранилище выбрать хранилище-получатель, отметить, если это необходимо, пункт Удалить источник для удаления образа диска из исходного хранилища и нажать кнопку Переместить том:
Диалоговое окно перемещения тома
Для изменения сетевых настроек контейнера необходимо:
  1. В режиме просмотра по серверам выбрать контейнер;
  2. Перейти на вкладку Сеть. На экране отобразятся все настроенные для контейнера виртуальные сетевые интерфейсы:
    Виртуальные сетевые интерфейсы контейнера
  3. Выбрать интерфейс и нажать кнопку Редактировать;
  4. После внесения изменений нажать кнопку OK:
    Изменение сетевых настроек контейнера
На вкладке Параметры можно отредактировать разные настройки контейнера, например, Режим консоли:
  • tty — открывать соединение с одним из доступных tty-устройств (по умолчанию);
  • shell — вызывать оболочку внутри контейнера (без входа в систему);
  • /dev/console — подключаться к /dev/console.
Параметры контейнера

Примечание

В случаях, когда изменение не может быть выполнено в горячем режиме, оно будет зарегистрировано как ожидающее изменение (отображается красным цветом). Такие изменения будут применены только после перезапуска контейнера.
Изменения, которые будут применены после перезапуска контейнера

31.3.2. Настройка ресурсов в командной строке

Если веб-интерфейс PVE недоступен, можно управлять контейнером в командной строке (либо через сеанс SSH, либо из консоли noVNC, или зарегистрировавшись на физическом хосте).
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]
Например, изменить IP-адрес контейнера #105:
# 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>
Список контейнеров LXC данного узла:
# pct list
VMID       Status     Lock         Name
105        running                 newLXC
106        stopped                 altLXC
Запуск и остановка контейнера LXC из командной строки:
# pct start <ct_id>
# pct stop <ct_id>
Уничтожение контейнера:
# pct destroy <ct_id>
Если необходимо также удалить контейнер из заданий репликации, заданий резервного копирования и конфигураций ресурсов HA, следует использовать параметр --purge.

31.3.3. Настройка ресурсов прямым изменением

В PVE файлы конфигурации контейнеров находятся в каталоге /etc/pve/lxc, а файлы конфигураций ВМ — в /etc/pve/qemu-server/.
У контейнеров LXC есть большое число параметров, которые не могут быть изменены в веб-интерфейсе или с помощью утилиты 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

31.4. Запуск и остановка контейнеров

31.4.1. Изменение состояния контейнера в веб-интерфейсе

Для запуска контейнера следует выбрать его в левой панели; его иконка должна быть серого цвета, обозначая, что контейнер не запущен.
Запустить контейнер можно, выбрав в контекстном меню контейнера пункт Запуск:
Контекстное меню контейнера
либо нажав кнопку Запуск :
Кнопки управления состоянием контейнера
Запущенный контейнер будет обозначен зеленой стрелкой на значке контейнера.
Для запущенного контейнера доступны следующие действия:
  • Отключить — остановка контейнера;
  • Остановка — остановка контейнера, путем прерывания его работы;
  • Перезагрузить — перезапуск контейнера.

31.4.2. Изменение состояния контейнера в командной строке

Состоянием контейнера можно управлять из командной строки PVE (либо через сеанс SSH, либо из консоли noVNC, или зарегистрировавшись на физическом хосте).
Для запуска контейнера с VM ID 105 необходимо ввести команду:
# pct start 105
Этот же контейнер может быть остановлен при помощи команды:
# pct stop 105

31.5. Доступ к LXC контейнеру

Способы доступа к LXC контейнеру:
  • консоль: noVNC, SPICE или xterm.js;
  • SSH;
  • интерфейс командной строки PVE.
Можно получить доступ к контейнеру из веб-интерфейса при помощи консоли noVNC. Это почти визуализированный удаленный доступ к экземпляру.
Для доступа к запущенному контейнеру в консоли следует выбрать в веб-интерфейсе нужный контейнер, а затем нажать кнопку Консоль и в выпадающем меню выбрать нужную консоль:
Кнопка Консоль
Консоль также можно запустить, выбрав вкладку Консоль для контейнера:
Консоль
Одной из функций LXC контейнера является возможность прямого доступа к оболочке контейнера через командную строку его узла хоста. Команда для доступа к оболочке контейнера LXC:
# pct enter <ct_id>
Данная команда предоставляет прямой доступ на ввод команд внутри указанного контейнера:
[root@pve03 ~]# pct enter 105
[root@newLXC ~]#
Таким образом был получен доступ к контейнеру LXС с именем newLXC на узле pve01. При этом для входа в контейнер не был запрошен пароль. Так как контейнер работает под пользователем root, можно выполнять внутри этого контейнера любые задачи. Завершив их, можно просто набрать 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% /

Глава 32. Программно-определяемые сети (SDN)

Программно-определяемые сети (Software Defined Networking, SDN) в PVE — это модульная система управления сетями, которая позволяет создавать и настраивать виртуальные сети, изолированные виртуальные среды (VLAN, VXLAN, EVPN) и централизованно управлять связностью между гостевыми системами.
Ключевые компоненты SDN:
  • зона — виртуально разделенная сетевая область;
  • виртуальная сеть (VNet) — виртуальная сеть в рамках зоны;
  • подсеть — диапазон IP-адресов внутри VNet.
Тип зоны определяет поведение сети, её функциональность, преимущества и ограничения.
Варианты использования SDN варьируются от изолированных частных сетей на отдельных узлах до распределенных оверлейных сетей в мультикластерных средах PVE (включая географически разнесенные локации).
После настройки VNet она становится доступной как общий мост Linux на каждом узле кластера и может назначаться ВМ и контейнерам.

32.1. Технология и конфигурация

Настройка SDN выполняется в веб-интерфейсе на уровне центра обработки данных и разделена на следующие разделы:
  • SDN — отображает текущее состояние SDN. Здесь также можно применить ожидающие изменения ко всему кластеру;
  • Зоны — создание и управление виртуально разделенными сетевыми зонами;
  • VNets — создание виртуальных сетевых мостов и управление подсетями.
SDN. Раздел Параметры
В разделе Параметры можно управлять дополнительными службами, которые будут использоваться в настройке SDN:
  • Контроллеры — управление маршрутизацией уровня 3 в сложных настройках (BGP-контроллер, связывающий узлы);
  • IPAM — система управления IP-адресами гостевых систем (встроенная или внешняя);
  • DNS — интеграция с DNS.
Реализация SDN в PVE максимально использует стандартные сетевые возможности Linux.
Конфигурация PVE SDN хранится в каталоге /etc/pve/sdn, который совместно используется всеми узлами кластера через файловую систему PVE.
Внесённые изменения сразу не применяются, а сначала регистрируются как ожидающие. Применить набор ожидающих изменений можно, нажав кнопку Применить в разделе Центр обработки данныхSDN или, выполнив команду:
# pvesh set /cluster/sdn
Такая система позволяет развертывать различные изменения как единое атомарное.
SDN отслеживает развернутое состояние через файлы .running-config и .version, расположенные в /etc/pve/sdn.

32.2. Зоны

Зона — это логически изолированная сетевая область, которая ограничена определенными узлами кластера и назначенными разрешениями. Пользователи могут работать только с ресурсами своей зоны и принадлежащими ей виртуальными сетями.
Поддерживаемые технологии:
  • Simple — изолированный мост; простой маршрутируемый мост уровня 3 (NAT);
  • VLAN — виртуальные локальные сети (классический метод сегментации локальной сети);
  • QinQ — многоуровневая стекированная VLAN (IEEE 802.1ad);
  • VXLAN — виртуальная сеть уровня 2 через UDP-туннель;
  • EVPN (BGP EVPN) — VXLAN с поддержкой BGP для маршрутизации уровня 3.
Для каждой зоны можно определить правила межсетевого экрана для входящего и/или исходящего трафика.

Таблица 32.1. Общие параметры зон

Свойство
Описание
nodes
Список узлов кластера, на которых должны быть развернуты зона и связанные с ней виртуальные сети
ipam
Инструмент управления IP-адресами (IPAM) для управления IP-адресами в зоне (по умолчанию — pve)
dns
Адрес API сервера DNS
ReverseDNS
Адрес API сервера обратного DNS
DNSZone
Имя DNS-домена. Используется для регистрации имен узлов, например <hostname>.<domain>. Зона DNS должна уже существовать на DNS-сервере

32.2.1. Простые (Simple) зоны

Simple зона (type simple) — базовый тип зоны, предназначенный для простого локального управления VNet, без использования VLAN, VXLAN, маршрутизации или оверлеев.
Плагин создает изолированный мост Vnet, не связанный с физическим интерфейсом, обеспечивающий только локальный трафик между ВМ на одном узле. Этот мост может использоваться в NAT-конфигурациях или маршрутизируемых схемах.

32.2.2. Зоны VLAN

VLAN-зона (type vlan) — зона, в которой каждый виртуальный сегмент (VNet) соответствует определённому VLAN ID. Внутри зоны создаются VNet, указывающие, какие VLAN ID они используют и через какие интерфейсы осуществляется маршрутизация. Плагин VLAN использует существующий локальный мост (Linux или OVS) для подключения к физическому интерфейсу узла.

Примечание

При использовании VLAN-зоны, физический коммутатор должен быть настроен соответствующим образом, чтобы корректно обрабатывать VLAN-трафик. Коммутатор должен поддерживать 802.1Q (VLAN tagging).
Дополнительный параметр конфигурации зоны VLAN:
  • bridge — локальный мост с поддержкой VLAN, который уже настроен на каждом локальном узле.

32.2.3. Зоны QinQ

Зона QinQ (type qinq) — расширение обычной VLAN-зоны, позволяющее использовать двойную VLAN-тегировку (802.1ad), то есть VLAN внутри VLAN. Зона QinQ определяет внешний VLAN-тег (сервисную VLAN, S-tag), тогда как внутренний тег (C-tag) определяется VNet.

Примечание

Сетевые коммутаторы должны поддерживать стекированные VLAN.
Дополнительные параметры конфигурации зоны QinQ:
  • bridge — локальный мост с поддержкой VLAN, который уже настроен на каждом локальном узле;
  • tag — основной VLAN-тег этой зоны;
  • vlan-protocol — протокол сервисной VLAN: 802.1q (по умолчанию) или 802.1ad;
  • mtu — из-за двойного стекирования тегов для QinQ VLAN нужно на 4 байта больше. Например, если MTU физического интерфейса равен 1500, необходимо уменьшить MTU виртуальной сети до 1496.

32.2.4. Зоны VXLAN

Зоны VXLAN (type vxlan) — используются для создания оверлей-сетей, которые позволяют соединять ВМ на разных физических узлах через виртуальные сети (VNet), изолированные друг от друга. Это обеспечивает масштабируемость, гибкость и независимость от физической топологии. Плагин VXLAN инкапсулирует Ethernet-кадры уровня 2 в UDP-датаграммы уровня 4, используя порт назначения по умолчанию 4789.
VXLAN позволяет создавать виртуальные сегменты с изолированным пространством VLAN, но без ограничений на число VLAN (в отличие от 802.1Q).
VXLAN используется в SDN для связи ВМ между узлами кластера PVE без настройки физической инфраструктуры.

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

VXLAN сам по себе не обеспечивает шифрование. Для соединения удалённых площадок обязательно использование VPN (например, «сайт-сайт»).
Дополнительные параметры конфигурации зоны VXLAN:
  • peers — список IP-адресов всех узлов кластера, участвующих в VXLAN-зоне. Может включать внешние узлы, доступные по указанным IP-адресам. Должен содержать все узлы кластера;
  • mtu — поскольку инкапсуляция VXLAN использует 50 байт, MTU виртуальной сети должен быть на 50 байт меньше, чем MTU физического интерфейса.

32.2.5. Зоны EVPN

Настройка EVPN зоны (type evpn) в PVE SDN позволяет реализовать распределённую L2-сеть поверх L3-инфраструктуры с использованием BGP EVPN как протокола маршрутизации. Данная зона подходит для крупных сетей и дата-центров с мультиузловой маршрутизацией.
VNet EVPN может иметь IP-адрес anycast и/или MAC-адрес. IP-адрес моста одинаков на всех узлах, что позволяет использовать его как шлюз в гостевых ОС.
Маршрутизация может работать между VNet из разных зон через интерфейс VRF (Virtual Routing and Forwarding).
Дополнительные параметры конфигурации зоны EVPN:
  • vrf-vxlan — VXLAN-ID, используемый для выделенного маршрутного соединения между VNet (должен отличаться от VXLAN-ID VNet);
  • controller — контроллер EVPN;
  • mac — anycast MAC-адрес, который назначается всем VNet в этой зоне (если не определен, будет сгенерирован автоматически);
  • exitnodes — узлы, выступающие в роли шлюзов в реальную сеть. Настроенные узлы объявят маршрут по умолчанию в сети EVPN;
  • exitnodes-primary — если используется несколько выходных узлов, принудительно пропускать трафик через этот основной выходной узел вместо балансировки нагрузки на всех узлах. Необязательно, но необходимо, если будет использоваться SNAT или если маршрутизатор не поддерживает ECMP;
  • exitnodes-local-routing — специальный параметр, если нужен доступ к ВМ/контейнеру из выходного узла (по умолчанию выходные узлы разрешают пересылку трафика только между реальной сетью и сетью EVPN);
  • advertise-subnets — объявлять полную подсеть в EVPN. Если в кластере есть «молчащие» ВМ/контейнеры (назначены IP-адреса, которые не проявляют активность) и anycast-шлюз не видит от них трафика, то такие IP могут быть недоступны из EVPN-сети. Данный параметер заставляет SDN явно объявить всю подсеть, независимо от активности;
  • disable-arp-nd-suppression — не подавлять пакеты ARP или ND (Neighbor Discovery). Необходимо, если в ВМ используются плавающие IP-адреса (IP и MAC-адреса перемещаются между системами);
  • rt-import — позволяет импортировать список внешних целей маршрута EVPN. Используется для межсетевых соединений DC или различных сетей EVPN;
  • mtu — поскольку инкапсуляция VXLAN использует 50 байт, MTU виртуальной сети должен быть на 50 байт меньше физического (по умолчанию 1450).

32.3. Виртуальные сети

После создания виртуальной сети (VNet) на каждом узле будет доступен локальный сетевой интерфейс с тем же именем. Чтобы подключить гостевую систему к VNet, следует соответствующим образом назначить интерфейс ВМ/контейнеру и задать IP-адрес.
Параметры конфигурации VNet:
  • id — идентификатор виртуальной сети (до 8 символов);
  • alias — более описательный идентификатор (опционально). Назначается как псевдоним на интерфейсе;
  • zone — зона связанная с этой сетью;
  • tag — уникальный идентификатор VLAN или VXLAN;
  • vlanaware — включает параметр VLAN-aware на интерфейсе, позволяя настройку в гостевой системе;
  • isolate-ports — устанавливает флаг изоляции для всех гостевых портов этого интерфейса, но не для самого интерфейса. Это означает, что гостевые системы могут отправлять трафик только на неизолированные порты моста, которые являются самим мостом. Чтобы эта настройка вступила в силу, необходимо перезапустить затронутую гостевую систему.

Примечание

Изоляция действует на уровне узла. Для межузловой изоляции следует использовать межсетевой экран VNet. Например, можно запретить всё (установить DROP по умолчанию) и разрешить трафик между подсетью и шлюзом.

32.4. Подсети

Подсеть определяет диапазон IP-адресов в формате CIDR. Одна виртуальная сеть может содержать несколько подсетей.
Параметры конфигурации подсети:
  • id — адрес сети в нотации CIDR (например, 10.0.0.0/8);
  • gateway — IP-адрес шлюза по умолчанию сети. В зонах уровня 3 (плагины Simple/EVPN) он будет развернут в виртуальной сети;
  • snat — включить Source NAT, который позволяет гостевым системам из VNet подключаться к внешней сети, пересылая пакеты на исходящий интерфейс узлов. В зонах EVPN пересылка выполняется на шлюзовых узлах EVPN;
  • dnszoneprefix — префикс к DNS-домену, например: <hostname>.prefix.<domain>.

32.5. IPAM

Инструменты управления IP-адресами (IP Address Management, IPAM) — это механизм автоматического назначения IP-адресов и маршрутизации для ВМ и контейнеров, подключённых к виртуальным сетям (VNet).
Один экземпляр IPAM может быть связан с одной или несколькими зонами.
Добавить плагин IPAM можно в разделе Центр обработки данныхSDNПараметры в секции IPAM, нажав кнопку Добавить и выбрав соответствующий плагин:
Добавление плагина IPAM

32.5.1. Плагин PVE IPAM

PVE IPAM — встроенный плагин IPAM в PVE.
Текущее состояние плагина PVE IPAM можно просмотреть в разделе Центр обработки данныхSDNIPAM. В этом разделе можно создавать, обновлять и удалять сопоставления IP-адресов:
Панель IPAM
Если используется DHCP, панель IPAM можно использовать для создания или редактирования IP-адресов, выделенных определенным ВМ. После изменения IP-адреса следует перезагрузить сетевой стек гостевой системы или перезагрузить ВМ.
Просмотреть текущее состояние плагина PVE IPAM можно, выполнив команду:
# pvesh get /cluster/sdn/ipams/pve/status --output-format yaml

32.5.2. Плагин NetBox IPAM

NetBox — это система управления IP-адресами (IPAM) и инфраструктурой центра обработки данных (DCIM) с открытым исходным кодом.
Параметры конфигурации NetBox:
  • url — конечная точка NetBox REST API: http://<netboxURL>/api;
  • token — API-токен доступа.

32.5.3. Плагин phpIPAM

В phpIPAM необходимо создать «приложение» и добавить API-токен с правами администратора.
Параметры конфигурации phpIPAM:
  • url — конечная точка REST API: http://<phpipam>/api/<appname>/;
  • token — API-токен доступа;
  • section — целочисленный идентификатор раздела (раздел — группа подсетей в phpIPAM, в установках по умолчанию для клиентов используется sectionid=1).

32.6. DNS

Плагин DNS в PVE SDN используется для автоматического управления DNS-записями (например, A/AAAA и PTR) при назначении IP-адресов через IPAM. Конфигурация DNS может быть связана с одной или несколькими зонами для регистрации DNS-записей всех IP-адресов в подсетях этих зон.
Добавить плагин DNS можно в разделе Центр обработки данныхSDNПараметры в секции DNS, нажав кнопку Добавитьpowerdns.
Добавление плагина DNS

32.6.1. Плагин PowerDNS

Примечание

PowerDNS должен быть установлен на внешнем сервере и подключен через API.
В конфигурации PowerDNS должны быть включены веб-сервер и REST API:
api=yes
api-key=WcSieGekANq5KCcEkSk8k7Mv88Wbm7 # случайно сгенерированная строка
webserver=yes
webserver-port=8081
Добавление плагина PowerDNS
Параметры конфигурации PowerDNS:
  • URL (url) — конечная точка REST API: http://<powerdnserver>:8081/api/v1/servers/localhost;
  • Ключ API (token) — ключ доступа API;
  • TTL (ttl) — время жизни DNS-записей по умолчанию.

32.7. DHCP

Плагин DHCP в PVE SDN используется для автоматического развертывания DHCP-сервера в зоне. Он предоставляет DHCP для всех подсетей в зоне, в которых настроен диапазон адресов. В настоящее время единственным доступным бэкэнд-плагином для DHCP является плагин dnsmasq.
Плагин DHCP выделяет IP-адреса через IPAM-плагин зоны при добавлении нового сетевого интерфейса в ВМ или контейнер.
При запуске ВМ в плагине DHCP зоны создается сопоставление для MAC и IP-адреса. При удалении сетевых интерфейсов или уничтожении ВМ/контейнера записи в IPAM и DHCP также удаляются.

Примечание

Некоторые функции (добавление, редактирование, удаление сопоставлений IP) в настоящее время доступны только при использовании плагина PVE IPAM.
Включить DHCP для зоны можно в дополнительных параметрах зоны — поле Автоматический DHCP.

Примечание

В настоящее время только простые зоны (Simple Zone) поддерживают автоматический DHCP.
Если для зоны включен автоматический DHCP, для подсетей в зоне необходимо настроить диапазоны DHCP. Сделать это можно в разделе Vnets, выбрав подсеть, для которой нужно настроить диапазоны DHCP. Диапазоны DHCP для подсети также можно задать с помощью команды:
# 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
Для подсети также необходимо настроить шлюз — в противном случае автоматический DHCP работать не будет.
Плагин DHCP будет выделять IP-адреса в IPAM только в настроенных диапазонах.

32.7.1. Плагин Dnsmasq

В настоящее время Dnsmasq это единственный плагин DHCP и, следовательно, плагин, который используется при включении DHCP для зоны.
Плагин создаёт новую службу systemd для каждой зоны, в которой развертывается dnsmasq. Имя службы — dnsmasq@<zone>. Жизненный цикл этой службы управляется плагином DHCP.
Плагин автоматически генерирует следующие конфигурационные файлы в каталоге /etc/dnsmasq.d/<zone>:
  • 00-default.conf — содержит глобальную конфигурацию по умолчанию для экземпляра dnsmasq;
  • 10-<Vnet>.conf — содержит DHCP-диапазоны для экземпляра dnsmasq;
  • ethers — содержит сопоставления MAC и IP-адресов из плагина IPAM. Чтобы переопределить эти сопоставления, следует использовать соответствующий плагин IPAM, а не редактировать этот файл, так как он будет перезаписан плагином dnsmasq.
Вышеуказанные файлы нельзя редактировать, так как они управляются плагином DHCP. Для настройки конфигурации, можно создать дополнительные файлы (например, 90-custom.conf) — они не будут изменены плагином DHCP dnsmasq.
Аренда DHCP хранится в файле /var/lib/misc/dnsmasq.<zone>.leases..
При использовании плагина PVE IPAM можно управлять DHCP-арендой (см. Плагин PVE IPAM)

32.8. Интеграция с межсетевым экраном

SDN интегрируется с межсетевым экраном PVE, автоматически генерируя наборы IP-адресов (IPSet), на которые затем можно ссылаться в полях источника/назначения правил межсетевого экрана. Наборы IP-адресов генерируются автоматически для записей VNets и IPAM.

32.8.1. Виртуальные сети и подсети

Межсетевой экран автоматически генерирует следующие наборы IP-адресов в области SDN для каждой виртуальной сети:
  • vnet-all — содержит CIDR всех подсетей в виртуальной сети;
  • vnet-gateway — содержит IP-адреса шлюзов всех подсетей в виртуальной сети;
  • vnet-no-gateway — содержит CIDR всех подсетей в виртуальной сети, но исключает шлюзы;
  • vnet-dhcp — содержит все диапазоны DHCP, настроенные в подсетях в виртуальной сети.
При изменении конфигурации наборы IP-адресов обновляются автоматически.
Например, для конфигурации: простая зона (simple) с виртуальной сетью vnet0, для которой настроены две подсети:
  • подсеть IPv4 10.20.30.0/24 с шлюзом 10.20.30.1 и диапазоном DHCP 10.20.30.100 - 10.20.30.150;
  • подсеть IPv6 2001:db8::/64 с шлюзом 2001:db8::1 и диапазоном DHCP 2001:db8::100 - 2001:db8::199.
# /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

32.8.2. IPAM

Если используется встроенный PVE IPAM, то межсетевой экран автоматически генерирует IPset для каждой гостевой системы, у которой есть записи в IPAM. Например, ВМ с ID 100 будет соответствовать IPset guest-ipam-100. Он будет содержать все IP-адреса из всех записей IPAM. Таким образом, если ВМ 100 является членом нескольких виртуальных сетей, то IPset будет содержать IP-адреса из всех VNet.
При добавлении/обновлении/удалении записей IPSet будут обновлены соответствующим образом.

Примечание

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

32.9. Примеры настройки SDN

Примечание

Для возможности создания зон на каждом узле кластера в файле /etc/network/interfaces должна присутствовать строка:
source /etc/network/interfaces.d/*

32.9.1. Настройка Simple Zone

Пример создания Simple Zone в веб-интерфейсе:
  1. Создать зону:
    • перейти в раздел Центр обработки данныхSDNЗоны, нажать кнопку Добавить и в выпадающем меню выбрать пункт Simple:
      Создание зоны
    • указать название и другие параметры зоны:
      Создание Simple Zone
      Для возможности автоматического назначения IP-адресов гостевым системам, можно установить отметку в поле автоматический DHCP (доступно если отмечен пункт Дополнительно).
  2. Создать виртуальную сеть:
    • перейти в раздел Центр обработки данныхSDNVNets и в секции VNets нажать кнопку Создать:
      Кнопка Создать виртуальную сеть
    • в открывшемся окне указать название сети и выбрать созданную на предыдущем шаге зону:
      Создание виртуальной сети
  3. Cоздать подсеть (определить параметры для виртуальной сети):
    • выделить созданную сеть и в секции Подсети нажать кнопку Создать:
      Кнопка Создать подсеть
    • на вкладке Общее указать:
      • Подсеть — адрес сети в нотации CIDR;
      • Шлюз — IP-адрес шлюза по умолчанию сети. В зонах уровня 3 (плагины Simple/EVPN) он будет развернут в виртуальной сети;
      • SNAT — включить Source NAT, который позволяет гостевым системам из VNet подключаться к внешней сети, пересылая пакеты на исходящий интерфейс узлов. В зонах EVPN пересылка выполняется на шлюзовых узлах EVPN (если доступ к внешней сети не нужен, можно не устанавливать эту отметку);
      • Префикс зоны DNS — позволяет добавить префикс к регистрации домена, например <hostname>.prefix.<domain>;
      Создание подсети. Вкладка Общее
    • на вкладке Диапазоны адресов DHCP, если для зоны был отмечен пункт Автоматически (DHCP), можно настроить диапазоны адресов, которые будут выдаваться сервером DHCP:
      Создание подсети. Вкладка Диапазоны адресов DHCP
  4. Применить изменения. Для этого перейти в раздел Центр обработки данныхSDN и нажать кнопку Применить:
    Применить изменения
    В результате на узлах кластера, которые были выбраны при создании зоны, появятся созданные виртуальные зоны (VirtZone) и сетевые мосты (VirtNet):
    Cозданные виртуальные зоны
  5. Назначить виртуальный мост гостевым системам (сделать это можно при создании или редактировании параметров ВМ/контейнера), например:
    Назначение виртуального моста ВМ
    Гостевой системе также необходимо назначить статический IP-адрес из диапазона IP-адресов подсети или выбрать получение IP по DHCP, если для зоны был отмечен Автоматический DHCP.

Примечание

Если при настройке сети был отмечен пункт SNAT, узел автоматически получит IP-адрес шлюза (10.25.16.1) и будет функционировать в качестве NAT-шлюза для гостевых систем в указанной подсети.
Пример создания Simple Zone в консоли:
  1. Создать зону simple:
    # 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
    
  2. Создать сеть vnet0:
    # 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
    
  3. Создать подсеть 10.20.30.0/24:
    # 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
    
  4. Изменить диапазон выдаваемых DHCP-сервером IP-адресов:
    # 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
    
  5. Применить конфигурацию:
    # pvesh set /cluster/sdn
    pve03: reloading network config
    pve01: reloading network config
    pve02: reloading network config
    UPID:pve01:00021C9F:0029311C:681F9B30:reloadnetworkall::root@pam:
    
  6. Назначить виртуальный мост vnet0 контейнеру 101:
    # 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
    
На вкладке Центр обработки данныхSDNIPAM будут отображаться виртуальные сети и все задействованные IP-дреса:
Виртуальные сети и задействованные IP-дреса
Соединение между гостевыми системами будет возможно, если все они находятся на одном узле.

32.9.2. Настройка зоны VLAN

Пример создания зоны VLAN в веб-интерфейсе:
  1. Создать зону myvlan:
    • перейти в раздел Центр обработки данныхSDNЗоны, нажать кнопку Добавить и в выпадающем меню выбрать пункт VLAN:
      Создание зоны
    • указать название зоны и в поле Bridge указать интерфейс моста. При необходимости, в поле MTU можно ввести свое значение MTU (по умолчанию 1450):
      Создание зоны VLAN
  2. Создать виртуальную сеть:
    • перейти в раздел Центр обработки данныхSDNVNets и в секции VNets нажать кнопку Создать:
      Кнопка Создать виртуальную сеть
    • в открывшемся окне указать название сети, выбрать созданную на предыдущем шаге зону и в поле Метка указать VLAN ID:
      Создание виртуальной сети для зоны VLAN
  3. Применить изменения. Для этого перейти в раздел Центр обработки данныхSDN и нажать кнопку Применить:
    Применить изменения
    В результате на узлах кластера, которые были выбраны при создании зоны, появятся созданные виртуальные зоны и сетевые мосты.
  4. Назначить виртуальный мост гостевым системам, например:
    Пример настройки сетевого устройства контейнера 101
    Гостевой системе также необходимо назначить статический IP-адрес из диапазона IP-адресов подсети или выбрать получение IP по DHCP, если для зоны был отмечен Автоматический DHCP.

Примечание

Если при настройке сети был отмечен пункт SNAT, узел автоматически получит IP-адрес шлюза (10.25.16.1) и будет функционировать в качестве NAT-шлюза для гостевых систем в указанной подсети.
Пример создания зоны VLAN в консоли:
  1. Создать зону myvlan2:
    # 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
    
  2. Создать сеть vlannet2:
    # 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
    
  3. Применить конфигурацию:
    # pvesh set /cluster/sdn
    
  4. Назначить виртуальный vlannet2 мост контейнеру 106 на узле pve03:
    # pvesh set /nodes/pve03/lxc/106/config \
    --net0 name=eth0,bridge=vlannet2,gw=192.168.100.1,ip=192.168.100.94/24
    
Соединение между гостевыми системами будет возможно, даже если они находятся на разных узлах.

32.9.3. Настройка зоны QinQ

В этом примере настраиваются две зоны QinQ и добавляются две ВМ в каждую зону для демонстрации дополнительного уровня тегов VLAN, что позволяет настраивать более изолированные VLAN.
Пример создания зоны QinQ в веб-интерфейсе:
  1. Создать зону qinq20 со служебной VLAN 20:
    • перейти в раздел Центр обработки данныхSDNЗоны, нажать кнопку Добавить и в выпадающем меню выбрать пункт QinQ:
      Создание зоны
    • указать название зоны, в поле Bridge мост, через который будет передаваться трафик, в поле Сервисная VLAN указать VLAN ID (внешний VLAN ID, который будет использоваться на физическом уровне). При необходимости, в поле MTU можно ввести свое значение MTU (по умолчанию 1450):
      Создание зоны QinQ
  2. Повторить п.1 и создать зону qinq30 с VLAN ID 30.
  3. Создать виртуальную сеть qvnet1 с VLAN ID 100 в зоне qinq20:
    • перейти в раздел Центр обработки данныхSDNVNets и в секции VNets нажать кнопку Создать:
      Кнопка Создать виртуальную сеть
    • в открывшемся окне указать название сети, выбрать созданную на предыдущем шаге зону и в поле Метка указать VLAN ID (внутренний VLAN ID):
      Создание виртуальной сети для зоны QinQ
  4. Повторить п.1 и создать виртуальную сеть qvnet2 с VLAN ID 100 в зоне qinq30.
  5. Применить изменения. Для этого перейти в раздел Центр обработки данныхSDN и нажать кнопку Применить:
    Применить изменения
  6. Cоздать четыре ВМ, в качестве моста для первой пары ВМ необходимо указать qvnet1, для второй — qvnet2. Внутри ВМ настроить IP-адреса интерфейсов, например, назначив IP-адреса из диапазона 10.0.3.101–10.0.3.104.
В результате данной настройки возможность пинговать друг друга будет у ВМ1 и ВМ2, а также у ВМ3 и ВМ4. Однако ни одна из машин ВМ1 или ВМ2 не сможет пинговать ВМ3 или ВМ4, так как они находятся в зоне с другим сервисным VLAN.
Пример создания зоны QinQ в консоли:
  1. Создать зону myqinq:
    # 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
    
  2. Создать сеть myqnet:
    # 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
    
  3. Применить конфигурацию:
    # pvesh set /cluster/sdn
    
  4. Назначить виртуальный myqnet мост контейнеру 106 на узле pve03:
    # pvesh set /nodes/pve03/lxc/110/config \
    --net0 name=eth0,bridge=myqnet,gw=192.168.100.1,ip=192.168.100.94/24
    

32.9.4. Настройка зоны VXLAN

В примере рассматривается кластер с тремя узлами (pve01, pve02, pve03). IP-адреса узлов: 192.168.0.186, 192.168.0.90 и 192.168.0.70.
Пример создания зоны VXLAN в веб-интерфейсе:
  1. Создать зону:
    • перейти в раздел Центр обработки данныхSDNЗоны, нажать кнопку Добавить и в выпадающем меню выбрать пункт VXLAN:
      Создание зоны
    • указать название зоны и в поле Список адресов одноранговых узлов добавить IP-адреса всех узлов кластера. При необходимости, в поле MTU можно ввести свое значение MTU (по умолчанию 1450):
      Создание зоны VXLAN
  2. Создать виртуальную сеть:
    • перейти в раздел Центр обработки данныхSDNVNets и в секции VNets нажать кнопку Создать:
      Кнопка Создать виртуальную сеть
    • в открывшемся окне указать название сети, выбрать созданную на предыдущем шаге зону и в поле Метка указать VLAN ID:
      Создание виртуальной сети для зоны VXLAN
  3. Применить изменения. Для этого перейти в раздел Центр обработки данныхSDN и нажать кнопку Применить:
    Применить изменения
  4. Назначить виртуальный мост гостевым системам, например:
    Пример настройки сетевого устройства контейнера 101
Пример создания зоны VXLAN в консоли:
  1. Создать зону myvxlan:
    # 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
    
  2. Создать сеть myvxnet:
    # 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
    
  3. Применить конфигурацию:
    # pvesh set /cluster/sdn
    
  4. Назначить виртуальный myqnet мост контейнеру 106 на узле pve03:
    # pvesh set /nodes/pve03/lxc/110/config \
    --net0 name=eth0,bridge=myvxlan,gw=192.168.100.1,ip=192.168.100.94/24
    
Соединение между гостевыми системами будет возможно, даже если они находятся на разных узлах.

Глава 33. Миграция ВМ и контейнеров

В случае, когда PVE управляет не одним физическим узлом, а кластером физических узлов, должна обеспечиваться возможность миграции ВМ с одного физического узла на другой. Миграция представляет собой заморозку состояния ВМ на одном узле, перенос данных и конфигурации на другой узел и разморозку состояния ВМ на новом месте. Возможные сценарии, при которых может возникнуть необходимость миграции:
  • отказ физического узла;
  • необходимость перезагрузки узла после применения обновлений или обслуживания технических средств;
  • перемещение ВМ с узла с низкой производительностью на высокопроизводительный узел.
Есть два механизма миграции:
  • онлайн-миграция (Live Migration);
  • офлайн-миграция.

Примечание

Миграция контейнеров без перезапуска в настоящее время не поддерживается.
При выполнении миграции запущенного контейнера, контейнер будет выключен, перемещен, а затем снова запущен на целевом узле. Поскольку контейнеры легковесные, то это обычно приводит к простою в несколько сотен миллисекунд.
Для возможности онлайн-миграции ВМ должны выполняться следующие условия:
  • у ВМ нет локальных ресурсов, которые нельзя перенести. Устройства PCI или USB, которые проброшены напрямую, блокируют live-migration. Локальные диски можно перенести, указав для них целевое хранилиище;
  • хосты находятся в одном кластере PVE;
  • между хостами имеется надежное сетевое соединение;
  • на целевом хосте установлены такие же или более высокие версии пакетов PVE.
Миграция в реальном времени обеспечивает минимальное время простоя ВМ, но, в то же время занимает больше времени. При миграции в реальном времени (без выключения питания) процесс должен скопировать все содержимое оперативной памяти ВМ на новый узел. Чем больше объем выделенной ВМ памяти, тем дольше будет происходить ее перенос.
Если ВМ использует локальные ресурсы, её можно перенести в офлайн-режиме при условии, что все диски расположены в хранилище, доступном на обоих хостах. В этом случае миграция скопирует диски на целевой хост по сети — аналогично процессу онлайн-миграции.
Запустить процесс миграции можно как в графическом интерфейсе PVE, так в интерфейсе командной строки.

33.1. Миграция с применением графического интерфейса

Для миграции ВМ или контейнера необходимо выполнить следующие шаги:
  1. Выбрать ВМ или контейнер для миграции и нажать кнопку Миграция:
    Выбор ВМ или контейнера для миграции
  2. В открывшемся диалоговом окне выбрать узел назначения, на который будет осуществляться миграция, и нажать кнопку Миграция.

    Примечание

    Режим миграции будет выбран автоматически, в зависимости от состояния ВМ/контейнера (запущен/остановлен).
    Миграция контейнера с перезапуском:
    Миграция контейнера с перезапуском
    Онлайн миграция ВМ:
    Миграция ВМ Онлайн
    Онлайн миграция ВМ, с диском в локальном хранилище (миграция диска из локального хранилища может занять много времени):
    Онлайн миграция ВМ, с диском в локальном хранилище
    Офлайн миграция ВМ (миграция диска из локального хранилища может занять много времени):
    Миграция ВМ Офлайн

33.2. Миграция в командной строке

Чтобы осуществить миграцию ВМ необходимо выполнить следующую команду:
# qm migrate <vmid> <target> [OPTIONS]
Для осуществления миграции ВМ в реальном времени следует использовать параметр --online.
Чтобы осуществить миграцию контейнера необходимо выполнить следующую команду:
# pct migrate <ctid> <target> [OPTIONS]
Поскольку миграция контейнеров в реальном времени невозможна, можно выполнить миграцию работающего контейнера с перезапуском, добавив параметр --restart. Например:
# pct migrate 101 pve02 --restart

33.3. Миграция ВМ из внешнего гипервизора

Импорт ВМ из внешнего гипервизора обычно заключается в переносе одного или нескольких образов дисков с файлом конфигурации, описывающим настройки ВМ (ОЗУ, количество ядер). Образы дисков могут быть в формате vmdk (VMware или VirtualBox) или qcow2 (KVM). Наиболее популярным форматом файла конфигурации для экспорта ВМ является стандарт OVF.

Примечание

Для ВМ Windows необходимо также установить паравиртуализированные драйверы Windows.
Для импорта ВМ из внешних гипервизоров (VMware ESXi, Hyper-V) или между кластерами PVE доступны следующие методы:
  1. Мастер импорта (прямое подключение к ESXi-хранилищу или импорт файлов в форматах OVA/OVF). Мастер импорта автоматически определяет конфигурацию ВМ и позволяет изменить настройки перед развёртыванием;
  2. Импорт через qm importovf (для файлов OVF/OVA из VMware/VirtualBox).
  3. Резервное копирование ВМ на источнике и последующее восстановление файла на целевом устройстве (для миграции между PVE). При этом сохраняются все настройки ВМ, включая сетевые интерфейсы и диски.

33.3.1. Импорт из ESXi-хранилища

PVE предоставляет встроенный инструмент для импорта ВМ напрямую из хранилищ VMware ESXi.
Для возможности использования мастера импорта из ESXi-хранилища должно быть настроено хранилище ESXi.
Процедура импорта ВМ:
  1. В дереве ресурсов выбрать ранее настроенное хранилище ESXi. На вкладке Виртуальные гостевые машины отобразятся все доступные для импорта гостевые системы:
    Доступные для импорта гостевые системы
  2. Выбрать нужную ВМ из списка и запустить мастер импорта, нажав кнопку Импорт.
  3. В открывшемся окне настроить параметры ВМ:
    • на вкладке Общее указать базовые параметры ВМ: имя ВМ, ID, ресурсы;
      Импорт ВМ. Вкладка Общее
    • на вкладке Дополнительно можно выбрать целевые хранилища для дисков ВМ и изменить сетевые настройки:
      Импорт ВМ. Вкладка Дополнительно
    • на вкладке Итоговая конфигурация можно проверить сводку настроек перед началом импорта:
      Импорт ВМ. Вкладка Итоговая конфигурация
  4. Нажать кнопку Импорт для запуска процесса.

Примечание

Сложные правки можно внести после завершения импорта.

Примечание

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

33.3.2. Импорт OVA/OVF

Для возможности импорта ВМ из файлов OVA/OVF в веб-интерфейсе необходимо файловое хранилище с типом содержимого import. Для хранилища с таким типом содержимого будет создан каталог import, в который можно загрузить файлы OVA (архивный формат) или набор файлов OVF + VMDK/RAW (в плоской структуре, без подкаталогов).
OVA-файлы можно также загрузить в хранилище напрямую через веб-интерфейс:
  1. В дереве ресурсов выбрать выбрать хранилище, с настроенным типом содержимого import.
  2. Перейти на вкладку Импорт.
  3. Нажать кнопку Отправить, если нужно загрузить файл с локального диска, или кнопку Скачать по URL-адресу, если нужно скачать файл с сервера.
  4. Для локальной загрузки: выбрать файл и нажать кнопку Отправить:
    Загрузка файла OVA в каталог import с локального диска
    Для загрузки с сервера: указать URL-адрес и нажать кнопку Скачивание:
    Загрузка файла OVA в каталог import с сервера
Процедура импорта ВМ:
  1. В дереве ресурсов выбрать выбрать хранилище, и перейти на вкладку Импорт.
  2. Выбрать файл OVA и запустить мастер импорта, нажав кнопку Импорт:
    Запуск мастера импорта
  3. В открывшемся окне настроить параметры ВМ:
    • на вкладке Общее указать базовые параметры ВМ: имя ВМ, ID, ресурсы;
      Импорт ВМ. Вкладка Общее
    • на вкладке Дополнительно можно выбрать целевые хранилища для дисков ВМ и изменить сетевые настройки:
      Импорт ВМ. Вкладка Дополнительно
    • на вкладке Итоговая конфигурация можно проверить сводку настроек перед началом импорта.
  4. Нажать кнопку Импорт.

Примечание

Для OVA-файлов требуется дополнительное место для временного извлечения образов. По умолчанию используется исходное хранилище, но можно указать отдельное рабочее хранилище для распаковки.

Примечание

Поскольку структура и содержимое файлов OVA/OVF не всегда хорошо определяются, может потребоваться вручную указать некоторые гостевые настройки.

33.3.3. Импорт OVA/OVF в консоли

Команда импорта ВМ из файлов OVF и VMDK:
# qm importovf <VMID> /path/to/vm.ovf <целевое хранилище>
Процедура импорта ВМ:
  1. Скопировать файлы ovf и vmdk на хост PVE (в примере haos_ova-15.2.ovf и haos_ova-15.2.vmdk).
  2. Создать новую ВМ, используя имя ВМ, информацию о ЦП и памяти из файла конфигурации OVF, и импортировать диски в хранилище local-lvm:
    # qm importovf 999 haos_ova-15.2.ovf local-lvm
    

Примечание

Если вместо файлов ovf и vmdk есть файл ova, его необходимо предварительно распаковать, например:
$ tar -xvf haos_ova-15.2.ova

Примечание

Сеть необходимо настроить вручную.

33.3.4. Резервное копирование и восстановление

Для миграции ВМ или контейнеров между разными кластерами PVE, или просто между двумя несвязанными узлами PVE, не объединёнными в один кластер, можно использовать резервное копирование и восстановление файла резервной копии.
Процедура миграции с одного узла PVE на другой:
  1. На исходном узле PVE создать резервную копию ВМ:
    # vzdump <VMID> --storage <хранилище резервных копий> --mode snapshot
    
  2. Перенести файл резервной копии (vzdump-qemu-<VMID>.vma.zst) на целевой PVE.
  3. Восстановить ВМ:
    # qmrestore /path/to/vzdump-qemu-<VMID>.vma.zst <new_VMID> --storage <целевое хранилище>
    

33.3.5. Миграция KVM ВМ в PVE

В данном разделе рассмотрен процесс миграции ВМ из OpenNebula в PVE в ручном режиме.
Выключить ВМ на хосте источнике. Найти путь до образа жесткого диска, который используется в ВМ (в данной команде 14 — id образа диска ВМ):
$ 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 — адрес образа жёсткого диска ВМ.
Скопировать данный образ с PVE на хост назначения.

Примечание

В OpenNebula любой диск ВМ можно экспортировать в новый образ (если ВМ находится в состояниях RUNNING, POWEROFF или SUSPENDED):
$ 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
На хосте назначения подключить образ диска к ВМ (рассмотрено подключение на основе Directory Storage), выполнив следующие действия:
  1. Создать новую ВМ в веб-интерфейсе PVE или командой:
    # qm create 120 --bootdisk scsi0 --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci
    
  2. Чтобы использовать в PVE образ диска в формате qcow2 (полученный из другой системы KVM, либо преобразованный из другого формата), его необходимо импортировать. Команда импорта:
    # 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'
    
  3. Привязать диск к ВМ.
    В веб-интерфейсе PVE: перейти на вкладку Оборудование созданной ВМ. В списке устройств будет показан неиспользуемый жесткий диск, выбрать его, выбрать режим SCSI и нажать кнопку Добавить:
    Добавление диска к ВМ
    В командной строке:
    # qm set 120 --scsi0 local:120/vm-120-disk-0.qcow2
    update VM 120: -scsi0 local:120/vm-120-disk-0.qcow2
    
Донастроить параметры процессора, памяти, сетевых интерфейсов, порядок загрузки. Включить ВМ.

33.3.6. Миграция ВМ из VMware в PVE

В данном разделе рассмотрена миграция ВМ в ручном режиме из VMware в PVE на примере ВМ с Windows 7.
Подготовить ОС Windows. ОС Windows должна загружаться с дисков в режиме IDE.
Подготовить образ диска. Необходимо преобразовать образ диска в тип single growable virtual disk. Сделать это можно с помощью утилиты vmware-vdiskmanager (поставляется в комплекте с VMWare Workstation). Для преобразования образа перейти в папку с образами дисков и выполнить команду:
"C:\Program Files\VMware\VMware Server\vmware-vdiskmanager" -r win7.vmdk -t 0 win7-pve.vmdk
где win7.vmdk — файл с образом диска.
На хосте назначения подключить образ диска к ВМ одним из трёх указанных способов:
  1. Подключение образа диска к ВМ на основе Directory Storage:
    • в веб-интерфейсе PVE создать ВМ KVM;
    • скопировать преобразованный образ 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.
    • перейти в веб-интерфейсе PVE на вкладку Оборудование созданной ВМ. В списке устройств будет показан неиспользуемый жесткий диск, выбрать его, выбрать режим IDE и нажать кнопку Добавить:
      Добавление диска к ВМ
  2. Подключение образа диска к ВМ на основе LVM Storage:
    • в веб-интерфейсе PVE создать ВМ с диском большего размера, чем диск в образе vmdk. Посмотреть размер диска в образе можно командой:
      # 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);
    • перейти в консоль ноды кластера и посмотреть, как называется LVM диск созданной ВМ (диск должен быть в статусе ACTIVE):
      # lvscan
        ACTIVE            '/dev/sharedsv/vm-101-disk-1' [130,00 GiB] inherit
      
    • сконвертировать образ vdmk в raw формат непосредственно на LVM-устройство:
      # qemu-img convert -f vmdk win7-pve.vmdk -O raw /dev/sharedsv/vm-101-disk-1
      
  3. Подключение образа диска к ВМ на основе CEPH Storage:
    • в веб-интерфейсе PVE создать ВМ с диском большего размера, чем диск в образе vmdk. Посмотреть размер диска в образе можно командой:
      # qemu-img info win7-pve.vmdk
      
    • скопировать преобразованный образ win7-pve.vmdk в каталог с образами ВМ /var/lib/vz/images/VMID, где VMID — VMID созданной ВМ;
    • перейти в консоль ноды кластера. Отобразить образ из пула CEPH в локальное блочное устройство:
      # rbd map rbd01/vm-100-disk-1
      /dev/rbd0
      

      Примечание

      Имя нужного пула можно посмотреть на вкладке Центр обработки данныхХранилищеrbd-storage.
    • сконвертировать образ vdmk в raw формат непосредственно на отображенное устройство:
      # qemu-img convert -f vmdk win7-pve.vmdk -O raw /dev/rbd0
      
Адаптация новой ВМ:
  1. Проверить режим работы жесткого диска: для Windows — IDE, для Linux — SCSI.
  2. Установить режим VIRTIO для жесткого диска (режим VIRTIO также доступен для Windows, но сразу загрузиться в этом режиме система не может):
    • загрузиться сначала в режиме IDE и выключить машину, добавить еще один диск в режиме VIRTIO и включить машину. Windows установит нужные драйвера;
    • выключить машину;
    • изменить режим основного диска с IDE на VIRTIO;
    • загрузить систему, которая должна применить VIRTIO драйвер и выдать сообщение, что драйвер от RedHat.
  3. Включить ВМ. Первое включение займет какое-то время (будут загружены необходимые драйвера).

Глава 34. Клонирование ВМ

Простой способ развернуть множество ВМ одного типа — создать клон существующей ВМ.
Существует два вида клонов:
  • Полный клон — результатом такой копии является независимая ВМ. Новая ВМ не имеет общих ресурсов с оригинальной ВМ. При таком клонировании можно выбрать целевое хранилище, поэтому его можно использовать для переноса ВМ в совершенно другое хранилище. При создании клона можно также изменить формат образа диска, если драйвер хранилища поддерживает несколько форматов.
  • Связанный клон — такой клон является перезаписываемой копией, исходное содержимое которой совпадает с исходными данными. Создание связанного клона происходит практически мгновенно и изначально не требует дополнительного места. Клоны называются связанными, потому что новый образ диска ссылается на оригинал. Немодифицированные блоки данных считываются из исходного образа, а изменения записываются (и затем считываются) из нового местоположения (исходный образ при этом должен работать в режиме только для чтения). С помощью PVE можно преобразовать любую ВМ в шаблон. Такие шаблоны впоследствии могут быть использованы для эффективного создания связанных клонов. При создании связанных клонов невозможно изменить целевое хранилище.

Примечание

При создании полного клона необходимо прочитать и скопировать все данные образа ВМ. Это обычно намного медленнее, чем создание связанного клона.
Весь функционал клонирования доступен в веб-интерфейсе PVE.
Для клонирования ВМ необходимо выполнить следующие шаги:
  1. Создать ВМ с необходимыми настройками (все создаваемые из такой ВМ клоны будут иметь идентичные настройки) или воспользоваться уже существующей ВМ;
  2. В контекстном меню ВМ выбрать пункт Клонировать:
    Контекстное меню ВМ
  3. Откроется диалоговое окно, со следующими полями:
    • Целевой узел — узел получатель клонируемой ВМ (для создания новой ВМ на другом узле необходимо чтобы ВМ находилась в общем хранилище и это хранилище должно быть доступно на целевом узле);
    • VM ID — идентификатор ВМ;
    • Имя — название новой ВМ;
    • Пул ресурсов — пул, к которому будет относиться ВМ;
    • Режим — метод клонирования (если клонирование происходит из шаблона ВМ). Доступны значения: Полное клонирование и Связанная копия;
    • Снимок — снимок, из которого будет создаваться клон (если снимки существуют);
    • Целевое хранилище — хранилище для клонируемых виртуальных дисков;
    • Формат — формат образа виртуального диска.
    Настройки клонирования
  4. Для запуска процесса клонирования нажать кнопку Клонировать.
Некоторые типы хранилищ позволяют копировать определенный снимок ВМ, который по умолчанию соответствует текущим данным ВМ. Клон ВМ никогда не содержит дополнительных снимков оригинальной ВМ.
Выбор снимка для клонирования
Чтобы избежать конфликтов ресурсов, при клонировании MAC-адреса сетевых интерфейсов рандомизируются, и генерируется новый UUID для настройки BIOS ВМ (smbios1).

Глава 35. Шаблоны ВМ

ВМ можно преобразовать в шаблон. Такие шаблоны доступны только для чтения, и их можно использовать для создания связанных клонов.

Примечание

Если ВМ содержит снимки (snapshot), то преобразовать такую ВМ в шаблон нельзя. Для преобразования ВМ в шаблон необходимо предварительно удалить все снимки этой ВМ.
Для преобразования ВМ в шаблон необходимо в контекстном меню ВМ выбрать пункт Сохранить как шаблон и в ответ на запрос на подтверждения, нажать кнопку Да.
Создание шаблона ВМ

Примечание

Запустить шаблоны невозможно, так как это приведет к изменению образов дисков. Если необходимо изменить шаблон, следует создать связанный клон и изменить его.
Для создания связанного клона необходимо выполнить следующие шаги:
  1. В контекстном меню шаблона ВМ выбрать пункт Клонировать:
    Контекстное меню шаблона ВМ
  2. В открывшемся диалоговом окне указать параметры клонирования (в поле Режим следует выбрать значение Связанная копия):
    Создание связанного клона
  3. Для запуска процесса клонирования нажать кнопку Клонировать.

Глава 36. Теги (метки) ВМ

В организационных целях для ВМ (KVM и LXC) можно установить теги (метки). Теги отображаются в дереве ресурсов и в строке статуса при выборе ВМ:
Теги ВМ 103
Теги позволяют фильтровать ВМ:
Фильтрация ВМ по тегам (меткам)
В дереве ресурсов можно выбрать режим просмотра В виде меток. В этом режиме будут показаны гостевые системы, сгруппированные по тегам:
Режим просмотра «В виде меток»

36.1. Работа с тегами

Для добавления, редактирования, удаления тегов необходимо в строке статуса ВМ нажать на значок карандаша:
Строка статуса ВМ
Можно добавить несколько тегов, нажав кнопку , и удалить их, нажав кнопку . Чтобы сохранить или отменить изменения, используются кнопки и соответственно:
Теги ВМ 102
Теги также можно устанавливать в командной строке (несколько тегов разделяются точкой с запятой):
# qm set ID --tags 'myfirsttag;mysecondtag'
Например:
# qm set 103 --tags 'linux;openuds'

36.2. Настройка тегов

В глобальных параметрах центра обработки данных PVE (раздел Центр обработки данныхПараметры) есть 3 пункта меню, посвященных тегам. Здесь можно, среди прочего заранее определить теги и напрямую назначить им цвет:
Настройки тегов

36.2.1. Стиль тегов

Переопределение стилей меток
Цвет, форму отображения тегов в дереве ресурсов, чувствительность к регистру, а также способ сортировки тегов можно настроить в параметре Переопределение стилей меток:
  • Форма дерева:
    • Полное — отображать полнотекстовую версию;
    • Круговое — использовать только цветовой акцент: круг с цветом фона (по умолчанию);
    • Плотное — использовать только цветовой акцент: небольшой прямоугольник (полезно, когда каждой ВМ назначено много тегов);
    • Нет — отключить отображение тегов;
  • Порядок — управляет сортировкой тегов в веб-интерфейсе;
  • С учётом регистра — позволяет указать, должна ли фильтрация уникальных тегов учитывать регистр символов;
  • Переопределение цветов — позволяет задать цвета для тегов (по умолчанию цвета тегов автоматически выбирает PVE).
Настроить стиль тегов можно также в командной строке, используя команду:
# 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 … удалит все ранее переопределённые стили тегов.

36.2.2. Права

По умолчанию пользователи с привилегиями VM.Config.Options могут устанавливать любые теги для ВМ (/vms/ID) (см. Управление доступом). Если необходимо ограничить такое поведение, соответствующие разрешения можно установить в разделе Доступ к пользовательским меткам:
Доступ к пользовательским меткам
Доступны следующие режимы (поле Режим):
  • free — пользователи не ограничены в установке тегов (по умолчанию);
  • list — пользователи могут устанавливать теги на основе заранее определенного списка тегов;
  • existing — аналогично режиму list, но пользователи также могут использовать уже существующие теги;
  • none — пользователям запрещено использовать теги.
Здесь же можно определить, какие теги разрешено использовать пользователям (поле Предустановленные метки) если используются режимы list или existing.
Назначить права можно также и в командной строке, используя команду:
# 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
Следует обратить внимание, что пользователь с привилегиями Sys.Modify на / всегда может устанавливать или удалять любые теги, независимо от настроек в разделе Доступ к пользовательским меткам. Кроме того, существует настраиваемый список зарегистрированных тегов которые могут добавлять и удалять только пользователи с привилегией Sys.Modify на /. Список зарегистрированных тегов можно редактировать в разделе Зарегистрированные метки:
Зарегистрированные метки
Или через интерфейс командной строки:
# pvesh set /cluster/options --registered-tags <tag>[;<tag>...]

Глава 37. Резервное копирование (Backup)

PVE предоставляет полностью интегрированное решение, использующее возможности всех хранилищ и всех типов гостевых систем.
Резервные копии PVE представляют собой полные резервные копии — они содержат конфигурацию ВМ/CT и все данные. Резервное копирование может быть запущено через графический интерфейс или с помощью утилиты командной строки vzdump.
Задания для резервного копирования можно запланировать так, чтобы они выполнялись автоматически в определенные дни и часы для конкретных узлов и гостевых систем.

37.1. Режимы резервного копирования

Существует несколько способов обеспечения согласованности (параметр mode) в зависимости от типа гостевой системы.
Режимы резервного копирования для ВМ:
  • режим остановки (Stop) — обеспечивает самую высокую согласованность резервного копирования, но требует полного выключения ВМ. В этом режиме ВМ отправляется команда на штатное выключение, после остановки выполняется резервное копирование и затем отдается команда на включение ВМ. Количество ошибок при таком подходе минимально и чаще всего сводится к нулю;
  • режим ожидания (Suspend) — ВМ временно «замораживает» свое состояние, до окончания процесса резервного копирования. Содержимое оперативной памяти не стирается, что позволяет продолжить работу ровно с той точки, на которой работа была приостановлена. Сервер простаивает во время копирования информации, но при этом нет необходимости выключения/включения ВМ, что достаточно критично для некоторых сервисов;
  • режим снимка (Snapshot) — обеспечивает минимальное время простоя ВМ (использование этого механизма не прерывает работу ВМ), но имеет два очень серьезных недостатка — могут возникать проблемы из-за блокировок файлов операционной системой и самая низкая скорость создания. Резервные копии, созданные этим методом, надо всегда проверять в тестовой среде.

Примечание

Live резервное копирование PVE обеспечивает семантику, подобную моментальным снимкам, для любого типа хранилища (не требуется, чтобы базовое хранилище поддерживало снимки). Так как резервное копирование выполняется с помощью фонового процесса QEMU, остановленная ВМ на короткое время будет отображаться как работающая пока QEMU читает диски ВМ. Однако сама ВМ не загружается, читаются только ее диски.
Режимы резервного копирования для контейнеров:
  • режим остановки (Stop) — остановка контейнера на время резервного копирования (может привести к длительному простою);
  • режим приостановки (Suspend) — использует rsync для копирования данных контейнера во временную папку (опция --tmpdir). Затем контейнер приостанавливается и rsync копирует измененные файлы, после чего контейнер возобновляет свою работу. Это приводит к минимальному времени простоя, но требует дополнительное пространство для хранения копии контейнера. Если контейнер находится в локальной файловой системе, а целевое хранилище резервной копии — сервер NFS/CIFS, для повышения производительности --tmpdir необходимо указать на локальную файловую систему. Локальный tmpdir также необходим, если нужно сделать резервную копию локального контейнера с использованием списков контроля доступа (ACL) в режиме ожидания, при хранении резервных копий на NFS-сервере;
  • режим снимка (Snapshot) — использует возможности мгновенных снимков основного хранилища. Сначала контейнер приостанавливается для обеспечения согласованности данных, создается временный снимок томов контейнера, содержимое снимка архивируется в tar-файл, затем временный снимок удаляется. Для возможности использования этого режима необходимо, чтобы тома резервных копий находились в хранилищах, поддерживающих моментальные снимки.

Примечание

Можно исключить отдельные точки монтирования (mount points) из резервной копии, используя опцию backup=0. Например, если в конфигурации контейнера указано:
mp0: local:210/vm-210-disk-1.raw,mp=/mnt/data,backup=0,size=8G
точка монтирования /mnt/data не будет включена в резервную копию контейнера.

Примечание

По умолчанию в резервные копии включается только точка монтирования Корневой диск. Для включения других точек монтирования в резервную копию необходимо настроить опцию Резервная копия:
Настройки точки монтирования
При создании новой точки монтирования в веб-интерфейсе эта опция включена по умолчанию.

37.2. Хранилище резервных копий

Перед тем как настроить резервное копирование, необходимо определить хранилище резервных копий. Это может быть хранилище Proxmox Backup Server, где резервные копии хранятся в виде дедуплицированных фрагментов и метаданных, или хранилище на уровне файлов, где резервные копии хранятся в виде обычных файлов. Рекомендуется использовать Proxmox Backup Server на выделенном узле из-за его расширенных функций. Использование сервера NFS является хорошей альтернативой.
Если хранилище будет использоваться только для резервных копий, следует выставить соответствующие настройки:
Настройка хранилища NFS
На вкладке Политика хранения резервной копии можно указать параметры хранения резервных копий:
Политика хранения резервных копий в хранилище NFS
Доступны следующие варианты хранения резервных копий (в скобках указаны параметры опции 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
Несмотря на то что можно передавать параметры хранения резервных копий непосредственно при создании задания, рекомендуется настроить эти параметры на уровне хранилища.

37.3. Сжатие файлов резервной копии

Инструментарий для создания резервных копий PVE поддерживает следующие механизмы сжатия:
  • Сжатие LZO — алгоритм сжатия данных без потерь (реализуется в PVE утилитой lzop). Особенностью этого алгоритма является скоростная распаковка. Следовательно, любая резервная копия, созданная с помощью этого алгоритма, может при необходимости быть развернута за минимальное время.
  • Сжатие GZIP — при использовании этого алгоритма резервная копия будет «на лету» сжиматься утилитой GNU Zip, использующей мощный алгоритм Deflate. Упор делается на максимальное сжатие данных, что позволяет сократить место на диске, занимаемое резервными копиями. Главным отличием от LZO является то, что процедуры компрессии/декомпрессии занимают достаточно большое количество времени.
  • Сжатие Zstandard (zstd) — алгоритм сжатия данных без потерь. В настоящее время Zstandard является самым быстрым из этих трех алгоритмов. Многопоточность — еще одно преимущество zstd перед lzo и gzip.

37.4. Файлы резервных копий

Все создаваемые резервные копии будут сохраняться в подкаталоге dump. Имя файла резервной копии будет иметь вид:
  • vzdump-qemu-номер_машины-дата-время.vma.zst, vzdump-lxc-номер_контейнера-дата-время.tar.zst при использовании метода ZST;
  • vzdump-qemu-номер_машины-дата-время.vma.gz, vzdump-lxc-номер_контейнера-дата-время.tar.gz при использовании метода GZIP;
  • vzdump-qemu-номер_машины-дата-время.vma.lzo, vzdump-lxc-номер_контейнера-дата-время.tar.lzo при использовании метода LZO.
Если имя файла резервной копии не заканчивается одним из указанных выше расширений, то он не был сжат vzdump.

37.5. Шифрование резервных копий

Для хранилищ Proxmox Backup Server можно дополнительно настроить шифрование резервных копий на стороне клиента (см. Шифрование).

37.6. Выполнение резервного копирования в веб-интерфейсе

Для того чтобы разово создать резервную копию конкретной ВМ, достаточно открыть ВМ, выбрать в ней раздел Резервная копия и нажать кнопку Создать резервную копию сейчас:
Вкладка Резервная копия ВМ
Далее следует указать параметры резервного копирования:
Выбор режима создания резервной копии
После создания резервной копии рекомендуется сразу убедиться, что из нее можно восстановить ВМ. Для этого необходимо открыть хранилище с резервной копией:
Резервная копия в хранилище nfs-backup
И начать процесс восстановления (при восстановлении можно указать новое имя и переопределить некоторые параметры для ВМ):
Восстановить ВМ из резервной копии
Если восстанавливать из резервной копии в интерфейсе ВМ, то будет предложена только замена существующей ВМ:
Восстановление из резервной копии в интерфейсе ВМ
Резервную копию можно пометить как защищённую, чтобы предотвратить ее удаление:
Пометить резервную копию как защищённую

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

Попытка удалить защищенную резервную копию через пользовательский интерфейс, интерфейс командной строки или API PVE не удастся. Но так как это обеспечивается PVE, а не файловой системой, ручное удаление самого файла резервной копии по-прежнему возможно для любого, у кого есть доступ на запись к хранилищу резервных копий.

37.7. Задания резервного копирования

Помимо запуска резервного копирования вручную, можно также настроить периодические задания, которые выполняют резервное копирование всех или выбранных виртуальных гостевых систем в хранилище. Управлять заданиями можно в пользовательском интерфейсе (раздел Центр обработки данныхРезервное копирование) или через конечную точку API /cluster/backup. Оба метода будут генерировать записи заданий в /etc/pve/jobs.cfg, которые анализируются и выполняются демоном pvescheduler.
Задание настраивается либо для всех узлов кластера, либо для определенного узла.

37.7.1. Формат расписания

Для настройки расписания используются события календаря системного времени (см. man 7 systemd.time).
Используется следующий формат:
[WEEKDAY] [[YEARS-]MONTHS-DAYS] [HOURS:MINUTES[:SECONDS]]
WEEKDAY — дни недели, указанные в трёх буквенном варианте на английском: mon,tue,wed,thu,fri,sat и sun. Можно использовать несколько дней в виде списка, разделённого запятыми. Можно задать диапазон дней, указав день начала и окончания, разделённые двумя точками («..»), например, mon..fri. Форматы можно смешивать. Если опущено, подразумевается «*».
Формат времени — время указывается в виде списка интервалов часов и минут. Часы и минуты разделяются знаком «:». И часы, и минуты могут быть списком и диапазонами значений в том же формате, что и дни недели. Можно не указывать часы, если они не нужны. В этом случае подразумевается «*». Допустимый диапазон значений: 0–23 для часов и 0–59 для минут.

Таблица 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
Проверить правильность задания расписания, можно в окне Имитатор расписания заданий (Центр обработки данныхРезервная копия кнопка Имитатор расписания): указать расписание в поле Расписание, задать число итераций (поле Итерации) и нажать кнопку Имитировать:
Имитатор расписания заданий

37.7.2. Настройка заданий резервного копирования в графическом интерфейсе

Для того чтобы создать расписание резервного копирования, необходимо перейти во вкладку Центр обработки данныхРезервная копия и нажать кнопку Добавить:
Вкладка Резервная копия
Откроется окно, в котором можно задать параметры резервного копирования:
Создание задания резервного копирования. Вкладка Общее
На вкладке Общее необходимо указать:
  • Узел (node) — можно создавать график из одного места по разным узлам (серверам);
  • Хранилище (storage) — точка смонтированного накопителя, куда будет проходить копирование;
  • Расписание (schedule) — расписание резервного копирования. Можно выбрать период из списка или указать вручную:
    Выбор расписание резервного копирования
  • Режим выбора — возможные значения: Включить выбранные ВМ, Все, Исключить выбранные ВМ, На основе пула;
  • Режим отправки уведомлений (notification-mode) — определяет, какую систему уведомлений использовать. Возможные значения: Автоматически (auto), Эл. почта (устаревшее) (legacy-sendmail), Система отправки уведомлений (notification-system). Если установлено значение legacy-sendmail, vzdump будет учитывать параметры mailto/mailnotification и отправлять электронные письма на указанные адреса с помощью команды sendmail. Если установлено значение notification-system, уведомление будет отправлено через систему уведомлений PVE, а параметры mailto/mailnotification будут проигнорированы. Если установлено значение auto (настройка по умолчанию) и установлено значение параметра mailto, будет использоваться режим legacy-sendmail, если значение параметра mailto не установлено, будет использоваться режим notification-system;
  • Отправить письмо (mailto) — список адресов электронной почты или пользователей, которые должны получать уведомления о выполнении резервного копирования по электронной почте;
  • Отправить письмо (mailnotification) — определяет когда отправлять уведомление. Возможные знаяения значения: Уведомлять всегда (always) — уведомление будет приходить при любом результате резервного копирования, Только при ошибках (failure) — уведомление будет приходить только в случае неудачной попытки резервного копирования;

    Примечание

    Для возможности отправки электронной почты должен быть запущен postfix:
    # systemctl enable --now postfix
  • Сжатие (compress) — метод сжатия, принимает четыре значения: ZSTD (быстро и хорошо) (zstd) (по умолчанию), LZO (быстро) (lzo), GZIP (хорошо) (gzip) и нет (0);
  • Режим (mode) — режим ВМ, в котором будет выполняться резервное копирование. Может принимать три значения: Снимок (snapshot), Приостановить (suspend), Остановка (stop):
    Выбор режима создания резервной копии
Далее в списке необходимо выбрать ВМ/контейнеры, для которых создаётся задание резервного копирования. Для сокращения списка выбора можно использовать фильтры (фильтры доступны для полей ID, Статус, Имя, Тип):
Настройка фильтра
На вкладке Хранение можно настроить параметры хранения резервных копий:
Создание задания для резервного копирования. Вкладка Хранение
На вкладке Шаблон примечания можно настроить примечание, которое будет добавляться к резервным копиям. Строка примечания может содержать переменные, заключенные в две фигурные скобки. В настоящее время поддерживаются следующие переменные:
  • {{cluster}} — имя кластера;
  • {{guestname}} — имя ВМ/контейнера;
  • {{node}} — имя узла, для которого создается резервная копия;
  • {{vmid}} — VMID ВМ/контейнера.
Создание задания для резервного копирования. Вкладка Шаблон примечания
На вкладке Дополнительно собраны настройки производительности резервного копирования и некоторые другие настройки:
  • ID задания — идентификатор задания;
  • Ограничение пропускной способности (bwlimit) — ограничение пропускной способности ввода/вывода (МиБ/с);
  • ZSTD Threads (zstd) — количество потоков zstd. При N=1 zstd использует половину доступных ядер CPU, при N>1 zstd работает в многопоточном режиме с указанным количеством потоков (N);
  • Рабочие процессы ввода/вывода (max-workers) — максимальное количество параллельных операций ввода-вывода (IO), выполняемых во время резервного копирования (применяется к ВМ);
  • Буферизация (fleecing enabled) — включение отложенного резервного копирования (только для ВМ). Данные резервных копий из блоков, в которые происходят новые записи гостевой системы, временно сохраняются в указанном хранилище, а не копируются напрямую в целевое хранилище резервных копий. Это может повысить производительность ввода-вывода гостевой системы и даже предотвратить её зависание, но требует дополнительного дискового пространства;
  • Хранилище для буферизации (fleecing storage) — хранилище для временного размещения образов отложенного копирования. Для эффективного использования пространства рекомендуется использовать локальное хранилище, которое поддерживает очистку неиспользуемых блоков (discard) и, либо тонкое выделение ресурсов (thin provisioning), либо разреженные файлы (sparse files);
  • Повторять пропущенные (repeat-missed) — запускать пропущенные задания. Поскольку запланированные задания не выполняются, если узел был в автономном режиме или pvescheduler был отключен в запланированное время, данный параметр позволяет указать планировщику, что он должен запустить пропущенные задания как можно скорее;
  • Режим обнаружения изменения PBS (pbs-change-detection-mode) — определяет метод, используемый PBS для обнаружения изменений в файлах контейнера и выбора оптимального формата кодирования для архивов pxar (только для хранилища PBS). Возможные значения:
    • Default — все файлы упаковываются в единый архив без разделения на потоки (формат pxar версии 1);
    • Data — чтение и кодирование всех файлов, с разделением данных и метаданных на отдельные потоки (формат pxar версии 2);
    • Мetadata — разделение потоков (формат pxar версии 2), использует метаданные из предыдущего снимка (если есть) для обнаружения неизмененных файлов и повторного использования этих фрагментов данных без чтения содержимого файлов с диска.
Создание задания для резервного копирования. Вкладка Дополнительно
После указания необходимых параметров и нажатия кнопки Создать, задание для резервного копирования появляется в списке (запись о задании создаётся в файле /etc/pve/jobs.cfg):
Задание резервного копирования
Данное задание будет запускаться в назначенное время. Время следующего запуска задания отображается в столбце Следующий запуск. Существует также возможность запустить задание по требованию — кнопка Запустить сейчас.

37.8. Восстановление

Восстановить данные из резервных копий можно в веб-интерфейсе PVE или с помощью следующих утилит:
  • pct restore — утилита восстановления контейнера;
  • qmrestore — утилита восстановления ВМ.

37.9. Ограничение пропускной способности

Для восстановления одной или нескольких больших резервных копий может потребоваться много ресурсов, особенно пропускной способности хранилища как для чтения из резервного хранилища, так и для записи в целевое хранилище. Это может негативно повлиять на работу других ВМ, так как доступ к хранилищу может быть перегружен.
Чтобы избежать этого, можно установить ограничение полосы пропускания для задания резервного копирования. В PVE есть два вида ограничений для восстановления и архивирования:
  • per-restore limit — максимальный объем полосы пропускания для чтения из архива резервной копии;
  • per-storage write limit — максимальный объем полосы пропускания, используемый для записи в конкретное хранилище.
Ограничение чтения косвенно влияет на ограничение записи. Меньшее ограничение на задание перезапишет большее ограничение на хранилище. Увеличение лимита на задание приведёт к перезаписи лимита на хранилище, только если для данного хранилища есть разрешения «Data.Allocate».
Чтобы задать ограничение пропускной способности для конкретного задания восстановления, используется параметр bwlimit. В качестве единицы ограничения используется КиБ/с, это означает, что значение 10240 ограничит скорость чтения резервной копии до 10 МиБ/с, гарантируя, что остальная часть возможной пропускной способности хранилища будет доступна для уже работающих гостевых систем, и, таким образом, резервное копирование не повлияет на их работу.

Примечание

Чтобы отключить все ограничения для конкретного задания можно использовать значение 0 для параметра bwlimit. Это может быть полезно, если требуется как можно быстрее восстановить ВМ.
Установить ограничение пропускной способности по умолчанию для хранилища, можно с помощью команды:
# pvesm set <ID хранилища> --bwlimit restore=<KIBs>

37.10. Восстановление в реальном времени (Live-Restore)

Восстановление большой резервной копии может занять много времени, в течение которого гостевая система будет недоступна. Для резервных копий ВМ, хранящихся на сервере резервного копирования Proxmox (PBS), это время ожидания можно сократить с помощью параметра live-restore.
Включение восстановления в реальном времени с помощью отметки в веб-интерфейсе:
Восстановление в реальном времени
или указания параметра live-restore в команде qmrestore приводит к запуску ВМ сразу после начала восстановления. Данные копируются в фоновом режиме, отдавая приоритет фрагментам, к которым ВМ активно обращается.
При этом следует обратить внимание на следующее:
  • во время live-restore ВМ будет работать с ограниченной скоростью чтения с диска, поскольку данные должны быть загружены с сервера резервного копирования (однако после загрузки они немедленно становятся доступны в целевом хранилище, поэтому двойной доступ к данным влечет за собой штраф только в первый раз). Скорость записи в основном не изменяется;
  • если по какой-либо причине live-restore не удается, ВМ останется в неопределенном состоянии, т.к. не все данные могли быть скопированы из резервной копии, и, скорее всего, невозможно сохранить какие-либо данные, записанные во время неудачной операции восстановления.
Этот режим работы особенно полезен для больших ВМ, где для начальной работы требуется лишь небольшой объем данных, например, веб-серверов — после запуска ОС и необходимых служб ВМ становится работоспособной, в то время как фоновая задача продолжает копировать редко используемые данные.

37.11. Восстановление отдельных файлов

Кнопка Восстановление файла на вкладке Резервные копии хранилища PBS позволяет открывать и просматривать файлы внутри резерной копии. Эта функция доступна только для резервных копий, хранящихся в PBS.
Восстановление отдельных файлов
Для контейнеров в корне файлового дерева отображаются архивы pxar, содержащие данные контейнера. Можно открывать и просматривать файлы внутри каждого архива (как в обычном файловом менеджере).
Для ВМ в корне отображаются образы дисков. При открытии образа, если диск содержит разделы, появится запись part (таблица разделов). Можно перейти в раздел и просматривать файловую систему. Не все данные могут быть доступны (например, из-за неподдерживаемых ФС или технологий хранения).
Для загрузки отдельного файла необходимо нажать кнопку Скачивание. Для загрузки каталога следует нажать кнопку Скачать как и выбрать формат архива (zip или tar.zst).
Чтобы изолировать хост-систему от потенциально опасных данных (например, вирусов в гостевой ОС), для доступа к данным ВМ запускается временная виртуальная машина (невидимая в списке гостевых систем). Временная ВМ автоматически останавливается после таймаута. Этот процесс происходит прозрачно для пользователя.

Примечание

Для каждой временной ВМ создаётся файл журнала в /var/log/proxmox-backup/file-restore/. Файл журнала может содержать дополнительную информацию в случае, если попытка восстановить отдельные файлы или получить доступ к файловым системам, содержащимся в резервном архиве, не удалась.

37.12. Файл конфигурация vzdump.conf

Глобальные настройки создания резервных копий хранятся в файле конфигурации /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 хранилища>]
Настройка отложенного резервного копирования (только для ВМ):
  • enabled (по умолчанию 0) — включение отложенного резервного копирования. Данные резервных копий из блоков, в которые происходят новые записи гостевой системы временно сохраняются в указанном хранилище, а не копируются напрямую в целевое хранилище резервных копий. Это может повысить производительность ввода-вывода гостевой системы и даже предотвратить её зависание, но требует дополнительного дискового пространства;
  • storage — хранилище для временного размещения образов отложенного копирования. Для эффективного использования пространства рекомендуется использовать локальное хранилище, которое поддерживает очистку неиспользуемых блоков (discard) и, либо тонкое выделение ресурсов (thin provisioning), либо разреженные файлы (sparse files).
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 для обнаружения изменений в файлах контейнера и выбора оптимального формата кодирования при резервном копировании:
  • legacy — все файлы упаковываются в единый архив без разделения на потоки (формат pxar версии 1);
  • data — чтение и кодирование всех файлов, с разделением данных и метаданных на отдельные потоки (формат pxar версии 2);
  • metadata — разделение потоков (формат pxar версии 2), использует метаданные из предыдущего снимка (если есть) для обнаружения неизмененных файлов и повторного использования этих фрагментов данных без чтения содержимого файлов с диска
performance: [max-workers=<целое число>][,pbs-entries-max=<целое число>]
max-workers=<целое число> (1 — 256) (по умолчанию 16)
pbs-entries-max=<целое число> (1 — N) (по умолчанию 1048576)
Другие настройки, связанные с производительностью:
  • max-workers — максимальное количество параллельных операций ввода-вывода (IO), выполняемых во время резервного копирования (применяется к ВМ);
  • pbs-entries-max — применяется к резервным копиям контейнеров, отправляемым в PBS. Ограничивает количество файловых записей, хранящихся в памяти во время резервного копирования, чтобы предотвратить нехватку памяти (OOM). Следует увеличить значение этого параметра для ускорения обработки резервных копий контейнеров с большим количеством файлов (слишком высокое значение может привести к риску исчерпания памяти)
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

37.13. Сценарии перехвата (hookscripts)

Сценарий перехвата можно указать с помощью опции --script. Этот скрипт вызывается на различных этапах процесса резервного копирования с соответствующими параметрами (см. пример скрипта /usr/share/doc/pve-manager/examples/vzdump-hook-script.pl).

37.14. Файлы, не включаемые в резервную копию

Примечание

Эта опция доступна только при создании резервных копий контейнеров.
Команда 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/) и будут корректно восстановлены.

37.15. Примеры создания резервных копий в командной строке

Создать простую резервную копию ВМ 103 — без снимков, только архив гостевой части и конфигурационного файла в каталог резервного копирования по умолчанию (обычно /var/lib/vz/dump/):
# vzdump 103
Использовать rsync и режим приостановки для создания снимка (минимальное время простоя):
# vzdump 103 --mode suspend
Сделать резервную копию всей гостевой системы и отправить отчет пользователям root и admin:
# vzdump --all --mode suspend --mailto root --mailto admin
Использовать режим мгновенного снимка (нет времени простоя) и каталог для хранения резервных копий /mnt/backup:
# vzdump 103 --dumpdir /mnt/backup --mode snapshot
Резервное копирование нескольких ВМ:
# vzdump 101 102 103 --mailto root
Резервное копирование всех ВМ, исключая 101 и 102:
# vzdump --mode suspend --exclude 101,102
Выполнить резервное копирование контейнера с использованием режима обнаружения изменений metadata:
# vzdump 105 --storage pbs-backup --pbs-change-detection-mode metadata
Восстановить контейнер в новый контейнер 600:
# pct restore 600 /mnt/backup/vzdump-lxc-104.tar
Восстановить QemuServer VM в VM 601:
# qmrestore /mnt/backup/vzdump-qemu-105.vma 601
Клонировать существующий контейнер 101 в новый контейнер 300 с 4 ГБ корневой файловой системы:
# vzdump 101 --stdout | pct restore --rootfs 4 300 - 

37.16. Снимки (snapshot)

Снимки ВМ — это файловые снимки состояния, данных диска и конфигурации ВМ в определенный момент времени. Можно создать несколько снимков ВМ даже во время ее работы. Затем можно возвратить ее в любое из предыдущих состояний, применив моментальный снимок к ВМ.
Чтобы создать снимок состояния системы, необходимо в меню ВМ выбрать пункт Снимки и нажать кнопку Сделать снимок:
Окно управления снимками ВМ
В открывшемся окне следует ввести название снимка и нажать кнопку Сделать снимок:
Создание снимка ВМ
Для того чтобы восстановить ВМ из снимка, необходимо в меню ВМ выбрать пункт Снимки, выбрать снимок и нажать кнопку Откатить:
Восстановление ОС из снимка
При создании снимков, qm сохраняет конфигурацию ВМ во время снимка в отдельном разделе в файле конфигурации ВМ. Например, после создания снимка с именем 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
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).

Глава 38. Уведомления

Система уведомлений (нотификаций) в PVE предназначена для информирования администраторов о ключевых событиях, происходящих в системе, таких как сбой репликации хранилища, ошибка ограждения узлов, успешное и неудачное выполнение задач резервного копирования и других. Эти события обрабатываются системой уведомлений. У события уведомления есть метаданные: временная метка, уровень серьезности, тип и т.д.
Сопоставители уведомлений направляют событие уведомления в один или несколько целевых объектов уведомления. У сопоставителя могут быть правила сопоставления для выборочной маршрутизации на основе метаданных события уведомления.
Цель уведомления (канал доставки уведомлений) — это пункт назначения, в который событие уведомления направляется сопоставлением. PVE предлагает несколько типов целей:
  • Sendmail — уведомления отправляются через локальный почтовый сервер;
  • SMTP — уведомления отправляются через внешний SMTP-сервер;
  • Gotify — уведомления отправляются в сервис Gotify (легковесный сервер для push-уведомлений);
  • Webhook — выполняются HTTP-запросы к настраиваемому URL-адресу.
Задания резервного копирования имеют настраиваемый режим уведомления. Он позволяет выбирать между системой уведомлений и режимом для отправки уведомлений по электронной почте.
Систему уведомлений можно настроить в веб-интерфейсе (раздел Центр обработки данныхУведомления) или через конфигурационные файлы.
Конфигурация системы уведомлений хранится в файлах /etc/pve/notifications.cfg и /etc/pve/priv/notifications.cfg. Файл /etc/pve/priv/notifications.cfg содержит конфиденциальные параметры конфигурации (пароли, токены аутентификации) и доступен для чтения только пользователю root.

38.1. Цели уведомлений (Notification Targets)

38.1.1. Sendmail

Цель уведомлений Sendmail использует команду sendmail для отправки электронных писем списку настроенных пользователей или адресов электронной почты. Если в качестве получателя выбран пользователь, будет использоваться адрес электронной почты, указанный в настройках пользователя Адрес электронной почты пользователя можно настроить в разделе Центр обработки данныхРазрешенияПользователи. Если для пользователя не указан адрес электронной почты, письмо не будет отправлено.

Примечание

Двоичный файл sendmail предоставляется Postfix. Может потребоваться настроить Postfix так, чтобы он мог правильно доставлять почту, например, настроив внешний почтовый ретранслятор. В случае сбоя доставки необходимо проверить системные журналы на наличие сообщений, зарегистрированных демоном Postfix.

Примечание

Для возможности отправки уведомлений Sendmail должен быть запущен postfix:
# systemctl enable --now postfix
Для настройки цели Sendmail необходимо выполнить следующие шаги:
  1. В разделе Центр обработки данныхУведомленияПолучатели уведомлений нажать кнопку ДобавитьSendmail:
    Создать цель уведомлений Sendmail
  2. В открывшемся окне указать следующие данные (в скобках приведены параметры файла notifications.cfg):
    • Имя конечной точки — имя цели;
    • Включить (disable) — состояние цели;
    • Получатель (получатели) (mailto-user) — пользователи PVE, которым будут отправлены уведомления. Адрес электронной почты пользователя будет найден в users.cfg;
    • Дополнительный получатель (получатели) (mailto) — список дополнительных получателей электронной почты;
    • Комментарий (comment) — комментарий для этой цели;
    • Автор (author) — автор электронного письма. По умолчанию: Proxmox VE;
    • Адрес отправителя (from-address) — адрес отправителя, который будет использоваться в уведомлениях. Если параметр не задан, будет использоваться настройка Центр обработки данныхПараметрыАдрес для отправки сообщений (email_from из файла datacenter.cfg). Если она также не задана, будет использоваться значение по умолчанию root@$hostname, где $hostname — имя узла.
    Настройка цели уведомлений Sendmail
Пример конфигурации (/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

38.1.2. SMTP

Цель уведомлений SMTP позволяет отправлять электронные письма напрямую на почтовый ретранслятор SMTP. Эта цель не использует MTA системы для доставки электронных писем.

Примечание

В отличие от целей Sendmail, цели SMTP не имеют механизма очередности/повторной отправки в случае сбоя доставки почты.
Для настройки цели SMTP необходимо выполнить следующие шаги:
  1. В разделе Центр обработки данныхУведомленияПолучатели уведомлений нажать кнопку ДобавитьSMTP:
    Создать цель уведомлений SMTP
  2. В открывшемся окне указать следующие данные (в скобках приведены параметры файла notifications.cfg):
    • Имя конечной точки — имя цели;
    • Включить (disable) — состояние цели;
    • Сервер (server) — адрес SMTP-сервера;
    • Шифрование (mode) — метод шифрования, который будет использоваться для соединения (insecure, starttls или tls). По умолчанию tls;
    • Порт (port) — порт, который будет использоваться. По умолчанию 465 для подключений на основе TLS, 587 — для подключений на основе STARTTLS и порт 25 — для незащищенных подключений с открытым текстом;
    • Выполнять аутентификацию — добавить данные для аутентификации SMTP;
    • Имя пользователя (username) — имя пользователя для аутентификации SMTP. Если имя пользователя не задано, аутентификация не будет выполнена. Поддерживаются методы аутентификации PLAIN и LOGIN;
    • Пароль (password) — пароль для аутентификации SMTP;
    • Адрес отправителя (from-address) — адрес отправителя, который будет использоваться в уведомлениях. Ретрансляторы SMTP могут потребовать, чтобы этот адрес принадлежал пользователю. Поле Отправитель в электронном письме будет установлен на $author <$from-address>;
    • Получатель (получатели) (mailto-user) — пользователи PVE, которым будут отправлены уведомления. Адрес электронной почты пользователя будет найден в users.cfg;
    • Дополнительный получатель (получатели) (mailto) — список дополнительных получателей электронной почты;
    • Комментарий (comment) — комментарий для этой цели;
    • Автор (author) — автор электронного письма. По умолчанию: Proxmox VE.
    Настройка цели уведомлений SMTP
Пример конфигурации:
  • файл /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
    

38.1.3. Webhook

Цели уведомлений Webhook выполняют HTTP-запросы на настраиваемый URL.
Для настройки цели Webhook необходимо выполнить следующие шаги:
  1. В разделе Центр обработки данныхУведомленияПолучатели уведомлений нажать кнопку ДобавитьWebhook:
    Создать цель уведомлений Webhook
  2. В открывшемся окне указать следующие данные (в скобках приведены параметры файла notifications.cfg):
    • Имя конечной точки — имя цели;
    • Включить (disable) — состояние цели;
    • Метод/URL-адрес (method/url) — используемый HTTP-метод (POST/PUT/GET) и URL-адрес, по которому следует выполнять HTTP-запросы. URL-адрес поддерживает шаблонизацию для внедрения содержимого сообщения, метаданных и секретов;
    • Заголовки (header) — массив HTTP-заголовков, которые следует задать для запроса. Поддерживает шаблонизацию для внедрения содержимого сообщения, метаданных и секретов;
    • Тело письма (body) — HTTP-тело, которое следует отправить. Поддерживает шаблонизацию для внедрения содержимого сообщения, метаданных и секретов;
    • Секреты (secret) — массив секретных пар ключ-значение. Они будут храниться в защищенном файле конфигурации, доступном для чтения только пользователю root. Для любых конечных точек API, возвращающих конфигурацию конечной точки, будет возвращено только имя секрета, но не значение. Доступ к секретам можно получить в шаблонах body/header/URL через пространство имен secrets.
    • Комментарий (comment) — комментарий для этой цели;
    Настройка цели уведомлений Webhook (ntfy.sh)
Пример конфигурации:
  • файл /etc/pve/notifications.cfg:
    webhook: ntfy
    	body e3sgbWVzc2FnZSB9fQ== # Закодированный {{ message }}
    	comment Отправка PUSH уведомлений
    	method post
    	url https://ntfy.sh/pve_backup_job_186
    
  • файл /etc/pve/priv/notifications.cfg:
    webhook: ntfy
    	secret name=channel,value=MTIzNDU2NDg3OA==
    

Примечание

Содержимое опции body должно быть в base64. Содержимое свойства value опции secret должно быть в base64 (/etc/pve/priv/notifications.cfg).
Закодировать строку в base64 можно, выполнив команду:
$ echo -n 'pve_backup_job_186' | base64 -w 0
cHZlX2JhY2t1cF9qb2JfMTg2
Для параметров конфигурации, которые поддерживают шаблонизацию, синтаксис Handlebars может использоваться для доступа к следующим свойствам:
  • {{ 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 }}).

Примечание

Цели Webhook учитывают настройки HTTP-прокси из Центр обработки данныхПараметрыПрокси HTTP.

38.2. Триггеры уведомлений (Notification Matchers)

Триггеры уведомлений направляют уведомления к целям уведомлений на основе правил сопоставления. Эти правила могут соответствовать определенным свойствам уведомления, таким как временная метка (match-calendar), серьезность уведомления (match-severity) или поля метаданных (match-field). Если уведомление сопоставлено триггером, все цели, настроенные для сопоставления, получат уведомление.
Можно создать произвольное количество триггеров, каждый со своими собственными правилами сопоставления и целями для уведомления. Каждая цель уведомляется не более одного раза для каждого уведомления, даже если цель используется в нескольких триггерах.
Триггер без правил соответствует любому уведомлению (настроенные цели всегда будут уведомлены):
matcher: always-matches
    comment Это сопоставление всегда срабатывает
    mode all
    target mail-to-root

38.2.1. Правила сопоставления календаря (match-calendar)

Сопоставитель календаря соответствует временной метке уведомления.
Опция 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 часов.

38.2.2. Правила сопоставления полей (match-field)

Опция 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, но не будет соответствовать, если поле не существует.

38.2.3. Правила сопоставления серьезности (match-severity)

Опция match-severity используется для фильтрации уведомлений на основе уровня серьёзности (severity) события. Поддерживаются следующие уровни серьезности: info, notice, warning, error, unknown.
Примеры:
  • match-severity error — только ошибки;
  • match-severity warning,error — предупреждения и ошибки.

38.2.4. События уведомления

В таблице Список событий уведомлений приведен список всех событий уведомлений в PVE, их тип, серьезность и дополнительные поля метаданных. Тип, а также любое поле метаданных могут использоваться в правилах сопоставления.

Таблица 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
    
  • при ошибках создания резервной копии, отправлять уведомления в рабочие часы на цель smtp:
    matcher: zfs-error
            match-calendar mon..fri 8-17
            match-field exact:type=vzdump
            match-severity error
            mode all
            target smtp
    

38.2.5. Создание триггера уведомлений

Для создания правила сопоставления необходимо выполнить следующие шаги:
  1. В разделе Центр обработки данныхУведомленияСредства сопоставления уведомлений нажать кнопку Добавить.
  2. В открывшемся окне на вкладке Общее в поле Имя средства сопоставления уведомлений указать название триггера:
    Создание триггера уведомления
  3. На вкладке Правила совпадения настроить правила сопоставлений:
    Создание триггера уведомления. Правила сопоставлений
  4. На вкладке Получатели уведомлений выбрать цели для уведомления:
    Создание триггера уведомления. Выбор целей

38.3. Пересылка системной почты

Некоторые локальные системные демоны, например smartd, отправляют уведомления локальному пользователю root. PVE будет передавать эти письма в систему уведомлений как уведомления типа system-mail с неизвестной серьезностью.
Когда электронное письмо пересылается на цель Sendmail, содержимое и заголовки письма пересылаются как есть. Для всех других целей система пытается извлечь как строку темы, так и основной текст из содержимого электронного письма. В случаях, когда электронные письма состоят исключительно из HTML-контента, они будут преобразованы в формат обычного текста во время этого процесса.

38.4. Разрешения

Чтобы изменить/просмотреть конфигурацию для целей уведомлений, требуются разрешения Mapping.Modify/Mapping.Audit для узла ACL /mapping/notifications.
Для тестирования цели требуются разрешения Mapping.Use, Mapping.Audit или Mapping.Modify для /mapping/notifications.

38.5. Режим уведомления

Конфигурация задания резервного копирования имеет параметр notification-mode (Режим отправки уведомлений), который может принимать одно из трёх значений:
  • Автоматически (auto) — использовать режим legacy-sendmail если email-адрес указан в поле mailto, в противном случае использовать режим notification-system;
  • Эл. почта (устаревшее) (legacy-sendmail) — отправлять уведомления по электронной почте с помощью системной команды sendmail. Система уведомлений будет проигнорирована. Этот режим эквивалентен поведению уведомлений для версии PVE<8.1;
  • Система отправки уведомлений (notification-system) — использовать систему уведомлений.
Если параметр notification-mode не установлен, PVE по умолчанию будет использовать auto.

Глава 39. Встроенный мониторинг PVE

Все данные о потреблении ресурсов и производительности можно найти на вкладках Сводка узлов PVE и ВМ. Можно просматривать данные на основе почасового ежедневного, еженедельного или за год периодов.
Сводка узла pve01 со списком для выбора периода данных:
Выбор периода данных, для отображения отчета
Просмотреть список всех узлов, ВМ и контейнеров в кластере можно, выбрав Центр обработки данныхПоиск. В этом списке отображается потребление ресурсов только в реальном масштабе времени.
Потребление ресурсов
К полям, отображаемым по умолчанию, можно добавить дополнительные поля и указать порядок сортировки дерева ресурсов:
Выбор отображаемых полей
Для мониторинга состояния локальных дисков используется пакет smartmontools. Он содержит набор инструментов для мониторинга и управления S.M.A.R.T. системой для локальных жестких дисков.
Получить статус диска можно, выполнив следующую команду:
# smartctl -a /dev/sdX
где /dev/sdX — это путь к одному из локальных дисков.
Включить поддержку SMART для диска, если она отключена:
# smartctl -s on /dev/sdX
Просмотреть S.M.A.R.T. статус диска в веб-интерфейсе можно, выбрав в разделе Диски нужный диск и нажав кнопку Показать данные S.M.A.R.T.:
Кнопка Показать данные S.M.A.R.T.
По умолчанию, smartmontools daemon smartd активен и включен, и сканирует диски в /dev каждые 30 минут на наличие ошибок и предупреждений, а также отправляет сообщение электронной почты пользователю root в случае обнаружения проблемы (для пользователя root в PVE должен быть введен действительный адрес электронной почты).
Электронное сообщение будет содержать имя узла, где возникла проблема, а также параметры самого устройства, такие как серийный номер и идентификатор дискового устройства. Если та же самая ошибка продолжит возникать, узел будет отсылать электронное сообщение каждые 24 часа. Основываясь на содержащейся в электронном сообщении информации можно определить отказавшее устройство и заменить его в случае такой необходимости.

Глава 40. Высокая доступность PVE

Высокая доступность PVE (High Availability, HA) позволяет кластеру перемещать или мигрировать ВМ с отказавшего узла на жизнеспособный узел без вмешательства пользователя.
Для функционирования HA в PVE необходимо чтобы все ВМ использовали общее хранилище. HA PVE обрабатывает только узлы PVE и ВМ в пределах кластера PVE. Такую функциональность HA не следует путать с избыточностью общих хранилищ, которую PVE может применять в своем развертывании HA. Общие хранилища сторонних производителей могут предоставлять свою собственную функциональность HA. Таким образом, и сам кластер PVE, и общее хранилище должны быть настроены для предоставления реальной среды с высокой доступностью.
В вычислительном узле PVE могут существовать свои уровни избыточности, например, применение RAID, дополнительные источники питания, объединение/агрегация сетей. HA в PVE не подменяет собой ни один из этих уровней, а просто способствует использованию функций избыточности ВМ для сохранения их в рабочем состоянии при отказе какого-либо узла.

40.1. Как работает высокая доступность PVE

PVE предоставляет программный стек ha-manager, который может автоматически обнаруживать ошибки и выполнять автоматический переход на другой ресурс. Основной блок управления, управляемый ha-manager называется ресурсом. Ресурс (сервис) однозначно идентифицируется идентификатором сервиса (SID), который состоит из типа ресурса и идентификатора, специфичного для данного типа, например, vm: 100 (ресурс типа ВМ с идентификатором 100).
В случае, когда по какой-либо причине узел становится недоступным, HA PVE ожидает 60 секунд прежде чем выполнить ограждение (fencing) отказавшего узла. Ограждение предотвращает службы кластера от возврата в рабочее состояние в этом месте. Затем HA перемещает ВМ и контейнеры на следующий доступный узел в группе участников HA. Даже если узел с ВМ включен, но потерял связь с сетевой средой, HA PVE попытается переместить все ВМ с этого узла на другой узел.
При возврате отказавшего узла в рабочее состояние, HA не переместит ВМ на первоначальный узел. Это необходимо выполнять вручную. При этом ВМ может быть перемещена вручную только если HA запрещен для данной ВМ. Поэтому сначала следует выключить HA, а затем переместить на первоначальный узел и включить HA для данной ВМ вновь.

40.2. Требования для настройки высокой доступности

Среда PVE для настройки HA должна отвечать следующим требованиям:
  • кластер, содержащий, как минимум, три узла (для получения надежного кворума);
  • общее хранилище для ВМ и контейнеров;
  • аппаратное резервирование;
  • использование надежных «серверных» компонентов;
  • аппаратный сторожевой таймер (если он недоступен, используется программный таймер ядра Linux);
  • дополнительные устройства ограждения (fencing).

Примечание

В случае построения виртуальной инфраструктуры на серверах HP необходимо запретить загрузку модуля ядра hpwdt. Для этого необходимо создать файл /etc/modprobe.d/nohpwdt.conf со следующим содержимым:
# Do not load the 'hpwdt' module on boot.
blacklist hpwdt
Для применения изменений следует перезагрузить систему.

40.3. Настройка высокой доступности PVE

Все настройки HA PVE могут быть выполнены в веб-интерфейсе в разделе Центр обработки данныхHA:
Меню HA. Статус настройки HA

40.3.1. Создание группы высокой доступности

Наиболее характерным примером использования групп HA являются некие программные решения или инфраструктура ВМ, которые должны работать совместно (например, контроллер домена, файловый сервер). Назначенные в определенную группу ВМ могут перемещаться только между узлами участниками этой группы. Например, есть шесть узлов, три из которых обладают всей полнотой ресурсов достаточной для исполнения виртуального сервера базы данных, а другие три узла выполняют виртуальные рабочие столы или решения VDI. Можно создать две группы, чтобы виртуальные серверы баз данных перемещались только в пределах тех узлов, которые будут назначены для данной группы. Это гарантирует, что ВМ переместится на тот узел, который будет способен исполнять такие ВМ.
Для включения HA необходимо создать как минимум одну группу.
Для создания группы следует в подменю Группы нажать кнопку Создать.
Элементы, доступные в блоке диалога Группа HA:
  • ID — название HA группы;
  • Узел — назначение узлов в создаваемую группу (нужно выбрать, по крайней мере, один узел);
  • restricted — разрешение перемещения ВМ со стороны HA PVE только в рамках узлов участников данной группы HA. Если перемещать ВМ некуда, то эти ВМ будут автоматически остановлены;
  • nofailback — используется для предотвращения автоматического восстановления состояния ВМ/контейнера при восстановлении узла в кластере (не рекомендуется включать эту опцию).
Диалог создания группы
Подменю Группы с созданной группой:
Подменю Группы с созданной группой

40.3.2. Добавление ресурсов

Для включения HA для ВМ или контейнера следует нажать кнопку Добавить в разделе Ресурсы меню HA. В открывшемся диалоговом окне нужно выбрать ВМ/контейнер и группу HA:
Добавление ресурса в группу
В окне можно настроить следующие параметры:
  • Макс. перезапусков — количество попыток запуска ВМ/контейнера на новом узле после перемещения;
  • Макс. перемещений — количество попыток перемещения ВМ/контейнера на новый узел;
  • Статус запроса — доступны варианты: started — кластер менеджер будет пытаться поддерживать состояние машины в запущенном состоянии; stopped — при отказе узла перемещать ресурс, но не пытаться запустить; ignored — ресурс, который не надо перемещать при отказе узла; disabled — в этот статус переходят ВМ, которые находятся в состоянии «error».
Группа HA PVE и добавленные в нее ВМ и контейнеры, которыми будет управлять HA:
Список ресурсов
Раздел Статус отображает текущее состояние функциональности HA:
  • кворум кластера установлен;
  • главный узел pve01 группы HA активен и последний временной штамп жизнеспособности (heartbeat timestamp) проверен;
  • все узлы, участвующие в группе HA активны и последний временной штамп жизнеспособности (heartbeat timestamp) проверен.
Просмотреть состояние функциональности HA можно и в консоли:
# 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)

40.4. Тестирование настройки высокой доступности PVE

Для того чтобы убедиться, что HA действительно работает, можно отключить сетевое соединение для pve01 и понаблюдать за окном Статус на предмет изменений HA:
Список ресурсов
После того как соединение с узлом pve01 будет потеряно, он будет помечен как недоступный. По истечению 60 секунд, HA PVE предоставит следующий доступный в группе HA узел в качестве главного:
Изменение главного узла на pve02
После того как HA PVE предоставит новый ведущий узел для данной группы HA, будет запущено ограждение для ресурсов ВМ/контейнера для подготовки к перемещению их на другой узел. В процессе ограждения, все связанные с данной ВМ службы ограждаются, что означает, что даже если отказавший узел вернется в строй на этом этапе, ВМ не смогут восстановить свою нормальную работу. Затем ВМ/контейнер полностью останавливается. Так как узел сам по себе отключен, ВМ/контейнер не может выполнить миграцию в реальном режиме времени, поскольку состояние оперативной памяти исполняемой ВМ не может быть получено с отключенного узла.
После остановки, ВМ/контейнер перемещается на следующий свободный узел в группе HA и автоматически запускается.
В данном примере контейнер 101 перемещен на узел pve02 и запущен:
Контейнер 101 запущен на узле pve02
В случае возникновения любой ошибки, HA PVE выполнит несколько попыток восстановления в соответствии с политиками restart и relocate. Если все попытки окажутся неудачными, HA PVE поместит ресурсы в ошибочное состояние и не будет выполнять для них никаких задач.

Глава 41. Межсетевой экран PVE (firewall)

Межсетевой экран PVE обеспечивает простой способ защиты ИТ-инфраструктуры. Можно настроить правила межсетевого экрана для всех узлов внутри кластера или определить правила для ВМ и контейнеров.
Хотя вся конфигурация хранится в файловой системе кластера, служба межсетевого экрана на основе iptables работает на каждом узле кластера и, таким образом, обеспечивает полную изоляцию между ВМ. Распределенная природа этой системы также обеспечивает гораздо более высокую пропускную способность, чем центральное решение межсетевого экрана.
Межсетевой экран поддерживает протоколы IPv4 и IPv6. По умолчанию фильтруется трафик для обоих протоколов, поэтому нет необходимости поддерживать другой набор правил для IPv6.

41.1. Зоны

Межсетевой экран PVE группирует сеть в следующие логические зоны:
  • Узел — трафик из/в узел кластера;
  • ВМ — трафик из/в определенную ВМ.
Для каждой зоны можно определить правила межсетевого экрана для входящего и/или исходящего трафика.

41.2. Файлы конфигурации

Вся конфигурация, связанная с межсетевым экраном, хранится в файловой системе кластера. Поэтому эти файлы автоматически распространяются на все узлы кластера, а служба pve-firewall при изменениях автоматически обновляет базовые правила iptables.
Управление правилами осуществляется через веб-интерфейс PVE (например, Центр обработки данныхСетевой экран или УзелСетевой экран) или через конфигурационные файлы (/etc/pve/firewall/).
Файлы конфигурации брандмауэра содержат разделы пар ключ-значение. Строки, начинающиеся с символа #, и пустые строки считаются комментариями. Разделы начинаются со строки заголовка, которая содержит имя раздела, заключенное в квадратные скобки.

41.2.1. Настройка кластера

Файл /etc/pve/firewall/cluster.fw используется для хранения конфигурации PVE Firewall на уровне всего кластера. Этот файл содержит глобальные правила и параметры, которые применяются ко всем узлам и ВМ в кластере. Файл автоматически синхронизируется между всеми узлами кластера через PVE Cluster File System (pmxcfs).
Файл /etc/pve/firewall/cluster.fw состоит из нескольких секций, каждая из которых отвечает за определённые аспекты конфигурации firewall. В файле содержатся следующие секции:
  • [OPTIONS] — используется для установки параметров межсетевого экрана;
  • [RULES] — правила межсетевого экрана;
  • [IPSET <имя_набора>] — определения набора IP-адресов;
  • [GROUP <имя_группы>] — определения групп безопасности;
  • [ALIASES] — определения псевдонимов.

Таблица 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.
  • burst=<integer> (0 — N) (по умолчанию = 5) — максимальное количество логов, которые могут быть записаны за один раз (пиковое значение);
  • enable=<1|0> (по умолчанию = 1) — включить или отключить ограничение частоты записи логов;
  • rate=<rate> (по умолчанию = 1/second) — средняя скорость записи логов. Формат: <число>/<интервал> (например, 1/second, 5/minute).
policy_in: <ACCEPT | DROP | REJECT>
Политика по умолчанию для входящего трафика. Возможные значения:
  • ACCEPT — разрешить;
  • DROP — отбросить;
  • REJECT — отклонить с отправкой уведомления.
policy_out: <ACCEPT | DROP | REJECT>
Политика по умолчанию для исходящего трафика (аналогично policy_in)
Параметры межсетевого экрана кластера можно настроить в веб-интерфейсе (Центр обработки данныхСетевой экранПараметры):
Параметры сетевого экрана кластера
По умолчанию межсетевой экран отключен. Включить межсетевой экран можно, отредактировав параметр Сетевой экран в веб-интерфейсе или установив опцию enable в файле /etc/pve/firewall/cluster.fw:
[OPTIONS]
# enable firewall (настройка для всего кластера, по умолчанию отключено)
enable: 1

Важно

При включении межсетевого экрана трафик ко всем узлам будет заблокирован по умолчанию. Исключениями являются только WebGUI (8006) и SSH (22) из локальной сети.
Чтобы администрировать узлы PVE удаленно, нужно создать правила, разрешающие трафик с этих удаленных IP-адресов в веб-интерфейс (порт 8006). Можно также разрешить SSH (порт 22) и, возможно, SPICE (порт 3128).

Примечание

Перед включением межсетевого экрана можно создать SSH-подключение к одному из узлов PVE. В этом случает, если что-то пойдет не так, доступ к узлу сохранится.
Чтобы упростить задачу удалённого администрирования, можно создать IPSet под названием «management» и добавить туда все удаленные IP-адреса. При этом будут созданы все необходимые правила межсетевого экрана для доступа к GUI из удаленного режима.

41.2.2. Конфигурация узла

Конфигурация, связанная с узлом, считывается из файла /etc/pve/nodes/<nodename>/host.fw. Здесь можно перезаписать правила из конфигурации cluster.fw или увеличить уровень детализации журнала и задать параметры, связанные с netfilter.
В файле host.fw содержатся следующие секции:
  • [OPTIONS] — используется для настройки параметров межсетевого экрана, связанных с узлом;
  • [RULES] — правила межсетевого экрана, специфичные для узла.

Таблица 41.2. Опции секции [OPTIONS] конфигурации узла

Опция
Описание
enable: <1|0>
Включить или отключить межсетевой экран узла
log_level_in: <alert | crit | debug | emerg | err | info | nolog | notice | warning>
Уровень журнала для входящего трафика. Возможные значения:
  • 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
Параметры межсетевого экрана узла можно настроить в веб-интерфейсе (УзелСетевой экранПараметры):
Параметры сетевого экрана узла

41.2.3. Конфигурация ВМ/контейнера

Конфигурация межсетевого экрана ВМ считывается из файла /etc/pve/firewall/<VMID>.fw. Этот файл используется для установки параметров межсетевого экрана, связанных с ВМ/контейнером.
В файле содержатся следующие секции:
  • [OPTIONS] — параметры межсетевого экрана ВМ/контейнера;
  • [RULES] — правила межсетевого экрана;
  • [IPSET <имя_набора>] — определения набора IP-адресов;
  • [ALIASES] — определения псевдонимов.

Таблица 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>
Уровень журнала для входящего трафика. Возможные значения:
  • 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>
Политика по умолчанию для входящего трафика. Возможные значения:
  • ACCEPT — разрешить;
  • DROP — отбросить;
  • REJECT — отклонить с отправкой уведомления.
policy_out: <ACCEPT | DROP | REJECT>
Политика по умолчанию для исходящего трафика (аналогично policy_in)
radv: <1|0>
Разрешить отправку объявлений маршрутизатора
Параметры межсетевого экрана ВМ/контейнера можно настроить в веб-интерфейсе (ВМ/КонтейнерСетевой экранПараметры):
Параметры сетевого экрана ВМ
Каждое виртуальное сетевое устройство, в дополнение к общей опции включения межсетевого экрана, имеет свой собственный флаг включения межсетевого экрана. Таким образом, можно выборочно включить межсетевой экрана для каждого интерфейса.
Включение межсетевого экрана для сетевого устройства ВМ

41.2.4. Правила межсетевого экрана

Правила межсетевого экрана состоят из направления (IN или OUT) и действия (ACCEPT, DENY, REJECT). Можно также указать имя макроса. Макросы содержат предопределенные наборы правил и параметров. Правила можно отключить, добавив к ним префикс |.
Синтаксис правил:
[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 # принять все исходящие пакеты
Для добавления правила в веб-интерфейсе необходимо перейти в раздел Сетевой экран (например, Центр обработки данныхСетевой экран), нажать кнопку Добавить, в открывшемся окне задать параметры правила и нажать кнопку Добавить:
Создание правила

41.2.5. Группы безопасности

Группа безопасности — это набор правил, определенных на уровне кластера, которые можно использовать во всех правилах ВМ. Например, можно определить группу с именем «webserver» с правилами для открытия портов http и https:
# /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
Пример работы с группой безопасности в веб-интерфейсе:
  1. Перейти в раздел Центр обработки данныхСетевой экранГруппа безопасности;
  2. В секции Группа нажать кнопку Создать, в открывшемся окне ввести название группы и нажать кнопку Создать:
    Создание группы безопасности
  3. Выделить созданную группу безопасности.
  4. В секции Правила нажать кнопку Добавить, в открывшемся окне установить параметры правила и нажать кнопку Добавить:
    Добавление правила к группе безопасности
  5. Повторить п.3 нужное число раз для добавления всех правил к группе.
    Правила группы безопасности webserver
  6. Перейти в раздел ВМСетевой экран.
  7. Нажать кнопку Вставить: Группа безопасности, в открывшемся окне в поле Группа безопасности выбрать группу, установить отметку в поле Включить и нажать кнопку Добавить:
    Добавление правил группы безопасности к ВМ

41.2.6. IP-псевдонимы

IP-псевдонимы могут быть полезны для упрощения управления сетевыми правилами. Псевдонимы позволяют связывать IP-адреса сетей с именем, затем можно ссылаться на эти имена:
  • внутри определений набора IP-адресов;
  • в параметрах source и dest правил межсетевого экрана.
IP-псевдоним local_network определяется автоматически. Чтобы увидеть назначенные значения можно выполнить команду:
# 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) с помощью этого псевдонима.
Пользователь может перезаписать эти значения в разделе [ALIASES] в файле /etc/pve/firewall/cluster.fw. Если используется один узел в публичной сети, лучше явно назначить локальный IP-адрес:
# /etc/pve/firewall/cluster.fw
[ALIASES]
local_network 192.168.0.186 # использовать одиночный IP-адрес
Пример создания IP-псевдонима (Центр обработки данныхСетевой экранПсевдоним кнопка Добавить):
Создание псевдонима

41.2.7. Наборы IP-адресов

Наборы IP-адресов (IPSet) можно использовать для определения групп сетей и узлов. На них можно ссылаться в свойствах источника и назначения правил межсетевого экрана с помощью «+name».
Следующий пример разрешает HTTP-трафик из набора IP-адресов управления:
IN HTTP(ACCEPT) -source +management
Пример работы с набором IP-адресов в веб-интерфейсе:
  1. Перейти в раздел Центр обработки данныхСетевой экранIPSet;
  2. В секции IPSet нажать кнопку Создать, в открывшемся окне ввести название набора и нажать кнопку ОК:
    Создание набора IP-адресов
  3. Выделить созданный набор.
  4. В секции IP/CIDR нажать кнопку Добавить, в открывшемся окне указать IP/CIDR и нажать кнопку Создать:
    Добавление сети к набору
  5. Повторить п.3 нужное число раз для добавления всех IP к набору.
    IP-адреса в наборе my_ip_set
  6. Перейти в раздел ВМСетевой экран.
  7. Нажать кнопку Добавить, в открывшемся окне в поле Источник выбрать созданный набор, установить другие параметры правила и нажать кнопку Добавить:
    Указание набора IP-адресов в правиле межсетевого экрана

41.2.7.1. Стандартный набор IP-адресов management

Стандартный набор IP-адресов management применяется только к межсетевым экранам узлов (не к межсетевым экранам ВМ). Этим IP-адресам разрешено выполнять обычные задачи управления (PVE GUI, VNC, SPICE, SSH).
Локальная сеть кластера автоматически добавляется в этот набор IP-адресов (псевдоним cluster_network), чтобы включить межкластерную связь узлов (multicast, ssh, …):
# /etc/pve/firewall/cluster.fw

[IPSET management]
192.168.0.90
192.168.0.90/24

41.2.7.2. Стандартный набор IP-адресов blacklist

Трафик с IP-адресов, внесенных в черный список (blacklist), отбрасывается межсетевым экраном каждого узла и ВМ:
# /etc/pve/firewall/cluster.fw

[IPSET blacklist]
77.240.159.182
213.87.123.0/24

41.2.7.3. Стандартный набор IP-адресов ipfilter-net*

Фильтры ipfilter-net* относятся к сетевому интерфейсу ВМ и в основном используются для предотвращения подмены IP-адресов. Если набор IP-адресов ipfilter-net* существует для интерфейса, то любой исходящий трафик с исходным IP-адресом, не соответствующим соответствующему набору ipfilter его интерфейса, будет отброшен.
Для контейнеров с настроенными IP-адресами эти наборы, если они существуют (или активированы с помощью параметра общего фильтра IP-адресов на вкладке Параметры межсетевого экрана ВМ), неявно содержат связанные IP-адреса.
Как для ВМ, так и для контейнеров они также неявно содержат стандартный локальный адрес IPv6, полученный из MAC-адреса, чтобы обеспечить работу протокола обнаружения соседей.
/etc/pve/firewall/<VMID>.fw

[IPSET ipfilter-net0] # only allow specified IPs on net0
192.168.0.90

41.2.8. Службы и команды

Межсетевой экран запускает две службы на каждом узле:
  • pve-firewall — служба, отвечающая за применение и управление правилами firewall;
  • pvefw-logger — служба, отвечающая за логирование событий, связанных с работой firewall.
Для запуска и остановки службы межсетевого экрана можно также использовать команду pve-firewall:
# pve-firewall start
# pve-firewall stop
Получение статуса службы:
# pve-firewall status
Данная команда считывает и компилирует все правила межсетевого экрана, поэтому если конфигурация межсетевого экрана содержит какие-либо ошибки, будут выведены ошибки.
Для просмотра сгенерированных правил iptables можно использовать команду:
# iptables-save

41.3. Правила по умолчанию

41.3.1. Входящий/исходящий DROP/REJECT центра обработки данных

Если политика ввода или вывода для межсетевого экрана установлена ​​на DROP или REJECT, следующий трафик все равно разрешен для всех узлов PVE в кластере:
  • трафик через интерфейс обратной связи;
  • уже установленные соединения;
  • трафик с использованием протокола IGMP;
  • TCP-трафик от узлов управления на порт 8006 для разрешения доступа к веб-интерфейсу;
  • TCP-трафик от узлов управления на диапазон портов 5900–5999 для разрешения трафика для веб-консоли VNC;
  • TCP-трафик от узлов управления на порт 3128 для подключений к прокси-серверу SPICE;
  • TCP-трафик от узлов управления на порт 22 для разрешения доступа по SSH;
  • UDP-трафик в сети кластера на порты 5405–5412 для corosync;
  • UDP-многоадресный трафик в кластере сеть;
  • ICMP трафик типа 3 (Destination Unreachable), 4 (Congestion control) или 11 (Time Exceeded).
Следующий трафик отбрасывается, но не регистрируется даже при включенном ведении журнала:
  • TCP-соединения с недопустимым состоянием соединения;
  • широковещательный, многоадресный и anycast-трафик, не связанный с corosync, т.е. не проходящий через порты 5405-5412;
  • TCP-трафик на порт 43;
  • UDP-трафик на порты 135 и 445;
  • UDP-трафик на диапазон портов 137–139;
  • UDP-трафик с исходного порта 137 на диапазон портов 1024–65535;
  • UDP-трафик на порт 1900;
  • TCP-трафик на порты 135, 139 и 445;
  • UDP-многоадресный трафик в кластере сеть;
  • UDP-трафик, исходящий из исходного порта 53.
Остальной трафик отбрасывается или отклоняется, а также регистрируется в соответствии с правилами. Это может зависеть от дополнительных параметров, таких как NDP, Фильтр SMURFS и Фильтр флагов TCP (Сетевой экранПараметры).
Параметры сетевого экрана узла
Чтобы увидеть активные цепочки и правила межсетевого экрана, можно использовать команду:
# iptables-save
Этот вывод также включен в системный отчет, выводимый при выполнении команды:
# pvereport

41.3.2. Входящий/исходящий DROP/REJECT ВМ/Контейнера

Весь трафик к ВМ отбрасывается/отклоняется, с некоторыми исключениями для DHCP, NDP, Router Advertisement, MAC и IP-фильтрации в зависимости от установленной конфигурации. Правила для отбрасывания/отклонения пакетов также наследуются от центра обработки данных, в то время как исключения для принятого входящего/исходящего трафика узла не применяются.

41.4. Ведение журнала

По умолчанию ведение журнала трафика, отфильтрованного правилами межсетевого экрана, отключено. Чтобы включить ведение журнала, необходимо установить уровень журнала для входящего и/или исходящего трафика в разделе Сетевой экранПараметры. Это можно сделать как для узла, так и для ВМ по отдельности. При этом ведение журнала стандартных правил сетевого экрана PVE включено, а вывод можно наблюдать в разделе Сетевой экранЖурнал. Кроме того, для стандартных правил регистрируются только некоторые отброшенные или отклоненные пакеты (см. Правила по умолчанию).
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.
Чтобы регистрировать пакеты, отфильтрованные пользовательскими правилами, можно задать параметр уровня журнала для каждого правила индивидуально. Это позволяет вести журнал детально и независимо от уровня журнала, определенного для стандартных правил.
Хотя уровень журнала для каждого отдельного правила можно легко определить или изменить в веб-интерфейсе во время создания или изменения правила, его также можно задать с помощью соответствующих вызовов API pvesh.
Уровень журнала также можно задать с помощью файла конфигурации межсетевого экрана, добавив -log <loglevel> к выбранному правилу.
Например, следующие два правила идентичны:
IN REJECT -p icmp -log nolog
IN REJECT -p icmp
А правило:
IN REJECT -p icmp -log debug
создает вывод журнала, помеченный уровнем отладки.

41.5. Особенности IPv6

Межсетевой экран содержит несколько специфичных для IPv6 опций. Следует отметить, что IPv6 больше не использует протокол ARP, а вместо этого использует NDP (Neighbor Discovery Protocol), который работает на уровне IP и, следовательно, для успешной работы нуждается в IP-адресах. Для этой цели используются локальные адреса, полученные из MAC-адреса интерфейса. По умолчанию опция NDP включена как на уровне узла, так и на уровне ВМ, чтобы разрешить отправку и получение пакетов обнаружения соседей (NDP).
Помимо обнаружения соседей, NDP также используется для нескольких других вещей, таких как автоматическая настройка и объявление маршрутизаторов.
По умолчанию ВМ разрешено отправлять сообщения запроса маршрутизатора (для запроса маршрутизатора) и получать пакеты объявления маршрутизатора. Это позволяет им использовать автоматическую настройку без сохранения состояния. С другой стороны, ВМ не могут объявлять себя маршрутизаторами, если не установлена ​​опция Объявление маршрутизатора (radv: 1).
Что касается локальных адресов ссылок, необходимых для NDP, также можно включить опцию Фильтр IP (ipfilter: 1), которая имеет тот же эффект, что и добавление ipfilter-net* ipset для каждого сетевого интерфейса ВМ, содержащего соответствующие локальные адреса ссылок.

41.6. Порты, используемые PVE

Таблица 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)
Живая миграция (память виртуальной машины и данные локального диска)

Глава 42. Пользователи и их права

PVE поддерживает несколько источников аутентификации, например, Linux PAM, интегрированный сервер аутентификации PVE, LDAP, Active Directory и OpenID Connect:
Выбор типа аутентификации в веб-интерфейсе
Используя основанное на ролях управление пользователями и разрешениями для всех объектов (ВМ, хранилищ, узлов и т. д.), можно определить многоуровневый доступ.
PVE хранит данные пользователей в файле /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::
Каждая запись о пользователе в этом файле содержит следующую информацию: имя, фамилия, адрес электронной почты, членство в группах, дата истечения срока действия, комментарий, включен или отключен этот пользователь, отметка о включении двухфакторной аутентификации.
Пользователя часто внутренне идентифицируют по его имени и области аутентификации в форме <user>@<realm>.
После установки PVE существует один пользователь root@pam, который соответствует суперпользователю ОС. Этого пользователя нельзя удалить, все системные письма будут отправляться на адрес электронной почты, назначенный этому пользователю. Суперпользователь имеет неограниченные права, поэтому рекомендуется добавить других пользователей с меньшими правами.
Каждый пользователь может быть членом нескольких групп. Группы являются предпочтительным способом организации прав доступа. Всегда следует предоставлять права доступа группам, а не отдельным пользователям.

42.1. API-токены

API-токены позволяют получить доступ без сохранения состояния к REST API из другой системы. Токены могут быть сгенерированы для отдельных пользователей. Токенам, для ограничения объема и продолжительности доступа, могут быть предоставлены отдельные разрешения и даты истечения срока действия. Если API-токен скомпрометирован, его можно отозвать, не отключая самого пользователя.
API-токены бывают двух основных типов:
  • токен с раздельными привилегиями — токену необходимо предоставить явный доступ с помощью ACL. Эффективные разрешения токена вычисляются путем пересечения разрешений пользователя и токена;
  • токен с полными привилегиями — разрешения токена идентичны разрешениям связанного с ним пользователя.
API-токен состоит из двух частей:
  • идентификатор (Token ID), который состоит из имени пользователя, области и имени токена (user@realm!имя токена);
  • секретное значение.
Для генерации API-токена в веб-интерфейсе необходимо в окне Центр обработки данныхРазрешенияТокены API нажать кнопку Добавить. В открывшемся окне следует выбрать пользователя и указать ID-токена:
Генерация API-токена в веб-интерфейсе

Примечание

Отметку Разделение привилегий следует снять, в противном случае токену необходимо назначить явные права. Подробнее см. Управление доступом.
После нажатия кнопки Добавить будет сгенерирован API-токен:
PVE. API-токен
Отображаемое секретное значение необходимо сохранить.

Примечание

Значение токена отображается/возвращается только один раз при создании токена. Его нельзя будет снова получить через API позже!
Если был создан токен с раздельными привилегиями, токену необходимо предоставить разрешения:
  1. В окне Центр обработки данныхРазрешения нажать кнопку ДобавитьРазрешения токена API:
    PVE. Добавление разрешений
  2. В открывшемся окне выбрать путь, токен и роль и нажать кнопку Добавить:
    Добавление разрешений для API-токена
Для создания API-токена в консоли используется команда:
# pveum user token add <userid> <tokenid> [ОПЦИИ]
Возможные опции:
  • --comment <строка> — комментарий к токену;
  • --expire <целое число> — дата истечения срока действия API-токена в секундах с начала эпохи (по умолчанию срок действия API-токена совпадает со сроком действия пользователя). Значение 0 указывает, что срок действия токена не ограничен;
  • --privsep <логическое значение> — ограничить привилегии API-токена с помощью отдельных списков контроля доступа (по умолчанию) или предоставить полные привилегии соответствующего пользователя (значение 0).
Примеры команд для работы с токенами:
  • создать токен t2 для пользователя user@pam с полными привилегиями:
    # 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
    

Примечание

Разрешения на API-токены всегда являются подмножеством разрешений соответствующего пользователя. То есть API-токен не может использоваться для выполнения задачи, на которую у пользователя владельца токена нет разрешения.
Пример:
  1. Предоставить пользователю test@pve роль PVEVMAdmin на всех ВМ:
    # pveum acl modify /vms --users test@pve --roles PVEVMAdmin
    
  2. Создать API-токен с раздельными привилегиями с правами только на просмотр информации о ВМ:
    # pveum user token add test@pve monitoring --privsep 1
    # pveum acl modify /vms --tokens 'test@pve!monitoring' --roles PVEAuditor
    
  3. Проверить разрешения пользователя и токена:
    # pveum user permissions test@pve
    # pveum user token permissions test@pve monitoring
    
Чтобы использовать API-токен при выполнении API-запросов, следует установить заголовок HTTP Authorization в значение PVEAPIToken=USER@REALM!TOKENID=UUID.

42.2. Пулы ресурсов

Пул ресурсов — это набор ВМ, контейнеров и хранилищ. Пул ресурсов удобно использовать для обработки разрешений в случаях, когда определенные пользователи должны иметь контролируемый доступ к определенному набору ресурсов. Пулы ресурсов часто используются в тандеме с группами, чтобы члены группы имели разрешения на набор машин и хранилищ.
Пример создания пула ресурсов в веб-интерфейсе:
  1. В окне Центр обработки данныхРазрешенияПулы нажать кнопку Создать. В открывшемся окне указать название пула и нажать кнопку ОК:
    Создание пула ресурсов в веб-интерфейсе
  2. Добавить в пул ВМ. Для этого выбрать пул, перейти на вкладку Члены, нажать кнопку ДобавитьВиртуальная машина, выбрать ВМ и нажать кнопку Добавить:
    Добавление ВМ в пул ресуосов
  3. Добавить в пул хранилища. Для этого выбрать пул, перейти на вкладку Члены, нажать кнопку ДобавитьХранилище, выбрать хранилище и нажать кнопку Добавить:
    Добавление хранилища в пул ресуосов
Работа с пулами ресурсов в командной строке:
  • создать пул:
    # 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
    

Примечание

Можно удалить только пустой пул.

42.3. Области аутентификации

Доступны следующие области (методы) аутентификации:
  • Стандартная аутентификация Linux PAM — общесистемная аутентификация пользователей;
  • Сервер аутентификации PVE — пользователи полностью управляются PVE и могут менять свои пароли через графический интерфейс. Этот метод аутентификации удобен для небольших (или даже средних) установок, где пользователям не нужен доступ ни к чему, кроме PVE;
  • Сервер LDAP — позволяет использовать внешний LDAP-сервер для аутентификации пользователей (например, OpenLDAP);
  • Сервер Active Directory — позволяет аутентифицировать пользователей через AD. Поддерживает LDAP в качестве протокола аутентификации;
  • Сервер OpenID Connect — уровень идентификации поверх протокола OATH 2.0. Позволяет аутентифицировать пользователей на основе аутентификации, выполняемой внешним сервером авторизации.
Настройки области аутентификации хранятся в файле /etc/pve/domains.cfg.

42.3.1. Стандартная аутентификация Linux PAM

При использовании аутентификации Linux PAM системный пользователь должен существовать (должен быть создан, например, с помощью команды adduser) на всех узлах, на которых пользователю разрешено войти в систему. Если пользователи PAM существуют в хост-системе PVE, соответствующие записи могут быть добавлены в PVE, чтобы эти пользователи могли входить в систему, используя свое системное имя и пароль.
Область Linux PAM создается по умолчанию и не может быть удалена. Администратор может включить двухфакторную аутентификацию для пользователей данной области (Требовать двухфакторную проверку подлинности) и установить её в качестве области по умолчанию для входа в систему (По умолчанию):
Конфигурация PAM аутентификации
Для добавления нового пользователя необходимо в окне Центр обработки данныхРазрешенияПользователи нажать кнопку Добавить.
Создание нового пользователя с использованием PAM аутентификации (системный пользователь user должен существовать, в качестве пароля будет использоваться пароль для входа в систему):
Создание нового пользователя с использованием PAM аутентификации

42.3.2. Сервер аутентификации PVE

Область аутентификации PVE представляет собой хранилище паролей в стиле Unix (/etc/pve/priv/shadow.cfg). Пароль шифруется с использованием метода хеширования SHA-256.
Область создается по умолчанию. Администратор может включить двухфакторную аутентификацию для пользователей данной области (Требовать двухфакторную проверку подлинности) и установить её в качестве области по умолчанию для входа в систему (По умолчанию):
Конфигурация PVE аутентификации
Создание нового пользователя с использованием PVE аутентификации:
Создание нового пользователя с использованием PVE аутентификации
Примеры использования командной строки для управления пользователями PVE:
  • создать пользователя:
    # pveum useradd testuser@pve -comment "Just a test"
    
  • задать или изменить пароль:
    # pveum passwd testuser@pve
    
  • отключить пользователя:
    # pveum usermod testuser@pve -enable 0
    
  • создать новую группу:
    # pveum groupadd testgroup
    
  • создать новую роль:
    # pveum roleadd VM_Power-only -privs "VM.PowerMgmt VM.Console"
    

42.3.3. LDAP аутентификация

В данном разделе приведён пример настройки аутентификации LDAP для аутентификации на сервере FreeIPA. В примере используются следующие исходные данные:
  • ipa.example.test, 192.168.0.113 — сервер FreeIPA;
  • admin@example.test — учётная запись с правами чтения LDAP;
  • pve — группа, пользователи которой имеют право аутентифицироваться в PVE.
Для настройки LDAP аутентификации необходимо выполнить следующие шаги:
  1. Создать область аутентификации LDAP. Для этого в разделе Центр обработки данныхРазрешенияОбласти нажать кнопку ДобавитьСервер LDAP:
    Создать область аутентификации LDAP
  2. На вкладке Общее указать следующие данные:
    • Область — идентификатор области;
    • Имя основного домена (base_dn) — каталог, в котором выполняется поиск пользователей (dc=example,dc=test);
    • Атрибут имени пользователя (user_attr) — атрибут LDAP, содержащий имя пользователя, с которым пользователи будут входить в систему (uid);
    • По умолчанию — установить область в качестве области по умолчанию для входа в систему;
    • Сервер — IP-адрес или имя FreeIPA-сервера (ipa.example.test или 192.168.0.113);
    • Резервный сервер (опционально) — адрес резервного сервера на случай, если основной сервер недоступен;
    • Порт — порт, который прослушивает сервер LDAP (обычно 389 без ssl, 636 с ssl);
    • Режим — режим протокола LDAP;
    • Требовать двухфакторную проверку подлинности — включить двухфакторную аутентификацию.
    Настройка аутентификации FreeIPA (вкладка Общее)
  3. На вкладке Параметры синхронизации заполнить следующие поля (в скобках указаны значения, используемые в данном примере):
    • Пользователь привязки — имя пользователя (uid=admin,cn=users,cn=accounts,dc=example,dc=test);
    • Пароль привязки — пароль пользователя (пароль будет сохранен в файл /etc/pve/priv/realm/<realmname>.pw);
    • Атрибут электронной почты (опционально);
    • Атрибут имени группы — атрибут имени группы (cn);
    • Классы пользователей — класс пользователей LDAP (person);
    • Классы групп — класс групп LDAP (posixGroup);
    • Фильтр пользователей — фильтр пользователей (memberOf=cn=pve,cn=groups,cn=accounts,dc=example,dc=test);
    • Фильтр групп — фильтр групп ((|(cn=*pve*)(dc=ipa)(dc=example)(dc=test)));
    Настройка аутентификации FreeIPA (вкладка Параметры синхронизации)
  4. Нажать кнопку Добавить.
  5. Выбрать добавленную область и нажать кнопку Синхронизировать:
    Кнопка Sync
  6. Указать, если необходимо, параметры синхронизации и нажать кнопку Синхронизировать:
    Параметры синхронизации области аутентификации
    В результате синхронизации пользователи и группы PVE будут синхронизированы с сервером FreeIPA LDAP. Сведения о пользователях и группах можно проверить на вкладках Пользователи и Группы.
  7. Настроить разрешения для группы/пользователя на вкладке Разрешения.

Примечание

Команда синхронизации пользователей и групп:
# pveum realm sync example.test
Для автоматической синхронизации пользователей и групп можно создать задание синхронизации области (в разделе Центр обработки данныхРазрешенияОбласти в разделе Задания синхронизации области нажать кнопку Добавить):
Создание задания синхронизации области аутентификации

42.3.4. AD аутентификация

В данном разделе приведён пример настройки аутентификации AD. В примере используются следующие исходные данные:
  • dc1.test.alt, 192.168.0.132 — сервер AD;
  • administrator@test.alt — учётная запись администратора (для большей безопасности рекомендуется создать отдельную учетную запись с доступом только для чтения к объектам домена и не использовать учётную запись администратора);
  • office — группа, пользователи которой имеют право аутентифицироваться в PVE.
Для настройки AD аутентификации необходимо выполнить следующие шаги:
  1. Создать область аутентификации AD (в разделе Центр обработки данныхРазрешенияОбласти нажать кнопку ДобавитьСервер Active Directory):
    Создать область аутентификации AD
  2. На вкладке Общее указать следующие данные:
    • Область — идентификатор области;
    • Домен — домен AD (test.alt);
    • С учётом регистра — учитывать регистр в имени пользователя;
    • По умолчанию — установить область в качестве области по умолчанию для входа в систему;
    • Сервер — IP-адрес или имя сервера AD (dc1.test.alt или 192.168.0.132);
    • Резервный сервер (опционально) — адрес резервного сервера на случай, если основной сервер недоступен;
    • Порт — порт, который прослушивает сервер LDAP (обычно 389 без ssl, 636 с ssl);
    • Режим — режим протокола LDAP;
    • Требовать двухфакторную проверку подлинности — включить двухфакторную аутентификацию.
    Настройка аутентификации AD (вкладка Общее)
  3. На вкладке Параметры синхронизации заполнить следующие поля (в скобках указаны значения, используемые в данном примере):
    • Пользователь привязки — имя пользователя (cn=Administrator,cn=Users,dc=test,dc=alt);
    • Пароль привязки — пароль пользователя (пароль будет сохранен в файл /etc/pve/priv/realm/<realmname>.pw);
    • Атрибут электронной почты (опционально);
    • Атрибут имени группы — атрибут имени группы (cn);
    • Классы пользователей — класс пользователей AD;
    • Классы групп — класс групп AD;
    • Фильтр пользователей — фильтр пользователей ((&(objectclass=user)(samaccountname=*)(MemberOf=CN=office,ou=OU,dc=TEST,dc=ALT)));
    • Фильтр групп — фильтр групп ((|(cn=*office*)(dc=dc)(dc=test)(dc=alt)));
    Настройка аутентификации AD (вкладка Параметры синхронизации)
  4. Нажать кнопку Добавить.
  5. Выбрать добавленную область и нажать кнопку Синхронизировать.
  6. Указать, если необходимо, параметры синхронизации и нажать кнопку Синхронизировать:
    Параметры синхронизации области аутентификации
    В результате синхронизации пользователи и группы PVE будут синхронизированы с сервером AD. Сведения о пользователях и группах можно проверить на вкладках Пользователи и Группы.
  7. Настроить разрешения для группы/пользователя на вкладке Разрешения.

Примечание

Команда синхронизации пользователей и групп:
# pveum realm sync test.alt
Для автоматической синхронизации пользователей и групп можно создать задание синхронизации области (в разделе Центр обработки данныхРазрешенияОбласти в разделе Задания синхронизации области нажать кнопку Добавить):
Создание задания синхронизации области аутентификации

42.4. Двухфакторная аутентификация

В PVE можно настроить двухфакторную аутентификацию двумя способами:
  • Требование двухфакторной аутентификации (ДФА) можно включить при настройке области аутентификации. Если в области аутентификации включена ДФА, это становится требованием, и только пользователи с настроенным ДФА смогут войти в систему. Новому пользователю необходимо сразу добавить ключи, так как возможности войти в систему без предъявления второго фактора нет.
    Настроить принудительную двухфакторную аутентификацию можно при добавлении или редактировании области аутентификации:
    PVE. Настройка двухфакторной аутентификации при редактировании области
  • Пользователи могут сами настроить двухфакторную аутентификацию, даже если она не требуется в области аутентификации (выбрав пункт TFA в выпадающем списке пользователя):
    PVE. Настройка двухфакторной аутентификации пользователем
    Настройка двухфакторной аутентификации пользователем:
    PVE. Настройка двухфакторной аутентификации пользователем
При добавлении в области аутентификации доступны следующие методы двухфакторной аутентификации:
  • OATH/TOTP (основанная на времени OATH) — используется стандартный алгоритм HMAC-SHA1, в котором текущее время хэшируется с помощью настроенного пользователем ключа. Параметры временного шага и длины пароля настраиваются:
    PVE. Основанная на времени OATH (TOTP)
    У пользователя может быть настроено несколько ключей (разделенных пробелами), и ключи могут быть указаны в Base32 (RFC3548) или в шестнадцатеричном представлении.
    PVE предоставляет инструмент генерации ключей (oathkeygen), который печатает случайный ключ в нотации Base32. Этот ключ можно использовать непосредственно с различными инструментами OTP, такими как инструмент командной строки oathtool, или приложении FreeOTP и в других подобных приложениях.
  • Yubico (YubiKey OTP) — для аутентификации с помощью YubiKey необходимо настроить идентификатор API Yubico, ключ API и URL-адрес сервера проверки, а у пользователей должен быть доступен YubiKey. Чтобы получить идентификатор ключа от YubiKey, следует активировать YubiKey после подключения его через USB и скопировать первые 12 символов введенного пароля в поле ID ключа пользователя.
В дополнение к TOTP и Yubikey OTP пользователям доступны следующие методы двухфакторной аутентификации:
  • TOTP (одноразовый пароль на основе времени) — для создания этого кода используется алгоритм одноразового пароля с учетом времени входа в систему (код меняется каждые 30 секунд);
  • WebAuthn (веб-аутентификация) — реализуется с помощью различных устройств безопасности, таких как аппаратные ключи или доверенные платформенные модули (TPM). Для работы веб-аутентификации необходим сертификат HTTPS;
  • Ключи восстановления (одноразовые ключи восстановления) — список ключей, каждый из которых можно использовать только один раз. В каждый момент времени у пользователя может быть только один набор одноразовых ключей. Этот метод аутентификации идеально подходит для того, чтобы гарантировать, что пользователь получит доступ, даже если все остальные вторые факторы потеряны или повреждены.

Примечание

Пользователи могут использовать TOTP или WebAuthn в качестве второго фактора при входе в систему, только если область аутентификацию не применяет YubiKey OTP.

Примечание

Чтобы избежать ситуации, когда потеря электронного ключа навсегда блокирует доступ можно настроить несколько вторых факторов для одной учетной записи:
PVE. Несколько настроенных вторых факторов для учётной записи
Настройка аутентификации TOTP:
  • добавление аутентификации TOTP на сервере:
    PVE. Настройка аутентификации TOTP
  • использование TOTP при аутентификации пользователя:
    PVE. Запрос второго фактора (TOTP) при аутентификации пользователя в веб-интерфейсе
Настройка аутентификации Ключи восстановления:
  • создание набора ключей:
    PVE. Настройка аутентификации Recovery Keys
  • использование Ключей восстановления при аутентификации пользователя:
    PVE. Запрос второго фактора (Recovery Key) при аутентификации пользователя в веб-интерфейсе
При 8 неудачных попытках ввода TOTP-кода двухфакторная аутентификация с использованием TOTP блокируется для пользователя. Разблокировка возможна при входе в систему с использованием ключа восстановления. Если TOTP был единственным доступным фактором, потребуется вмешательство администратора.
Администратор может разблокировать двухфакторную аутентификацию пользователя в веб-интерфейсе:
PVE. Разблокировка двухфакторной аутентификации
или в командной строке:
# pveum user tfa unlock orlov@test.alt

Важно

После разблокировки рекомендуется немедленно сменить пароль пользователя.
Webauthn и ключи восстановления менее уязвимы к атакам методом подбора. Для этих методов допустимо до 100 неудачных попыток. При превышении этого лимита все вторые факторы блокируются на один час.

42.5. Управление доступом

Чтобы пользователь мог выполнить какое-либо действие (например, просмотр, изменение или удаление ВМ), ему необходимо иметь соответствующие разрешения.
PVE использует систему управления разрешениями на основе ролей и путей. Запись в таблице разрешений позволяет пользователю или группе играть определенную роль при доступе к объекту. Это означает, что такое правило доступа может быть представлено как тройка (путь, пользователь, роль) или (путь, группа, роль), причем роль содержит набор разрешенных действий, а путь представляет цель этих действий.
Роль — это список привилегий. В PVE предопределён ряд ролей:
  • Administrator — имеет все привилегии;
  • NoAccess — нет привилегий (используется для запрета доступа);
  • PVEAdmin — все привилегии, кроме прав на изменение настроек системы (Sys.PowerMgmt, Sys.Modify, Realm.Allocate);
  • PVEAuditor — доступ только для чтения;
  • PVEDatastoreAdmin — создание и выделение места для резервного копирования и шаблонов;
  • PVEDatastoreUser — выделение места для резервной копии и просмотр хранилища;
  • PVEMappingAdmin — управление сопоставлениями ресурсов;
  • PVEMappingUser — просмотр и использование сопоставлений ресурсов;
  • PVEPoolAdmin — выделение и просмотр пулов;
  • PVEPoolUser — просмотр пулов;
  • PVESDNAdmin — выделение и просмотр SDN;
  • PVESDNUser — доступ к мостам и виртуальным сетям SDN;
  • PVESysAdmin — ACL пользователя, аудит, системная консоль и системные журналы;
  • PVETemplateUser — просмотр и клонирование шаблонов;
  • PVEUserAdmin — администрирование пользователей;
  • PVEVMAdmin — управление ВМ;
  • PVEVMUser — просмотр, резервное копирование, настройка CDROM, консоль ВМ, управление питанием ВМ.
Просмотреть список предопределенных ролей в веб-интерфейсе можно, выбрав Центр обработки данныхРазрешенияРоли:
Список предопределенных ролей
Добавить новую роль можно как в веб-интерфейсе (Центр обработки данныхРазрешенияРоли кнопка Создать):
Добавлние роли Sys_Power-only
Так и в командной строке:
# pveum role add VM_Power-only --privs "VM.PowerMgmt VM.Console"

Примечание

Роли, начинающиеся с PVE, всегда встроены, пользовательские роли не могут использовать этот зарезервированный префикс.
Привилегия — это право на выполнение определенного действия. Для упрощения управления списки привилегий сгруппированы в роли, которые затем можно использовать в таблице разрешений. Привилегии не могут быть напрямую назначены пользователям, не будучи частью роли.

Таблица 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
Просмотр хранилища данных

Примечание

Следует внимательно обращаться с правами Permissions.Modify и Sys.Modify, так как они позволяют изменять важные и конфиденциальные аспекты системы и ее конфигурации.
Права доступа назначаются объектам, таким как ВМ, хранилища или пулы ресурсов. PVE использует файловую систему как путь к этим объектам. Эти пути образуют естественное дерево, и права доступа более высоких уровней (более короткий путь) могут распространяться вниз по этой иерархии.
Путь может представлять шаблон. Когда API-вызов требует разрешений на шаблонный путь, путь может содержать ссылки на параметры вызова API. Эти ссылки указываются в фигурных скобках. Некоторые параметры неявно берутся из URI вызова API. Например, путь /nodes/{node} при вызове /nodes/pve01/status требует разрешений на /nodes/pve01, в то время как путь {path} в запросе PUT к /access/acl ссылается на параметр метода path.
Примеры:
  • /nodes/{node} — доступ к узлам PVE;
  • /vms — распространяется на все ВМ;
  • /vms/{vmid} — доступ к определенным ВМ;
  • /storage/{storeid} — доступ к определенным хранилищам;
  • /pool/{poolid} — доступ к ресурсам из определенного пула ресурсов;
  • /access/groups — администрирование групп;
  • /access/realms/{realmid} — административный доступ к области аутентификации.
Используются следующие правила наследования:
  • разрешения для отдельных пользователей всегда заменяют разрешения для групп;
  • разрешения для групп применяются, если пользователь является членом этой группы;
  • разрешения на более глубоких уровнях перекрывают разрешения, унаследованные от верхнего уровня;
  • NoAccess отменяет все другие роли на данном пути.
Кроме того, токены с разделением привилегий (см. API-токены) не могут обладать разрешениями на пути, которых нет у связанного с ними пользователя.
Для назначения разрешений необходимо в окне Центр обработки данныхРазрешения нажать кнопку Добавить, в выпадающем меню выбрать Разрешения группы, если разрешения назначаются группе пользователей, или Разрешения пользователя, если разрешения назначаются пользователю:
Добавление разрешений
Далее в открывшемся окне выбрать путь, группу и роль и нажать кнопку Добавить:
Добавление разрешений группе
Примеры работы с разрешениями в командной строке:
  • предоставить группе admin полные права администратора:
    # pveum acl modify / --groups admin --roles Administrator
    
  • предоставить пользователю test@pve доступ к ВМ только для чтения:
    # pveum acl modify /vms --users test@pve --roles PVEAuditor
    
  • делегировать управление пользователями пользователю test@pve:
    # pveum acl modify /access --users test@pve --roles PVEUserAdmin
    
  • разрешить пользователю orlov@test.alt изменять пользователей в области test.alt, если они являются членами группы office-test.alt:
    # 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
    
  • разрешить пользователям группы developers администрировать ресурсы, назначенные пулу IT:
    # pveum acl modify /pool/IT/ --groups developers --roles PVEAdmin
    
  • удалить у пользователя test@pve право на просмотр ВМ:
    # pveum acl delete /vms --users test@pve --roles PVEAuditor
    

Примечание

Назначение привилегий на токены см. в разделе API-токены.

Глава 43. Просмотр событий PVE

При устранении неполадок сервера, например, неудачных заданий резервного копирования, полезно иметь журнал ранее выполненных задач.
Действия, такие как, например, создание ВМ, выполняются в фоновом режиме. Такое фоновое задание называется задачей. Вывод каждой задачи сохраняется в отдельный файл журнала. Получить доступ к истории задач узлов можно с помощью команды pvenode task, а также в веб-интерфейсе PVE.

43.1. Просмотр событий с помощью pvenode task

Команды pvenode task приведены в таблице Команды pvenode task.

Таблица 43.1. Команды pvenode task

Команда
Описание
pvenode task list [Параметры]
Вывести список выполненных задач для данного узла.
  • --errors <логическое значение> — вывести только те задачи, которые завершились ошибкой (по умолчанию 0);
  • --limit <целое число> — количество задач, которые должны быть выведены (по умолчанию 50);
  • --since <целое число> — отметка времени (эпоха Unix), начиная с которой будут показаны задачи;
  • --source <active | all | archive> — вывести список активных, всех или завершенных (по умолчанию) задач;
  • --start <целое число> — смещение, начиная с которого будут выведены задачи (по умолчанию 0);
  • --statusfilter <строка> — статус задач, которые должны быть показаны;
  • --typefilter <строка> — вывести задачи указанного типа (например, vzstart, vzdump);
  • --until <целое число> — отметка времени (эпоха Unix), до которой будут показаны задачи;
  • --userfilter <строка> — пользователь, чьи задачи будут показаны;
  • --vmid <целое число> — идентификатор ВМ, задачи которой будут показаны.
pvenode task log <vmid> [Параметры]
Вывести журнал задачи.
  • upid:строка — идентификатор задачи;
  • --start <целое число> — при чтении журнала задачи начать с этой строки (по умолчанию 0).
pvenode task status <upid>
Вывести статус задачи.
  • upid:строка — идентификатор задачи.

Примечание

Формат идентификатора задачи (UPID):
UPID:$node:$pid:$pstart:$starttime:$dtype:$id:$user
pid, pstart и starttime имеют шестнадцатеричную кодировку.
Примеры использования команды pvenode task:
  • получить список завершённых задач, связанных с ВМ 105, которые завершились с ошибкой:
    # pvenode task list --errors --vmid 105
    
    Список задач будет представлен в виде таблицы:
    Список задач, связанных с ВМ 105
  • получить список задач пользователя user:
    # pvenode task list --userfilter user
    
  • вывести журнал задачи, используя её UPID:
    # 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
    
  • вывести статус задачи, используя её UPID:
    # 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                                                       │
    └────────────┴────────────────────────────────────────────────────────────────┘
    

43.2. Просмотр событий в веб-интерфейсе PVE

43.2.1. Панель журнала

Основная цель панели журнала — показать, что в данный момент происходит в кластере. Панель журнала раcположена в нижней части интерфейса PVE.
Панель журнала
На панели журнала (вкладка Задачи) отображаются последние задачи со всех узлов кластера. Таким образом, здесь в режиме реального времени можно видеть, что кто-то еще работает на другом узле кластера.
Для того чтобы получить подробную информацию о задаче или прервать выполнение выполняемой задачи, следует дважды щелкнуть мышью по записи журнала. Откроется окно с журналом задачи (вкладка Выход) и её статусом (вкладка Статус).
Информация о задаче
Нажав кнопку Остановка можно остановить выполняемую задачу. Кнопка Загрузка позволяет сохранить журнал задачи в файл.

Примечание

Кнопка Остановка доступна только если задача еще выполняется.
Некоторые кратковременные действия просто отправляют логи всем членам кластера. Эти сообщения можно увидеть на панели журнала на вкладке Журнал кластера.

Примечание

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

43.2.2. Журнал задач узла PVE

Просмотреть список всех задач узла PVE можно, выбрав УзелЖурнал задач.
Журнал задач узла pve01
Записи журнала можно отфильтровать. Для этого следует нажать кнопку Фильтр и задать нужные значения фильтра:
Отфильтрованные задачи узла pve01
Просмотреть журнал задачи можно, дважды щелкнув по записи или нажав кнопку Просмотр.

43.2.3. Журнал задач ВМ

Просмотреть список всех задач ВМ можно, выбрав УзелВМЖурнал задач.
Журнал задач ВМ 103
Записи журнала можно отфильтровать. Для этого следует нажать кнопку Фильтр и задать нужные значения фильтра:
Задачи ВМ 103 типа qmsnapshot
Просмотреть журнал задачи можно, дважды щелкнув по записи или нажав кнопку Просмотр.

Глава 44. PVE API

PVE использует RESTful API. В качестве основного формата данных используется JSON, и весь API формально определен с использованием JSON Schema.
Документация API доступна по адресу: https://docs.altlinux.org/pve-api/v8/index.html
Каждая команда, доступная команде pvesh (см.ниже), доступна в веб-API, поскольку они используют одну и ту же конечную точку.
Запрос (URL, к которому происходит обращение) содержит четыре компонента:
  • конечная точка, являющаяся URL-адресом, по которому отправляется запрос;
  • метод с типом (GET, POST, PUT, PATCH, DELETE);
  • заголовки, выполняющие функции аутентификации, предоставление информации о содержимом тела (допустимо использовать параметр -H или --header для отправки заголовков HTTP) и т. д.;
  • данные (или тело) — то, что отправляется на сервер с помощью опции -d или --data при запросах POST, PUT, PATCH или DELETE.

Примечание

При передаче не буквенно-цифровых параметров нужно кодировать тело HTTP-запроса. Для этого можно использовать опцию --data-urlencode.
HTTP-запросы разрешают работать с базой данных, например:
  • GET-запрос на чтение или получение ресурса с сервера;
  • POST-запрос для создания записей;
  • PUT-запрос для изменения записей;
  • DELETE-запрос для удаления записей;
  • PATCH-запрос для обновления записей.
Для передачи команд через REST API можно использовать утилиту curl.

Примечание

По мере роста числа пользователей и ВМ, API PVE может начать реагировать на изменения с задержкой.
Для решения этой проблемы нужно очистить /var/lib/rrdcached/, например, выполнив команду:
# find /var/lib/rrdcached -type f -mtime +5 -delete
Или, добавив соответствующее задание в crontab.

44.1. URL API

API PVE использует протокол HTTPS, а сервер прослушивает порт 8006. Таким образом, базовый URL для API — https://server:8006/api2/json/
Параметры можно передавать с помощью стандартных методов HTTP:
  • через URL;
  • используя x-www-form-urlencoded content-type для запросов PUT и POST.
В URL можно указать формат возвращаемых данных:
  • json — формат JSON;
  • extjs — формат JSON, но результат вложен в объект, с объектом данных, вариант, совместимый с формами ExtJS;
  • html — текст в формате HTML (иногда полезно для отладки);
  • text — формат простой текст (иногда полезно для отладки);
В приведенном выше примере используется JSON.

44.2. Аутентификация

Есть два способа доступа к API PVE:
  • использование временно сгенерированного токена (билета);
  • использование API-токена.
Все API-запросы должны включать в себя билет в заголовке Cookie или отправлять API-токен через заголовок Authorization.

44.2.1. Билет Cookie

Билет — это подписанное случайное текстовое значение с указанием пользователя и времени создания. Билеты подписываются общекластерным ключом аутентификации, который обновляется один раз в день.
Кроме того, любой запрос на запись (POST/PUT/DELETE) должен содержать CSRF-токен для предотвращения CSRF-атак (cross-site request forgery).
Пример получения нового билета и CSRF-токена:
$ curl -k -d 'username=root@pam' --data-urlencode 'password=xxxxxxxxx' \
https://192.168.0.186:8006/api2/json/access/ticket

Примечание

Параметры командной строки видны всей системе, поэтому следует избегать запуска команды с указанием пароля на ненадежных узлах.
Пример получения нового билета и CSRF-токена с паролем, записанным в файл, доступный для чтения только пользователю:
$ 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"
  }
}

Примечание

Билет действителен в течение двух часов и должен быть повторно запрошен по истечении срока его действия. Но можно получить новый билет, передав старый билет в качестве пароля методу /access/ticket до истечения срока его действия.
Полученный билет необходимо передавать с Cookie при любом запросе, например:
$ 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 используется параметр --cookie (-b).
Любой запрос на запись (POST, PUT, DELETE) кроме билета должен включать заголовок CSRFPreventionToken, например:
$ 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"

44.2.2. API-токены

API-токены позволяют другой системе, программному обеспечению или API-клиенту получать доступ без сохранения состояния к большинству частей REST API. Токены могут быть сгенерированы для отдельных пользователей и им могут быть предоставлены отдельные разрешения и даты истечения срока действия для ограничения объема и продолжительности доступа (подробнее см. API-токены). Если API-токен будет скомпрометирован, его можно отозвать, не отключая самого пользователя.
Примеры запросов с использованием API-токена:
  • получить список пользователей:
    $ curl -H 'Authorization: PVEAPIToken=root@pam!test=373007e1-4ecb-4e56-b843-d0fbed543375' \
    https://192.168.0.186:8006/api2/json/access/users
    
  • добавить пользователя testuser@pve:
    $ 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'
    
  • удалить пользователя testuser@pve:
    $ 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/

Примечание

API-токены не нуждаются в значениях CSRF для POST, PUT или DELETE запросов. Обычно токены не используются в контексте браузера, поэтому основной вектор атаки CSRF изначально неприменим.

44.3. Пример создания контейнера с использованием API

Исходные данные:
  • APINODE — узел, на котором производится аутентификация;
  • TARGETNODE — узел, на котором будет создан контейнер;
  • cookie — файл, в который будет помещен cookie;
  • csrftoken — файл, в который будет помещен CSRF-токен.
Пример создания контейнера с использованием API:
  1. Для удобства установить переменные окружения:
    $ export APINODE=pve01
    $ export TARGETNODE=pve03
    
  2. Сохранить авторизационный cookie в файл 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
    
  3. Сохранить CSRF-токен в файл 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
    
  4. Отобразить статус целевого узла, чтобы проверить, что создание cookie-билета сработало:
    $ curl --insecure --cookie "$(<cookie)" https://$APINODE:8006/api2/json/nodes/$TARGETNODE/status | jq '.'
    
  5. Создать LXC-контейнер:
    $ 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).

    Примечание

    При создании контейнера должен использоваться доступный vmid.

44.4. Утилита pvesh

Инструмент управления PVE (pvesh) позволяет напрямую вызывать функции API, без использования сервера REST/HTTPS.
# pvesh ls /
Dr---        access
Dr---        cluster
Dr---        nodes
Drwcd        pools
Dr-c-        storage
-r---        version

Примечание

pvesh может использовать только пользователь root.
Инструмент автоматически проксирует вызовы другим членам кластера с помощью ssh.
Примеры:
  • вывести текущую версию:
    # pvesh get /version
    
  • получить список узлов в кластере:
    # pvesh get /nodes
    
  • получить список доступных опций для центра обработки данных:
    # pvesh usage cluster/options -v
    
  • создать нового пользователя:
    # pvesh create /access/users --userid testuser@pve
    
  • удалить пользователя:
    # pvesh delete /access/users/testuser@pve
    
  • установить консоль HTML5 NoVNC в качестве консоли по умолчанию:
    # pvesh set cluster/options -console html5
    
  • создать и запустить новый контейнер на узле pve03:
    # 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
    

Глава 45. Основные службы PVE

Список и состояние служб PVE отображаются на вкладке УзелСистема:
Список изменений
Здесь же можно просмотреть системный журнал службы (кнопка Системный журнал) и изменить состояние службы (Запуск/Остановка/Перезапустить).
Команды служб PVE на примере pvedaemon:
  • вывести справку:
    # pvedaemon help
  • перезапустить службу (или запустить, если она не запущена):
    # pvedaemon restart
  • запустить службу:
    # pvedaemon start
  • запустить службу в режиме отладки:
    # pvedaemon start --debug 1
  • вывести статус службы:
    # pvedaemon status
  • остановить службу:
    # pvedaemon stop

45.1. pvedaemon — служба PVE API

Служба pvedaemon предоставляет весь API PVE на 127.0.0.1:85. Она работает от имени пользователя root и имеет разрешение на выполнение всех привилегированных операций.

Примечание

Служба слушает только локальный адрес, поэтому к ней нельзя получить доступ извне. Доступ к API извне предоставляет служба pveproxy.

45.2. pveproxy — служба PVE API Proxy

Служба pveproxy предоставляет весь PVE API на TCP-порту 8006 с использованием HTTPS. Она работает от имени пользователя www-data и имеет минимальные разрешения. Операции, требующие дополнительных разрешений, перенаправляются локальному pvedaemon.
Запросы, предназначенные для других узлов, автоматически перенаправляются на них. Таким образом, управлять всем кластером можно, подключившись к одному узлу PVE.

45.2.1. Управление доступом на основе хоста

Можно настраивать списки контроля доступа в стиле apache2. Значения задаются в файле /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).
Политика по умолчанию — allow.

Таблица 45.1. Правила обработки запросов

Соответствие
POLICY=deny
POLICY=allow
Соответствует только Allow
Запрос разрешён
Запрос разрешён
Соответствует только Deny
Запрос отклонён
Запрос отклонён
Нет соответствий
Запрос отклонён
Запрос разрешён
Соответствует и Allow и Deny
Запрос отклонён
Запрос разрешён

45.2.2. Прослушиваемый IP-адрес

По умолчанию службы 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), может прервать некоторые рабочие процессы, например, запущенную консоль или оболочку ВМ. Поэтому следует дождаться остановки системы на обслуживание, чтобы это изменение вступило в силу.

45.2.3. Набор SSL-шифров

Список шифров можно определить в /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

45.2.4. Поддерживаемые версии TLS

Для отключения TLS версий 1.2 или 1.3, необходимо установить следующий параметр в /etc/default/pveproxy:
DISABLE_TLS_1_2=1
или, соответственно:
DISABLE_TLS_1_3=1

Примечание

Не рекомендуется вручную ограничивать версии TLS без крайней необходимости.

45.2.5. Параметры Диффи-Хеллмана

Определить используемые параметры Диффи-Хеллмана можно в /etc/default/pveproxy, указав в параметре DHPARAMS путь к файлу, содержащему параметры DH в формате PEM, например:
DHPARAMS="/path/to/dhparams.pem"

Примечание

Параметры DH используются только в том случае, если согласован набор шифров, использующий алгоритм обмена ключами DH.

45.2.6. Альтернативный сертификат HTTPS

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"

45.2.7. Сжатие ответа

По умолчанию pveproxy использует сжатие gzip HTTP-уровня для сжимаемого контента, если клиент его поддерживает. Это поведение можно отключить в /etc/default/pveproxy:
COMPRESSION=0

45.3. pvestatd — служба PVE Status

Служба pveproxy регулярно опрашивает состояние ВМ, хранилищ и контейнеров и рассылает обновления на все узлы кластера.

45.4. spiceproxy — служба SPICE Proxy

Служба spiceproxy прослушивает TCP-порт 3128 и реализует HTTP-прокси для пересылки запроса CONNECT от SPICE-клиента к ВМ PVE. Она работает от имени пользователя www-data и имеет минимальные разрешения.

45.4.1. Управление доступом на основе хоста

Можно настраивать списки контроля доступа в стиле apache2. Значения задаются в файле /etc/default/pveproxy. Подробнее см. pveproxy — служба PVE API Proxy

45.5. pvescheduler — служба PVE Scheduler

Служба pvescheduler отвечает за запуск заданий по расписанию, например, заданий репликации и vzdump.
Конфигурация vzdump находится в файле /etc/pve/jobs.cfg.

Глава 46. Обновление системы

ОС Альт Виртуализация редакция PVE использует APT в качестве инструмента управления пакетами.

46.1. Управление репозиториями в PVE

Проверить состояние репозитория можно на вкладке УзелОбновленияРепозитории.
Вкладка Репозитории
В разделе Статус отображается общее состояние репозитория, а в разделе Репозитории APT  — подробный статус и список всех настроенных репозиториев. Поддерживается также базовое управление репозиторием, например, активация или деактивация репозитория.
Для добавления репозитория необходимо нажать кнопку Добавить, в открывшемся окне в списке Репозиторий выбрать нужный репозиторий и нажать кнопку Добавить:
Добавление репозитория
Чтобы включить отключенный репозиторий, необходимо выделить его в списке и нажать кнопку Включить. Для отключения репозитория необходимо нажать кнопку Отключить:
Список репозиториев

46.2. Обновление системного ПО

Обновления можно устанавливать с помощью apt-get или через графический интерфейс (УзелОбновления).
Для получения списка доступных пакетов из репозитория необходимо:
  • перейти в раздел УзелОбновления и нажать кнопку Обновить;
    Обновление индексов пакетов
  • выполнить команду:
    # apt-get update
После обновления индексов будет показан список пакетов, доступных для обновления.:
Список пакетов для обновления
Чтобы начать обновление, следует нажать кнопку Обновить. Будет открыто окно со списком изменений:
Список изменений

Примечание

Не следует обновлять все узлы кластера одновременно. Для сохранения кворума необходимо обновлять узлы по очереди и проверять функциональности каждого узла после завершения обновления.

Часть V.  Установка пакетов для опытных пользователей

Введение

Примечание

В установочный комплект Альт Виртуализация редакция PVE включено наиболее употребительное программное обеспечение. Для установки дополнительных программных пакетов можно использовать репозиторий продукта (p11).
В современных системах на базе Linux существует огромное число общих ресурсов: разделяемых библиотек, содержащих стандартные функции, исполняемые файлы, сценарии и стандартные утилиты и т.д. Этими общими ресурсами пользуются сразу несколько программ. Удаление или изменение версии одного из составляющих систему компонентов может повлечь неработоспособность других, связанных с ним компонентов, или может привести к выводу из строя всей системы. В контексте системного администрирования проблемы такого рода называют нарушением целостности системы. Задача администратора — обеспечить наличие в системе согласованных версий всех необходимых программных компонентов (обеспечение целостности системы).
Для установки, удаления и обновления программ, а также поддержания целостности системы в Linux в первую очередь стали использоваться программы менеджеры пакетов (например, такие, как rpm). С точки зрения менеджера пакетов программное обеспечение представляет собой набор компонентов — программных пакетов. Пакеты содержат в себе набор исполняемых программ и вспомогательных файлов, необходимых для корректной работы программного обеспечения. Менеджеры пакетов облегчают установку программ: они позволяют проверить наличие необходимого для работы устанавливаемой программы компонента подходящей версии непосредственно в момент установки. Менеджеры пакетов производят необходимые процедуры для регистрации программы во всех операционных средах пользователя: сразу после установки программа становится доступна пользователю из командной строки и появляется, если это было предусмотрено, в меню приложений всех графических оболочек.
Часто компоненты, используемые различными программами, выделяют в отдельные пакеты и помечают, что для работы ПО, предоставляемого пакетом A, необходимо установить пакет B. В таком случае говорят, что пакет A зависит от пакета B или между пакетами A и B существует зависимость.
Отслеживание зависимостей между такими пакетами представляет собой важную задачу для любого дистрибутива. Некоторые компоненты пакетов могут быть взаимозаменяемыми, т.е. может обнаружиться несколько пакетов, предлагающих затребованный ресурс.
Ещё более сложной является задача контроля целостности и непротиворечивости установленного в системе ПО. Представим, что некие программы A и B требуют наличия в системе компонентов C версии 1.0. Обновление версии пакета A, требующее обновления компонентов C до новой версии (например, до версии 2.0, использующей новый интерфейс доступа), влечёт за собой обязательное обновление и программы B.
На практике менеджеры пакетов оказались неспособны эффективно устранить нарушения целостности системы и предотвратить все коллизии при установке или удалении программ. Особенно остро этот недостаток сказался на обновлении систем из централизованного репозитория, в котором пакеты непрерывно обновляются, дробятся на более мелкие и т.п. Именно этот недостаток стимулировал создание систем управления программными пакетами и поддержания целостности ОС.
Для автоматизации и контроля описанных выше процессов стала применяться Усовершенствованная система управления программными пакетами APT (от англ. Advanced Packaging Tool). Автоматизация и контроль достигаются путём создания одного или нескольких внешних репозиториев. В них хранятся доступные для установки пакеты программ.
В распоряжении APT находятся две базы данных: одна описывает установленные в системе пакеты, вторая — внешний репозиторий. APT отслеживает целостность установленной системы и, в случае обнаружения противоречий в зависимостях пакетов, разрешает конфликты, находит пути их корректного устранения, руководствуясь сведениями из внешних репозиториев.
Система APT состоит из нескольких утилит. Чаще всего используется утилита управления пакетами apt-get. Она автоматически определяет зависимости между пакетами и строго следит за её соблюдением при выполнении любой из следующих операций: установка, удаление или обновление пакетов.

Глава 47. Источники программ (репозитории)

Отличие репозиториев, с которыми работает APT, от простого набора пакетов — наличие метаинформации. В ней содержится индекс находящихся в репозитории пакетов и сведения о них. Поэтому, чтобы получить всю информацию о репозитории, APT достаточно получить его индексы.
APT может пользоваться любым количеством репозиториев одновременно, формируя единую информационную базу обо всех содержащихся в них пакетах. При установке пакетов APT обращает внимание только на название пакета, его версию и зависимости. Для APT не имеет значения расположение пакета в том или ином репозитории.

Важно

Для одновременного подключения нескольких репозиториев необходимо отслеживать их совместимость друг с другом, т.е. их пакетная база должна отражать один определённый этап разработки. Совместное использование репозиториев, относящихся к разным дистрибутивам, или смешивание стабильного репозитория с нестабильной веткой разработки (Sisyphus) может привести к различным неожиданностям и трудностям при обновлении пакетов.
APT осуществляет взаимодействие с репозиториями при помощи различных протоколов доступа. Наиболее популярные — HTTP и FTP.
Для того чтобы APT мог использовать тот или иной репозиторий, информацию о нём необходимо поместить в файл /etc/apt/sources.list, либо в любой файл .list (например, mysources.list) в каталоге /etc/apt/sources.list.d/. Описания репозиториев заносятся в эти файлы в следующем виде:
rpm [подпись] метод:путь база название
rpm-src [подпись] метод:путь база название
Здесь:
  • rpm или rpm-src — тип репозитория (скомпилированные программы или исходные тексты);
  • [подпись] — необязательная строка-указатель на электронную подпись разработчиков. Наличие этого поля подразумевает, что каждый пакет из данного репозитория должен быть подписан соответствующей электронной подписью. Подписи описываются в файле /etc/apt/vendor.list;
  • метод — способ доступа к репозиторию: ftp, http, file, rsh, ssh, cdrom, copy;
  • путь — путь к репозиторию в терминах выбранного метода;
  • база — относительный путь к базе данных репозитория;
  • название — название репозитория.
Непосредственно после установки дистрибутива Альт Виртуализация редакция PVE в файлах /etc/apt/sources.list.d/*.list обычно указывается интернет-репозиторий, совместимый с установленным дистрибутивом.
После редактирования списка репозиториев в sources.list, необходимо обновить локальную базу данных APT о доступных пакетах. Это делается командой apt-get update.
Если в sources.list присутствует репозиторий, содержимое которого может изменяться (например, постоянно разрабатываемый репозиторий или репозиторий обновлений по безопасности), то прежде чем работать с APT, необходимо синхронизировать локальную базу данных с удалённым сервером командой apt-get update. Локальная база данных создаётся заново при каждом изменении в репозитории: добавлении, удалении или переименовании пакета.
При установке определённого пакета APT производит поиск самой новой версии этого пакета во всех известных ему репозиториях вне зависимости от способа доступа к ним. Так, если в репозитории, доступном в сети Интернет, обнаружена более новая в сравнении с компакт-диском версия программы, то APT начнёт загружать соответствующий пакет из сети Интернет. Поэтому, если подключение к сети Интернет отсутствует или ограничено низкой пропускной способностью канала или высокой стоимостью, то следует закомментировать строчки (добавить в начало строки символ #) в /etc/apt/sources.list, относящиеся к ресурсам в сети Интернет.

47.1. Редактирование репозиториев

47.1.1. Утилита apt-repo для работы с репозиториями

Для редактирования репозиториев можно воспользоваться скриптом apt-repo:
  • просмотреть список активных репозиториев:
    apt-repo
    
  • добавить репозиторий в список активных репозиториев:
    apt-repo add репозиторий
    
  • удалить или выключить репозиторий:
    apt-repo rm репозиторий
    
  • обновить информацию о репозиториях:
    apt-repo update
    
  • справка о команде apt-repo:
    man apt-repo
    
    или
    apt-repo --help
    

Примечание

Для выполнения большинства команд необходимы права администратора.
Типичный пример использования: удалить все источники и добавить стандартный репозиторий P11 (архитектура выбирается автоматически):
# apt-repo rm all
# apt-repo add p11
Или то же самое одной командой:
# apt-repo set p11

47.1.2. Добавление репозитория на сменном носителе

Для добавления в sources.list репозитория на сменном диске в APT предусмотрена специальная утилита — apt-cdrom.
Чтобы добавить запись о репозитории на сменном диске необходимо:
  1. Создать каталог для монтирования. Точка монтирования указывается в параметре Acquire::CDROM::mount в файле конфигурации APT (/etc/apt/apt.conf), по умолчанию это /media/ALTLinux:
    # mkdir /media/ALTLinux
    
  2. Примонтировать носитель в указанную точку:
    # mount /dev/носитель /media/ALTLinux
    
    где /dev/носитель — соответствующее блочное устройство (например, /dev/dvd — для CD/DVD-диска).
  3. Добавить носитель, выполнив команду:
    # apt-cdrom -m add
    
После этого в sources.list появится запись о подключённом носителе:
rpm cdrom:[ALT Virtualization PVE 11.0 x86_64 build 2025-05-07]/ ALTLinux main

47.1.3. Добавление репозиториев вручную

Для изменения списка репозиториев можно отредактировать в любом текстовом редакторе файлы из каталога /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).

Глава 48. Поиск пакетов

Если точное название пакета неизвестно, то для его поиска можно воспользоваться утилитой 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 можно использовать русскую подстроку. В этом случае будут найдены пакеты, имеющие описание на русском языке. К сожалению, описание на русском языке в настоящее время есть не у всех пакетов, но наиболее актуальные описания переведены.

Глава 49. Установка или обновление пакета

Важно

Для установки пакетов требуются привилегии администратора.
Установка пакета с помощью APT выполняется командой apt-get install имя_пакета.

Важно

Перед установкой и обновлением пакетов необходимо выполнить команду обновления индексов пакетов:
# apt-get update
apt-get позволяет устанавливать в систему пакеты, требующие для работы наличие других, пока ещё не установленных пакетов. В этом случае он определяет, какие пакеты необходимо установить. apt-get устанавливает их, пользуясь всеми доступными репозиториями.
Установка пакета telegraf командой 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 можно установить и отдельный rpm-пакет, не входящий в состав репозиториев (например, полученный из сети Интернет). Для этого достаточно выполнить команду
# apt-get install /путь/к/файлу.rpm
При этом APT проведёт стандартную процедуру проверки зависимостей и конфликтов с уже установленными пакетами.
Иногда в результате операций с пакетами без использования APT целостность системы нарушается, и apt-get отказывается выполнять операции установки, удаления или обновления. В этом случае необходимо повторить операцию, задав опцию -f, заставляющую apt-get исправить нарушенные зависимости, удалить или заменить конфликтующие пакеты. В этом случае необходимо внимательно следить за сообщениями, выводимыми apt-get. Любые действия в этом режиме обязательно требуют подтверждения со стороны пользователя.

Глава 50. Удаление установленного пакета

Для удаления пакета используется команда apt-get remove имя_пакета. Для того чтобы не нарушать целостность системы, будут удалены и все пакеты, зависящие от удаляемого. В случае удаления пакета, который относится к базовым компонентам системы, apt-get потребует дополнительное подтверждение с целью предотвращения возможной случайной ошибки.

Важно

Для удаления пакетов требуются привилегии администратора.
При попытке с помощью apt-get удалить базовый компонент системы, вы увидите следующий запрос на подтверждение операции:
# apt-get remove filesystem
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Следующие пакеты будут УДАЛЕНЫ:
  ...
ВНИМАНИЕ: Будут удалены важные для работы системы пакеты
Обычно этого делать не следует. Вы должны точно понимать возможные последствия!
  ...
0 будет обновлено, 0 новых установлено, 2648 пакетов будет удалено и 0 не будет обновлено.
Необходимо получить 0B архивов.
После распаковки будет освобождено 8994MB дискового пространства.
Вы делаете нечто потенциально опасное!
Введите фразу 'Yes, do as I say!' чтобы продолжить.

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

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

Глава 51. Обновление системы

51.1. Обновление всех установленных пакетов

Для обновления всех установленных пакетов необходимо выполнить команды:
# 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 проведёт сравнение системы с репозиторием и удалит устаревшие пакеты, установит новые версии присутствующих в системе пакетов, отследит ситуации с переименованиями пакетов или изменения зависимостей между старыми и новыми версиями программ. Всё, что потребуется поставить (или удалить) дополнительно к уже имеющемуся в системе, будет указано в отчёте apt-get, которым APT предварит само обновление.

Примечание

Команда apt-get dist-upgrade обновит систему, но ядро ОС не будет обновлено.

51.2. Обновление ядра

Для обновления ядра ОС необходимо выполнить команду:
# update-kernel

Примечание

Если индексы сегодня еще не обновлялись перед выполнением команды update-kernel необходимо выполнить команду apt-get update.
Команда update-kernel обновляет и модули ядра, если в репозитории обновилось что-то из модулей без обновления ядра.
Новое ядро загрузится только после перезагрузки системы, которую рекомендуется выполнить немедленно.
Если с новым ядром что-то пойдёт не так, вы сможете вернуться к предыдущему варианту, выбрав его в начальном меню загрузчика.
После успешной загрузки на обновленном ядре можно удалить старое, выполнив команду:
# remove-old-kernels

Часть VI. Основы администрирования Linux

Содержание

52. Общие принципы работы ОС
52.1. Процессы и файлы
52.1.1. Процессы функционирования ОС
52.1.2. Файловая система ОС
52.1.3. Структура каталогов
52.1.4. Организация файловой структуры
52.1.5. Имена дисков и разделов
52.1.6. Разделы, необходимые для работы ОС
52.2. Работа с наиболее часто используемыми компонентами
52.2.1. Виртуальная консоль
52.2.2. Командные оболочки (интерпретаторы)
52.2.3. Командная оболочка Bash
52.2.4. Команда
52.2.5. Команда и параметры
52.2.6. Команда и ключи
52.2.7. Обзор основных команд системы
52.3. Стыкование команд в системе Linux
52.3.1. Стандартный ввод и стандартный вывод
52.3.2. Перенаправление ввода и вывода
52.3.3. Использование состыкованных команд
52.3.4. Недеструктивное перенаправление вывода
53. Средства управления дискреционными правами доступа
53.1. Команда chmod
53.2. Команда chown
53.3. Команда chgrp
53.4. Команда umask
53.5. Команда chattr
53.6. Команда lsattr
53.7. Команда getfacl
53.8. Команда setfacl
54. Режим суперпользователя
54.1. Какие бывают пользователи?
54.2. Как получить права суперпользователя?
54.3. Как перейти в режим суперпользователя?
55. Управление пользователями
55.1. Общая информация
55.2. Команда useradd
55.3. Команда passwd
55.4. Добавление нового пользователя
55.5. Настройка парольных ограничений
55.6. Управление сроком действия пароля
55.7. Настройка неповторяемости пароля
55.8. Модификация пользовательских записей
55.9. Удаление пользователей
56. Система инициализации systemd и sysvinit
56.1. Запуск операционной системы
56.1.1. Запуск системы
56.1.2. Система инициализации
56.2. Системы инициализации systemd и sysvinit
56.2.1. sysvinit
56.2.2. systemd
56.3. Примеры команд управления службами, журнал в systemd
57. Что происходит в системе
58. Документация
58.1. Экранная документация
58.1.1. man
58.1.2. info
58.2. Документация по пакетам

Глава 52. Общие принципы работы ОС

52.1. Процессы и файлы

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

52.1.1. Процессы функционирования ОС

Все программы, которые выполняются в текущий момент времени, называются процессами. Процессы можно разделить на два основных класса: системные процессы и пользовательские процессы.
Системные процессы — программы, решающие внутренние задачи ОС, например, организацию виртуальной памяти на диске или предоставляющие пользователям те или иные сервисы (процессы-службы).
Пользовательские процессы — процессы, запускаемые пользователем из командного интерпретатора для решения задач пользователя или управления системными процессами. Linux изначально разрабатывался как многозадачная система. Он использует технологии, опробованные и отработанные другими реализациями UNIX, которые существовали ранее.
Фоновый режим работы процесса — режим, когда программа может работать без взаимодействия с пользователем. В случае необходимости интерактивной работы с пользователем (в общем случае) процесс будет «остановлен» ядром, и работа его продолжается только после переведения его в «нормальный» режим работы.

52.1.2. Файловая система ОС

В ОС использована файловая система Linux, которая, в отличие от файловых систем DOS и Windows(™), является единым деревом. Корень этого дерева — каталог, называемый root (рут) и обозначаемый /.
Части дерева файловой системы могут физически располагаться в разных разделах разных дисков или вообще на других компьютерах — для пользователя это прозрачно. Процесс присоединения файловой системы раздела к дереву называется монтированием, удаление — размонтированием. Например, файловая система CD-ROM в дистрибутиве монтируется по умолчанию в каталог /media/cdrom (путь в дистрибутиве обозначается с использованием /, а не \, как в DOS/Windows).
Текущий каталог обозначается ./.

52.1.3. Структура каталогов

Корневой каталог /:
  • /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 т.д.).

52.1.4. Организация файловой структуры

Система домашних каталогов пользователей помогает организовывать безопасную работу пользователей в многопользовательской системе. Вне своего домашнего каталога пользователь обладает минимальными правами (обычно чтение и выполнение файлов) и не может нанести ущерб системе, например, удалив или изменив файл.
Кроме файлов, созданных пользователем, в его домашнем каталоге обычно содержатся персональные конфигурационные файлы некоторых программ.
Маршрут (путь) — это последовательность имён каталогов, представляющая собой путь в файловой системе к данному файлу, где каждое следующее имя отделяется от предыдущего наклонной чертой (слешем). Если название маршрута начинается со слеша, то путь в искомый файл начинается от корневого каталога всего дерева системы. В обратном случае, если название маршрута начинается непосредственно с имени файла, то путь к искомому файлу должен начаться от текущего каталога (рабочего каталога).
Имя файла может содержать любые символы за исключением косой черты (/). Однако следует избегать применения в именах файлов большинства знаков препинания и непечатаемых символов. При выборе имен файлов рекомендуется ограничиться следующими символами:
  • строчные и ПРОПИСНЫЕ буквы. Следует обратить внимание на то, что регистр всегда имеет значение;
  • символ подчеркивания (_);
  • точка (.).
Для удобства работы точку можно использовать для отделения имени файла от расширения файла. Данная возможность может быть необходима пользователям или некоторым программам, но не имеет значение для shell.

52.1.5. Имена дисков и разделов

Все физические устройства вашего компьютера отображаются в каталог /dev файловой системы дистрибутива (об этом — ниже). Диски (в том числе IDE/SATA/SCSI/SAS жёсткие диски, USB-диски) имеют имена:
  • /dev/sda — первый диск;
  • /dev/sdb — второй диск;
  • и т.д.
Диски обозначаются /dev/sdX, где X — a, b, c, d, e, … в зависимости от порядкового номера диска на шине.
Раздел диска обозначается числом после его имени. Например, /dev/sdb4 — четвертый раздел второго диска.

52.1.6. Разделы, необходимые для работы ОС

Для работы ОС на жестком диске (дисках) должны быть созданы, по крайней мере, два раздела: корневой (то есть тот, который будет содержать каталог /) и раздел подкачки (swap). Размер последнего, как правило, составляет от однократной до двукратной величины оперативной памяти компьютера. Если на диске много свободного места, то можно создать отдельные разделы для каталогов /usr, /home, /var.

52.2. Работа с наиболее часто используемыми компонентами

52.2.1. Виртуальная консоль

Система Альт Виртуализация редакция PVE предоставляет доступ к виртуальным консолям, с которых можно осуществлять одновременно несколько сеансов работы в системе (login session).
Только что установленная система Альт Виртуализация редакция PVE, возможно, предоставляет доступ только к первым шести виртуальным консолям, к которым можно обращаться, нажимая комбинации клавиш Alt+F1Alt+F6.

52.2.2. Командные оболочки (интерпретаторы)

Для управления ОС используются командные интерпретаторы (shell).
Зайдя в систему, Вы увидите приглашение — строку, содержащую символ «$» (далее этот символ будет обозначать командную строку). Программа ожидает ваших команд. Роль командного интерпретатора — передавать ваши команды операционной системе. По своим функциям он соответствует command.com в DOS, но несравненно мощнее. При помощи командных интерпретаторов можно писать небольшие программы — сценарии (скрипты). В Linux доступны следующие командные оболочки:
  • bash — самая распространенная оболочка под linux. Она ведет историю команд и предоставляет возможность их редактирования;
  • pdksh — клон korn shell, хорошо известной оболочки в UNIX™ системах.
Проверить, какая оболочка используется в данный момент можно, выполнив команду:
$ echo $SHELL
Оболочкой по умолчанию является Bash (Bourne Again Shell) — самая распространённая оболочка под Linux, которая ведет историю команд и предоставляет возможность их редактирования. В дальнейшем описании работы с Альт Виртуализация редакция PVE будут использоваться примеры с использованием этой оболочки.

52.2.3. Командная оболочка Bash

В Bash имеется несколько приемов для работы со строкой команд. Например, можно использовать следующие сочетания:
  • Ctrl+A — перейти на начало строки;
  • Ctrl+U — вырезать/удалить все символы слева от курсора до начала строки в буфер обмена;
  • Ctrl+C — остановить текущую задачу.
Для ввода нескольких команд одной строкой можно использовать разделитель «;». По истории команд можно перемещаться с помощью клавиш («вверх») и («вниз»).
Чтобы найти конкретную команду в списке набранных, не пролистывая всю историю, можно нажать Ctrl+R и начать вводить символы ранее введенной команды.
Для просмотра истории команд можно воспользоваться командой history. Команды, присутствующие в истории, отображаются в списке пронумерованными. Чтобы запустить конкретную команду необходимо набрать:
!номер команды
Если ввести:
!!
запустится последняя из набранных команд.
В Bash имеется возможность самостоятельного завершения имен команд из общего списка команд, что облегчает работу при вводе команд, в случае, если имена программ и команд слишком длинны. При нажатии клавиши Tab Bash завершает имя команды, программы или каталога, если не существует нескольких альтернативных вариантов. Например, чтобы использовать программу декомпрессии gunzip, можно набрать следующую команду:
gu
Затем нажать клавишу Tab. Так как в данном случае существует несколько возможных вариантов завершения команды, то необходимо повторно нажать клавишу Tab, чтобы получить список имен, начинающихся с gu.
В предложенном примере можно получить следующий список:
$ gu
guile gunzip gupnp-binding-tool
Если набрать: n (gunzip — это единственное имя, третьей буквой которого является «n»), а затем нажать клавишу Tab, то оболочка самостоятельно дополнит имя. Чтобы запустить команду нужно нажать Enter.
Программы, вызываемые из командной строки, Bash ищет в каталогах, определяемых в системной переменной $PATH. По умолчанию в этот перечень каталогов не входит текущий каталог, обозначаемый ./ (точка слеш) (если только не выбран один из двух самых слабых уровней защиты). Поэтому, для запуска программы из текущего каталога, необходимо использовать команду (в примере запускается команда prog):
./prog

52.2.4. Команда

Простейшая команда состоит из одного «слова», например, команда 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

52.2.5. Команда и параметры

$ 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 и «остального». То, что следует за командой называется параметрами (или аргументами) и они вводятся для изменения поведения команды. В большинстве случаев, первое слово считается именем команды, а остальные — её параметрами.

52.2.6. Команда и ключи

Для решения разных задач одни и те же действия необходимо выполнять по-разному. Например, для синхронизации работ в разных точках земного шара лучше использовать единое для всех время (по Гринвичу), а для организации собственного рабочего дня — местное время (с учётом сдвига по часовому поясу и разницы зимнего и летнего времени). И то, и другое время показывает команда date, только для работы по Гринвичу ей нужен дополнительный параметр -u (он же --universal).
$ date
Чт 13 мар 2025 12:10:52 EET
$ date -u
Чт 13 мар 2025 10:11:05 UTC
Такого рода параметры называются ключами или модификаторами выполнения. Ключ принадлежит данной конкретной команде и сам по себе смысла не имеет. Этим он отличается от других параметров (например, имён файлов, чисел), имеющих собственный смысл, не зависящий ни от какой команды. Каждая команда может распознавать некоторый набор ключей и соответственно изменять своё поведение. Один и тот же ключ может определять для разных команд совершенно разные значения.
Для формата ключей нет жёсткого стандарта, однако существуют договорённости:
  • Если ключ начинается на -, то это однобуквенный ключ. За -, как правило, следует один символ, чаще всего буква, обозначающая действие или свойство, которое этот ключ придаёт команде. Так проще отличать ключи от других параметров.
  • Если ключ начинается на --, то он называется полнословным ключом. Полнословный формат ключа начинается на два знака --, за которыми следует полное имя обозначаемого этим ключом содержания.
Некоторые ключи имеют и однобуквенный, и полнословный формат, а некоторые — только полнословный.
Информацию о ресурсах каждой команды можно получить, используя ключ --help. К примеру, получить подсказку о том, что делает команда rm, можно, набрав в терминале rm --help.

52.2.7. Обзор основных команд системы

Все команды, приведенные ниже, могут быть запущены в режиме консоли. Для получения более подробной информации используйте команду man. Пример:
$ man ls

Примечание

Параметры команд обычно начинаются с символа «-», и обычно после одного символа «-» можно указать сразу несколько опций. Например, вместо команды ls -l -F можно ввести команду ls -lF

Учетные записи пользователей

Команда su
Команда su позволяет изменить «владельца» текущего сеанса (сессии) без необходимости завершать сеанс и открывать новый.
Синтаксис:
su [ОПЦИИ...] [ПОЛЬЗОВАТЕЛЬ]
Команду можно применять для замены текущего пользователя на любого другого, но чаще всего она используется для получения пользователем прав суперпользователя (root).
При вводе команды 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 [ОПЦИИ...]
По умолчанию выводится информация о процессах с теми же действующим UID и управляющим терминалом, что и у подающего команду пользователя.
Основные опции:
  • -a — вывести информацию о процессах, ассоциированных с терминалами;
  • -f — вывести «полный» список;
  • -l — вывести «длинный» список;
  • -p список  — вывести информацию о процессах с перечисленными в списке PID;
  • -u список — вывести информацию о процессах с перечисленными идентификаторами или именами пользователей.
Команда kill
Команда kill позволяет прекратить исполнение процесса или передать ему сигнал.
Синтаксис:
kill [-s] [сигнал] [идентификатор] [...]
kill [-l] [статус_завершения]
kill [-номер_сигнала] [идентификатор] [...]
Идентификатор — PID ведущего процесса задания или номер задания, предварённый знаком «%».
Основные опции:
  • -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, которые начинаются с точки.

Использование многозадачности

Альт Виртуализация редакция PVE — это многозадачная система.
Для того чтобы запустить программу в фоновом режиме, необходимо набрать «&» после имени программы. После этого оболочка даст возможность запускать другие приложения.
Так как некоторые программы интерактивны — их запуск в фоновом режиме бессмысленен. Подобные программы просто остановятся, если их запустить в фоновом режиме.
Можно также запускать нескольких независимых сеансов. Для этого в консоли необходимо набрать Alt и одну из клавиш, находящихся в интервале от F1 до F6. На экране появится новое приглашение системы, и можно открыть новый сеанс. Этот метод также позволяет вам работать на другой консоли, если консоль, которую вы использовали до этого, не отвечает или вам необходимо остановить зависшую программу.
Команда bg
Команда bg позволяет перевести задание на задний план.
Синтаксис:
bg [ИДЕНТИФИКАТОР ...]
Идентификатор — PID ведущего процесса задания или номер задания, предварённый знаком «%».
Команда fg
Команда fg позволяет перевести задание на передний план.
Синтаксис:
fg [ИДЕНТИФИКАТОР ...]
Идентификатор — PID ведущего процесса задания или номер задания, предварённый знаком «%».

Сжатие и упаковка файлов

Команда tar
Сжатие и упаковка файлов выполняется с помощью команды tar, которая преобразует файл или группу файлов в архив без сжатия (tarfile).
Упаковка файлов в архив чаще всего выполняется следующей командой:
tar -cf [имя создаваемого файла архива] [упаковываемые файлы и/или каталоги]
Пример использования команды упаковки архива:
tar -cf moi_dokumenti.tar Docs project.tex
Распаковка содержимого архива в текущий каталог выполняется командой:
tar -xf [имя файла архива]
Для сжатия файлов используются специальные программы сжатия: gzip, bzip2 и 7z.

52.3. Стыкование команд в системе Linux

52.3.1. Стандартный ввод и стандартный вывод

Многие команды системы имеют так называемые стандартный ввод (standard input) и стандартный вывод (standard output), часто сокращаемые до stdin и stdout. Ввод и вывод здесь — это входная и выходная информация для данной команды. Программная оболочка делает так, что стандартным вводом является клавиатура, а стандартным выводом — экран монитора.
Пример с использованием команды 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).

52.3.2. Перенаправление ввода и вывода

При необходимости можно перенаправить стандартный вывод, используя символ >, и стандартный ввод, используя символ <.
Фильтр (filter) — программа, которая читает данные из стандартного ввода, некоторым образом их обрабатывает и результат направляет на стандартный вывод. Когда применяется перенаправление, в качестве стандартного ввода и вывода могут выступать файлы. Как указывалось выше, по умолчанию, stdin и stdout относятся к клавиатуре и к экрану соответственно. Команда sort является простым фильтром — она сортирует входные данные и посылает результат на стандартный вывод. Совсем простым фильтром является команда cat — она ничего не делает с входными данными, а просто пересылает их на выход.

52.3.3. Использование состыкованных команд

Стыковку команд (pipelines) осуществляет командная оболочка, которая stdout первой команды направляет на stdin второй команды. Для стыковки используется символ |. Направить stdout команды 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), отсортированных в обратном алфавитном порядке.

52.3.4. Недеструктивное перенаправление вывода

Эффект от использования символа > для перенаправления вывода файла является деструктивным; т.е, команда
ls > file-list
уничтожит содержимое файла file-list, если этот файл ранее существовал, и создаст на его месте новый файл. Если вместо этого перенаправление будет сделано с помощью символов >>, то вывод будет приписан в конец указанного файла, при этом исходное содержимое файла не будет уничтожено.

Примечание

Перенаправление ввода и вывода и стыкование команд осуществляется командными оболочками, которые поддерживают использование символов >, >> и |. Сами команды не способны воспринимать и интерпретировать эти символы.

Глава 53. Средства управления дискреционными правами доступа

53.1. Команда chmod

Команда chmod предназначена для изменения прав доступа файлов и каталогов.
Синтаксис:
chmod [ОПЦИИ] РЕЖИМ[,РЕЖИМ]... <ФАЙЛ>
chmod [ОПЦИИ] --reference=ИФАЙЛ <ФАЙЛ>
Основные опции:
  • -R — рекурсивно изменять режим доступа к файлам, расположенным в указанных каталогах;
  • --reference=ИФАЙЛ — использовать режим файла ИФАЙЛ.
chmod изменяет права доступа каждого указанного файла в соответствии с правами доступа, указанными в параметре режим, который может быть представлен как в символьном виде, так и в виде восьмеричного, представляющего битовую маску новых прав доступа.
Формат символьного режима следующий:
[ugoa...][[+-=][разрешения...]...]
Здесь разрешения — это ноль или более букв из набора «rwxXst» или одна из букв из набора «ugo».
Каждый аргумент — это список символьных команд изменения прав доступа, разделеных запятыми. Каждая такая команда начинается с нуля или более букв «ugoa», комбинация которых указывает, чьи права доступа к файлу будут изменены: пользователя, владеющего файлом (u), пользователей, входящих в группу, к которой принадлежит файл (g), остальных пользователей (o) или всех пользователей (a). Если не задана ни одна буква, то автоматически будет использована буква «a», но биты, установленные в umask, не будут затронуты.
Оператор «+» добавляет выбранные права доступа к уже имеющимся у каждого файла, «-» удаляет эти права. «=» присваивает только эти права каждому указанному файлу.
Буквы «rwxXst» задают биты доступа для пользователей: «r» — чтение, «w» — запись, «x» — выполнение (или поиск для каталогов), «X» — выполнение/поиск только если это каталог или же файл с уже установленным битом выполнения, «s» — задать ID пользователя и группы при выполнении, «t» — запрет удаления.
Числовой режим состоит из не более четырех восьмеричных цифр (от нуля до семи), которые складываются из битовых масок с разрядами «4», «2» и «1». Любые пропущенные разряды дополняются лидирующими нулями:
  • первый разряд выбирает установку идентификатора пользователя (setuid) (4) или идентификатора группы (setgid) (2) или sticky-бита (1);
  • второй разряд выбирает права доступа для пользователя, владеющего данным файлом: чтение (4), запись (2) и исполнение (1);
  • третий разряд выбирает права доступа для пользователей, входящих в данную группу, с тем же смыслом, что и у второго разряда;
  • четвертый разряд выбирает права доступа для остальных пользователей (не входящих в данную группу), опять с тем же смыслом.
Примеры:
  • установить права, позволяющие владельцу читать и писать в файл 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
    

53.2. Команда chown

Команда chown изменяет владельца и/или группу для каждого заданного файла.
Синтаксис:
chown [КЛЮЧ]…[ВЛАДЕЛЕЦ][:[ГРУППА]] <ФАЙЛ>
chown [ОПЦИИ] --reference=ИФАЙЛ <ФАЙЛ>
Основные опции:
  • -R — рекурсивно изменять файлы и каталоги;
  • --reference=ИФАЙЛ — использовать владельца и группу файла ИФАЙЛ.
Изменить владельца может только владелец файла или суперпользователь.
Владелец не изменяется, если он не задан в аргументе. Группа также не изменяется, если не задана, но если после символьного ВЛАДЕЛЬЦА стоит символ «:», подразумевается изменение группы на основную группу текущего пользователя. Поля ВЛАДЕЛЕЦ и ГРУППА могут быть как числовыми, так и символьными.
Примеры:
  • поменять владельца каталога /u на пользователя test:
    chown test /u
  • поменять владельца и группу каталога /u:
    chown test:staff /u
  • поменять владельца каталога /u и вложенных файлов на test:
    chown -hR test /u

53.3. Команда chgrp

Команда chgrp изменяет группу для каждого заданного файла.
Синтаксис:
chgrp [ОПЦИИ] ГРУППА <ФАЙЛ>
chgrp [ОПЦИИ] --reference=ИФАЙЛ <ФАЙЛ>
Основные опции:
  • -R — рекурсивно изменять файлы и каталоги;
  • --reference=ИФАЙЛ — использовать группу файла ИФАЙЛ.

53.4. Команда umask

Команда umask задает маску режима создания файла в текущей среде командного интерпретатора равной значению, задаваемому операндом режим. Эта маска влияет на начальное значение битов прав доступа всех создаваемых далее файлов.
Синтаксис:
umask [-p] [-S] [режим]
Пользовательской маске режима создания файлов присваивается указанное восьмеричное значение. Три восьмеричные цифры соответствуют правам на чтение/запись/выполнение для владельца, членов группы и прочих пользователей соответственно. Значение каждой заданной в маске цифры вычитается из соответствующей «цифры», определенной системой при создании файла. Например, umask 022 удаляет права на запись для членов группы и прочих пользователей (у файлов, создававшихся с режимом 777, он оказывается равным 755; а режим 666 преобразуется в 644).
Если маска не указана, выдается ее текущее значение:
$ umask
0022
или то же самое в символьном режиме:
$ umask -S
u=rwx,g=rx,o=rx
Команда umask распознается и выполняется командным интерпретатором bash.

53.5. Команда chattr

Команда chattr изменяет атрибуты файлов на файловых системах ext3, ext4.
Синтаксис:
chattr [ -RVf ] [+-=aAcCdDeFijmPsStTux] [ -v версия ] <ФАЙЛЫ> …
Опции:
  • -R — рекурсивно изменять атрибуты каталогов и их содержимого. Символические ссылки игнорируются;
  • -V — выводит расширенную информацию и версию программы;
  • -f — подавлять сообщения об ошибках;
  • -v версия — установить номер версии/генерации файла.
Формат символьного режима:
+-=aAcCdDeFijmPsStTux
Оператор «+» означает добавление выбранных атрибутов к существующим атрибутам; «-» означает их снятие; «=» означает определение только этих указанных атрибутов для файлов.
Символы «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).

53.6. Команда lsattr

Команда lsattr выводит атрибуты файла расширенной файловой системы.
Синтаксис:
lsattr [ -RVadlpv ] <ФАЙЛЫ> …
Опции:
  • -R — рекурсивно изменять атрибуты каталогов и их содержимого. Символические ссылки игнорируются;
  • -V — выводит расширенную информацию и версию программы;
  • -a — просматривает все файлы в каталоге, включая скрытые файлы (имена которых начинаются с «.»);
  • -d — отображает каталоги так же, как и файлы вместо того, чтобы просматривать их содержимое;
  • -l — отображает параметры, используя длинные имена вместо одного символа;
  • -p — выводит номер проекта файла;
  • -v — выводит номер версии/генерации файла.

53.7. Команда getfacl

Команда 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:---
Строки 1 — 3 указывают имя файла, владельца и группу владельцев.
В строке 4 указаны биты setuid (s), setgid (s) и sticky (t): либо буква, обозначающая бит, либо тире (-). Эта строка включается, если какой-либо из этих битов установлен, и опускается в противном случае, поэтому она не будет отображаться для большинства файлов.
Строки 5, 7 и 10 относятся к традиционным битам прав доступа к файлу, соответственно, для владельца, группы-владельца и всех остальных. Эти три элемента являются базовыми. Строки 6 и 8 являются элементами для отдельных пользователя и группы. Строка 9 — маска эффективных прав. Этот элемент ограничивает эффективные права, предоставляемые всем группам и отдельным пользователям. Маска не влияет на права для владельца файла и всех других. Строки 11 — 15 показывают ACL по умолчанию, ассоциированный с данным каталогом.

53.8. Команда setfacl

Команда 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 разделяются одинарными кавычками.
При чтении ACL из файла при помощи опций -set-file, -M и -X команда setfacl принимает множество элементов в формате вывода команды getfacl. В строке обычно содержится не больше одного элемента ACL.
Команда setfacl использует следующие форматы элементов ACL:
  • права доступа отдельного пользователя (если не задан UID, то права доступа владельца файла):
    [d[efault]:] [u[ser]:]uid [:perms]
    
  • права доступа отдельной группы (если не задан GID, то права доступа группы-владельца):
    [d[efault]:] g[roup]:gid [:perms]
    
  • маска эффективных прав:
    [d[efault]:] m[ask][:] [:perms]
    
  • права доступа всех остальных:
    [d[efault]:] o[ther][:] [:perms]
    
Элемент ACL является абсолютным, если он содержит поле perms и является относительным, если он включает один из модификаторов: «+» или «^». Абсолютные элементы могут использоваться в операциях установки или модификации ACL. Относительные элементы могут использоваться только в операции модификации ACL. Права доступа для отдельных пользователей, группы, не содержащие никаких полей после значений UID, GID (поле perms при этом отсутствует), используются только для удаления элементов.
Значения UID и GID задаются именем или числом. Поле perms может быть представлено комбинацией символов «r», «w», «x», «-» или цифр (0 — 7).
Изначально файлы и каталоги содержат только три базовых элемента ACL: для владельца, группы-владельца и всех остальных пользователей. Существует ряд правил, которые следует учитывать при установке прав доступа:
  • не могут быть удалены сразу три базовых элемента, должен присутствовать хотя бы один;
  • если ACL содержит права доступа для отдельного пользователя или группы, то ACL также должен содержать маску эффективных прав;
  • если ACL содержит какие-либо элементы ACL по умолчанию, то в последнем должны также присутствовать три базовых элемента (т. е. права доступа по умолчанию для владельца, группы-владельца и всех остальных);
  • если ACL по умолчанию содержит права доступа для всех отдельных пользователей или групп, то в ACL также должна присутствовать маска эффективных прав.
Для того чтобы помочь пользователю выполнять эти правила, команда setfacl создает права доступа, используя уже существующие, согласно следующим условиям:
  • если права доступа для отдельного пользователя или группы добавлены в ACL, а маски прав не существует, то создается маска с правами доступа группы-владельца;
  • если создан элемент ACL по умолчанию, а трех базовых элементов не было, тогда делается их копия и они добавляются в ACL по умолчанию;
  • если ACL по умолчанию содержит какие-либо права доступа для конкретных пользователя или группы и не содержит маску прав доступа по умолчанию, то при создании эта маска будет иметь те же права, что и группа по умолчанию.
Пример. Изменить разрешения для файла test.txt, принадлежащего пользователю liza и группе docs, так, чтобы:
  • пользователь ivan имел права на чтение и запись в этот файл;
  • пользователь misha не имел никаких прав на этот файл.
Исходные данные
$ 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
Просмотреть разрешения (от пользователя liza):
$ 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

Глава 54. Режим суперпользователя

54.1. Какие бывают пользователи?

Linux — система многопользовательская, а потому пользователь — ключевое понятие для организации всей системы доступа в Linux. Файлы всех пользователей в Linux хранятся раздельно, у каждого пользователя есть собственный домашний каталог, в котором он может хранить свои данные. Доступ других пользователей к домашнему каталогу пользователя может быть ограничен.
Суперпользователь в Linux — это выделенный пользователь системы, на которого не распространяются ограничения прав доступа. Именно суперпользователь имеет возможность произвольно изменять владельца и группу файла. Ему открыт доступ на чтение и запись к любому файлу или каталогу системы.
Среди учётных записей Linux всегда есть учётная запись суперпользователя — root. Поэтому вместо «суперпользователь» часто говорят «root». Множество системных файлов принадлежат root, множество файлов только ему доступны для чтения или записи. Пароль этой учётной записи — одна из самых больших драгоценностей системы. Именно с её помощью системные администраторы выполняют самую ответственную работу.

54.2. Как получить права суперпользователя?

Для опытных пользователей, умеющих работать с командной строкой, существует два различных способа получить права суперпользователя.
Первый — это зарегистрироваться в системе под именем root.
Второй способ — воспользоваться специальной утилитой su (shell of user), которая позволяет выполнить одну или несколько команд от лица другого пользователя. По умолчанию эта утилита выполняет команду sh от пользователя root, то есть запускает командный интерпретатор. Отличие от предыдущего способа в том, что всегда известно, кто именно запускал su, а значит, ясно, кто выполнил определённое административное действие.
В некоторых случаях удобнее использовать не su, а утилиту sudo, которая позволяет выполнять только заранее заданные команды.

Важно

Для того чтобы воспользоваться командами su и sudo, необходимо быть членом группы wheel. Пользователь, созданный при установке системы, по умолчанию уже включён в эту группу.
В дистрибутивах Альт для управления доступом к важным службам используется подсистема control. control — механизм переключения между неким набором фиксированных состояний для задач, допускающих такой набор.
Команда control доступна только для суперпользователя (root). Для того чтобы посмотреть, что означает та или иная политика control (разрешения выполнения конкретной команды, управляемой control), надо запустить команду с ключом help:
# control su help
Запустив control без параметров, можно увидеть полный список команд, управляемых командой (facilities) вместе с их текущим состоянием и набором допустимых состояний.

54.3. Как перейти в режим суперпользователя?

Для перехода в режим суперпользователя наберите в терминале команду (минус важен!):
su -
Если воспользоваться командой su без ключа, то происходит вызов командного интерпретатора с правами root. При этом значение переменных окружения, в частности $PATH, остаётся таким же, как у пользователя: в переменной $PATH не окажется каталогов /sbin, /usr/sbin, без указания полного имени будут недоступны команды route, shutdown, mkswap и другие. Более того, переменная $HOME будет указывать на каталог пользователя, все программы, запущенные в режиме суперпользователя, сохранят свои настройки с правами root в каталоге пользователя, что в дальнейшем может вызвать проблемы.
Чтобы избежать этого, следует использовать su -. В этом режиме su запустит командный интерпретатор в качестве login shell, и он будет вести себя в точности так, как если бы в системе зарегистрировался root.

Глава 55. Управление пользователями

55.1. Общая информация

Пользователи и группы внутри системы обозначаются цифровыми идентификаторами — UID и GID, соответственно.
Пользователь может входить в одну или несколько групп. По умолчанию он входит в группу, совпадающую с его именем. Чтобы узнать, в какие еще группы входит пользователь, введите команду id, вывод её может быть примерно следующим:
uid=500(test) gid=500(test) группы=500(test),16(rpm)
Такая запись означает, что пользователь test (цифровой идентификатор 500) входит в группы test и rpm. Разные группы могут иметь разный уровень доступа к тем или иным каталогам; чем в большее количество групп входит пользователь, тем больше прав он имеет в системе.

Примечание

В связи с тем, что большинство привилегированных системных утилит в дистрибутивах Альт имеют не SUID-, а SGID-бит, будьте предельно внимательны и осторожны в переназначении групповых прав на системные каталоги.

55.2. Команда useradd

Команда useradd регистрирует нового пользователя или изменяет информацию по умолчанию о новых пользователях.
Синтаксис:
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

55.3. Команда passwd

Команда passwd поддерживает традиционные опции passwd и утилит shadow.
Синтаксис:
passwd [ОПЦИИ...] [ИМЯ ПОЛЬЗОВАТЕЛЯ]
Возможные опции:
  • -d, --delete — удалить пароль для указанной записи;
  • -f, --force — форсировать операцию;
  • -k, --keep-tokens — сохранить не устаревшие пароли;
  • -l, --lock — блокировать указанную запись;
  • --stdin — прочитать новые пароли из стандартного ввода;
  • -S, --status — дать отчет о статусе пароля в указанной записи;
  • -u, --unlock — разблокировать указанную запись;
  • -?, --help — показать справку и выйти;
  • --usage — дать короткую справку по использованию;
  • -V, --version — показать версию программы и выйти.
Код выхода: при успешном завершении passwd заканчивает работу с кодом выхода 0. Код выхода 1 означает, что произошла ошибка. Текстовое описание ошибки выводится на стандартный поток ошибок.
Пользователь может в любой момент поменять свой пароль. Единственное, что требуется для смены пароля — знать текущий пароль.
Только суперпользователь может обновить пароль другого пользователя.

55.4. Добавление нового пользователя

Для добавления нового пользователя используйте команды 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.
В результате описанных действий в системе появился пользователь test1 с некоторым паролем. Если пароль оказался слишком слабым с точки зрения системы, она об этом предупредит (как в примере выше). Пользователь в дальнейшем может поменять свой пароль при помощи команды passwd — но если он попытается поставить слабый пароль, система откажет ему (в отличие от root) в изменении.
В Альт Виртуализация редакция PVE для проверки паролей на слабость используется модуль PAM passwdqc.

55.5. Настройка парольных ограничений

Настройка парольных ограничений производится в файле /etc/passwdqc.conf.
Файл passwdqc.conf состоит из 0 или более строк следующего формата:
опция=значение
Пустые строки и строки, начинающиеся со знака решетка («#»), игнорируются. Символы пробела между опцией и значением не допускаются.
Опции, которые могут быть переданы в модуль (в скобках указаны значения по умолчанию): min=N0,N1,N2,N3,N4 (min=disabled,24,11,8,7) — минимально допустимая длина пароля.
Используемые типы паролей по классам символов (алфавит, число, спецсимвол, верхний и нижний регистр) определяются следующим образом:
  • тип N0 используется для паролей, состоящих из символов только одного класса;
  • тип N1 используется для паролей, состоящих из символов двух классов;
  • тип N2 используется для парольных фраз, кроме этого требования длины, парольная фраза должна также состоять из достаточного количества слов;
  • типы N3 и N4 используются для паролей, состоящих из символов трех и четырех классов, соответственно.
Ключевое слово disabled используется для запрета паролей выбранного типа N0 — N4 независимо от их длины.

Примечание

Каждое следующее число в настройке «min» должно быть не больше, чем предыдущее.
При расчете количества классов символов, заглавные буквы, используемые в качестве первого символа и цифр, используемых в качестве последнего символа пароля, не учитываются.
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, будет невозможно задать пароли:
  • типа N0 (символы одного класса) — длиной меньше восьми символов;
  • типа N1 (символы двух классов) — длиной меньше семи символов;
  • типа N2 (парольные фразы), типа N3 (символы трех классов) и N4 (символы четырех классов) — длиной меньше четырех символов.

55.6. Управление сроком действия пароля

Для управления сроком действия паролей используется команда chage.

Примечание

Должен быть установлен пакет shadow-change:
# 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 — установить число дней до истечения срока действия пароля, начиная с которых пользователю будет выдаваться предупреждение о необходимости смены пароля.
Пример настройки времени действия пароля для пользователя test:
# chage -M 5 test
Получить информацию о «возрасте» учётной записи пользователя test:
# chage -l test
Последний раз пароль был изменён				: мар 13, 2025
Срок действия пароля истекает					: мар 18, 2025
Пароль будет деактивирован через				: никогда
Срок действия учётной записи истекает				: никогда
Минимальное количество дней между сменой пароля			: -1
Максимальное количество дней между сменой пароля		: 5
Количество дней с предупреждением перед деактивацией пароля	: -1

Примечание

Задать время действия пароля для вновь создаваемых пользователей можно, изменив параметр PASS_MAX_DAYS в файле /etc/login.defs.

55.7. Настройка неповторяемости пароля

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

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

В данном случае системный каталог станет доступным для записи пользователям группы pw_users (создайте эту группу и включите туда пользователей).

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

База используемых паролей ведется в файле /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.
В случае если необходимо, чтобы проверка выполнялась и для суперпользователя root, в настройки нужно добавить параметр enforce_for_root:
password        required        pam_pwhistory.so
use_authtok enforce_for_root remember=10 retry=3

55.8. Модификация пользовательских записей

Для модификации пользовательских записей применяется утилита usermod:
# usermod -G audio,rpm,test1 test1
Такая команда изменит список групп, в которые входит пользователь test1 — теперь это audio, rpm, test1.
# usermod -l test2 test1
Будет произведена смена имени пользователя с test1 на test2.
Команды usermod -L test2 и usermod -U test2 соответственно временно блокируют возможность входа в систему пользователю test2 и возвращают всё на свои места.
Изменения вступят в силу только при следующем входе пользователя в систему.
При неинтерактивной смене или задании паролей для целой группы пользователей используйте утилиту chpasswd. На стандартный вход ей следует подавать список, каждая строка которого будет выглядеть как имя:пароль.

55.9. Удаление пользователей

Для удаления пользователей используйте userdel.
Команда userdel test2 удалит пользователя test2 из системы. Если будет дополнительно задан параметр -r, то будет уничтожен и домашний каталог пользователя. Нельзя удалить пользователя, если в данный момент он еще работает в системе.

Глава 56. Система инициализации systemd и sysvinit

56.1. Запуск операционной системы

56.1.1. Запуск системы

Алгоритм запуска компьютера приблизительно такой:
  1. BIOS компьютера.
  2. Загрузчик системы (например, LILO, GRUB или другой). В загрузчике вы можете задать параметры запуска системы или выбрать систему для запуска.
  3. Загружается ядро Linux.
  4. Запускается на выполнение первый процесс в системе — init.
Ядром запускается самая первая программа в системе init. Её задачей является запуск новых процессов и повторный запуск завершившихся. Вы можете посмотреть, где расположился init в иерархии процессов вашей системы, введя команду pstree.
От конфигурации init зависит, какая система инициализации будет использована.

56.1.2. Система инициализации

Система инициализации — это набор скриптов, которые будут выполнены при старте системы.
Существуют разные системы инициализации, наиболее популярной системой являются sysvinit и ее модификации. systemd разрабатывается как замена для sysVinit.
В Альт Виртуализация редакция PVE используется systemd.

56.2. Системы инициализации systemd и sysvinit

56.2.1. sysvinit

System V — классическая схема инициализации, на которой базируются многие дистрибутивы. Привычна и довольно проста для понимания: init описывает весь процесс загрузки в своем конфигурационном файле /etc/inittab, откуда вызываются другие программы и скрипты на определенном этапе запуска.

56.2.2. systemd

systemd является альтернативной системой инициализации Linux, вобравшей в себя достоинства классического System V init и более современных launchd (OS X), SMF (Solaris) и Upstart (Ubuntu, Fedora), но при этом лишенной многих их недостатков. Он разрабатывался для обеспечения лучшего выражения зависимостей между службами, что позволяет делать одновременно больше работы при загрузке системы, и уменьшить время загрузки системы.
systemd (system daemon) реализует принципиально новый подход к инициализации и контролю работы системы. Одним из ключевых новшеств этого подхода является высокая степень параллелизации запуска служб при инициализации системы, что в перспективе позволяет добиться гораздо более высокой скорости, чем традиционный подход с последовательным запуском взаимозависимых служб. Другим важным моментом является контроль над точками монтирования (не-жизненно-важные файловые системы можно монтировать только при первом обращении к ним, не тратя на это время при инициализации системы) и устройствами (можно запускать и останавливать определенные службы и при появлении или удалении заданных устройств). Для отслеживания групп процессов используется механизм cgroups, который также может быть использован для ограничения потребляемых ими системных ресурсов.
Удобство systemd особенно заметно на компьютерах для домашнего пользования — когда пользователи включают и перезагружают компьютер ежедневно. В отличие от sysvinit, подвисание при запуске одного сервиса не приведет к остановке всего процесса загрузки.

56.3. Примеры команд управления службами, журнал в systemd

Обратите внимание, что команды 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
Используется, когда вы создаете новую службу или модифицируете любую конфигурацию

Глава 57. Что происходит в системе

Человеку, отвечающему за работоспособность системы, очень важно всегда отчётливо представлять происходящие в ней события. Теоретически, никакое происшествие не должно ускользнуть от его внимания. Однако компьютерные системы настолько сложны, что отслеживать все события в них — выше человеческих возможностей. Для того чтобы довести поток служебной информации до разумного объёма, её надо просеять (выкинуть незначащие данные), классифицировать (разделить на несколько групп сообразно тематике) и журнализировать (сохранить в доступном виде для дальнейшего анализа).
В ОС Альт Виртуализация редакция PVE функция записи информации о системных событиях и событиях безопасности обеспечивается с помощью системной службы systemd-journald. Она создает и поддерживает структурированные, индексированные журналы, на основе регистрируемой информации, полученной от ядра, от пользовательских процессов через вызов Libc syslog, от потоков STDOUT/STDERR системных служб через собственный API. Журналы данного инструмента хранятся в бинарном виде в /var/log/journal, что исключает возможность просмотра содержимого данных файлов стандартными утилитами обработки текстовых данных. Для просмотра логов используется утилита journalctl.
Можно запускать journalctl с разными ключами:
  • journalctl -b — покажет сообщения только с текущей загрузки;
  • journalctl -f — покажет только последние сообщения и продолжит печатать новые записи при добавлении их в журнал.
Можно посмотреть сообщения определенного процесса:
  • journalctl _PID=1 — покажет сообщения первого процесса (init).
Для ознакомления с прочими возможностями читайте руководство по journalctl. Для этого используйте команду man journalctl.
Стоит заметить, что некоторые службы (например, веб-сервер apache) самостоятельно ведут журнализацию своих событий, поэтому информацию о количестве и местоположении их журналов можно почерпнуть из их файлов настроек (обычно журналы хранятся в /var/log/).
Файл настройки journald находится в /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).

Глава 58. Документация

Каждый объект системы Linux обязательно сопровождается документацией, описывающей их назначение и способы использования. От пользователя системы не требуется заучивать все возможные варианты взаимодействия с ней. Достаточно понимать основные принципы её устройства и уметь находить справочную информацию.
Не пренебрегайте чтением документации: она поможет вам избежать многих сложностей, сэкономить массу времени и усилий при установке, настройке и администрировании системы, поможет найти нужное для работы приложение и быстро разобраться в нём.

58.1. Экранная документация

Почти все системы семейства UNIX, включая систему Linux, имеют экранную документацию. Её тексты содержат документацию по системным командам, ресурсам, конфигурационным файлам и т. д., а также могут быть выведены на экран в процессе работы.

58.1.1. man

Для доступа к экранной документации используется команда man (сокращение от manual). Каждая страница руководства посвящена одному объекту системы. Для того чтобы прочесть страницу руководства по программе, необходимо набрать man название_программы. К примеру, если вы хотите узнать, какие опции есть у команды date, вы можете ввести команду:
$ man date
Большинство экранной документации написано для пользователей, имеющих некоторое представление о том, что делает данная команда. Поэтому большинство текстов экранной документации содержит исключительно технические детали команды без особых пояснений. Тем не менее, экранная документация оказывается очень ценной в том случае, если вы помните название команды, но её синтаксис просто выпал у вас из памяти.
Поиск по описаниям man осуществляется командой apropos. Если вы точно не знаете, как называется необходимая вам программа, то поиск осуществляется по ключевому слову, к примеру, apropos date или при помощи ввода слова, обозначающего нужное действие, после команды man -k (например, man -k copy). Слово, характеризующее желаемое для вас действие, можно вводить и на русском языке. При наличии русского перевода страниц руководства man результаты поиска будут выведены на запрашиваемом языке.
«Страница руководства» занимает, как правило, больше одной страницы экрана. Для того чтобы читать было удобнее, man запускает программу постраничного просмотра текстов. Страницы перелистывают пробелом, для выхода из режима чтения описания команд man необходимо нажать на клавиатуре q. Команда man man выдаёт справку по пользованию самой командой man.
Документация в подавляющем большинстве случаев пишется на простом английском языке. Необходимость писать на языке, который будет более или менее понятен большинству пользователей, объясняется постоянным развитием Linux. Дело не в том, что страницу руководства нельзя перевести, а в том, что её придётся переводить всякий раз, когда изменится описываемый ею объект! Например, выход новой версии программного продукта сопровождается изменением его возможностей и особенностей работы, а следовательно, и новой версией документации.
Тем не менее, некоторые наиболее актуальные руководства существуют в переводе на русский язык. Свежие версии таких переводов на русский язык собраны в пакете man-pages-ru. Установив этот пакет, вы добавите в систему руководства, для которых есть перевод, и man по умолчанию будет отображать их на русском языке.

58.1.2. info

Другой источник информации о Linux и составляющих его программах — справочная подсистема info. Страница руководства, несмотря на обилие ссылок различного типа, остаётся «линейным» текстом, структурированным только логически. Документ info — это настоящий гипертекст, в котором множество небольших страниц объединены в дерево. В каждом разделе документа info всегда есть оглавление, из которого можно перейти к нужному подразделу, а затем вернуться обратно (ссылки для перемещения по разделам текста помечены *). Для получения вспомогательной информации о перемещении по тексту используйте клавишу h. Полное руководство info вызывается командой info info. Команда info, введённая без параметров, предлагает пользователю список всех документов info, установленных в системе.

58.2. Документация по пакетам

Дополнительным источником информации об интересующей вас программе, в основном на английском языке, является каталог /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 имя_установленного_пакета. В информационном заголовке соответствующего пакета, среди прочей информации, будет выведена искомая ссылка.

Часть VII. Техническая поддержка продуктов «Базальт СПО»

Глава 59. Покупателям нашей продукции

«Базальт СПО» предоставляет следующие виды технической поддержки:
  • Поддержка продукта входит в стоимость лицензии и включает регулярный выпуск обновлений, исправление ошибок, устранение уязвимостей в течение всего срока жизни дистрибутива.
  • Поддержка пользователей обеспечивает качественную эксплуатацию продукта. Техническая поддержка эксплуатации продуктов «Базальт СПО» оказывается в объеме SLA. Доступны три уровня SLA («Базовый», «Стандартный» и «Расширенный»).
Право на получение консультационной и технической поддержки вы приобретаете при покупке большинства продуктов торговой марки Альт. Сроки и объём помощи указаны в сертификате технической поддержки.
Условия технической поддержки можно найти на странице сайта «Базальт СПО»: http://www.basealt.ru/support.

Глава 60. Пользователям нашей продукции

Вне зависимости от того, скачали вы или же приобрели наш дистрибутив, задавать вопросы или обсуждать их с сообществом пользователей дистрибутивов Альт вы можете на форуме или в списках рассылки.
Помощь сообщества:
Ресурсы компании «Базальт СПО»:
Форум и списки рассылки читают опытные пользователи, профессиональные системные администраторы и разработчики «Базальт СПО». Сообщество пользователей и специалистов окажет содействие в поиске ответа на ваш вопрос или посоветует выход из сложной ситуации. При обращении к данному виду помощи у вас нет гарантии на полноту и своевременность ответа, но мы стараемся не оставлять без ответа вопросы, задаваемые в списках.