我有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 。