qemu 不使用 tmpfs 上的磁碟映像啟動任務

qemu 不使用 tmpfs 上的磁碟映像啟動任務

我有 32 位元 Windows 2k3r3 guest(終端伺服器),帶有 4GB guest ram 和交換。

我為來賓交換和使用者的臨時目錄建立了單獨的磁碟映像。

我在主機系統中有足夠的 RAM,並且希望透過將此映像移至 tmpfs 來節省磁碟 IO,但來賓系統不會啟動並顯示以下錯誤訊息:

qemu-kvm: -drive file=/mnt/tmpfs/vh1-tmp.qcow2,if=none,id=drive-ide0-1-1,format=qcow2,cache=none: 無法開啟磁碟 imag│ 4098 qemu 20 0 4949M 4146M 5496 S 28.5 17.2 1h00:31 /usr/bin/qemu-kvm -name vh1 -S -M pc-1.3 -cpu kvm64 -enable- e /mnt/pfpfs/vh1-tmp.

主機系統:

#uname-a
Linux srv-vh1.su.local 3.7.10-1.16-default #1 SMP 5 月 31 日星期五 20:21:23 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

srv-vh1:/mnt/tmpfs # virsh 版本
針對函式庫編譯:libvirt 1.0.2
使用庫:libvirt 1.0.2
使用API​​:QEMU 1.0.2
運行管理程序:QEMU 1.3.0

srv-vh1:/mnt/tmpfs # 空閒
             快取的已使用空閒共享緩衝區總數
記憶體:24627548 5084724 19542824 0 60640 138792
-/+ 緩衝區/快取:4885292 19742256
交換:8384444 0 8384444

srv-vh1:/mnt/tmpfs # cat /etc/mtab | grep tmpfs
devtmpfs /dev devtmpfs rw,關係,大小= 12296608k,nr_inodes = 3074152,模式= 755 0 0
tmpfs /dev/shm tmpfs rw,relatime 0 0
tmpfs /運行 tmpfs rw,nosuid,nodev,relatime,模式=755 0 0
tmpfs /sys/fs/cgroup tmpfs rw,nosuid,nodev,noexec,mode=755 0 0
tmpfs /mnt/tmpfs tmpfs rw,關係 0 0
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
tmpfs /tmp tmpfs rw,關係 0 0
tmpfs /var/lock tmpfs rw,nosuid,nodev,relatime,mode=755 0 0
tmpfs /var/run tmpfs rw,nosuid,nodev,relatime,mode=755 0 0

srv-vh1:/mnt/tmpfs # df
檔案系統已使用 1K 區塊 可用已使用% 安裝點
devtmpfs 12296608 68 12296540 1% /dev
tmpfs 12313772 0 12313772 0% /dev/shm
tmpfs 12313772 6772 12307000 1% /運行
/dev/md1 454131992 218835836 212227596 51% /
tmpfs 12313772 0 12313772 0% /sys/fs/cgroup
tmpfs 12313772 192 12313580 1% /mnt/tmpfs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
tmpfs 12313772 20 12313752 1% /tmp
tmpfs 12313772 6772 12307000 1% /var/鎖
tmpfs 12313772 6772 12307000 1% /var/run

srv-vh1:/mnt/tmpfs # virsh 池資訊 tmpfs
名稱:tmpfs
UUID:6287028a-9faf-f762-20de-d36d63657be3
狀態:工作中
持續:是的
自動啟動:是
容量:11.74 GiB
分: 0,00
可用空間:11.74 GiB

srv-vh1:/mnt/tmpfs # ls -la
總計 196
drwxrwxrwt 2 根 60 сен 9 11:42 。
drwxrwxr-x 4 qemu qemu 4096 сен 8 19:39 ..
-rw-rw-rw- 1 root root 197120 сен 9 11:42 tserver-tmp.qcow2

我究竟做錯了什麼 ?

答案1

顯然,如果您在任何不支援Direct IO 的主機檔案系統上為磁碟映像檔案設定cache=NONE,Virt-Manager 目前將給出一條不太有用的錯誤訊息,指出「某事...無效參數」並拒絕啟動來賓虛擬機器。

tmpfs 就是此類檔案系統的一個範例(不支援直接 IO)。另一個這樣的檔案系統,也許你可以選擇停用Direct IO 是GlusterFS(在我也遇到了與Sergei 相同的問題並正在研究錯誤之前,我沒有聽說過它。)對於tmpfs,不支援Direct IO 似乎是一個技術限製或目前的設計衝突,我不知道將來是否會/可以糾正。

就我而言,我為在 CentOS7 上運行的 Win7Pro Guest VM 放置了一個 3.6 GB Ramdisk,並在 Virt-Manager 中為該 ramdisk 設定了 cache=NONE。 tmpfs img 使用的其他選項是 virtio 和 raw。虛擬機器將拒絕啟動,並出現相同/相似的錯誤,並顯示“...無效參數”。

有關技術細節和直接來自 Redhat 工程師和開發人員(為功能快取=NONE 編寫修補程式並維護(?)Virt-Manager (Daniel Berrange))的說明,請參閱以下連結中的討論:

https://bugs.launchpad.net/nova/+bug/959637

引用上面 URL 中的 Daniel 的話:「 > 無法開啟磁碟映像 /mnt/vmstore/instances/instance-0000001a/disk:參數無效

可能意味著檔案系統不支援 Direct IO。 AFAIK,除了 tmpfs 之外的所有檔案系統都應該支援這個..”

此外,Daniel 繼續說:「- 那麼我們要做的就是 [....] 檢查儲存磁碟區是否支援直接 IO。如果支持,則使用 cache=none,否則回退到 cache= writethrough 不使用直接I/O ,但仍然是安全的。

就我而言,我能夠驗證為 tmpfs img 檔案設定 cache=NONE 並未啟動虛擬機,並顯示了所討論的錯誤。如果快取設定為“預設”或明確“直寫”,則它能夠成功啟動虛擬機器。使用「回寫」是沒有意義的,因為這個檔案系統既是消耗性的,又完全在 RAM 中,所以顯然我沒有使用回寫。

希望有幫助!

答案2

為什麼不給客人更多的內存,這樣就不需要交換呢?

srv-vh1:/mnt/tmpfs # ls -la
total 196
drwxrwxrwt 2 root root     60 сен  9 11:42 .
drwxrwxr-x 4 qemu qemu   4096 сен  8 19:39 ..
-rw-rw-rw- 1 root root 197120 сен  9 11:42 tserver-tmp.qcow2

我注意到您將資料夾擁有者設定為 qemu:qemu,如果您以其他使用者身分執行 qemu,那麼您可能需要將映像檔的擁有者從 root 變更為 qemu

答案3

這是一個錯誤。 tmpfs 不支援cache=none.

相關內容