Общая папка между гостем QEMU Windows и хостом Linux

24

В прошлом я использовал Virtual Box, который очень хорошо поддерживает совместное использование папки на хосте с гостем Windows. Я ищу похожую функциональность для QEMU.

Документация предлагает выставить сервер Samba, работающий где-то в сети, или использовать его -net user,smb=/path/to/folderдля запуска сервера Samba.

Мне не повезло с -net user,smbвариантом QEMU. Все, что он делает, smbdзапускается (что конфликтует с другой службой, работающей локально из-за конфликта портов). Достаточно сказать, что это непригодно, особенно с учетом нескольких гостей. (Для Linux -virtfs(Plan 9) можно использовать для простого обмена папками.)

Другие проблемы с Samba заключаются в том, что он не ограничивается общим доступом к папкам, он также обеспечивает общий доступ к принтерам, отображение пользователей и тому подобное. Все, что мне нужно, это поделиться одной (или несколькими?) Папками с гостем Windows.

Существует ли альтернативный метод общего доступа к папкам для QEMU, который работает с гостем Windows?

Или есть способ настроить Samba, чтобы ограничить себя очень ограниченным набором функций и интегрировать его в QEMU? Должно:

  • Не каждый в сети должен иметь доступ к папке.
  • локальные пользователи включены (если это возможно).
  • Не предоставлять другие функции (общий доступ к принтеру).
  • Вариант использования: открыть каталог git для Windows, скомпилировать его в Windows и использовать Linux для анализа.
  • Имея приемлемую скорость, Windows использует virtio-scsi и virtio-net.
  • Иметь общий доступ к папке с хоста Linux с гостем Windows 7.
Lekensteyn
источник
более независимый от ОС вопрос: superuser.com/questions/628169/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
1
@CiroSantilli 包子 露 宪 六四 事件 法轮功 Этот вопрос помечен Linux, где -virtfsпрекрасно работает (см. Также этот вопрос), но я не знаю о драйвере 9p для Windows.
Лекенстейн
да, не говоря, что это дурак или что-то, просто связано.
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件

Ответы:

14

QEMU встроенный сервис Samba

Неработающая -net user,smbопция была вызвана несовместимостью с более новыми версиями Samba (> = 4). Это исправлено в QEMU v2.2.0 и новее с этими изменениями:

(Debian перенес последние два патча в 2.1 + dfsg-6, который присутствует в Jessie.)

использование

Вы можете экспортировать одну папку, как \\10.0.2.4\qemuпри использовании сети пользователя:

qemu-system-x86_64 \
    -net user,smb=/absolute/path/to/folder \
    -net nic,model=virtio \
    ...

Когда QEMU будет успешно запущен с этими опциями, /tmp/qemu-smb.*-*/будет создан новый каталог, содержащий smb.conf. Если вы достаточно быстры, то этот файл можно изменить, чтобы сделать пути доступными только для чтения или экспортировать больше папок.

Режим работы

Демон samba выполняется всякий раз, когда к портам 139 или 445 обращаются через «пользовательскую» сеть. Связь происходит через стандартный ввод / вывод / ошибку процесса smbd. Это причина того, что более новые демоны потерпели неудачу, он записывает свое сообщение об ошибке в канал, а не сообщения протокола.

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

Поскольку общий доступ к принтеру QEMU v2.2.0 полностью отключен через конфигурацию samba, то здесь еще одно беспокойство.

Скорость зависит от сетевого адаптера, поэтому рекомендуется использовать драйвер virtionetkvm под Windows.

Также обратите внимание, что демон выполняется по его абсолютному пути (обычно /usr/sbin/smbd), как указано во время компиляции (используя --smbdопцию). Всякий раз, когда вам нужно попробовать новый бинарный файл или вставить smbd, вам нужно будет изменить файл по этому пути.

Другие предостережения

Исполняемые файлы ( *.exe) должны быть исполняемыми на хосте ( chmod +x FILE), чтобы гость имел права на выполнение. Чтобы разрешить выполнение любого файла, добавьте acl allow execute always = Trueпараметр в общий ресурс.

Пример конфигурации smb.conf только для чтения, которая позволяет выполнять любой файл (на основе QEMU v2.2.0):

...
[QEMU]
путь = / home / peter / windows 
только для чтения = да
гость хорошо = правда
заставить пользователя = peter 
acl разрешить выполнить всегда = True
Lekensteyn
источник
Я использовал эту опцию, мне нужны оба права на чтение и запись. Я перезапустил сервис qemu и соответственно обновил conf. Я ничего не вижу в сетевых папках в проводнике в гостевой системе Windows. Также, как мне найти IP хоста (я полагаю, что это 10.0.2.4) в этом случае здесь? Мой гостевой IP для этого сетевого адаптера был 10.0.2.15. @Lekensteyn - есть идеи?
tsar2512
@ tsar2512 Обычно я захожу в Проводник, а затем использую Map Network Drive, чтобы назначить букву \\10.0.2.4\qemu. В последнее время я пропустил этот шаг и открыл указанный путь непосредственно из диалогового окна «Выполнить».
Лекенштейн
6

В 2018 году простым способом совместного использования папки между хостом Linux и виртуальной машиной Windows является включение RDP в Windows guestи подключение к нему vmс помощью клиента удаленного рабочего стола Remmina и включение общей папки:

Настройки Remmina RDP

Это создает папку в разделе « Этот компьютер» ( общая папка в Linuxhostname ) и \\tsclient\shared-folder-nameсетевой ресурс внутри guest. Вы также можете подключить сетевой диск:

Общие папки гостевой папки Windows

  • Это решение не требует sambaзапуска.

  • Протестировано в libvirt/, virt-managerно должно работать с любой виртуализацией.

Стюарт Кардалл
источник
Интересная техника, перенаправление файловой системы представляется функцией RDP. xfreerdp /drive:shared-folder-name,/home/user/sharedВариант должен работать. Ссылки на исходный код: конфигурация Remmina , код библиотеки FreeRDP .
Лекенштейн
Это безопасное решение без каких-либо опасностей потенциальных злоумышленников?
Дэйв