Product SiteDocumentation Site

51.6. Управление хранилищами

API-интерфейс libvirt обеспечивает удобную абстракцию для размещения образов ВМ и файловых систем, которая носит название storage pools (пул хранилищ). Пул хранилищ — это локальный каталог, локальное устройство хранения данных (физический диск, логический том или хранилище на основе хост-адаптера шины SCSI [SCSI HBA]), файловая система NFS (network file system), либо сетевое хранилище блочного уровня, управляемое посредством libvirt и позволяющее создать и хранить один или более образов ВМ.
По умолчанию команды на базе libvirt используют в качестве исходного пула хранилищ для каталога файловой системы каталог /var/lib/libvirt/images на хосте виртуализации.
Образ диска — это снимок данных диска ВМ, сохраненный в том или ином формате. libvirt понимает несколько форматов образов. Так же возможна работа с образами CD/DVD дисков. Каждый образ хранится в том или ином хранилище.
Типы хранилищ, с которыми работает libvirt:
  • dir — каталог в файловой системе;
  • disk — физический диск;
  • fs — отформатированное блочное устройство;
  • gluster — файловая система Gluster;
  • isci — хранилище iSCSI;
  • logical — группа томов LVM;
  • mpath — регистратор многопутевых устройств;
  • netfs — экспорт каталога из сети;
  • rbd — блочное устройство RADOS/Ceph;
  • scsi — хост-адаптер SCSI;
  • sheepdog — файловая система Sheepdog;
  • zfs — пул ZFS.

51.6.1. Управление хранилищами в командной строке

Таблица 51.1. Утилита командной строки virsh. Команды управления хранилищами

Команда
Описание
pool-define
Определить неактивный постоянный пул носителей на основе файла XML
pool-create
Создать пул из файла XML
pool-define-as
Определить пул на основе набора аргументов
pool-create-as
Создать пул на основе набора аргументов
pool-dumpxml
Вывести файл конфигурации XML для заданного пула
pool-list
Вывести список пулов
pool-build
Собрать пул
pool-start
Запустить ранее определённый неактивный пул
pool-autostart
Автозапуск пула
pool-destroy
Разрушить (остановить) пул
pool-delete
Удалить пул
pool-edit
Редактировать XML-конфигурацию пула носителей
pool-info
Просмотр информации о пуле носителей
pool-refresh
Обновить пул
pool-undefine
Удалить определение неактивного пула
Команда virsh pool-define-as создаст файл конфигурации для постоянного пула хранения. Позже этот пул можно запустить командой virsh pool-start, настроить его на автоматический запуск при загрузке хоста, остановить командой virsh pool-destroy.
Команда virsh pool-create-as создаст временный пул хранения (файл конфигурации не будет создан), который будет сразу запущен. Этот пул хранения будет удалён командой virsh pool-destory. Временный пул хранения нельзя запустить автоматически при загрузке. Преобразовать существующий временный пул в постоянный, можно создав файл XML-описания:
virsh pool-dumpxml имя_пула > имя_пула.xml && virsh pool-define имя_пула.xml
Пример создания пула хранения на основе NFS (netfs):
# virsh pool-create-as NFS-POOL netfs \
--source-host 192.168.0.105 \
--source-path /export/storage \
--target /var/lib/libvirt/images/NFS-POOL
Пул NFS-POOL создан
Первый аргумент (NFS-POOL) идентифицирует имя нового пула, второй аргумент идентифицирует тип создаваемого пула. Аргумент опции --source-host идентифицирует хост, который экспортирует каталог пула хранилищ посредством NFS. Аргумент опции --source-path определяет имя экспортируемого каталога на этом хосте. Аргумент опции --target идентифицирует локальную точку монтирования, которая будет использоваться для обращения к пулу хранилищ (этот каталог должен существовать).

Примечание

Для возможности монтирования NFS хранилища должен быть запущен nfs-client:
# systemctl enable --now nfs-client.target
После создания нового пула он будет указан в выводе команды virsh pool-list:
# virsh pool-list --all --details
 Имя        Состояние   Автозапуск   Постоянный   Размер      Распределение   Доступно
-----------------------------------------------------------------------------------------
 default    работает    yes          yes          69,12 GiB   485,35 MiB      68,65 GiB
 NFS-POOL   работает    no           no           29,40 GiB   7,26 GiB        22,14 GiB
В выводе команды видно, что опция Автозапуск (Autostart) для пула хранилищ NFS-POOL имеет значение no (нет), т. е. после перезапуска системы этот пул не будет автоматически доступен для использования, и что опция Постоянный (Persistent) также имеет значение no, т. е. после перезапуска системы этот пул вообще не будет определен. Пул хранилищ является постоянным только в том случае, если он сопровождается XML-описанием пула хранилищ, которое находится в каталоге /etc/libvirt/storage. XML-файл описания пула имеет такое же имя, как у пула хранилищ, с которым он ассоциирован.
Чтобы создать файл XML-описания для сформированного в ручном режиме пула, следует воспользоваться командой virsh pool-dumpxml, указав в качестве ее заключительного аргумента имя пула, для которого нужно получить XML-описание. Эта команда осуществляет запись в стандартное устройство вывода, поэтому необходимо перенаправить ее выходную информацию в соответствующий файл.
Следующая команда создаст файл XML-описания для созданного ранее пула NFS-POOL и определит постоянный пул на основе этого файла:
# virsh pool-dumpxml NFS-POOL > NFS-POOL.xml && virsh pool-define NFS-POOL.xml
Пул NFS-POOL определён на основе NFS-POOL.xml
Чтобы задать для пула хранилищ опцию Автозапуск (Autostart), можно воспользоваться командой virsh pool-autostart:
# virsh pool-autostart NFS-POOL
Добавлена метка автоматического запуска пула NFS-POOL
Маркировка пула хранилищ как автозапускаемого говорит о том, что этот пул хранилищ будет доступен после любого перезапуска хоста виртуализации (каталог /etc/libvirt/storage/autostart будет содержать символьную ссылку на XML-описание этого пула хранилищ).
Пример создания постоянного локального пула:
# virsh pool-define-as boot --type dir --target /var/lib/libvirt/boot
Пул boot определён

# virsh pool-list --all
 Имя        Состояние    Автозапуск
-------------------------------------
 boot       не активен   no
 default    активен      yes
 NFS-POOL   активен      yes

# virsh pool-build boot
Пул boot собран

# virsh pool-start boot
Пул boot запущен

# virsh pool-autostart boot
Добавлена метка автоматического запуска пула boot

# virsh pool-list --all
 Имя        Состояние    Автозапуск
-------------------------------------
 boot       активен     yes
 default    активен     yes
 NFS-POOL   активен     yes
Пример создания пула хранения на основе iSCSI:
# virsh pool-create-as --name iscsi_virtimages --type iscsi \
     --source-host 192.168.0.146 \
     --source-dev iqn.2021-05.alt.test:iscsi.target1 \
     --target /dev/disk/by-path
Пул iscsi_virtimages создан
Аргумент опции --source-host определяет имя хоста соответствующего сервера iSCSI, который экспортирует данный iSCSI LUN. Аргумент опции --source-dev определяет название iSCSI LUN. Аргумент опции --target идентифицирует локальную точку монтирования, которая будет использоваться для обращения к пулу хранилищ.

Примечание

Для возможности работы с устройством, подключенном по интерфейсу iSCSI должна быть запущена служба iscsid (должен быть установлен пакет open-iscsi):
# systemctl enable --now iscsid