Как получить права на запись на хосте Linux с гостевой системы Windows 10, используя общие папки virtiofs.

Вопрос или проблема

Я пытаюсь поделиться папкой на хосте 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) на гостевой машине.

До этого момента я могу без проблем читать файлы в этой папке хоста с гостевой машины. Однако я могу создавать/записывать/удалять файлы только если

  1. Я использую оболочку (Windows CMD или Cygwin bash) с правами Администратора на гостевой машине
    ИЛИ
  2. Я изменяю права доступа к папке на хосте, предоставляя права на запись “другим”.
    Ни один из этих вариантов не подходит в качестве постоянного решения.

Я уже пробовал различные настройки для “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

  1. Проверьте обновления virtiofs: Убедитесь, что у вас установлена последняя версия пакета virtio-win, так как некоторые проблемы с правами доступа уже решены в новых релизах. Узнайте, интегрирован ли ваш экземпляр virtiofs с фиксом #525, упомянутым в обсуждении GitHub.

  2. Ручной запуск 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:
  3. Запуск службы под другим пользователем: Попробуйте запустить virtiofs-сервис под своей учетной записью, а не под LocalSystem. Это может решить проблему с правами в случае, если вы являетесь единственным пользователем компьютера.

Дополнительные эксперименты

  • Изменение конфигурации QEMU: В файле /etc/libvirt/qemu.conf проверьте, под каким UID запускаются процессы виртуальных машин, и убедитесь, что этот пользователь имеет права на запись в необходимую директорию на хосте.
  • Правила SELinux/AppArmor: Если на хосте включены SELinux или AppArmor, проверьте, не создают ли они ограничения для процесса virtiofsd.

Заключение

Таким образом, рассмотренные меры должны помочь получить права записи на Linux-хосте при использовании virtiofs для Windows-гостя. Необходимо уделить внимание обновлениям драйверов, а также правильной конфигурации и запуску сервисов. Используйте вышеописанные шаги для устранения возникших трудностей, обеспечивая стабильную работу без постоянного обращения к административным привилегиям.

Оцените материал
Добавить комментарий

Капча загружается...