Articles of kvm virtualization

iptablesstring匹配适用于VM主机,但不适用于guest虚拟机

已经在带有桥接接口的Linux KVM虚拟机(Fedora 12&13 64位)上testing了一些iptablesstring匹配规则,例如在其他端口80规则之前的INPUT链中的规则 -m string –algo bm –icase –string“phpMyAdmin”-j LOG – 日志前缀“phpmyadmin test” 但是,尽pipe事实上“phpMyAdmin”的各种GET命令正在触发服务器日志,但并没有logging任何stream量。 另一方面,如果我在-m physdev -physdev-is-bridged -j ACCEPT规则之前将相同的规则放在KVM主机上的FORWARD链中,那么这些GET请求将被成功logging。 有谁知道这是为什么,或者它可能是guest虚拟机的virtio局域网驱动程序中的错误? 我知道GET请求有可能跨越多个数据包,但是我用tcpdump捕获certificate这不是问题。 而且还要提到,客人INPUT链中的其他规则正在按预期工作。 只有string匹配规则不起作用的问题。

KVM 802.1q(标记的VLAN设置)

我已经在KVM桥接networking中做了很多关于VLAN标记的内容,但是对于需要标记什么(物理networking设备或连接到这些设备的网桥)以及VM guest虚拟机是否需要标记它是内部设备,或者当访客虚拟NIC连接到带标记的网桥时发生在主机端。 免责声明 :我根据从一些博客条目/技术页面中挑选出的点点滴滴做出了一些假设。 像很多事情一样,完成这个任务似乎有许多方法。 如果我完全不正确,有人知道一个好的指导,给我的url,我会修改我做了什么,如果它不起作用回来 我有一些KVM虚拟主机(包括他们的客人)当前连接到一个networking。 我想细分一下,这样就有了一个逻辑上独立的networking供less数客人使用(但并不明显)。 我已经做了很多关于如何完成这个任务的阅读,但是对实际过程有一些基本的问题。 设置: kvmhost1 为eth0 BR0 kh1guest1 eth0(连接到kvmhost1 br0) kh1guest2 eth0(连接到kvmhost1 br0) kvmhost2 为eth0 BR0 br0.10(标记为VLAN10) kh2guest1 eth0(连接到kvmhost2 br0) kh2guest2 eth0(连接到kvmhost2 br0.10) kvmhost3 为eth0 BR0 br0.10(标记为VLAN10) kh3guest1 eth0(连接到kvmhost3 br0) kh3guest2 eth0(连接到kvmhost3 br0.10) 我在这里做一些假设: 所有主机/客人都需要启用802.1q 所有需要访问标记VLAN的主机都需要一个额外的桥接器,标记在VLAN上 任何需要访问标记VLAN的访客虚拟机需要将其networking连接到标记的网桥(主机上的br0.10) 请原谅我的无知,但是我对VLAN的了解还是非常有限的,到目前为止,我只是在物理层面上处理过这些问题(NIC转换为VLAN交换端口) 任何帮助将是伟大的,甚至是一个指导正确的方式来完成这一点。

Linux绑定(balance-tlb),KVM访客和L2交换机=单播泛滥?

