QEMU Windows 客戶機和 Linux 主機之間的共享文件夾
過去,我使用過 Virtual Box,它非常支持與 Windows 來賓共享主機上的文件夾。我正在為 QEMU 尋找類似的功能。
該文件建議公開在網路中某處執行的 Samba 伺服器,或使用
-net user,smb=/path/to/folder
啟動 samba 伺服器。
-net user,smb
我對 QEMU的選擇沒有運氣。它所做的只是啟動smbd
(由於埠衝突而與本地執行的另一個服務衝突)。可以說,這是無法使用的,尤其是考慮到多個客人。(對於 Linux,-virtfs
(計劃 9)可用於輕鬆共享文件夾。)Samba 的其他問題是它不僅限於文件夾共享,它還進行列印機共享、使用者映射等。我只需要與 Windows 來賓共享一個(或多個?)文件夾。
QEMU 是否存在與 Windows 來賓一起使用的替代文件夾共享方法?
或者有沒有辦法配置 Samba 以限制自己使用非常有限的功能集並將其集成到 QEMU 中?它應該:
- 並非網路中的每個人都應該能夠訪問該文件夾。
- 包括本地使用者(如果可行)。
- 不提供其他功能(列印機共享)。
- 案例:向 Windows 公開一個 git 目錄,在 Windows 中編譯並使用 Linux 進行分析。
- 速度可以接受,Windows 使用 virtio-scsi 和 virtio-net。
- 能夠與 Windows 7 來賓共享來自 Linux 主機的文件夾。
QEMU 內置的 Samba 服務
無法執行的
-net user,smb
選項是由於與較新的 Samba 版本 (>= 4) 不兼容造成的。這在 QEMU v2.2.0 和更新版本中得到了修復,並進行了以下更改:
- b87b8a8 slirp/smb:將 ncalrpc 目錄移動到 tmp(自 v2.1.0 起)
- 44d8d2b net/slirp:為 smbd 指定日誌庫(自 v2.2.0 起)
- 7912d04 slirp/smbd:修改/設置生成的 smbd.conf 中的幾個參數(從 v2.2.0 開始,也禁用列印機)
(Debian 已將後兩個更新檔移植到 Jessie 中的 2.1+dfsg-6。)
用法
\\10.0.2.4\qemu
您可以像使用使用者網路一樣導出一個文件夾:qemu-system-x86_64 \ -net user,smb=/absolute/path/to/folder \ -net nic,model=virtio \ ...
當使用這些選項成功啟動 QEMU 時,
/tmp/qemu-smb.*-*/
將創建一個包含smb.conf
. 如果您的速度足夠快,則可以修改此文件以使路徑為只讀或導出更多文件夾。操作模式
只要通過“使用者”網路訪問埠 139 或 445,就會執行 samba 守護程序。通過 smbd 程序的標準輸入/輸出/錯誤進行通信。這就是較新的守護程序失敗的原因,它將錯誤消息寫入管道而不是協議消息。
由於這種操作方法,守護程序不會偵聽主機埠,因此只能由來賓訪問。因此,網路中的其他客戶端甚至本地使用者都無法使用此守護程序訪問文件夾。
由於通過 samba 配置完全禁用了 QEMU v2.2.0 列印機共享,因此這裡不再需要擔心。
速度取決於網卡,所以建議在Windows下使用virtio
netkvm
驅動。另請注意,守護程序是
/usr/sbin/smbd
按照編譯時指定的(使用--smbd
選項)的絕對路徑(通常)執行的。每當您需要嘗試新的二進製文件或 interposesmbd
時,您都需要修改該路徑處的文件。其他注意事項
執行檔 (
*.exe
) 必須在主機 (chmod +x FILE
) 上可執行,來賓才能擁有執行權限。要允許執行任何文件,請將acl allow execute always = True
選項添加到共享中。允許執行任何文件的只讀smb.conf 配置範例(基於 QEMU v2.2.0):
... [qem] 路徑= */home/peter/windows* 只讀=**是** 客人好=真 強制使用者 = *peter* **acl 允許始終執行 = True**