Cartella condivisa tra guest Windows QEMU e host Linux


24

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 utilizzare -net user,smb=/path/to/folderper avviare un server Samba.

Non ho avuto fortuna con l' -net user,smbopzione di QEMU. Tutto ciò che fa è l'avvio smbd(che è in conflitto con un altro servizio in esecuzione localmente a causa di un conflitto di porte). Basti dire che questo è inutilizzabile, soprattutto con in mente più ospiti. (Per Linux, -virtfs(Piano 9) può essere utilizzato per una facile condivisione delle cartelle.)

Altri problemi con Samba è che non si limita alla condivisione delle cartelle, ma anche alla condivisione della stampante, alla mappatura degli utenti e quant'altro. Tutto ciò che serve è condividere una (o più?) Cartelle con il guest Windows.

Esiste un metodo di condivisione di cartelle alternativo per QEMU che funziona con un guest Windows?

O c'è un modo per configurare Samba in modo da limitarsi a un set 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 stampante).
  • Caso d'uso: esporre una directory git su Windows, compilarla in Windows e usare Linux per l'analisi.
  • Hanno una velocità accettabile, Windows utilizza virtio-scsi e virtio-net.
  • Essere in grado di condividere una cartella da un host Linux con un guest Windows 7.


1
@CiroSantilli 法轮功 露 宪 六四 事件 法轮功 Questa domanda è taggata con Linux dove -virtfsfunziona benissimo (vedi anche questa domanda), ma non sono a conoscenza di un driver 9p per Windows.
Lekensteyn,

sì, non dire che è un duplicato o qualcosa del genere, solo in relazione.
Ciro Santilli 11 改造 中心 法轮功 六四 事件

Risposte:


14

Il servizio Samba integrato di QEMU

L' -net user,smbopzione non funzionante è 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:

(Debian ha eseguito il backport delle ultime due patch su 2.1 + dfsg-6 che è presente in Jessie.)

uso

È possibile esportare una cartella come \\10.0.2.4\qemuquando 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, /tmp/qemu-smb.*-*/verrà creata una nuova directory contenente un smb.conf. Se sei abbastanza veloce, allora questo file potrebbe 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 hanno fallito, avrebbe scritto il suo messaggio di errore nella pipe invece dei messaggi di protocollo.

A causa di questo metodo operativo, il demone non ascolterà sulle porte host e quindi sarà accessibile solo al guest. Quindi altri client nella rete e persino utenti locali non possono accedere alle cartelle usando questo demone.

Poiché la condivisione della stampante QEMU v2.2.0 è completamente disabilitata attraverso la configurazione di samba, quindi un'altra preoccupazione è andata qui.

La velocità dipende dalla scheda di rete, quindi si consiglia di utilizzare il driver virtionetkvm in Windows.

Si noti inoltre che il demone viene eseguito dal suo percorso assoluto (in genere /usr/sbin/smbd) come specificato al momento della compilazione (usando l' --smbdopzione). Ogni volta che devi provare un nuovo binario o interporre smbd, dovrai modificare il file in quel percorso.

Altre avvertenze

Gli eseguibili ( *.exe) devono essere eseguibili sull'host ( chmod +x FILE) affinché il guest abbia le autorizzazioni di esecuzione. Per consentire l'esecuzione di qualsiasi file, aggiungere l' acl allow execute always = Trueopzione a una condivisione.

Esempio di configurazione smb.conf di sola lettura che consente l'esecuzione di qualsiasi file (basato su QEMU v2.2.0):

...
[QEMU]
percorso = / home / peter / windows 
sola lettura = 
ospite ok = vero
force user = peter 
acl allow execute always = True

Ho usato questa opzione, ho bisogno di entrambi gli accessi in lettura e scrittura. Ho riavviato il servizio qemu e aggiornato la conf di conseguenza. Non vedo nulla nelle cartelle di rete di Explorer in Windows Guest. Inoltre, come posso trovare l'IP host (suppongo che sia 10.0.2.4) in questo caso qui? Il mio IP ospite per questa scheda NIC era 10.0.2.15. @Lekensteyn - qualche idea?
Tsar2512,

@ tsar2512 Di solito vado su Explorer, quindi uso Map Network Drive per assegnare una lettera a \\10.0.2.4\qemu. Ultimamente ho saltato quel passaggio e ho aperto il percorso direttamente dalla finestra di dialogo Esegui.
Lekensteyn,

6

In 2018 un modo semplice per condividere una cartella tra un Linux Host & Finestre macchina virtuale è quello di consentire RDP in Windows gueste collegarsi a vmcon l' Remmina Remote Desktop Client & abilitare una cartella condivisa:

Impostazioni Remmina RDP

Questo crea una cartella in Questo pc ( cartella condivisa su Linuxhostname ) e una \\tsclient\shared-folder-namecondivisione di rete all'interno di guest. Puoi anche mappare un'unità di rete:

Condivisioni di cartelle Guest di Windows

  • Questa soluzione non richiede sambadi essere in esecuzione.

  • Testato sotto libvirt/ virt-managerma dovrebbe funzionare con qualsiasi virtualizzazione.


Tecnica interessante, il reindirizzamento del file system sembra essere una funzionalità RDP. Anche l' xfreerdp /drive:shared-folder-name,/home/user/sharedopzione dovrebbe funzionare. Riferimenti del codice sorgente: configurazione Remmina , codice della libreria FreeRDP .
Lekensteyn,

È una soluzione sicura senza pericoli per i potenziali aggressori?
Dave,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.