Вопрос или проблема
Я пытаюсь поделиться папкой на хосте Ubuntu 20.04.3 с гостевой машиной Windows 10 build 19042 (20H2), используя QEMU 5.2 / libvirt 7.0.0 на хосте и virtio-win 0.1.208 (драйвер 100.85.104.20800 и связанная служба virtiofs) на гостевой машине.
До этого момента я могу без проблем читать файлы в этой папке хоста с гостевой машины. Однако я могу создавать/записывать/удалять файлы только если
- Я использую оболочку (Windows CMD или Cygwin bash) с правами Администратора на гостевой машине
ИЛИ - Я изменяю права доступа к папке на хосте, предоставляя права на запись “другим”.
Ни один из этих вариантов не подходит в качестве постоянного решения.
Я уже пробовал различные настройки для “user” в /etc/libvirt/qemu.conf, включая root и пользователя, владеющего общей папкой (меня), без успеха. Я с трудом понимаю, что в конечном итоге определяет права на запись для папки на хосте. Я предполагал, что это связано с UID одного из процессов гипервизора, так что не вижу, почему бы запуск от имени Администратора или нет на гостевой машине должен иметь значение.
Может кто-то пролить свет на это? У кого-то был более успешный опыт?
Для информации: соответствующий раздел конфигурации домена QEMU выглядит следующим образом:
<filesystem type="mount" accessmode="passthrough">
<driver type="virtiofs"/>
<source dir="/home/micha"/>
<target dir="hostfs"/>
<address type="pci" domain='0x0000' bus="0x00" slot="0x0a" function='0x0'/>
</filesystem>
virtiofs требует accessmode="passthrough"
.
На github virtio-kvm есть обсуждение на эту тему.
https://github.com/virtio-win/kvm-guest-drivers-windows/issues/473
Там говорится в сообщении от 2021-05-26:
Привет @Dave–G,
Ммм, чтение/запись работает, когда вы вручную запускаете virtiofs.exe из командной оболочки, но доступно только для чтения, когда оно запускается как служба. man_shrugging
Это похоже на проблему, которую мы имели и которая была решена. Ваш файл службы virtiofs включает коммит #525?
На данный момент я просто создал пакетный файл в C:\Users\Windows User\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup, который содержит start “vfio-fs” /min “C:\Program Files\Virtio-Win\VioFS\virtiofs.exe” -m z:
Спасибо,
Gal.
Таким образом, похоже, что вам нужно обновить virtiofs, или, если это непрактично, запускать службу вручную, а не через диспетчер служб Windows.
Возможно, также сработает, если вы запустите службу под своим именем пользователя, а не LocalSystem – пока вы единственный пользователь компьютера.
Ответ или решение
Для решения проблемы с правами записи на хосте Linux с гостевой системой Windows 10 при использовании совместных папок virtiofs, учитывая предоставленные детали, рассмотрим несколько шагов и решений.
Анализ проблемы
Первая проблема заключается в том, что файлы в общей папке на хосте доступны только для чтения, если не использовать привилегии администратора на гостевой системе или не изменять права доступа к папке на хосте, что неприемлемо для постоянного использования. При исследовании оригинального поста на GitHub, обсуждение указывает на проблему с запуском virtiofs.exe вручную против его запуска как службы.
Решение и шаги
Обновление и конфигурация virtiofs
-
Проверьте обновления virtiofs: Убедитесь, что у вас установлена последняя версия пакета virtio-win, так как некоторые проблемы с правами доступа уже решены в новых релизах. Узнайте, интегрирован ли ваш экземпляр virtiofs с фиксом #525, упомянутым в обсуждении GitHub.
-
Ручной запуск virtiofs: Если обновление не возможно, рассмотрите запуск virtiofs.exe вручную из командной строки Windows. Создайте скрипт запуска, например, в директории
C:\Users\[Ваше имя]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
. Включите в него команду:start "vfio-fs" /min "C:\Program Files\Virtio-Win\VioFS\virtiofs.exe" -m z:
-
Запуск службы под другим пользователем: Попробуйте запустить virtiofs-сервис под своей учетной записью, а не под
LocalSystem
. Это может решить проблему с правами в случае, если вы являетесь единственным пользователем компьютера.
Дополнительные эксперименты
- Изменение конфигурации QEMU: В файле
/etc/libvirt/qemu.conf
проверьте, под каким UID запускаются процессы виртуальных машин, и убедитесь, что этот пользователь имеет права на запись в необходимую директорию на хосте. - Правила SELinux/AppArmor: Если на хосте включены SELinux или AppArmor, проверьте, не создают ли они ограничения для процесса virtiofsd.
Заключение
Таким образом, рассмотренные меры должны помочь получить права записи на Linux-хосте при использовании virtiofs для Windows-гостя. Необходимо уделить внимание обновлениям драйверов, а также правильной конфигурации и запуску сервисов. Используйте вышеописанные шаги для устранения возникших трудностей, обеспечивая стабильную работу без постоянного обращения к административным привилегиям.