Обмен файлами между хостом виртуализации и виртуальными машинами#
Если необходим обмен данными между хостом и ВМ, которые на нем запускаются, в системе можно настроить общий файл NFS. Другой способ настройки обмена данными – использование virtiofs.
Настройка обмена данными с помощью NFS#
Для обмена файлами между хостом SberLinux OS и ВМ можно настроить общий ресурс NFS, к которому ВМ могут монтироваться и получать доступ.
Примечание
Для ВМ с гостевыми ОС Linux рекомендуется использовать функцию virtiofs.
Предварительные условия#
На хосте установлен пакет
nfs-utils. Если пакет не установлен, воспользуйтесь командой:dnf install nfs-utils -yНастроена виртуальная сеть с NAT или с использованием моста для подключения хоста к ВМ.
Опционально: для повышения безопасности убедитесь, что ваши ВМ совместимы с NFS версии 4 и выше.
Сценарий#
На хосте экспортируйте каталог с файлами, который будет использоваться как общий ресурс NFS:
Используйте существующий каталог, к которому получат доступ ВМ. Если требуется создать новый, воспользуйтесь командой:
mkdir <<shared_directory>Где
<shared_directory>- имя каталога общего ресурса NFS.Получите IP-адрес каждой ВМ, которая будет обмениваться данными с хостом, например,
<example-vm-1>и<example-vm-2>:virsh domifaddr <example-vm-1>Пример вывода команды:
Name MAC address Protocol Address ---------------------------------------------------------------- vnet0 52:53:00:84:57:90 ipv4 hh.hh.hh.2/24И:
virsh domifaddr <example-vm-2>Пример вывода команды:
Name MAC address Protocol Address ---------------------------------------------------------------- vnet1 52:53:00:65:29:21 ipv4 hh.hh.hh.3/24Где
hh.hh.hh.2/24иhh.hh.hh.3/24– IP-адреса ВМ.Отредактируйте файл
/etc/exportsна хосте и добавьте строку, включающую в себя: каталог, который будет общим ресурсом, IP-адреса ВМ для общего использования, дополнительные опции:/home/<username>/Downloads/<shared_directory>/ <example-vm-1-ip>(<options>)> <example-vm-2-ip>(<options>)> ...Где:
<username>– имя учетной записи пользователя;<example-vm-1-ip>и<example-vm-2-ip>- IP-адреса ВМ<example-vm-1>и<example-vm-2>;<options>- возможные опции;
Пример ниже показывает, как настроить совместный доступ и редактирование содержимого каталога
/usr/local/shared-filesна хосте для ВМ<example-vm-1>и<example-vm-2>:/usr/local/shared-files/ hh.hh.hh.2(rw,sync) hh.hh.hh.3(rw,sync)Примечание
Чтобы предоставить доступ к каталогу ВМ с ОС Windows, необходимо убедиться, что клиент Windows NFS имеет разрешения на запись в общий каталог. Можно использовать опции
all_squash,anonuidиanongidв файле/etc/exports./Usr/local/shared-files/ hh.hh.hh.2(rw,sync,all_squash,anonuid=<directory-owner-UID>,anongid=<directory-owner-GID>)Где
<directory-owner-UID>и<directory-owner-GID>это UID и GID локального пользователя, которому принадлежит общий каталог на хосте.Экспортируйте обновленную файловую систему:
exportfs -aЗапустите службу
nfs-server:systemctl start nfs-serverПолучите IP-адрес хоста для монтирования общего каталога на ВМ:
ip addrПример вывода команды:
5: virbr0: [BROADCAST,MULTICAST,UP,LOWER_UP] mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 52:54:00:32:ff:a5 brd ff:ff:ff:ff:ff:ff inet hh.hh.hh.1/24 brd hh.hh.hh.255 scope global virbr0 valid_lft forever preferred_lft foreverВнимание
Обратите внимание, что соответствующая сеть соединяет хост с ВМ для обмена файлами. Обычно это
virbr0.
Смонтируйте общий каталог на ВМ c ОС Linux, указанной в файле
/etc/exports:mount hh.hh.hh.h:/usr/local/shared-files /mnt/host-sharehh.hh.hh.hh– IP-адрес хоста*/usr/local/shared-files– путь к экспортируемому каталогу на хосте;/mnt/host-share– точка монтирования на ВМ.
Примечание
Точка монтирования должна быть пустым каталогом
Проверка#
Выведите список содержимого каталога, который является общим ресурсом между хостом и ВМ:
ls <mount_point>
Пример вывода команды:
<shared-file1> <shared-file2> <shared-file3>
Где:
<mount_point>– путь в файловой системе к смонтированному общему каталогу;<shared-file1>,<shared-file2>,<shared-file3>– общие файлы для хоста и ВМ.
Настройка обмена данными с помощью virtiofs#
С помощью virtiofs можно обмениваться файлами между хостом и ВМ в виде дерева каталогов, которое работает так же, как и локальная структура файловой системы.
Предварительные условия#
Виртуализация установлена и включена на хосте SberLinux OS.
Существует общий каталог для обмена данными. Если требуется создать новый каталог, используйте команду:
mkdir /root/<shared-directory>Где
<shared-directory>– имя каталога общего ресурса.Гостевая ОС – Linux.
Сценарий#
Каждый каталог на хосте, доступ к которому нужно предоставить ВМ, в XML-конфигурации ВМ установите как файловую систему
virtiofs:Откройте XML-конфигурацию целевой ВМ.
Добавьте следующую запись в раздел
<device>XML-конфигурацию ВМ:<filesystem type='mount' accessmode='passthrough'> <driver type='virtiofs'/> <binary path='/usr/libexec/virtiofsd' xattr='on'/> <source dir='/root/shared-directory'/> <target dir='host-file-share'/> </filesystem>Внимание
В примере выше каталог
/root/<shared-directory>на хосте ВМ будет виден какhost-file-share.
Добавьте топологию NUMA для общей памяти в XML-конфигурацию:
<cpu mode='host-passthrough' check='none'> <numa> <cell id='0' cpus='0-{number-vcpus - 1}' memory='{ram-amount-KiB}' unit='KiB' memAccess='shared'/> </numa> </cpu>В примере выше добавлена базовая топология для всех процессоров и всей оперативной памяти.
Добавьте резервную копию общей памяти в раздел
<domain>XML-конфигурации:<domain> [...] <memoryBacking> <access mode='shared'/> </memoryBacking> [...] </domain>Загрузите ВМ:
virsh start <example-vm>Смонтируйте файловую систему в гостевой ОС:
mount -t virtiofs host-file-share /mntВ примере выше монтируется ранее настроенный каталог
host-file-shareс гостевой ОС Linux.
Проверка#
Убедитесь, что общий каталог стал доступен на ВМ, и открываются файлы, хранящиеся в каталоге.
Внимание
Параметры монтирования файловой системы, связанные со временем доступа, такие как noatime и strictatime, будут некорректно работать с virtiofs. Их использование не рекомендуется.
Устранение ошибок#
Если использование virtiofs не применимо для конкретного случая или не поддерживается системой, используйте NFS.