我的networking上有一个单播洪泛问题,当我将一些软件移动到虚拟客户机时,这个问题就开始了。 看起来与这里报告的非常相似: 在Linux中绑定接口时切换洪泛 。 这个问题可以追溯到2012年…所以也许现在有一个更好的解决scheme,也许在Linux / KVM方面。 在下面,我将尝试解释我执行的体系结构和故障排除步骤。 我希望有人能给我一些提示,也许一个解决scheme! 提前致谢! build筑 服务器 Linux主机与PROXMOX 4.1和几个Windows虚拟机。 主机有4个Gbit以太网接口(MAC地址为A,B,C和D),用balance-tlb方法绑定。 然后绑定到虚拟机。 因此每个VM都有自己的MAC地址(MAC地址为X,Y,Z,…)。 托pipe在虚拟机上的软件与现场的许多设备进行交互。 networking 服务器连接到瞻博networking交换机,然后连接到广泛的思科networking。 一切都是二级。 问题 在思科networking上,我不时看到单播风暴。 看来,他们开始每5分钟或其倍数。 我分析了stream量,我发现突然间,从交换机的所有物理端口(在同一个VLAN上)复制了某些设备到某个虚拟机的stream量(反之亦然)。 几秒钟之后,问题就解决了。 理念 阅读思科文档(关于单播泛滥和MAC“老化时间”),以及上述链接,我发现这个问题可能是由于虚拟机的MAC地址在networking上并不经常出现,所以在一定的“老化时间”,交换机开始转发这样的stream量到所有端口,直到他们发现主机在哪里。 故障排除 我在networking上连接了一台笔记本电脑,并开始从一台虚拟机上ping它。 我嗅闻笔记本电脑上的数据包。 从这我可以看到: 来自虚拟机的ARP请求,使用自己的MAC地址作为MAC源(比如说X) 从笔记本电脑的ARP回复,使用MAC源地址(L)和目的地址(MAC地址(X))作为MAC源, 来自虚拟机的ping请求,使用绑定的物理以太网端口(A,B,C,D,以及它们中的三个之间的不时切换)的MAC地址之一作为MAC源,并且作为MAC目的地L 从笔记本电脑的ping回复,使用作为MAC源L和作为MAC目的地的虚拟机MAC地址(X) 基本上,似乎除了第一个ARP请求之外,虚拟机从来没有出现在具有自己的MAC地址(X)的笔记本电脑上,而总是以A,B,C或D(随时间变化)出现。 但是,笔记本电脑总是响应X. 解? 我读到,在balance-tlb模式下,stream量从不同的接口stream出,这取决于负载。 但是,我认为这种行为与虚拟机出现在networking上的物理接口的源MAC地址一起使用的事实可能会产生我报告的问题。 如果这是正确的,是否有人知道是否有办法始终强制使用VM自己的MAC地址进行每一个通信? (例如,它已经发生了ARP请求)或者也许解决scheme是在别的地方? 我以为我可以设置Windows虚拟机每隔3分钟重置ARP表…但是这对我来说似乎有点太蛮横… 🙂 再次感谢任何帮助! 编辑:我确认,如果在洪水事件我快速login到相应的虚拟机,并发出ARP表重置,我看到来自虚拟机的新ARP请求(告诉自己的MAC地址到networking),风暴立即停止。

如何将添加磁盘添加到基于Windows 2008 KVM的来宾?

我有一个运行在Ubuntu 10主机上的基于Win 2008 KVM的访客虚拟机。 这是22G的原始图像。 我想添加一个“数据”驱动器,在客户机上显示为“D:\”驱动器。 我首先创build一个原始图像使用: qemu-img create -f raw ~/vmdisk2.img 50G 然后,尝试使用virsh attach-disk来附加它。 当没有工作,我试着直接编辑虚拟机的XML文件。 两者似乎都没有工作。 对于如何做到这一点,以及最佳做法是什么,我将不胜感激。 我想保持基本图像小,以便我可以克隆它(希望),然后根据应用程序附加必要的存储。 更新:添加第二个驱动器之前的vm的xml: <domain type='kvm'> <name>win08e-vm1</name> <uuid>183a4ba0-1c0b-0b04-ad01-aa7c3a4cb390</uuid> <memory>1048576</memory> <currentMemory>1048576</currentMemory> <vcpu>2</vcpu> <os> <type arch='x86_64' machine='pc-0.12'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> <pae/> </features> <clock offset='localtime'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/bin/kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/var/lib/libvirt/images/win08e-vm1.img'/> <target […]

KVM QEMU丢失USB设备

我有一个KVM Qemu设置。 我正在将USB设备映射到运行Windows Vista的虚拟机。 我得到了设备映射,一切都很好。 突然间,该设备在Vista中消失。 如果我在Linux中执行“lsusb”,它会显示出来,如果我在qm中运行“info usbhost”,它会显示设备正在被映射。 有任何想法吗? 没有太多的使用点

Ubuntu服务器mdadm drbd ocfs2 kvm挂在沉重的文件阅读

我已经部署了四个Ubuntu 10.04服务器。 它们在一个集群场景中两两相连。 在双方我们有软件raid1磁盘,drbd8和OCFS2和一些kvm机器与qcow2磁盘上运行。 我遵循这个: 链接 corosync仅用于DRBD和OCFS,kvm机器是“手动”运行的 当它工作的时候很好:性能良好,I / O性能好,但是在特定时间,两个簇中的一个开始挂起。 然后,我们试着只打开一台服务器,并挂起相同的。 这似乎发生在一个虚拟机发生沉重的读取,即在rsyn备份期间。 当事实发生时,虚拟机不再可及,真正的服务器响应延迟很好,但没有屏幕和ssh可用。 我们所能做的只是强制关机(按住button)并重新启动,当它再次打开时,drbd正在重新同步。 所有的时间,我们看到这样的事实。 今天早上,在一个星期的一阵痛苦之后,另一个集群挂了,但它有不同的moteherboard,ram,kvm实例。 什么是类似的阅读rsyncscheme和西方数字RAID Edistion磁盘两侧。 有人可以给我一些解决这个问题的build议吗? 更新:我将qcow2中的所有映像转换为raw,并使用noatime和nodiratime从虚拟机中挂载文件系统。 我用的是rsync的ionice,但是今天早上当用户从samba共享中读取大量文件时,它又被挂起了。 现在我正在把虚拟机从ocfs2想象成ext3,但是这真的是一个失败……任何想法都是值得欢迎的。

