解決 UTM Linux 虛擬機共享資料夾問題:為什麼 SPICE WebDAV 無效與 VirtIO-FS 的正確用法
在 Apple Silicon 的 UTM 上跑 Ubuntu 時,照著網路上安裝 spice-vdagent 卻無法掛載共享資料夾?這是因為用錯了協定。

問題描述:為什麼網路上的教學都沒用?
如果你在 macOS (Apple Silicon) 上使用 UTM 執行 Ubuntu 虛擬機,你可能遇過這個情境:你想設定宿主機 (Host) 與虛擬機 (Guest) 的共享資料夾,於是上網搜尋教學。
絕大多數的教學(例如官方某些舊文件或社群文章)會告訴你:
- 在 Guest 安裝
spice-vdagent和spice-webdavd。 - 使用 WebDAV 協定掛載 (Port 9843)。
- 結果:什麼事都沒發生,或者連線被拒絕。
這個問題的根源不在於指令打錯,而在於底層虛擬化架構的差異。
First Principle: 虛擬化後端的差異
UTM 其實是兩個不同虛擬化技術的前端介面,你的「共享資料夾」選項取決於你選擇的後端 (Backend):
| 特性 | QEMU Backend | Apple Virtualization (AVF) |
|---|---|---|
| 適用場景 | x86 模擬、舊版相容、Windows Guest | M系列晶片跑 ARM Linux (效能首選) |
| 共享技術 | SPICE WebDAV / VirtFS (9p) | VirtIO-FS |
| 傳輸原理 | 網路協定封裝 (Network Stack) | 共享記憶體映射 (DAX/Shared Memory) |
大部分 Apple Silicon 使用者在建立 Linux VM 時,預設使用的是 Apple Virtualization。在這種架構下,系統根本不支援 SPICE WebDAV 通道,而是直接由 macOS kernel 提供高效能的 VirtIO-FS。
這就像是你拿著電話線 (WebDAV) 的使用說明書,卻試圖去操作一個量子傳送門 (VirtIO-FS)。
正確解決方案 (The Fix)
步驟一:宿主機設定 (Host Side)
首先確認你的 UTM 設定。
- 打開 VM 設定 -> Sharing (共享)。
- Directory Share Mode:在 Apple Virtualization 下,你通常看不到 WebDAV 選項,這裡直接是 VirtIO-FS 的實作。
- 新增你要分享的資料夾(如下圖所示,例如
/Users/doeshing/...)。

步驟二:虛擬機掛載 (Guest Side)
進入 Ubuntu 後,你不需要安裝任何 SPICE 相關的套件(如果已經裝了也可以留著,但不影響此功能)。
只要你的 Linux Kernel 版本在 5.4 以上(Ubuntu 20.04+ 均符合),Kernel 已經內建支援。請執行以下指令:
# 1. 建立掛載點
mkdir -p ~/shared
# 2. 掛載 VirtIO-FS
# 注意:'share' 是 UTM (Apple Backend) 預設使用的 tag 名稱
# 這與你實際分享的資料夾名稱無關
sudo mount -t virtiofs share ~/shared執行後,使用 ls ~/shared 應該就能立刻看到宿主機的檔案。
為什麼是
share? 在mount指令中,第一個參數通常是裝置路徑 (如/dev/sdb1)。但在 VirtIO-FS 中,這個參數是 Mount Tag。UTM 的 Apple Virtualization 實作將這個 Tag 寫死 (Hardcoded) 為share。
步驟三:設定開機自動掛載 (Persistence)
手動掛載在重開機後會消失。為了讓它永久生效,我們需要修改 /etc/fstab。
echo "share /home/your_username/shared virtiofs rw,nofail,_netdev,noatime 0 0" | sudo tee -a /etc/fstab請務必將
/home/your_username/shared替換為你的實際絕對路徑。 另外,nofail參數非常重要。如果宿主機移除了該共享資料夾,這個參數能防止 Ubuntu 在開機時進入 Emergency Mode 卡死。
參數說明:
- share:UTM 在 Apple Virtualization 模式下強制使用的標籤名稱,不可更改 。
- virtiofs:使用的檔案系統協定,效能優於 9p 。
- rw:設定為讀寫模式。
- nofail:關鍵參數。若宿主機未啟用共享或發生錯誤,系統會忽略此掛載並繼續開機,避免卡在緊急模式(Emergency Mode)。
- _netdev:通知系統這是一個網路/虛擬裝置,確保在驅動程式載入後才嘗試掛載。
- noatime:不更新存取時間,可提升效能 。
測試掛載:執行以下指令確認設定無誤(如果沒有錯誤訊息即代表成功)
sudo systemctl daemon-reload
sudo mount -a重開機後,宿主機的共享資料夾應該就會自動出現
效能分析:為什麼 VirtIO-FS 比較好?
如果你曾經成功用過 WebDAV 或 Samba (SMB) 進行共享,你會發現傳輸大檔案時 CPU 使用率飆高,且速度受限。
VirtIO-FS 使用了 DAX (Direct Access) 技術。它允許 Guest OS 的虛擬 CPU 直接映射 (Map) 宿主機的 Page Cache 到自己的記憶體位址空間。
- 傳統方式 (WebDAV/SMB):讀取檔案 -> Host 複製到 Buffer -> 封裝成網路封包 -> Guest 接收 -> 解包 -> 複製到 User Space。(多次 Memory Copy)
- VirtIO-FS:讀取檔案 -> 直接讀取 Host 的記憶體。(Zero Copy)
總結
在 UTM (Apple Silicon) 上跑 Linux:
- 不要執著於
spice-webdavd。 - 確認 UTM 設定中有加入共享資料夾。
- 使用
mount -t virtiofs share ~/shared。
保持簡單,回歸原本的架構設計,問題就迎刃而解。
來源
Linux
Documentation for UTM virtual machines
Directory Sharing not working, though SPICE Guest Tools are installed successfully · utmapp/UTM · Discussion #3583
I did install SPICE Guest Tools, but Directory sharing is not working. Clipboard copy past and internet is working. I tried multiple times after creating new VMs but it's not working. Following is ...
Shared directories | Apple Developer Documentation
Configure devices that share directories from the host into the guest system.

Cannot access host FS from Linux guest · utmapp/UTM · Discussion #3786
Describe the issue From an Ubuntu guest (with Spice tools installed by apt install spice-vdagent spice-webdavd davfs2) I could not get access to the host. I tried mounting via WebDAV by adding it t...
VirtioFS Setup Guide for Ubuntu · community-scripts/ProxmoxVE · Discussion #6474
VirtioFS Setup Guide for Ubuntu on Proxmox Introduction This guide provides step-by-step instructions for setting up VirtioFS on an Ubuntu virtual machine running on Proxmox. VirtioFS is a shared f...

