Поиск по сайту:

Настройка общей папки между хостом KVM и гостем

После создания новой виртуальной машины вы можете захотеть совместно использовать файлы и папки между хостом KVM и виртуальной машиной KVM. В этом кратком руководстве мы увидим, как настроить общую папку между хостом KVM и гостевой виртуальной машиной с помощью Virt-manager в Linux.

Прежде чем настраивать общую папку, убедитесь, что на вашем KVM-хосте установлен Virt-manager.

  • Как управлять виртуальными машинами KVM с помощью Virt-Manager

Если у вас уже установлена полная группа пакетов виртуализации KVM, вам не нужно отдельно устанавливать Virt-manager. Virt-manager входит в группу пакетов виртуализации KVM. В противном случае вам может потребоваться установить его, как показано в ссылке выше.

Создайте новую виртуальную машину из интерфейса вирт-менеджера. Это очень просто и понятно! Пока не запускайте виртуальную машину. Нам нужно создать общую папку на нашем хосте KVM.

Создание общих папок на хосте KVM

Создайте новую общую папку в вашей хост-системе KVM, которую вы хотите открыть для гостевых компьютеров.

Для целей данного руководства я создал общую папку с именем «KVM_Share» в своем каталоге $HOME.

[ostechnix@kvmhost ~]$ mkdir ~/KVM_Share

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

[ostechnix@kvmhost ~]$ chmod 777 ~/KVM_Share

Затем установите правильный тип SELinux для общей папки KVM:

sudo semanage fcontext -a -t svirt_image_t "/home/sk/KVM_Share(/.*)?"

Эта команда устанавливает контекст файла по умолчанию для всего, что находится в общей папке, включая /home/sk/KVM_Share в нашем случае.

После запуска указанной выше команды она добавляет строку в файл /etc/selinux/targeted/contexts/files/file_contexts.local, что делает изменение постоянным.

Добавленная строка может выглядеть так:

cat /etc/selinux/targeted/contexts/files/file_contexts.local
 This file is auto-generated by libsemanage
 Do not edit directly.
 /usr/lib/chromium-browser    system_u:object_r:bin_t:s0
 /usr/lib/chromium-browser/chromium-browser.sh    system_u:object_r:bin_t:s0
 /usr/lib/chrome-sandbox    system_u:object_r:chrome_sandbox_exec_t:s0
 /home/sk/KVM_Share(/.*)?    system_u:object_r:svirt_image_t:s0

Затем запустите следующую команду, чтобы сообщить SELinux восстановить контексты файлов во всем, что находится в общем каталоге, до того, что у нас есть по умолчанию (т. е. какие изменения семанажа).

sudo restorecon -vR /home/sk/KVM_Share

Если вы не установите правильный тип SELinux для общей папки KVM, при запуске виртуальной машины вы столкнетесь со следующей ошибкой.

Error starting domain: internal error: qemu unexpectedly closed the monitor: 2021-05-06T09:30:21.239353Z qemu-system-x86_64: -device virtio-9p-pci,id=fs0,fsdev=fsdev-fs0,mount_tag=/hostshare,bus=pci.5,addr=0x0: cannot initialize fsdev 'fsdev-fs0': failed to open '/home/sk/KVM_Share': Permission denied
 Traceback (most recent call last):
   File "/usr/share/virt-manager/virtManager/asyncjob.py", line 65, in cb_wrapper
     callback(asyncjob, *args, *kwargs)   File "/usr/share/virt-manager/virtManager/asyncjob.py", line 101, in tmpcb     callback(args, **kwargs)
   File "/usr/share/virt-manager/virtManager/object/libvirtobject.py", line 57, in newfn
     ret = fn(self, *args, **kwargs)
   File "/usr/share/virt-manager/virtManager/object/domain.py", line 1329, in startup
     self._backend.create()
   File "/usr/lib64/python3.9/site-packages/libvirt.py", line 1353, in create
     raise libvirtError('virDomainCreate() failed')
 libvirt.libvirtError: internal error: qemu unexpectedly closed the monitor: 2021-05-06T09:30:21.239353Z qemu-system-x86_64: -device virtio-9p-pci,id=fs0,fsdev=fsdev-fs0,mount_tag=/hostshare,bus=pci.5,addr=0x0: cannot initialize fsdev 'fsdev-fs0': failed to open '/home/sk/KVM_Share': Permission denied

Теперь пришло время настроить общую папку в Вирт-менеджере.

Настройка общей папки между хостом KVM и гостем

Откройте Вирт-менеджер и убедитесь, что гостевая система выключена. Выберите гостевую машину и нажмите кнопку Открыть в строке меню, чтобы отобразить консоль виртуальной машины и подробные сведения.

Показать консоль и детали виртуальной машины в Вирт-менеджере

В следующем окне нажмите кнопку Показать сведения о виртуальном оборудовании в строке меню и нажмите кнопку Добавить оборудование на левой панели.

Нажмите кнопку «Добавить оборудование» в вирт-менеджере.

Нажмите вкладку «Файловая система» на левой панели, введите местоположение общей папки в поле «Исходный путь» и введите тег монтирования в поле «Целевой путь». Здесь я делюсь каталогом "~/KVM_Share", а мой тег монтирования — /hostshare. Вы можете указать имя mount_tag по своему желанию. Обратите внимание, что mount_tag не является путем. mount_tag — это просто имя, используемое для идентификации общего ресурса хоста. Нажмите «Готово» и «Применить», чтобы обновить изменения.

Настройте общую папку между хостом KVM и гостем.

И последнее, что вам нужно сделать, это выбрать правильный режим доступа для доступа к общей папке.

Выберите режим безопасности доступа к общей папке в Вирт-менеджере

Есть три возможных значения. Это сквозной, сопоставленный и сквош.

  • passthrough – указывает, что доступ к источнику (т. е. к общей папке) осуществляется с настройками разрешений пользователя, заданными внутри гостевой виртуальной машины. т. е. файлы хранятся с использованием тех же учетных данных, которые были созданы в гостевой системе. Это режим доступа по умолчанию, если он не указан.
  • сопоставлен — указывает, что доступ к источнику осуществляется с настройками разрешений гипервизора. Если вы хотите иметь доступ на чтение и запись с гостевой машины, вам необходимо выбрать этот режим.
  • squash — аналогично «passthrough», за исключением того, что сбой привилегированных операций, таких как chown, игнорируется. Это делает режим сквозного доступа доступным для людей, которые запускают гипервизор без полномочий root.

После выбора предпочтительного режима доступа нажмите кнопку «Применить». Теперь мы настроили общую папку для хоста KVM и гостевой системы из Вирт-менеджера.

Теперь включите гостевую виртуальную машину и создайте на ней точку монтирования для подключения общей папки хост-системы KVM:

[sk@kvmguest ~]$ mkdir ~/hostfiles

Наконец, смонтируйте общую папку на гостевой машине с помощью команды:

[sk@kvmguest ~]$ sudo mount -t 9p -o trans=virtio /hostshare hostfiles/

Общая папка ~/KVM_Share монтируется в каталог hostfiles на вашей виртуальной машине. С этого момента вы можете получить доступ к содержимому общей папки с вашей гостевой виртуальной машины. Вы также можете редактировать и удалять содержимое общей папки как на хост-системе KVM, так и на гостевой системе.

Чтобы автоматически монтировать общую папку каждый раз при загрузке, добавьте следующую строку в файл /etc/fstab в гостевой системе:

/hostshare /hostfiles 9p trans=virtio,version=9p2000.L,rw 0 0

Надеюсь это поможет.

Ресурс:

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

Статьи по данной тематике