OpenNebulapipe理的libvirt不允许访问/ dev / kvm

我有一个新的开放星云3.2.1安装,我试图去工作,并pipe理一些新鲜安装的debian挤kvm主机。 我的问题是,当Open Nebula部署VM时,KVM进程无法访问主机上的/dev/kvm设备。 我已经根据文档设置了一切: root@onhost1:~# ls -al /dev/kvm crw-rw—- 1 root kvm 10, 232 Feb 8 11:24 /dev/kvm root@onhost1:~# id oneadmin uid=500(oneadmin) gid=500(oneadmin) groups=500(oneadmin),106(kvm),108(libvirt) libvirt/qemu.conf has: user = "oneadmin" group = "oneadmin" 当libvirt创build虚拟机时,它们没有设置任何辅助组,因此进程无法通过文件权限访问/dev/kvm 。 好吧,公平的,虽然开放星云文件似乎表明它应该这样设置。 我已经尝试安装cgroups来尝试解决这个问题。 在我这样做后,kvm进程具有以下cgroup条目: 1:devices,cpu:/libvirt/qemu/one-29 对应于: /dev/cgroup/libvirt/qemu/one-29/devices.list:c 10:232 rwm 我对cgroup的工作方式缺乏了解,表明这应该允许进程访问/dev/kvm ,但是不能。 我可以通过添加一个ACL条目( setfacl -mu:oneadmin:rw /dev/kvm )来使其工作,但是这看起来不对。 不应该打开星云/ libvirt处理这个? 什么是正确的改变? 文件是否应该更改? 我错过了什么吗?

用cgroups限制VM IO

我正在使用cgroups来限制虚拟机所使用的libvirt对cgroups的支持。 所以,我从虚拟机的'.img'文件所在的驱动器上的'ls -lL'中获取设备的主要/次要编号。 但是,当我试图限制IO,我得到一个错误 – root@Silver:/sys/fs/cgroup/blkio/sysdefault/libvirt/qemu/debian1# echo "8:6 1048576" > blkio.throttle.read_bps_device bash: echo: write error: No such device 任何想法我做错了什么?

Windows 2k3服务器作为KVM客户端

只是想知道是否有其他人有安装在KVM下的Windows 2K3服务器的问题。 今天晚上我已经尝试了几次,并在安装第一次启动的时候继续得到“不支持的平台”。 我已经使用i686,有acpi和apic了,因为它是4GB RAM,200GB硬盘,每次都失败。 我已经做了一些狩猎,但在谷歌上找不到任何结论。 它在KVM站点上被列为受支持的客户端。 主机是Ubuntu 10.04 64位,qemu-kmvpipe理程序。 驱动程序,我不知道你在那里要求什么,但磁盘是一个标准的(我相信)32位的Win2K3服务器。 我正在尝试安装批量标准服务器安装。 我用win2K8完成了没有问题,但是这个2k3安装每次都失败。

KVM访客和IPv6,连接在一段时间后中断

目标: 将公共可用的IPv6地址分配给每个来宾 问题: 工作IPv6连接突然停止工作。 启动一切后(networking主机,客人)一切正常。 我可以通过SSH从外部连接到客人。 我可以通过ipv6连接到外部,如此等等。 但几分钟后连接断开。 ping6说 目的地不可达:地址不可达 我可以ping桥,但不是客人了 我的设置: KVM over libvirt的Ubuntu 12.04。 我有多个客户端通过networking桥接通过IPv4连接。 这工作正常。 KVM主机具有可靠的IPv6连接。 我通过VIRSH分配了一个IPv6地址给网桥。 我使用radvd向客人宣传IPv6地址。 我在/etc/sysctl.conf中设置了以下内容 net.ipv6.conf.all.forwarding = 1 net.ipv6.conf.all.autoconf = 0 net.ipv6.conf.all.accept_ra = 0 编辑: 主机/ etc / network / interfaces 汽车 iface lo inet loopback auto eth0 iface eth0 inet dhcp iface eth0 inet6 static 地址2a01:dead:beef:a:x:x:x:x networking掩码64 […]