Управление хранилищем данных виртуальных машин#
ВМ, как и физическая машина, требует места для хранения данных, программ и системных файлов. У администратора ВМ есть возможность назначить ВМ физическое или сетевое хранилище в качестве места хранения данных. Способ предоставления хранилища можно изменять независимо от физического оборудования.
Компоненты хранилища виртуальной машины#
Хранилище ВМ включает в себя следующие компоненты:
пулы хранения;
тома хранилищ.
Пулы хранения#
Пул хранения — это файл, каталог или устройство хранения, управляемое libvirt, для обеспечения ВМ хранилищем. Пулы хранения можно разделить на тома, которые хранят образы ВМ или прикреплены к ВМ в качестве дополнительного хранилища.
Несколько ВМ могут совместно использовать один и тот же пул хранения, что позволяет лучше использовать ресурсы хранилища.
Типы пулов хранения#
Пулы хранения могут быть:
Постоянными. Постоянный пул хранения сохраняется после перезагрузки системы хоста. Для создания используется команда
virsh pool-define.Временными. Временный пул хранения существует только до тех пор, пока хост не перезагрузится. Для создания используется команда
virsh pool-create.
Пулы хранения могут быть как локальными, так и сетевыми (общими):
Локальные пулы хранения подключаются непосредственно к хост-серверу. Они включают в себя локальные каталоги, непосредственно подключенные диски, физические разделы и группы томов Logical Volume Management (LVM) на локальных устройствах.
Примечание
Локальные пулы хранения полезны для разработки, тестирования и небольших развертываний, которые не требуют миграции или имеют большое количество ВМ.
Сетевые пулы хранения включают в себя устройства хранения данных, совместно используемые по сети с применением стандартных протоколов.
Поддерживаемые и неподдерживаемые типы пулов хранения#
SberLinux OS поддерживает следующие типы пулов хранения:
на основе каталогов;
на основе дисков;
на основе разделов;
на основе iSCSI;
на основе LVM;
на основе NFS;
на основе SCSI с устройствами vHBA;
на основе Multipath;
на основе RBD.
SberLinux OS не поддерживает типы пулов хранения:
на основе Sheepdog;
на основе Vstorage;
на основе ZFS;
iSCSI-direct;
GlusterFS.
Тома хранилищ#
Пулы хранения делятся на тома хранилищ. Тома хранилищ — это абстракции физических разделов, логических томов LVM, образов дисков на основе файлов и других типов хранилищ, обрабатываемых libvirt. Тома хранилищ данных предоставляются ВМ в качестве локальных устройств хранения данных, таких как диски, независимо от базового оборудования.
На хосте том хранилища обозначается именем и идентификатором пула хранения, из которого он получен. В командной строке virsh обозначение выглядит как --pool <storage-pool> <volume-name>.
Информацию о томе можно просмотреть с помощью команды:
virsh vol-info --pool <storage-pool> <volume-name>
Пример вывода команды:
Name: <volume-name>
Type: block
Capacity: 20.00 GB
Allocation: 20.00 GB
Управление хранилищем#
Используя удаленный протокол libvirt, можно управлять всеми аспектами хранилища ВМ, в том числе на удаленном хосте.
Для запроса списка томов в пуле хранения или для получения информации о емкости, распределении и доступном хранилище в этом пуле можно использовать API libvirt. Операции создания, клонирования, изменения размера и удаления томов хранилища с помощью API libvirt можно выполнять, если пул хранения это поддерживает. Кроме того, можно использовать API libvirt для загрузки данных в тома хранилища, выгрузки данных из томов хранилища или удаления данных из томов.
Варианты управления хранилищем#
Ниже приведены доступные варианты управления хранилищем на примере NFS-сервера, который подключен с помощью mount -t nfs nfs.example.com:<path-to-share> <path-to-data>, где <path-to-share> – путь к общему хранилищу, а <path-to-data> - путь к точке монтирования.
Варианты управления:
Определить пул хранения NFS на хосте виртуализации, чтобы описать экспортируемый путь к серверу и целевой путь к клиенту. Хранилище может быть смонтировано либо автоматически при запуске
libvirt, либо, по мере необходимости, во время работыlibvirt.Добавить пул хранения и том хранилища в ВМ по имени. Не нужно добавлять целевой путь к тому. Поэтому, даже если целевой путь изменится, это не повлияет на ВМ.
Настроить пулы хранения для автоматического запуска. При этом
libvirtавтоматически монтирует общий диск NFS в каталоге, который указывается при запускеlibvirt.libvirtмонтирует общий доступ в указанном каталоге, аналогично командеmount nfs.example.com:<path-to-share> <path-to-data>.Запросить пути к томам хранилища с помощью API
libvirt. Эти тома хранилища по сути являются файлами, хранящимися на общем диске NFS. Можно скопировать эти пути в раздел XML-файла конфигурации ВМ, который описывает исходное хранилище для блочных устройств ВМ.В случае NFS: можно использовать приложение, которое использует API
libvirt, для создания и удаления томов хранилища в пуле хранения (файлы в общей NFS) до предела размера пула (емкости хранилища на общем ресурсе).Примечание
Не все типы пулов хранения поддерживают создание и удаление томов.
Может остановить пул хранения, когда он больше не нужен. Остановка пула хранения (
pool-destroy) отменит операцию запуска. В данном случае произойдет размонтирование общего ресурса NFS. Данные, хранящиеся на общем ресурсе, не модифицируются при операции уничтожения.
Управление пулами хранения виртуальных машин с помощью CLI#
С помощью CLI можно:
просматривать информацию о пуле хранения;
создавать пулы хранения:
на основе каталогов;
на основе дисков;
на основе файловой системы;
на основе iSCSI;
на основе LVM;
на основе NFS;
на основе SCSI с устройствами vHBA;
удалять пулы хранения.
Просмотр информации о пуле хранения с помощью CLI#
С помощью CLI можно просмотреть список всех пулов хранения с выводом информации в сокращенном или полном виде, а также отфильтровать списки пулов.
Для просмотра информации о пуле хранения используйте команду virsh pool-list:
virsh pool-list --all --details
Пример вывода команды:
Name State Autostart Persistent Capacity Allocation Available
default running yes yes 48.97 GiB 23.93 GiB 25.03 GiB
Downloads running yes yes 175.62 GiB 62.02 GiB 113.60 GiB
<OS>-Storage-Pool running yes yes 214.62 GiB 93.02 GiB 168.60 GiB
Дополнительную информацию можно получить, выполнив команду virsh pool-list --help.
Создание пулов хранения на основе каталогов с помощью CLI#
Данный тип пула основан на каталоге в существующей смонтированной файловой системе. Он полезен, например, когда нужно использовать оставшееся пространство в файловой системе для других целей. Для создания пулов хранения на основе каталогов используется утилита virsh.
Предварительные условия#
Убедитесь, что гипервизор поддерживает пулы хранения на основе каталогов:
virsh pool-capabilities | grep "'dir' supported='yes'"
Если команда отображает какие-либо выходные данные, то пулы на основе каталогов поддерживаются.
Сценарий#
Создайте пул хранения с помощью команды:
virsh pool-define-as <directory-name-pool> dir --target "/<directory-name>"Команда
virsh pool-define-asопределит и создаст пул хранения на основе каталога. В данном примере создается пул хранения с именем<directory-name-pool>, который использует каталог/<directory-name>.Пример вывода команды:
Pool <directory-name-pool> definedЕсли уже существует XML-конфигурация пула хранения, который нужно создать, можно определить пул на основе XML. Подробнее в разделе «Параметры пула хранения на основе каталогов».
Создайте целевой путь к пулу хранения:
virsh pool-build <directory-name-pool>Команда
virsh pool-buildсоздает целевой путь к пулу хранения для предварительно отформатированного пула хранения файловой системы, инициализирует исходное устройство хранения и определяет формат данных.Пример вывода команды:
Pool <directory-name-pool> builtСодержимое каталога, который использует
<directory-name-pool>, можно проверить с помощью команды:ls -la /<directory-name>Пример вывода команды:
total 8 drwx------. 2 root root 4096 May 31 19:38 . dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..Убедитесь, что пул был создан, с помощью команды
virsh pool-list:virsh pool-list --allПример вывода команды:
Name State Autostart ------------------------------------------- default active yes <directory-name-pool> inactive noСмонтируйте и запустите пул хранения с помощью команды
virsh pool-start:virsh pool-start <directory-name-pool>Пример вывода команды:
Pool <directory-name-pool> startedПримечание
Команда
virsh pool-startнеобходима только для постоянных пулов хранения. Временные пулы автоматически запускаются при создании.Необязательно: включите автозапуск пула хранения с помощью команды
virsh pool-autostart:virsh pool-autostart <directory-name-pool>Пример вывода команды:
Pool <directory-name-pool> marked as autostartedПримечание
По умолчанию пул хранения, определенный с помощью команды
virsh, не настроен на автоматический запуск при каждом старте служб виртуализации.
Проверка#
Чтобы убедиться, что пул хранения находится в состоянии running, используйте команду virsh pool-info:
virsh pool-info <directory-name-pool>
Пример вывода команды:
Name: <directory-name-pool>
UUID: c7466869-e82a-a66c-2187-dc9d6f0877d0
State: running
Persistent: yes
Autostart: yes
Capacity: 458.39 GB
Allocation: 197.91 MB
Available: 458.20 GB
В выводе команды проверьте, соответствуют ли указанные размеры ожидаемым и правильно ли настроен автозапуск.
Создание пулов хранения на основе дисков с помощью CLI#
Данный тип пула хранения полезен, когда нужно, чтобы весь раздел диска был выделен в качестве хранилища ВМ. Для создания дисковых пулов хранения используется утилита virsh.
Предварительные условия#
Перед созданием пула хранения:
убедитесь, что гипервизор поддерживает пулы дисковых хранилищ:
virsh pool-capabilities | grep "'disk' supported='yes'"Если команда отображает какой-либо вывод, дисковые пулы поддерживаются.
подготовьте устройство, на котором будет размещен пул хранения.
Для этой цели предпочтительнее использовать разделы (например,
/dev/sdb1) или тома LVM. Если ВМ предоставляется доступ к записи на весь диск или блочное устройство (например,/dev/sdb), ВМ, скорее всего, разделит его или создаст на нем свои собственные группы LVM. Это может привести к системным ошибкам на хосте.Если требуется использовать целое блочное устройство для пула хранения, следует защитить все важные разделы на устройстве от функции
os-proberвGRUB. Для этого отредактируйте файл/etc/default/grubи примените одну из следующих конфигураций:Отключите
os-prober:GRUB_DISABLE_OS_PROBER=trueОграничьте определенные разделы от обнаружения
os-prober, например:GRUB_OS_PROBER_SKIP_LIST="5ef6313a-257c-4d43@/dev/sdb1"
Примечание
os-prober— функция обнаружения операционных систем в загрузочных разделах диска.cделайте резервные копии всех важных данных на выбранном запоминающем устройстве перед созданием пулов хранения. В зависимости от используемой версии
libvirt, выделение диска пулу хранения может переформатировать и стереть все данные, хранящиеся на дисковом устройстве.
Сценарий#
Определите и создайте пул хранения с помощью команды
virsh pool-define-as:virsh pool-define-as <disk-name-pool> disk --source-format=gpt --source-dev=/dev/sdb --target /devКоманда создает пул хранения с именем
<disk-name-pool>, который использует устройство/dev/sdbи подключен к каталогу/dev.Пример вывода команды:
Pool <disk-name-pool> definedЕсли XML-конфигурация пула хранения, который нужно создать, уже существует, можно определить пул на основе XML. Подробнее в разделе «Параметры пула хранения на основе дисков».
Создайте путь к целевому пулу хранения с помощью команды
virsh pool-build:virsh pool-build <disk-name-pool>Команда создает целевой путь для предварительно отформатированного пула хранения файловой системы, инициализирует исходное устройство хранения и определяет формат данных.
Пример вывода команды:
Pool <disk-name-pool> builtПримечание
Построение целевого пути необходимо только для логических пулов хранения и пулов, основанных на дисках и файловых системах. Если
libvirtобнаружит, что формат данных исходного устройства хранения отличается от выбранного типа пула хранения и опцияoverwriteне указана, то сборка завершится сбоем.Убедитесь, что пул был создан, с помощью команды
virsh pool-list:virsh pool-list --allПример вывода команды:
Name State Autostart ----------------------------------------- default active yes <disk-name-pool> inactive noЗапустите пул хранения с помощью команды
virsh pool-start:virsh pool-start <disk-name-pool>Пример вывода команды:
Pool <disk-name-pool> startedПримечание
Команда
virsh pool-startнеобходима только для постоянных пулов хранения. Временные пулы хранения автоматически запускаются при создании.Необязательно: включите автозапуск с помощью команды
virsh pool-autostart:virsh pool-autostart <disk-name-pool>Пример вывода команды:
Pool <disk-name-pool> marked as autostarted
Проверка#
Чтобы убедиться, что пул хранения находится в состоянии running, используйте команду virsh pool-info:
virsh pool-info <disk-name-pool>
Пример вывода команды:
Name: <disk-name-pool>
UUID: c7466869-e82a-a66c-2187-dc9d6f0877d0
State: running
Persistent: yes
Autostart: yes
Capacity: 458.39 GB
Allocation: 197.91 MB
Available: 458.20 GB
В выводе команды проверьте, соответствуют ли размеры пула хранения ожидаемым и правильно ли настроен автозапуск.
Создание пулов хранения на основе файловой системы с помощью CLI#
Пул хранения на основе файловой системы требуется в случае, когда нужно создать его в файловой системе, которая не смонтирована.
Данный пул хранения основан на заданной точке монтирования файловой системы. Для создания пулов хранения на основе файловой системы используется утилита virsh.
Предварительные условия#
Перед созданием пула хранения:
убедитесь, что гипервизор поддерживает пулы хранения на основе файловой системы:
virsh pool-capabilities | grep "'fs' supported='yes'"Если команда отображает какие-либо выходные данные, пулы на основе файловой системы поддерживаются.
подготовьте устройство, на котором будет размещен пул хранения, по аналогии с предварительными условиями в разделе «Создание пулов хранения на основе дисков с помощью CLI».
Сценарий#
Создайте пул хранения с помощью команды
virsh pool-define-as:virsh pool-define-as <fs-name-pool> fs --source-dev /dev/sdc1 --target /<directory-name>Команда определяет и создает пул хранения с именем
<fs-name-pool>, который использует раздел/dev/sdc1и будет смонтирован в каталоге/<directory-name>.Пример вывода команды:
Pool <fs-name-pool> definedЕсли XML-конфигурация пула хранения, который нужно создать, уже существует, можно определить пул на основе XML. Подробнее в разделе «Параметры пула хранения на основе файловой системы».
Определите целевой путь пула хранения с помощью команды
virsh pool-build:virsh pool-build <fs-name-pool>Команда создает путь к целевому пулу хранения для предварительно отформатированного пула хранения файловой системы, инициализирует исходное устройство хранения и определяет формат данных.
Пример вывода команды:
Pool <fs-name-pool> builtСодержимое каталога, который использует
<fs-name-pool>, можно проверить с помощью команды:ls -la /<directory-name>Пример вывода команды:
total 8 drwx------. 2 root root 4096 May 31 19:38 . dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..Убедитесь, что пул был создан, с помощью команды
virsh pool-list:virsh pool-list --allПример вывода команды:
Name State Autostart ----------------------------------------- default active yes <fs-name-pool> inactive noЗапустите пул хранения с помощью команды
virsh pool-start:virsh pool-start <fs-name-pool>Пример вывода команды:
Pool <fs-name-pool> startedПримечание
Команда
virsh pool-startнеобходима только для запуска постоянных пулов хранения. Временные пулы хранения автоматически запускаются при создании.Необязательно: включите автозапуск с помощью команды
virsh pool-autostart:virsh pool-autostart <fs-name-pool>Пример вывода команды:
Pool <fs-name-pool> marked as autostarted
Проверка#
Чтобы убедиться, что хранения находится в состоянии
running, используйте командуvirsh pool-info:virsh pool-info <fs-name-pool>Пример вывода команды:
Name: <fs-name-pool> UUID: c7466869-e82a-a66c-2187-dc9d6f0877d0 State: running Persistent: yes Autostart: yes Capacity: 458.39 GB Allocation: 197.91 MB Available: 458.20 GBВ выводе команды проверьте, соответствуют ли размеры пула хранения ожидаемым и правильно ли настроен автозапуск.
Убедитесь, что в целевом расположении файловой системы присутствует каталог
lost+found, указывающий на то, что устройство смонтировано, с помощью команд:mount | grep /<directory-name>Пример вывода команды:
/dev/sdc1 on /<directory-name> type ext4 (rw)И:
ls -la /<directory-name>Пример вывода команды:
total 24 drwxr-xr-x. 3 root root 4096 May 31 19:47 . dr-xr-xr-x. 25 root root 4096 May 31 19:38 .. drwx------. 2 root root 16384 May 31 14:18 lost+found
Создание пулов хранения на основе iSCSI с помощью CLI#
Internet Small Computer Systems Interface (iSCSI) - это стандарт сетевого хранения на основе IP для объединения хранилищ данных. Если требуется пул хранения на сервере iSCSI, нужно использовать пул хранения на основе iSCSI, который можно создать с помощью утилиты virsh.
Предварительные условия#
Убедитесь, что гипервизор поддерживает пулы хранения на основе iSCSI:
virsh pool-capabilities | grep "'iscsi' supported='yes'"
Если команда отображает какой-либо вывод, пулы на основе iSCSI поддерживаются.
Сценарий#
Создайте пул хранения на основе iSCSI с помощью команды
virsh pool-define-as:virsh pool-define-as --name <iscsi-name-pool> --type iscsi --source-host <server-name.example.com> --source-dev iqn.<date>.<com.example.server-name>:iscsi<guest-os> --target /dev/disk/<path>Команда определяет и создает пул хранения с именем
<iscsi-name-pool>, который использует IQNiqn.<date>.<com.example.server-name>:iscsi<guest-os>на<server-name.example.com>и монтируется на/dev/disk/<path>.Пример вывода команды:
Pool <iscsi-name-pool> definedЕсли XML-конфигурация пула хранения, который нужно создать, уже существует, можно определить пул на основе XML. Подробнее в разделе «Параметры пула хранения на основе iSCSI».
Убедитесь, что пул был создан, с помощью команды
virsh pool-list:virsh pool-list --allПример вывода команды:
Name State Autostart ----------------------------------------- default active yes <iscsi-name-pool> inactive noЗапустите пул хранения с помощью команды
virsh pool-start:virsh pool-start <iscsi-name-pool>Пример вывода команды:
Pool <iscsi-name-pool> startedПримечание
Команда
virsh pool-startнеобходима только для запуска постоянных пулов хранения. Временные пулы хранения автоматически запускаются при создании.Необязательно: включите автоматический запуск пула хранения с помощью команды
virsh pool-autostart:virsh pool-autostart <iscsi-name-pool>Пример вывода команды:
Pool <iscsi-name-pool> marked as autostarted
Проверка#
Чтобы убедиться, что пул хранения находится в состоянии running, используйте команду virsh pool-info:
virsh pool-info <iscsi-name-pool>
Пример вывода команды:
Name: <iscsi-name-pool>
UUID: c7466869-e82a-a66c-2187-dc9d6f0877d0
State: running
Persistent: yes
Autostart: yes
Capacity: 458.39 GB
Allocation: 197.91 MB
Available: 458.20 GB
В выводе команды проверьте, соответствуют ли указанные размеры ожидаемым и правильно ли настроен автоматический запуск.
Создание пулов хранения на основе LVM с помощью CLI#
Для создания пулов хранения на основе LVM используется утилита virsh.
Прежде чем создать пул хранения на основе LVM, обратите внимание, что:
пулы хранения на основе LVM не обеспечивают полной гибкости LVM;
libvirtподдерживает «тонкие» логические тома, но не предоставляет функций «тонких» пулов хранения;пулы хранения на основе LVM - это группы томов. Можно создавать группы томов с помощью утилиты
virsh, но при этом в созданной группе томов может быть только одно устройство;пулы хранения на основе LVM требуют полного раздела диска. Если активировать новый раздел или устройство с помощью команд
virsh, раздел будет отформатирован, и все данные будут удалены. Если используется существующая группа томов хоста, ничего удалено не будет.
Предварительные условия#
Убедитесь, что гипервизор поддерживает пулы хранения на основе LVM:
virsh pool-capabilities | grep "'logical' supported='yes'"
Если команда отображает какие-либо выходные данные, то пулы хранения на основе LVM поддерживаются.
Сценарий#
Создайте пул хранения с помощью команды
virsh pool-define-as:virsh pool-define-as <lvm-name-pool> logical --source-name <lvm-group_volumes> --target /dev/<lvm-group_volumes>Команда создает пул хранения с именем
<lvm-name-pool>, который использует группу томов<lvm-group_volumes>и будет смонтирован в каталоге/dev/<lvm-group_volumes>.Пример вывода команды:
Pool <lvm-name-pool> definedЕсли существует XML-конфигурация пула хранения, который нужно создать, можно определить пул на основе XML. Подробнее в разделе «Параметры пула хранения на основе LVM».
Убедитесь, что пул был создан, с помощью команды
virsh pool-list:virsh pool-list --allName State Autostart ------------------------------------------- default active yes <lvm-name-pool> inactive noЗапустите пул хранения с помощью команды
virsh pool-start:virsh pool-start <lvm-name-pool>Пример вывода команды:
Pool <lvm-name-pool> startedПримечание
Команда
virsh pool-startнеобходима только для запуска постоянных пулов хранения. Временные пулы хранения автоматически запускаются при создании.Необязательно: включите автоматический запуск с помощью команды
virsh pool-autostart:virsh pool-autostart <lvm-name-pool>Пример вывода команды:
Pool <lvm-name-pool> marked as autostarted
Проверка#
Чтобы убедиться, что пул хранения находится в состоянии running, используйте команду virsh pool-info:
virsh pool-info <lvm-name-pool>
Пример вывода команды:
Name: <lvm-name-pool>
UUID: c7466869-e82a-a66c-2187-dc9d6f0877d0
State: running
Persistent: yes
Autostart: yes
Capacity: 458.39 GB
Allocation: 197.91 MB
Available: 458.20 GB
В выводе команды проверьте, соответствуют ли указанные размеры ожидаемым и правильно ли настроен автозапуск.
Создание пулов хранения на основе NFS с помощью CLI#
Пул хранения на основе NFS можно создать с помощью утилиты virsh.
Предварительные условия#
Убедитесь, что гипервизор поддерживает пулы хранения на основе NFS, с помощью команды:
virsh pool-capabilities | grep "<value>nfs</value>"
Если команда отображает какие-либо выходные данные, пулы на основе NFS поддерживаются.
Сценарий#
Создайте пул хранения с помощью команды
virsh pool-define-as:virsh pool-define-as --name <nfs-name-pool> --type netfs --source-host='111.222.111.222' --source-path='/home/<nfs_mount-dir-name>' --source-format='nfs' --target='/var/lib/libvirt/images/<nfs-pool-dir-name>'Команда создаст пул хранения с именем
<nfs-name-pool>, который использует сервер NFS с IP hh.hh.hh.hh, смонтированный в каталоге сервера/home/<nfs_mount-dir-name>, используя целевой каталог/var/lib/libvirt/images/<nfs-pool-dir-name>.Если XML-конфигурация пула хранения, который нужно создать, уже существует, можно определить пул на основе XML. Подробнее в разделе «Параметры пула хранения на основе NFS».
Убедитесь, что пул был создан, с помощью команды
virsh pool-list:virsh pool-list --allПример вывода команды:
Name State Autostart ----------------------------------------- default active yes <nfs-name-pool> inactive noЗапустите пул хранения с помощью команды
virsh pool-start:virsh pool-start <nfs-name-pool>Пример вывода ком анды:
Pool <nfs-name-pool> startedПримечание
Команда
virsh pool-startнеобходима только для запуска постоянных пулов хранения. Временные пулы хранения автоматически запускаются при создании.Необязательно: включите автоматический запуск с помощью команды
virsh pool-autostart:virsh pool-autostart <nfs-name-pool>Пример вывода команды:
Pool <nfs-name-pool> marked as autostarted
Проверка#
Чтобы убедиться, что пул хранения находится в состоянии running, используйте команду virsh pool-info:
virsh pool-info <nfs-name-pool>
Пример вывода команды:
Name: <nfs-name-pool>
UUID: c7466869-e82a-a66c-2187-dc9d6f0877d0
State: running
Persistent: yes
Autostart: yes
Capacity: 458.39 GB
Allocation: 197.91 MB
Available: 458.20 GB
В выводе команды проверьте, соответствуют ли указанные размеры ожидаемым и правильно ли настроен автоматический запуск.
Создание пулов хранения на основе SCSI с устройствами vHBA с помощью CLI#
Для создания пула хранения на устройстве Small Computer System Interface (SCSI), хост должен иметь возможность подключаться к устройству SCSI с помощью виртуального хост-адаптера шины (vHBA). Пул хранения на основе SCSI можно создать с помощью утилиты virsh.
Предварительные условия#
Перед созданием пула хранения на основе SCSI с устройствами vHBA:
убедитесь, что гипервизор поддерживает пулы хранения на основе SCSI:
virsh pool-capabilities | grep "'scsi' supported='yes'"Если команда отображает какой-либо вывод, поддерживаются пулы на основе SCSI.
Создайте vHBA. Информацию о создании vHBA смотрите в разделе «Создание vHBA».
Сценарий#
Создайте пул хранения с помощью команды
virsh pool-define-as:virsh pool-define-as <vhba-name-pool> scsi --adapter-parent <scsi-host-name> --adapter-wwnn <node-number> --adapter-wwpn <port-number> --target /dev/disk/Команда создает пул хранения с именем
<vhba-name-pool>, который использует vHBA, идентифицированный родительским адаптером<scsi-host-name>, широковещательный номер порта<port-number>и широковещательный номер узла<node-number>. Пул хранения смонтирован в каталоге/dev/disk/.Пример вывода команды:
Pool <vhba-name-pool> definedЕсли XML-конфигурация пула хранения, который нужно создать, уже существует, можно определить пул на основе XML. Подробнее в разделе «Параметры пула хранения на основе SCSI с устройствами vHBA».
Убедитесь, что пул был создан, с помощью команды
virsh pool-list:virsh pool-list --allПример вывода команды:
Name State Autostart ----------------------------------------- default active yes <vhba-name-pool> inactive noЗапустите пул хранения с помощью команды
virsh pool-start:virsh pool-start <vhba-name-pool> Pool <vhba-name-pool> startedПримечание
Команда
virsh pool-startнеобходима только для запуска постоянных пулов хранения. Временные пулы хранения автоматически запускаются при создании.Необязательно: включите автоматический запуск с помощью команды
virsh pool-autostart:virsh pool-autostart <vhba-name-pool>Пример вывода команды:
Pool <vhba-name-pool> marked as autostarted
Проверка#
Чтобы убедиться, что пул хранения находится в состоянии running, используйте команду virsh pool-info:
virsh pool-info <vhba-name-pool>
Пример вывода команды:
Name: <vhba-name-pool>
UUID: c7466869-e82a-a66c-2187-dc9d6f0877d0
State: running
Persistent: yes
Autostart: yes
Capacity: 458.39 GB
Allocation: 197.91 MB
Available: 458.20 GB
В выводе команды проверьте, соответствуют ли указанные размеры ожидаемым и правильно ли настроен автоматический запуск.
Удаление пулов хранения с помощью CLI#
Чтобы удалить пул хранения из хоста, нужно остановить пул и удалить его XML-определение.
Сценарий#
Просмотрите определенные пулы хранения с помощью команды
virsh pool-list.virsh pool-list --allПример вывода команды:
Name State Autostart ------------------------------------------- <pool-1-name> active yes <pool-2-name> active yes <pool-3-name> active yesОстановите пул хранения, который нужно удалить, с помощью команды
virsh pool-destroy:virsh pool-destroy <pool-2-name>Пример вывода команды:
Pool <pool-2-name> destroyedНеобязательно: для некоторых типов пулов хранения можно удалить каталог, в котором находится пул хранения, с помощью команды
virsh pool-delete:virsh pool-delete <pool-2-name>Пример вывода команды:
Pool <pool-2-name> deletedВнимание
Обратите внимание, что для этого каталог должен быть пустым.
Удалите определение пула хранения с помощью команды
virsh pool-undefine:virsh pool-undefine <pool-2-name>Пример вывода команды:
Pool <pool-2-name> has been undefined
Проверка#
Убедитесь, что пул хранения был удален:
virsh pool-list --all
Пример вывода команды:
Name State Autostart
-------------------------------------------
<pool-1-name> active yes
<pool-3-name> active yes
Параметры для создания пулов хранения#
Тип пула хранения можно определить в его файле XML-конфигурации. Для того чтобы создать или изменить пул хранения с помощью файла XML-конфигурации, нужно включить в его описание обязательные параметры, приведенные в таблицах ниже для каждого типа пулов хранения.
Параметры пула хранения на основе каталогов#
Для создания пула хранения на основе XML-конфигурации используется команда virsh pool-define:
virsh pool-define ~/<directory-name-pool>.xml
Где <directory-name-pool>.xml – файл XML-конфигурации.
Пример вывода команды:
Pool defined from <directory-name-pool>
Основные параметры XML-конфигурации пула хранения на основе каталогов приведены в таблице:
Описание |
XML-параметр |
|---|---|
Тип пула хранения |
|
Имя пула хранения |
|
Целевой путь, используемый для пула хранения |
|
Пример файла XML-конфигурации пула хранения на основе каталогов:
<pool type='dir'>
<name>directory-name-pool</name>
<target>
<path>/directory-name</path>
</target>
</pool>
Параметры пула хранения на основе дисков#
Для создания пула хранения на основе XML-конфигурации используется команда virsh pool-define:
virsh pool-define ~/<disk-name-pool>.xml
Где <disk-name-pool>.xml – файл XML-конфигурации.
Пример вывода команды:
Pool defined from <disk-name-pool>
Основные параметры XML-конфигурации пула хранения на основе дисков приведены в таблице:
Описание |
XML-параметр |
|---|---|
Тип пула хранения |
|
Имя пула хранения |
|
Путь определяющий устройство хранения. Например, |
|
Путь, используемый для пула хранения |
|
Пример файла XML-конфигурации пула хранения на основе дисков:
<pool type='disk'>
<name>disk-name-pool</name>
<source>
<device path='<source-path>'/>
<format type='gpt'/>
</source>
<target>
<path>/dev</path>
</target>
</pool>
Параметры пула хранения на основе файловой системы#
Для создания пула хранения на основе файловой системы используется команда virsh pool-define:
virsh pool-define ~/<fs-name-pool>.xml
Где <fs-name-pool>.xml – файл XML-конфигурации.
Пример вывода команды:
Pool defined from <fs-name-pool>
Основные параметры XML-конфигурации пула хранения на основе файловой системы приведены в таблице:
Описание |
XML-параметр |
|---|---|
Тип пула хранения |
|
Имя пула хранения |
|
Путь, определяющий раздел. |
|
Тип файловой системы. |
|
Путь, используемый для пула хранения |
|
Пример файла XML-конфигурации пула хранения на основе файловой системы:
<pool type='fs'>
<name>fs-name-pool</name>
<source>
<device path='/dev/sdc1'/>
<format type='auto'/>
</source>
<target>
<path>/directory-name</path>
</target>
</pool>
Параметры пула хранения на основе iSCSI#
Для создания пула хранения на основе iSCSI используется команда virsh pool-define:
virsh pool-define ~/<iscsi-name-pool>.xml
Где <iscsi-name-pool>.xml – файл XML-конфигурации.
Пример вывода команды:
Pool defined from <iscsi-name-pool>
Основные параметры XML-конфигурации пула хранения на основе iSCSI приведены в таблице:
Описание |
XML-параметр |
|---|---|
Тип пула хранения |
|
Имя пула хранения |
|
Имя хоста |
|
iSCSI IQN |
|
Путь, используемый для пула хранения |
|
IQN инициатора iSCSI. Это необходимо только тогда, когда ACL ограничивает LUN конкретным инициатором. Необязательный параметр |
|
Примечание
IQN инициатора iSCSI можно определить с помощью команды virsh find-storage-pool-sources-as.
Пример файла XML-конфигурации пула хранения на основе iSCSI:
<pool type='iscsi'>
<name>iscsi-name-pool</name>
<source>
<host name='server-name.example.com'/>
<device path='iqn.<date>.<com.example.server-name>:iscsi<guest-os>'/>
</source>
<target>
<path>/dev/disk/path</path>
</target>
</pool>
Параметры пула хранения на основе LVM#
Для создания пула хранения на основе LVM используется команда virsh pool-define:
virsh pool-define ~/<lvm-name-pool>.xml
Где <lvm-name-pool>.xml – файл XML-конфигурации.
Пример вывода команды:
Pool defined from <lvm-name-pool>
Основные параметры XML-конфигурации пула хранения на основе LVM приведены в таблице:
Описание |
XML-параметр |
|---|---|
Тип пула хранения |
|
Имя пула хранения |
|
Путь к устройству для пула хранения |
|
Название группы томов |
|
Формат виртуальной группы |
|
Целевой путь |
|
Примечание
Если группа логических томов состоит из нескольких дисковых разделов, можно указать несколько исходных устройств. Например:
<source>
<device path='/dev/sda1'/>
<device path='/dev/sdb3'/>
<device path='/dev/sdc2'/>
...
</source>
Пример файла XML-конфигурации пула хранения на основе LVM:
<pool type='logical'>
<name>lvm-name-pool</name>
<source>
<device path='/dev/sdc'/>
<name>libvirt_lvm</name>
<format type='lvm2'/>
</source>
<target>
<path>/dev/libvirt_lvm</path>
</target>
</pool>
Параметры пула хранения на основе NFS#
Для создания пула хранения на основе NFS используется команда virsh pool-define:
virsh pool-define ~/<nfs-name-pool>.xml
Где <nfs-name-pool>.xml – файл XML-конфигурации.
Пример вывода команды:
Pool defined from <nfs-name-pool>
Основные параметры XML-конфигурации пула хранения на основе NFS приведены в таблице:
Описание |
XML-параметр |
|---|---|
Тип пула хранения |
|
Имя пула хранения |
|
Имя хоста сетевого сервера, на котором находится точка монтирования. Имя хоста или IP-адрес |
|
Формат пула хранения |
Один из двух вариантов: |
Каталог, используемый на сетевом сервере |
|
Путь, используемый для пула хранения |
|
Пример файла XML-конфигурации пула хранения на основе NFS:
<pool type='netfs'>
<name>nfs-name-pool</name>
<source>
<host name='hh.hh.hh.hh'/>
<format type='nfs'/>
<dir path='/home/<nfs_mount-dir-name>'/>
</source>
<target>
<path>/var/lib/libvirt/images/nfs-pool-dir-name</path>
</target>
</pool>
Параметры пула хранения на основе SCSI с устройствами vHBA#
Для создания пула хранения на основе SCSi, который использует устройство виртуальный хост-адаптер шины (vHBA), используется команда virsh pool-define:
virsh pool-define ~/<vhba-name-pool>.xml
Где <vhba-name-pool>.xml – файл XML-конфигурации.
Пример вывода команды:
Pool defined from <vhba-name-pool>
Основные параметры XML-конфигурации пула хранения на основе SCSI с vHBA приведены в таблице:
Описание |
XML-параметр |
|---|---|
Тип пула хранения |
|
Имя пула хранения |
|
Идентификатор vHBA. Атрибут |
|
Целевой путь используемый для пула хранения |
|
Важно
Если поле <path> имеет значение /dev/, libvirt сгенерирует уникальный короткий путь для пути к устройству тома. Например, /dev/sdc. В противном случае будет использоваться путь к физическому хосту. Например, /dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016044602198-lun-0. Уникальный короткий путь к устройству позволяет использовать один и тот же том в нескольких ВМ несколькими пулами хранения. Если путь физического хоста используется несколькими ВМ, могут возникать предупреждения о дублировании типа устройства.
Примечание
Атрибут parent может быть использован в поле <adapter> для идентификации физического родительского устройства HBA, из которого LUN NPIV могут использоваться различными путями. Это поле, scsi_hostN, комбинируется с атрибутами vports и max_vports для завершения идентификации родительского устройства. Атрибуты parent, parent_wwnn, parent_wwpn или parent_fabric_wwn обеспечивают использование того же HBA после перезагрузки хоста:
если
parentне указан,libvirtиспользует первый адаптерscsi_hostN, который поддерживает NPIV;если указан только
parent, могут возникнуть проблемы, когда в конфигурацию будут добавлены дополнительные хост-адаптеры SCSI;если указан
parent_wwnnилиparent_wwpn, после перезагрузки хоста используется тот же HBA;если используется
parent_fabric_wwn, после перезагрузки хоста выбирается HBA на той же фабрике, независимо от используемогоscsi_hostN.
Примеры файла XML-конфигурации пула хранения на основе SCSI с vHBA:
Пул хранения, который является единственным на HBA:
<pool type='scsi'> <name>vhba-name-pool</name> <source> <adapter type='fc_host' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee047d'/> </source> <target> <path>/dev/disk/path</path> </target> </pool>Пул хранения, являющийся одним из нескольких пулов, которые используют один vHBA и использует атрибут parent для идентификации хост-устройства SCSI:
<pool type='scsi'> <name>vhba-name-pool</name> <source> <adapter type='fc_host' parent='scsi-host-name>' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee047d'/> </source> <target> <path>/dev/disk/path</path> </target> </pool>
Управление томами хранилищ виртуальной машины с помощью CLI#
С помощью CLI возможно:
просматривать информацию о томах хранилищ;
создавать тома хранилищ;
удалять тома хранилищ.
Просмотр информации о томе хранилища с помощью CLI#
C помощью CLI можно просмотреть список томов хранилища в пуле хранения, доступном на хосте, а также подробную информацию о томе хранилища в конкретном пуле хранения.
Для получения списка томов хранилища в определенном пуле хранения используйте команду
virsh vol-list:virsh vol-list --pool <os-storage-pool-name> --detailsГде
<os-storage-pool-name>– название пула хранения.Пример вывода команды:
Name Path Type Capacity Allocation --------------------------------------------------------------------------------------------- .bash_history /home/VirtualMachines/.bash_history file 18.70 KiB 20.00 KiB .bash_logout /home/VirtualMachines/.bash_logout file 18.00 B 4.00 KiB .bash_profile /home/VirtualMachines/.bash_profile file 193.00 B 4.00 KiB .bashrc /home/VirtualMachines/.bashrc file 1.29 KiB 4.00 KiB .git-prompt.sh /home/VirtualMachines/.git-prompt.sh file 15.84 KiB 16.00 KiB .gitconfig /home/VirtualMachines/.gitconfig file 167.00 B 4.00 KiB <OS>_Volume.qcow2 /home/VirtualMachines/<OS>_Volume.qcow2 file 60.00 GiB 13.93 GiBГде
<OS>– используемая ОС.Для получения информации о конкретном томе хранилища в определенном пуле хранения используйте команду
virsh vol-info:vol-info --pool <OS>-Storage-Pool --vol <OS>_Volume.qcow2 Name: <OS>_Volume.qcow2 Type: file Capacity: 60.00 GiB Allocation: 13.93 GiB
Создание и назначение томов хранилища с помощью CLI#
Чтобы прикрепить образ диска к ВМ в качестве виртуального диска, необходимо создать том хранилища и назначить его XML-конфигурацию ВМ.
Предварительные условия#
На хосте должен существовать пул хранения с нераспределенным пространством.
Проверьте список пулов хранения на хосте:
virsh pool-list --details
Пример вывода команды:
Name State Autostart Persistent Capacity Allocation Available
--------------------------------------------------------------------------------------------
<pool-1-name> running yes yes 48.97 GiB 36.34 GiB 12.63 GiB
<pool-2-name> running yes yes 175.92 GiB 121.20 GiB 54.72 GiB
<pool-3-name> running yes yes 175.92 GiB 121.20 GiB 54.72 GiB
Если нет существующего пула хранения, создайте его. Подробнее в разделе «Управление хранилищем».
Сценарий#
Создайте том хранилища с помощью команды
virsh vol-create-as:virsh vol-create-as --pool <pool-name> --name <volume-name> --capacity 20 --format qcow2Команда создает том
<volume-name>типаqcow2и объемом 20 ГБ на основе пула хранения<pool-name>.Важно
Определенные типы пула хранения не поддерживают команду
virsh vol-create-as. Они требуют определенных процессов для создания томов хранения:Для пула на основе iSCSI нужно заранее подготовить LUN iSCSI на сервере iSCSI.
Для пула на основе
multipathнеобходимо использовать командуmultipathdдля подготовки или управления множественными путями (multipath).Для пула на основе vHBA требуется подготовить плату Fibre Channel заранее.
Создайте XML-файл и добавьте в него следующую конфигурацию:
<disk type='volume' device='disk'> <driver name='qemu' type='qcow2'/> <source pool='<pool-name>' volume='<volume-name>'/> <target dev='hdk' bus='ide'/> </disk>XML-файл будет использоваться для добавления тома хранилища в качестве диска в ВМ. В примере выше указан виртуальный диск, использующий том
<volume-name>, созданный на предыдущем шаге, и устанавливает том, который будет настроен как дискhdkна шинеide. Необходимо изменить соответствующие параметры в соответствии с используемым окружением.Важно
При определенных типах пула хранения нужно использовать различные форматы XML для описания диска тома хранилища.
Для пулов, основанных на
multipath:<disk type='block' device='disk'> <driver name='qemu' type='raw'/> <source dev='/dev/mapper/mpatha' /> <target dev='sda' bus='scsi'/> </disk>Для пулов хранения на основе RBD:
<disk type='network' device='disk'> <driver name='qemu' type='raw'/> <source protocol='rbd' name='pool/image'> <host name='mon1.example.org' port='6321'/> </source> <target dev='vdc' bus='virtio'/> </disk>
Назначьте том хранилища в качестве диска ВМ с помощью XML-файла:
virsh attach-device --config <example-vm> ~/<volume-name>.xmlГде
<volume-name>.xml- XML-файл с описанием конфигурации тома, а<example-vm>– ВМ.Убедитесь, что в гостевой ОС ВМ образ диска стал доступен как неформатированный и нераспределенный диск.
Удаление томов хранилища с помощью CLI#
Чтобы удалить том хранилища, нужно остановить пул хранения и удалить его XML-конфигурацию.
Предварительные условия#
ВМ, использующая том хранилища, который нужно удалить, должна быть выключена.
Сценарий#
Выведите информацию о списке томов хранилища в определенном пуле хранения с помощью команды
virsh vol-list:virsh vol-list --pool <pool-name>Пример вывода команды:
Name Path --------------------------------------------------------------- .bash_history /home/VirtualMachines/.bash_history .bash_logout /home/VirtualMachines/.bash_logout .bash_profile /home/VirtualMachines/.bash_profile .bashrc /home/VirtualMachines/.bashrc .git-prompt.sh /home/VirtualMachines/.git-prompt.sh .gitconfig /home/VirtualMachines/.gitconfig <volume-name> /home/VirtualMachines/<volume-name>Необязательно: очистите том хранилища с помощью команды
virsh vol-wipe:virsh vol-wipe --pool <pool-name> <volume-name>Команда очистит том хранилища с именем
<volume-name>, связанный с пулом хранения<pool-name>.Пример вывода команды:
Vol <volume-name> wipedУдалите том хранилища с помощью команды
virsh vol-delete:virsh vol-delete --pool <pool-name> <volume-name>Команда удалит том хранилища с именем
<volume-name>, связанный с пулом хранения<pool-name>.Пример вывода команды:
Vol <volume-name> deleted
Проверка#
Убедитесь, что том хранилища был удален с помощью команды virsh vol-list:
virsh vol-list --pool <pool-name>
Пример вывода команды:
Name Path
---------------------------------------------------------------
.bash_history /home/VirtualMachines/.bash_history
.bash_logout /home/VirtualMachines/.bash_logout
.bash_profile /home/VirtualMachines/.bash_profile
.bashrc /home/VirtualMachines/.bashrc
.git-prompt.sh /home/VirtualMachines/.git-prompt.sh
.gitconfig /home/VirtualMachines/.gitconfig
Управление образами виртуальных дисков с помощью CLI#
Образы виртуальных дисков – это тип виртуальных томов хранилищ. Они предоставляют хранилище для ВМ так же, как жесткие диски обеспечивают хранилище для физических машин.
При создании новой ВМ libvirt автоматически создает новый образ диска, если не указано иное. Но существует возможность создать образ виртуального диска и управлять им отдельно от ВМ.
Создание образа виртуального диска с помощью qemu-img#
Для создания нового образа виртуального диска отдельно от новой ВМ используется утилита qemu-img:
qemu-img create -f qcow <image-name> <size>
Команда создаст образ диска qcow2 с именем <image-name> размером 30 Гбайт.
Пример вывода команды:
Formatting '<image-name>', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=32212254720 lazy_refcounts=off refcount_bits=16
Примечание
Подробнее про утилиту qemu-img см. в разделе «Утилита qemu-img».
Проверка
Выведите информацию о созданном образе виртуального диска с помощью команды qemu-img info:
qemu-img info <image-name>
Пример вывода команды:
image: <image-name>
file format: qcow2
virtual size: 30 GiB (32212254720 bytes)
disk size: 196 KiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: false
refcount bits: 16
corrupt: false
extended l2: false
Проверьте, что у образа требуемый размер и нет никаких повреждений.
Проверка целостности образа виртуального диска#
Прежде чем присоединять образ виртуального диска к ВМ, необходимо убедиться, что он не имеет проблем, таких как повреждение или высокая фрагментация. Для этого используется команда qemu-img check.
Примечание
Команду qemu-img check можно также использовать для восстановления образа виртуального диска.
Предварительные условия#
ВМ, которые используют образ виртуального диска, должны быть отключены.
Сценарий#
Проверьте состояние образа диска с помощью команды
qemu-img check:qemu-img check <test-name.qcow2>Пример вывода команды:
No errors were found on the image. 327434/327680 = 99.92% allocated, 0.00% fragmented, 0.00% compressed clusters Image end offset: 21478375424Если проверка обнаруживает проблемы в образе диска, вывод может выглядеть следующим образом:
167 errors were found on the image. Data may be corrupted, or further writes to the image may corrupt it. 453368 leaked clusters were found on the image. This means waste of disk space, but no harm to data. 259 internal errors have occurred during the check. Image end offset: 21478375424Устраните проблемы с помощью команды
qemu-img checkс опцией-r all:qemu-img check -r all <test-name.qcow2>Пример вывода команды:
[...] 122 errors were found on the image. Data may be corrupted, or further writes to the image may corrupt it. 250 internal errors have occurred during the check. Image end offset: 27071414272Вывод команды указывает на количество проблем, обнаруженных в образе диска после восстановления.
Важно
Команда
qemu-img checkможет решить только некоторые проблемы при восстановлении диска.Внимание
Восстановление образа диска может привести к повреждению данных или другим проблемам. Перед попыткой восстановления сделайте резервную копию образа диска.
Если требуется дальнейшее восстановление образа диска, можно использовать различные инструменты libguestfs в оболочке guestfish.
Изменение размера образа виртуального диска#
Для увеличения образа виртуального диска используется команда qemu-img resize.
Предварительные условия#
Должна быть создана резервная копия образа диска.
Любые ВМ, использующие образ диска, должны быть выключены.
Внимание
Изменение размера образа диска запущенной ВМ может привести к повреждению данных или другим проблемам.
На жестком диске хоста должно быть достаточно свободного места для образа диска.
Необязательно: образ диска не должен иметь повреждений данных или аналогичных проблем. Подробнее в разделе «Проверка целостности образа виртуального диска».
Сценарий#
Определите местоположение файла образа диска для ВМ, размер которого вы хотите изменить:
virsh domblklist <vm-name>Пример вывода команды:
Target Source ---------------------------------------------------------- vda /home/<username>/disk-images/<example-image.qcow2>Где
<example-image.qcow2>– образ виртуального диска ВМ.Необязательно: выполните резервное копирование текущего образа диска:
cp <example-image.qcow2> <example-image-backup.qcow2>Измените размер образа диска с помощью команды
qemu-img resize:qemu-img resize <example-image.qcow2> +10GКоманда увеличит размер диска
<example-image.qcow2>на 10 гигабайт.
Проверка#
Выведите информацию об измененном образе:
qemu-img info <converted-image.qcow2>Где
<converted-image.qcow2>– образ виртуального диска, размер которого был изменен.Пример вывода команды:
image: <converted-image.qcow2> file format: qcow2 virtual size: 30 GiB (32212254720 bytes) disk size: 196 KiB cluster_size: 65536 Format specific information: compat: 1.1 compression type: zlib lazy refcounts: false refcount bits: 16 corrupt: false extended l2: falseВ выводе команды убедитесь, что у виртуального образа диска необходимый размер.
Проверьте измененный размер образа диска на наличие потенциальных ошибок. Подробнее в разделе «Проверка целостности образа виртуального диска».
Примечание
Подробнее про утилиту qemu-img см. в разделе «Утилита qemu-img».
Преобразование форматов виртуальных дисков#
Преобразовать образ виртуального диска в другой формат можно с помощью команды qemu-img convert. Преобразование формата может потребоваться, например, если нужно присоединить образ диска к ВМ, работающей на другом гипервизоре.
Предварительные условия#
ВМ, использующие образ диска, должны быть остановлены.
Сценарий#
Чтобы преобразовать образ виртуального диска формата raw в образ диска формата qcow2 воспользуйтесь следующей командой:
qemu-img convert -f raw <original-image.img> -O qcow2 <converted-image.qcow2>
Где:
<original-image.img>– образ диска форматаraw;<converted-image.qcow2>– образ диска форматаqcow2.
Проверка#
Выведите информацию о преобразованном образе виртуального диска:
qemu-img info <converted-image.qcow2>Пример вывода команды:
image: <converted-image.qcow2> file format: qcow2 virtual size: 30 GiB (32212254720 bytes) disk size: 196 KiB cluster_size: 65536 Format specific information: compat: 1.1 compression type: zlib lazy refcounts: false refcount bits: 16 corrupt: false extended l2: falseВ выводе команды проверьте, что у преобразованного образа диска необходимые формат и размер.
Проверьте образ диска на наличие потенциальных ошибок. Подробнее в разделе «Проверка целостности образа виртуального диска».
Защита пулов хранения iSCSI с помощью секретов libvirt#
Для защиты пула хранения на основе iSCSI существует возможность настроить аутентификацию по имени и паролю пользователя с помощью virsh. Параметры имени и пароля пользователя можно настроить до или после определения пула хранения, но пул должен быть запущен, чтобы настройки вступили в силу.
Примечание
Процедура защиты необходима, если при создании target iSCSI были определены user_ID и пароль.
Предварительные условия#
Должен быть создан пул хранения на основе iSCSI. Подробнее в разделе «Создание пулов хранения на основе iSCSI с помощью CLI».
Сценарий#
Создайте файл секретов
libvirt<secret.xml>с именем пользователя по протоколу аутентификации challenge-handshake (CHAP):<secret ephemeral='no' private='yes'> <description>Passphrase for the iSCSI example.com server</description> <usage type='iscsi'> <target>iscsi-os-secret</target> </usage> </secret>Определите секрет
libvirtс помощью командыvirsh secret-define:virsh secret-define <secret.xml>Проверьте UUID с помощью команды
virsh secret-list:virsh secret-listПример вывода команды:
UUID Usage ---------------------------------------------------------------- <uid> iscsi iscsi-os-secretНазначьте секрет UUID
<uid>, который был получен на предыдущем шаге, с помощью командыvirsh secret-set-value:virsh secret-set-value --interactive <uid>Пример вывода команды:
Enter new value for secret: Secret value setНазначение секрета гарантирует, что имя пользователя и пароль CHAP находятся в списке секретов, который контролирует
libvirt.Добавьте запись аутентификации в XML-файл пула хранения с помощью команды
virsh editи добавьте элемент\<auth>, указавauthentication type,usernameиsecret usage:<pool type='iscsi'> <name>iscsi-name-pool</name> <source> <host name='server-name.example.com'/> <device path='iqn.<date>.<com.example.server-name>:iscsi<guest-os>'/> <auth type='chap' username='_example-user_'> <secret usage='iscsi<os>secret'/> </auth> </source> <target> <path>/dev/disk/by-path</path> </target> </pool>Примечание
Элемент
<auth>существует в разных местах внутри XML-элементов<pool>и<disk>ВМ. Для<pool>указывается<auth>в элементе<source>, так как это описывает, где найти источники пула, поскольку аутентификация является свойством некоторых источников пула (iSCSI и RBD). Для<disk>, который является элементом домена, аутентификация на диске iSCSI или RBD является свойством диска. Кроме того, элемент<auth>для диска отличается от элемента пула хранения.<auth username='<username>'> <secret type='iscsi' usage='iscsi<os>secret'/> </auth>Активируйте пул хранения, чтобы активировать изменения. Если пул уже был запущен, остановите и перезапустите пул хранения с помощью команд:
virsh pool-destroy <iscsi-name-pool>virsh pool-start iscsi-name-pool
Создание vHBA#
Устройство виртуального хост-адаптера шины (vHBA) подключает хост к SCSI-устройству и необходимо для создания пула хранения на основе SCSI.
Создать устройство vHBA можно, определив его в файле XML-конфигурации.
Сценарий#
Найдите HBA на хосте с помощью команды
virsh nodedev-list --cap vports:virsh nodedev-list --cap vportsПример вывода команды:
scsi_host3 scsi_host4Вывод команды иллюстрирует, что у хоста есть два HBA, поддерживающих vHBA.
Просмотрите детали конкретного HBA с помощью команды
virsh nodedev-dumpxml HBA_device:virsh nodedev-dumpxml scsi_host3Пример вывода команды:
<device> <name>scsi_host3</name> <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3</path> <parent>pci_0000_10_00_0</parent> <capability type='scsi_host'> <host>3</host> <unique_id>0</unique_id> <capability type='fc_host'> <wwnn>20000000c9848140</wwnn> <wwpn>10000000c9848140</wwpn> <fabric_wwn>2002000573de9a81</fabric_wwn> </capability> <capability type='vport_ops'> <max_vports>127</max_vports> <vports>0</vports> </capability> </capability> </device>В выходных данных перечислены поля
<name>,<wwnn>и<wwpn>, которые используются для создания vHBA. Поле<max_vports>показывает максимальное количество поддерживаемых vHBA (в данном примере – 127) виртуальных портов для использования в конфигурации HBA. Значение<vports>показывает количество используемых в настоящее время виртуальных портов. Эти значения обновляются после создания vHBA.Создайте XML-файл для хоста vHBA:
<device> <parent>scsi_host3</parent> <capability type='scsi_host'> <capability type='fc_host'> </capability> </capability> </device>Где
scsi_host3– родительский vHBA, аvhba_host3.xml- файл XML-конфигурации хоста vHBA.Другой пример конфигурации:
<device> <name>vhba</name> <parent wwnn='20000000c9848140' wwpn='10000000c9848140'/> <capability type='scsi_host'> <capability type='fc_host'> </capability> </capability> </device>В этом примере используется для описания родительского vHBA используются WWNN и WWPN.
Примечание
Значения WWNN и WWPN должны соответствовать значениям в деталях HBA, показанных на предыдущем шаге.
Поле
<parent>указывает устройство HBA, которое нужно связать с устройством vHBA. Детали в теге<device>используются на следующем шаге для создания нового устройства vHBA для хоста.Примечание
Команда
virshне предоставляет способ определения атрибутовparent_wwnn,parent_wwpnилиparent_fabric_wwn.Создайте VHBA на основе XML-файла, созданного на предыдущем шаге, с помощью команды
virsh nodev-create:virsh nodedev-create vhba_host3Пример вывода команды:
Node device scsi_host5 created from vhba_host3.xml
Проверка#
Проверьте данные нового vHBA (scsi_host5) с помощью команды virsh nodedev-dumpxml:
virsh nodedev-dumpxml scsi_host5
Пример вывода команды:
<device>
<name>scsi_host5</name>
<path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3/vport-3:0-0/host5</path>
<parent>scsi_host3</parent>
<capability type='scsi_host'>
<host>5</host>
<unique_id>2</unique_id>
<capability type='fc_host'>
<wwnn>5001a4a93526d0a1</wwnn>
<wwpn>5001a4ace3ee047d</wwpn>
<fabric_wwn>2002000573de9a81</fabric_wwn>
</capability>
</capability>
</device>