virtiofs: virtio-fs 主機<->訪客共享檔案系統¶
版權所有 (C) 2019 Red Hat, Inc.
簡介¶
Linux 的 virtiofs 檔案系統實現了一個用於半虛擬化 VIRTIO “virtio-fs” 裝置的驅動程式,用於訪客<->主機檔案系統共享。它允許訪客掛載主機上匯出的目錄。
訪客通常需要訪問位於主機或遠端系統上的檔案。用例包括在安裝期間向新訪客提供檔案、從位於主機上的根檔案系統啟動、無狀態或臨時訪客的持久儲存,以及在訪客之間共享目錄。
儘管可以使用現有的網路檔案系統來完成某些這些任務,但它們需要難以自動化的配置步驟,並且它們將儲存網路暴露給訪客。virtio-fs 裝置旨在透過提供無需聯網的檔案系統訪問來解決這些問題。
此外,virtio-fs 裝置利用訪客和主機的共存來提高效能並提供網路檔案系統無法實現的語義。
用法¶
使用標籤 myfs 在 /mnt 上掛載檔案系統
guest# mount -t virtiofs myfs /mnt
有關如何配置 QEMU 和 virtiofsd 守護程式的詳細資訊,請參閱 https://virtio-fs.gitlab.io/。
掛載選項¶
virtiofs 支援通用的 VFS 掛載選項,例如,remount、ro、rw、context 等。它還支援 FUSE 掛載選項。
atime 行為¶
與 atime 相關的掛載選項(例如 noatime、strictatime)將被忽略。virtiofs 的 atime 行為與主機上匯出的目錄的底層檔案系統的行為相同。
內部結構¶
由於 virtio-fs 裝置使用 FUSE 協議進行檔案系統請求,因此 Linux 的 virtiofs 檔案系統與 FUSE 檔案系統客戶端緊密整合。訪客充當 FUSE 客戶端,而主機充當 FUSE 伺服器。核心和使用者空間之間的 /dev/fuse 介面被 virtio-fs 裝置介面取代。
FUSE 請求被放入 virtqueue 中並由主機處理。緩衝區中的響應部分由主機填充,訪客處理請求完成。
將 /dev/fuse 對映到 virtqueue 需要解決 /dev/fuse 和 virtqueue 之間語義的差異。每次讀取 /dev/fuse 裝置時,FUSE 客戶端可以選擇要傳輸的請求,從而可以優先處理某些請求。Virtqueue 具有佇列語義,並且無法更改已排隊請求的順序。如果 virtqueue 已滿,這尤其重要,因為此時無法新增高優先順序請求。為了解決此差異,virtio-fs 裝置使用專門用於優先順序高於普通請求的“hiprio” virtqueue。