En el pasado, he utilizado Virtual Box, que tiene muy buen soporte para compartir una carpeta en el host con un invitado de Windows. Estoy buscando una funcionalidad similar para QEMU.
La documentación sugiere exponer un servidor Samba que se ejecuta en algún lugar de la red, o usar el -net user,smb=/path/to/folder
para iniciar un servidor Samba.
No tuve suerte con la -net user,smb
opción de QEMU. Todo lo que hace es comenzar smbd
(que entra en conflicto con otro servicio que se ejecuta localmente debido a un conflicto de puerto). Es suficiente decir que esto es inutilizable, especialmente con múltiples invitados en mente. (Para Linux, -virtfs
(Plan 9) se puede usar para compartir carpetas fácilmente).
Otros problemas con Samba es que no se limita al intercambio de carpetas, sino que también comparte impresoras, mapeo de usuarios y demás. Todo lo que necesito es compartir una (¿o más?) Carpetas con el invitado de Windows.
¿Existe un método alternativo para compartir carpetas para QEMU que funcione con un invitado de Windows?
¿O hay una manera de configurar Samba para restringirse a un conjunto muy limitado de características e integrarlo en QEMU? Debería:
- No todos en la red deberían poder acceder a la carpeta.
- usuarios locales incluidos (si es posible).
- No proporciona otra funcionalidad (uso compartido de impresoras).
- Caso de uso: exponga un directorio git a Windows, compílelo en Windows y use Linux para el análisis.
- Tiene una velocidad aceptable, Windows usa virtio-scsi y virtio-net.
- Poder compartir una carpeta desde un host Linux con un invitado Windows 7.
fuente
-virtfs
funciona muy bien (vea también esta pregunta), pero no conozco un controlador 9p para Windows.Respuestas:
El servicio incorporado de Samba de QEMU
La
-net user,smb
opción que no funcionaba fue causada por una incompatibilidad con las versiones más nuevas de Samba (> = 4). Esto se corrige en QEMU v2.2.0 y más reciente con estos cambios:(Debian ha soportado los últimos dos parches a 2.1 + dfsg-6 que está presente en Jessie).
Uso
Puede exportar una carpeta como
\\10.0.2.4\qemu
cuando usa Redes de usuario:Cuando QEMU se inicia con éxito con estas opciones, se
/tmp/qemu-smb.*-*/
creará un nuevo directorio que contiene unsmb.conf
. Si eres lo suficientemente rápido, entonces este archivo podría modificarse para que las rutas sean de solo lectura o exportar más carpetas.Modo de operación
El demonio samba se ejecuta cada vez que se accede a los puertos 139 o 445 a través de una red de "usuario". La comunicación ocurre a través de la entrada / salida / error estándar del proceso smbd. Esta es la razón por la cual los demonios más nuevos fallaron, escribiría su mensaje de error en la tubería en lugar de mensajes de protocolo.
Debido a este método de operación, el daemon no escuchará en los puertos host y, por lo tanto, solo será accesible para el invitado. Por lo tanto, otros clientes en la red e incluso los usuarios locales no pueden obtener acceso a las carpetas con este demonio.
Dado que QEMU v2.2.0 el uso compartido de impresoras está completamente deshabilitado a través de la configuración de samba, entonces otra preocupación se ha ido aquí.
La velocidad depende del adaptador de red, por lo que se recomienda utilizar el controlador virtio
netkvm
en Windows.También tenga en cuenta que el demonio se ejecuta por su ruta absoluta (típicamente
/usr/sbin/smbd
) como se especifica en tiempo de compilación (usando la--smbd
opción). Cada vez que necesite probar un nuevo binario o interposiciónsmbd
, deberá modificar el archivo en esa ruta.Otras advertencias
Los ejecutables (
*.exe
) deben ser ejecutables en el host (chmod +x FILE
) para que el invitado tenga permisos de ejecución. Para permitir la ejecución de cualquier archivo, agregue laacl allow execute always = True
opción a un recurso compartido.Ejemplo de configuración smb.conf de solo lectura que permite la ejecución de cualquier archivo (basado en QEMU v2.2.0):
fuente
\\10.0.2.4\qemu
. Últimamente me he saltado ese paso y he abierto dicha ruta directamente desde el cuadro de diálogo Ejecutar.En 2018, una forma sencilla de compartir una carpeta entre un host Linux y una máquina virtual Windows es habilitar RDP en Windows
guest
y conectarse alvm
con el cliente de escritorio remoto Remmina y habilitar una carpeta compartida:Esto crea una carpeta en Esta PC ( carpeta compartida en Linux
hostname
) y un\\tsclient\shared-folder-name
recurso compartido de red dentro deguest
. También puede asignar una unidad de red:Esta solución no requiere
samba
estar ejecutándose.Probado bajo
libvirt
/virt-manager
pero debería funcionar con cualquier virtualización.fuente
xfreerdp /drive:shared-folder-name,/home/user/shared
opción también debería funcionar. Fuente: referencias de códigos de configuración Remina , código de la biblioteca FreeRDP .