In passato ho usato Virtual Box che ha un ottimo supporto per condividere una cartella sull'host con un guest Windows. Sto cercando funzionalità simili per QEMU.
La documentazione suggerisce di esporre un server Samba in esecuzione da qualche parte nella rete, o di usare -net user,smb=/path/to/folder
per avviare un server samba.
Non ho avuto fortuna con -net user,smb
opzione di QEMU. Tutto ciò che fa è avviare smbd
(che è in conflitto con un altro servizio in esecuzione localmente a causa di un conflitto di porte). Basti dire che questo è inutilizzabile, soprattutto pensando a più ospiti. (Per Linux, -virtfs
(Piano 9) può essere utilizzato per una facile condivisione delle cartelle.)
Altri problemi con Samba sono che non si limita alla condivisione delle cartelle, ma anche alla condivisione della stampante, alla mappatura degli utenti e quant'altro. Tutto ciò di cui ho bisogno è condividere una (o più?) cartelle con il guest Windows.
Esiste un metodo alternativo di condivisione delle cartelle per QEMU che funzioni con un guest Windows?
Oppure c'è un modo per configurare Samba per limitarsi a un insieme molto limitato di funzionalità e integrarlo in QEMU? Dovrebbe:
- Non tutti nella rete dovrebbero essere in grado di accedere alla cartella.
- Utenti locali inclusi (se possibile).
- Non fornire altre funzionalità (condivisione della stampante).
- Caso d'uso:esporre una directory git a Windows, compilarla in Windows e utilizzare Linux per l'analisi.
- Avere una velocità accettabile, Windows usa virtio-scsi e virtio-net.
- Essere in grado di condividere una cartella da un host Linux con un guest Windows 7.
Risposta accettata:
Il servizio Samba integrato di QEMU
L'utente -net user,smb
non funzionante l'opzione è stata causata da un'incompatibilità con le versioni più recenti di Samba (>=4). Questo problema è stato risolto in QEMU v2.2.0 e versioni successive con queste modifiche:
- b87b8a8 slirp/smb:sposta la directory ncalrpc in tmp (dalla v2.1.0)
- 44d8d2b net/slirp:specifica logbase per smbd (dalla v2.2.0)
- 7912d04 slirp/smbd:modifica/imposta diversi parametri in smbd.conf generato (dalla v2.2.0 disabilita anche la stampante)
(Debian ha eseguito il backport delle ultime due patch su 2.1+dfsg-6 che è presente in Jessie.)
Utilizzo
Puoi esportare una cartella come \10.0.2.4qemu
quando si utilizza la rete utente:
qemu-system-x86_64
-net user,smb=/absolute/path/to/folder
-net nic,model=virtio
...
Quando QEMU viene avviato correttamente con queste opzioni, un nuovo /tmp/qemu-smb.*-*/
verrà creata una directory contenente un smb.conf
. Se sei abbastanza veloce, allora questo file può essere modificato per rendere i percorsi di sola lettura o esportare più cartelle.
Modalità di funzionamento
Il demone samba viene eseguito ogni volta che si accede alle porte 139 o 445 su una rete "utente". La comunicazione avviene tramite input/output/errore standard del processo smbd. Questo è il motivo per cui i demoni più recenti non sono riusciti, scriverebbero il messaggio di errore nella pipe anziché nei messaggi di protocollo.
A causa di questo metodo di funzionamento, il demone non sarà in ascolto sulle porte host e quindi sarà accessibile solo al guest. Quindi altri client nella rete e persino utenti locali non possono accedere alle cartelle utilizzando questo demone.
Correlati:Windows 7 – Errore di configurazione degli aggiornamenti di Windows Ripristino delle modifiche Blocco/blocco?Poiché la condivisione della stampante QEMU v2.2.0 è completamente disabilitata tramite la configurazione samba, un'altra preoccupazione qui è scomparsa.
La velocità dipende dalla scheda di rete, quindi si consiglia di utilizzare virtio netkvm
driver in Windows.
Nota anche che il demone viene eseguito dal suo percorso assoluto (in genere /usr/sbin/smbd
) come specificato in fase di compilazione (usando il --smbd
opzione). Ogni volta che devi provare un nuovo binario o interporre smbd
, dovrai modificare il file in quel percorso.
Altri avvertimenti
Eseguibili (*.exe
) deve essere eseguibile sull'host (chmod +x FILE
) affinché l'ospite disponga delle autorizzazioni di esecuzione. Per consentire l'esecuzione di qualsiasi file, aggiungi acl allow execute always = True
opzione per una condivisione.
Esempio sola lettura Configurazione smb.conf che consente l'esecuzione di qualsiasi file (basato su QEMU v2.2.0):
... [qemu] path=/home/peter/windows read only=yes guest ok=true force user=peter acl allow execute always = True