動機:我之前寫過一篇在Linux與Windows雙重開機的電腦共享Steam收藏庫的操作,兩個系統之間能共享大部分遊戲檔案,不需要重新下載。
事實上,這不一定是物理上的雙重開機,實體機搭配虛擬機也是可行的。
大部分時候我都在Linux Host玩Steam遊戲,但是遇到怎麼樣都不能用Proton轉譯的遊戲的時候,我就會用Windows虛擬機玩。然後就會遇到如何與虛擬機分享遊戲目錄的問題。
從效能方面考慮,我肯定不會同意網路檔案系統,不論是NFS、SSHFS、SMB都是太慢了。
不像Virtual Bix,Virt Manager沒有好的共享資料夾方案。
雖然說,目前有一個很有潛力的方案叫做virtio-fs能夠共享資料夾,讓兩個系統同時存取硬碟,不過實務上我測試這不是很穩定的方案,exe放在共享的資料夾直接執行很容易出錯。
所以我只好直通硬碟了。把Steam收藏庫放在一個獨立的硬碟。
嚴格來說這不是直通啦,因為虛擬機裡面的作業系統依然是透過QEMU提供的驅動與硬碟互動,並非是完全將硬碟的控制器直通進去。所以應該稱作raw disk passthrough比較正確。
1. 硬碟掛載的設定#
我的想法是,讓硬碟能夠自由被Linux或Windows虛擬機掛載,所以開機不要自動掛載。確保要使用的硬碟不在/etc/fstab
裡面。
使用桌面環境的時候,通常檔案管理員允許點一下重新掛載硬碟。
另外,關於檔案系統問題,如果是偏向Windows的話當然是把硬碟格式化為NTFS比較好。
如果檔案系統為EXT4或BTRFS,Windows需要另外裝驅動才能讀取。例如裝WinBtrfs讀BTRFS。
2. Virt Manager直通實體硬碟給虛擬機#
- Linux需要先取消掛載硬碟:
lsblk
sudo umount "掛載點"
接著使用
ls -l /dev/disk/by-id/
指令找出硬碟代號Virt Mavnager點選新增硬體,點選新增硬碟,在方框輸入
/dev/disk/by-id/ata-硬碟代號
,匯流排選VirtIO如果Windows開機後讀不到硬碟,首要的步驟是安裝VirtIO驅動,然後再安裝對應檔案系統的驅動。不要傻傻地格式化呀。
虛擬機關機之後,方能在宿主機將硬碟重新掛載。