qemu不要求tmpfs上的磁盘镜像

我有32位Windows 2k3r3客人(terminal服务器)与4GB客人ram和交换。

我为客人交换和用户的临时目录创build了单独的磁盘映像。

我在主机系统中安装了RAM,并希望通过将此映像移动到tmpfs来节省磁盘IO,但guest虚拟机不会以此错误消息启动:

 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/tmpfs/vh1-tmp.qcow2:无效参数

主机系统:

 #uname -a
 Linux srv-vh1.su.local 3.7.10-1.16-default#1 SMP Fri May 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
运行虚拟机pipe理程序:QEMU 1.3.0

 srv-vh1:/ mnt / tmpfs#free
             caching总共使用的空闲共享缓冲区
 Mem:24627548 5084724 19542824 0 60640 138792
 -  / + buffers / cache:4885292 19742256
交换:8384444 0 8384444

 srv-vh1:/ mnt / tmpfs#cat / etc / mtab |  grep tmpfs
 devtmpfs / dev devtmpfs rw,relatime,size = 12296608k,nr_inodes = 3074152,mode = 755 0 0
 tmpfs / dev / shm tmpfs rw,relatime 0 0
 tmpfs / run tmpfs rw,nosuid,nodev,relatime,mode = 755 0 0
 tmpfs / sys / fs / cgroup tmpfs rw,nosuid,nodev,noexec,mode = 755 0 0
 tmpfs / mnt / tmpfs tmpfs rw,relatime 0 0
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 tmpfs / tmp tmpfs rw,relatime 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 / lock
 tmpfs 12313772 6772 12307000 1%/ var / run

 srv-vh1:/ mnt / tmpfs#virsh pool-info 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 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

我究竟做错了什么 ?

显然,如果在任何不支持Direct IO的主机文件系统上为某个磁盘映像文件设置cache = NONE,Virt-Manager将会给出一个不太有用的错误消息,说“Something something … Invalid Argument”并拒绝启动来宾VM。

这种文件系统的一个例子 – 不支持直接IO–是tmpfs。 另一个这样的文件系统,也许你可以select禁用直接IO是GlusterFS(我没有听说过之前,我也遇到了同样的问题,谢尔盖和正在研究的错误。)对于tmpfs,不支持直接IO似乎是一个技术限制或目前的devise冲突,我不知道将来是否会得到纠正。

在我的情况下,我已经为在CentOS7上运行的Win7Pro Guest VM安装了3.6 GB的虚拟硬盘,并且在Virt-Manager中为虚拟硬盘设置了cache = NONE。 tmpfs img使用的其他选项是virtio和raw。 虚拟机将拒绝以相同/类似的错误开始说“…无效的参数”。

有关红帽工程师和开发人员的技术细节和笔记,这些技术人员和开发人员编写了用于特性caching的补丁程序= NONE并维护(?)Virt-Manager(Daniel Berrange),请参阅以下链接的讨论:

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

从上面的URL引用Daniel:“>无法打开disk image / mnt / vmstore / instances / instance-0000001a / disk:无效的参数

可能意味着文件系统不支持Direct IO。 AFAIK,除tmpfs之外的所有文件系统应该支持这个..“

另外,Daniel继续说道:“那么我们要做的就是检查存储卷是否支持Direct IO,如果是,则使用cache = none,否则回退到cache =它不使用直接I / O,但仍然是安全的。

在我的情况下,我能够validation为tmpfs img文件设置caching= NONE没有启动虚拟机,并显示错误的讨论。 如果将caching设置为“默认”或显式“直写”,则能够成功启动虚拟机。 因为这个文件系统是可以消耗的,而且完全在RAM中,所以没有任何意义,因为显然我没有使用回写。

希望有所帮助!

为什么不给客人更多的内存,所以它不需要交换?

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,那么你可能想要将图像文件的所有者从根改为qemu

这是一个错误。 tmpfs不支持cache=none