Folder bersama antara QEMU Windows guest dan host Linux

24

Di masa lalu saya telah menggunakan Virtual Box yang memiliki dukungan yang sangat baik untuk berbagi folder di host dengan tamu Windows. Saya mencari fungsi serupa untuk QEMU.

Dokumentasi menyarankan untuk mengekspos server Samba berjalan di suatu tempat di jaringan, atau menggunakan -net user,smb=/path/to/folderuntuk memulai server samba.

Saya tidak beruntung dengan -net user,smbopsi QEMU. Yang dilakukannya hanyalah memulai smbd(yang bertentangan dengan layanan lain yang berjalan secara lokal karena konflik port). Cukuplah untuk mengatakan, ini tidak dapat digunakan, terutama dengan beberapa tamu dalam pikiran. (Untuk Linux, -virtfs(Paket 9) dapat digunakan untuk berbagi folder dengan mudah.)

Masalah lain dengan Samba adalah tidak terbatas pada berbagi folder, tetapi juga berbagi printer, pemetaan pengguna dan yang lainnya. Yang saya butuhkan adalah berbagi satu (atau lebih?) Folder dengan tamu Windows.

Apakah ada metode berbagi folder alternatif untuk QEMU yang berfungsi dengan tamu Windows?

Atau adakah cara untuk mengkonfigurasi Samba untuk membatasi dirinya pada serangkaian fitur yang sangat terbatas dan mengintegrasikannya ke dalam QEMU? Itu harus:

  • Tidak semua orang di jaringan harus dapat mengakses folder.
  • pengguna lokal termasuk (jika layak).
  • Tidak menyediakan fungsionalitas lain (berbagi printer).
  • Use case: mengekspos direktori git ke Windows, kompilasi di Windows dan gunakan Linux untuk analisis.
  • Memiliki kecepatan yang dapat diterima, Windows menggunakan virtio-scsi dan virtio-net.
  • Mampu membagikan folder dari host Linux dengan tamu Windows 7.
Lekensteyn
sumber
pertanyaan OS agnostik lebih lanjut: superuser.com/questions/628169/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 六四
1
@CiroSantilli 包子 露 宪 六四 事件 法轮功 Pertanyaan itu ditandai dengan Linux di mana -virtfsberfungsi dengan baik (lihat juga pertanyaan ini), tapi saya tidak mengetahui driver 9p untuk Windows.
Lekensteyn
ya, tidak mengatakan itu adalah penipuan atau apa pun, hanya terkait.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

14

Layanan Samba bawaan QEMU

Opsi tidak berfungsi -net user,smbdisebabkan oleh ketidakcocokan dengan versi Samba yang lebih baru (> = 4). Ini diperbaiki di QEMU v2.2.0 dan yang lebih baru dengan perubahan ini:

(Debian telah meng-backport dua patch terakhir ke 2.1 + dfsg-6 yang ada di Jessie.)

Pemakaian

Anda dapat mengekspor satu folder seperti \\10.0.2.4\qemusaat menggunakan jaringan Pengguna:

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

Ketika QEMU berhasil dimulai dengan opsi-opsi ini, /tmp/qemu-smb.*-*/direktori baru akan dibuat berisi a smb.conf. Jika Anda cukup cepat, maka file ini dapat dimodifikasi untuk membuat jalur hanya baca atau mengekspor lebih banyak folder.

Modus operasi

Daemon samba dijalankan setiap kali port 139 atau 445 diakses melalui jaringan "pengguna". Komunikasi terjadi melalui input / output / kesalahan standar dari proses smbd. Ini adalah alasan mengapa daemon baru gagal, ia akan menulis pesan kesalahannya ke pipa bukannya pesan protokol.

Karena metode operasi ini, daemon tidak akan mendengarkan pada port host, dan oleh karena itu hanya akan dapat diakses oleh tamu. Jadi klien lain dalam jaringan dan bahkan pengguna lokal tidak dapat mengakses folder menggunakan daemon ini.

Karena berbagi printer QEMU v2.2.0 sepenuhnya dinonaktifkan melalui konfigurasi samba, jadi kekhawatiran lain hilang di sini.

Kecepatannya tergantung pada adapter jaringan, jadi disarankan untuk menggunakan driver virtionetkvm di Windows.

Perhatikan juga bahwa daemon dijalankan oleh path absolutnya (biasanya /usr/sbin/smbd) seperti yang ditentukan pada waktu kompilasi (menggunakan --smbdopsi). Setiap kali Anda perlu mencoba biner atau selingan baru smbd, Anda perlu memodifikasi file di jalur itu.

Peringatan lainnya

Executables ( *.exe) harus dapat dieksekusi pada host ( chmod +x FILE) agar tamu dapat memiliki izin. Untuk memungkinkan eksekusi file apa pun, tambahkan acl allow execute always = Trueopsi ke share.

Contoh konfigurasi smb.conf read-only yang memungkinkan eksekusi file apa pun (berdasarkan QEMU v2.2.0):

...
[qemu]
path = / home / peter / windows 
read only = yes
tamu ok = benar
memaksa pengguna = peter 
acl izinkan eksekusi selalu = Benar
Lekensteyn
sumber
Saya menggunakan opsi ini, saya perlu akses baca-tulis. Saya telah memulai kembali layanan qemu dan memperbarui conf yang sesuai. Saya tidak melihat apa pun di folder jaringan di explorer di windows guest. Juga bagaimana cara menemukan IP host (saya berasumsi 10.0.2.4) dalam hal ini di sini? IP tamu saya untuk NIC ini adalah 10.0.2.15. @Lekensteyn - ada ide?
tsar2512
@ tsar2512 Biasanya saya pergi ke Explorer, lalu gunakan Map Network Drive untuk menetapkan huruf \\10.0.2.4\qemu. Akhir-akhir ini saya telah melewatkan langkah itu dan membuka kata path langsung dari dialog Run.
Lekensteyn
6

Pada tahun 2018 cara sederhana untuk berbagi folder antara host Linux & mesin virtual Windows adalah mengaktifkan RDP di Windows guest& terhubung ke vmdengan Remmina Remote Desktop Client & mengaktifkan Shared Folder:

Pengaturan Remmina RDP

Ini membuat folder di bawah PC ini ( folder bersama di Linuxhostname ) & \\tsclient\shared-folder-namejaringan berbagi di dalamnya guest. Anda juga dapat memetakan drive jaringan:

Folder Windows Guest dibagikan

  • Solusi ini tidak perlu sambaberjalan.

  • Diuji di bawah libvirt/ virt-managertetapi harus bekerja dengan virtualisasi apa pun.

Stuart Cardall
sumber
Teknik yang menarik, Pengalihan Sistem File tampaknya menjadi fitur RDP. The xfreerdp /drive:shared-folder-name,/home/user/sharedpilihan harus bekerja juga. Referensi kode sumber: Konfigurasi Remmina , kode perpustakaan FreeRDP .
Lekensteyn
Apakah ini solusi aman tanpa ada bahaya penyerang potensial?
Dave