W przeszłości korzystałem z Virtual Box, który ma bardzo dobrą obsługę udostępniania folderu na hoście gościowi Windows. Szukam podobnej funkcjonalności dla QEMU.
Dokumentacja sugeruje ujawnienie serwera Samba działającego gdzieś w sieci lub użyć -net user,smb=/path/to/folder
do uruchomienia serwera samby.
Nie miałem szczęścia z -net user,smb
opcją QEMU. Wszystko, co robi, uruchamia się smbd
(co powoduje konflikt z inną usługą działającą lokalnie z powodu konfliktu portów). Wystarczy powiedzieć, że jest to bezużyteczne, szczególnie biorąc pod uwagę wielu gości. (W systemie Linux -virtfs
można użyć (Plan 9) do łatwego udostępniania folderów.)
Inne problemy z Sambą polegają na tym, że nie ogranicza się to do udostępniania folderów, ale także do udostępniania drukarek, mapowania użytkowników i tak dalej. Wszystko, czego potrzebuję, to udostępnienie jednego (lub więcej?) Folderów gościowi Windows.
Czy istnieje alternatywna metoda udostępniania folderów dla QEMU, która współpracuje z gościem systemu Windows?
Czy jest sposób na skonfigurowanie Samby, aby ograniczała się do bardzo ograniczonego zestawu funkcji i zintegrowała ją z QEMU? Powinno:
- Nie wszyscy w sieci powinni mieć dostęp do folderu.
- w tym użytkownicy lokalni (jeśli to możliwe).
- Brak innych funkcji (udostępnianie drukarek).
- Przypadek użycia: ujawnij katalog git w systemie Windows, skompiluj go w systemie Windows i użyj Linuksa do analizy.
- Mają akceptowalną prędkość, Windows używa virtio-scsi i virtio-net.
- Udostępniaj folder hosta systemu Linux gościowi systemu Windows 7.
źródło
-virtfs
działa świetnie (patrz także to pytanie), ale nie znam sterownika 9p dla systemu Windows.Odpowiedzi:
Wbudowana usługa QEMU Samba
Niedziałająca
-net user,smb
opcja została spowodowana niezgodnością z nowszymi wersjami Samby (> = 4). Zostało to naprawione w QEMU v2.2.0 i nowszych z następującymi zmianami:(Debian przeportował dwie ostatnie łatki do wersji 2.1 + dfsg-6, która jest obecna w Jessie.)
Stosowanie
Możesz wyeksportować jeden folder, tak jak w
\\10.0.2.4\qemu
przypadku korzystania z sieci użytkownika:Po pomyślnym uruchomieniu QEMU z tymi opcjami
/tmp/qemu-smb.*-*/
zostanie utworzony nowy katalog zawierającysmb.conf
. Jeśli jesteś wystarczająco szybki, ten plik można zmodyfikować, aby ścieżki były tylko do odczytu lub wyeksportować więcej folderów.Tryb działania
Demon samby jest uruchamiany za każdym razem, gdy dostęp do portów 139 lub 445 uzyskuje się przez sieć „użytkownika”. Komunikacja odbywa się za pośrednictwem standardowego wejścia / wyjścia / błędu procesu smbd. To jest powód, dla którego nowsze demony zawiodły, zapisywałby komunikat o błędzie na potoku zamiast komunikatów protokołu.
Z powodu tej metody działania demon nie będzie nasłuchiwał na portach hosta, a zatem będzie dostępny tylko dla gościa. Dlatego inni klienci w sieci, a nawet lokalni użytkownicy, nie mogą uzyskać dostępu do folderów za pomocą tego demona.
Ponieważ udostępnianie drukarek QEMU v2.2.0 jest całkowicie wyłączone przez konfigurację samby, więc nie ma już innego problemu.
Szybkość zależy od karty sieciowej, dlatego zaleca się korzystanie ze sterownika virtio
netkvm
w systemie Windows.Należy również pamiętać, że demon jest wykonywany przez ścieżkę bezwzględną (zwykle
/usr/sbin/smbd
) określoną w czasie kompilacji (przy użyciu--smbd
opcji). Ilekroć musisz wypróbować nowy plik binarny lub utworzyć plik pośrednismbd
, musisz zmodyfikować plik w tej ścieżce.Inne zastrzeżenia
Pliki wykonywalne (
*.exe
) muszą być wykonywalne na hoście (chmod +x FILE
), aby gość mógł mieć uprawnienia do wykonywania. Aby umożliwić wykonanie dowolnego pliku, dodajacl allow execute always = True
opcję do udziału.Przykładowa konfiguracja smb.conf tylko do odczytu, która umożliwia wykonanie dowolnego pliku (na podstawie QEMU v2.2.0):
źródło
\\10.0.2.4\qemu
. Ostatnio pominąłem ten krok i otworzyłem wspomnianą ścieżkę bezpośrednio z okna dialogowego Uruchom.W 2018 r. Prostym sposobem udostępnienia folderu między hostem Linux a maszyną wirtualną z systemem Windows jest włączenie protokołu RDP w systemie Windows
guest
i połączenie sięvm
z klientem pulpitu zdalnego Remmina i włączenie folderu współdzielonego:Spowoduje to utworzenie folderu w obszarze Ten komputer ( folder współdzielony w systemie Linux
hostname
) i\\tsclient\shared-folder-name
udziału sieciowego wguest
. Możesz również zmapować dysk sieciowy:To rozwiązanie nie wymaga
samba
działania.Testowany pod
libvirt
/virt-manager
ale powinien działać z każdą wirtualizacją.źródło
xfreerdp /drive:shared-folder-name,/home/user/shared
Opcja powinna działać jak dobrze. Kod źródłowy referencje: konfiguracyjne Remmina , FreeRDP Code Library .