Настройка общей папки между хостом 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