用 qemu-kvm 啟動虛擬機, 要如何讓 host 與 guest 彼此交換資料檔?
因為 host 與 guest 之間已有網路相通 (請在 guest 下:
route -n
及 ifconfig -a
查看)
所以最簡單的方式, 就是在 host 或 guest 架 openssh-server
然後再另一頭用 ssh 連線或 scp 傳檔。
不過如果 host 與 guest 兩處都有軟體需要輪流去讀寫某個檔案,
或是 host 有某個很大的唯讀檔要分享給 guest,
那麼 ssh 或 scp 可能就比較不適合了。
就像... 如果你有哆啦A夢的任意門, 還會想要經常搬動大家具嗎?
9p 網路檔案系統
類似 qemu 虛擬機的 host 與 guest 之間的目錄任意門,
或是說它類似網路芳鄰, 可以把 host 的一個目錄分享給 guest。
為簡單起見, 以下假設用 阿貴版 finnix live CD 啟動 guest。 比方說, host 上面的 /dl/iso 目錄底下有很多 iso 映象檔要分享給 guest。 iso 檔很大, 又是唯讀的, 此時最適合用 9p 網路檔案系統。 啟動 guest 的時候要多加一個 -virtfs 的選項:
kvm -m 1024 -virtfs local,path=/dl/iso,security_model=passthrough,readonly,mount_tag=iso_imgs -cdrom .../finnix-xyz.iso &
進入 guest 之後, 就可以這樣掛載:
mkdir /mnt/iso
mount -t 9p -o trans=virtio iso_imgs /mnt/iso
- 請把 /dl/iso 改成你要分享的目錄; 而 iso_imgs 則是你自己隨意取的代號, 兩側一致就好, 這樣 guest 才能稱呼 「host 分享給我的那個目錄」, 以便用於 mount 指令。
- 如果 guest 也需要寫入該目錄的檔案, 就不要加 「,readonly」。
- security_model: 對於 「只讀不寫」 或是 「寫入既有檔案」 而言, 這裡填 mapped 或 passthrough , 效果一樣。 當 guest 會在共享目錄建立新檔案時, 兩者才有差。 詳見 這篇公告。 (我沒認真研究。)
- [2015/7/25: 我在 lubuntu 15.04 的 host 上面跑 antix 13.2 的 guest, 沒有設 readonly, 結果 host 的檔案系統就 GG 了。 (是的, guest 有先很小心地先正常關機。) 總之建議一般人一定要用 readonly 選項比較安全。]
也可以在 guest 的 /etc/fstab 裡面加上一列, 這樣未來開機時就會自動掛載:
iso_imgs /mnt/iso 9p trans=virtio,ro 0 1
更完整的解釋, 請見 Qemu 9p Setup 或 KVM: Example Sharing Host files with the Guest。
這裡拿 「分享 iso 檔」 當做範例, 是有原因的... 這樣才能獲得 qemu-kvm 的五層祝福!
沒有留言:
張貼留言
因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。