我的目标是为KVM访客build立一个9p共享的完全写访问权限。 主机和来宾都具有相同的用户/组具有相同的ID。 主机和客人都应该能够写入共享使用相同的用户名,我不想区分是否由主机或客人写的文件。 kvm进程以root身份运行 – 我在/etc/libvirt/qemu.conf中设置了user和group 。 在主机的访客定义中,共享定义如下: <filesystem type='mount' accessmode='passthrough'> <source dir='/mnt/storage/data'/> <target dir='data'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </filesystem> 在来宾中,共享被安装为: mount -t 9p -o rw,trans=virtio,version=9p2000.L,msize=262144 data /mnt/data 问题是guest虚拟机中的root用户无法写入主机上的非root用户拥有的文件/文件夹。 更奇怪的是,客人的根可以重命名和删除这些文件。 也就是说,当我在主机上创build一个非root用户的文件时,我无法编辑它作为客户的根目录,即使我可以重命名和删除它! 我还发现,在非root用户下的主机上创build的文件夹的权限设置为777时,guest虚拟机的根可以写入(即在其中创build文件)。 但是,这并不适用于文件 – 无论权限如何,它们仍然无法编辑。 主机和客户机都运行Linux服务器3.2.0-4-amd64#1 SMP Debian 3.2.51-1 x86_64 GNU / Linux。 在Debian中,SELinux默认是禁用的,我没有启用它。 我尝试了所有三种可用的9p访问模式( passthrough , mapped和squash ) – 没有区别。 只是想知道是否有什么我可以调整来得到它的工作,还是只是一个错误? 请注意,这里报告了类似的问题: […]
运行debian( Linux Rick 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u6 (2015-11-09) x86_64 GNU/Linux ) 看看我的cpuinfo我可以看到我有vmx的支持: flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf […]
我一直在使用QEMU系统来构build软件。 我遇到的问题是,系统似乎受到非常慢的磁盘访问的影响。 这不一定是一个问题,因为这不是一个真正的时间密集型操作,但我希望尽可能快地工作。 以下是我尝试加速I / O所做的一切: KVM已启用。 就仿真的处理器速度而言,这是夜晚和白天之间的差异。 Qemu通过转发的SSH端口以-display none模式运行,因此没有模拟的SDL显示屏正在吃掉CPU周期。 虚拟硬盘驱动器使用-o noatime,nodiratime安装-o noatime,nodiratime以减less不必要的写入。 硬盘映像(分别为8和12演示)采用qcow2格式,使用-o cluster_size=2M创build(这是最大默认值是65,536字节)。 请在手册页中说 :“较小的簇大小可以改善映像文件的大小,而较大的簇大小通常可以提供更好的性能 。” 文件系统是带有-o extents选项的EXT4, 手册页声称“这是一种更加高效的编码,可加快文件系统的访问速度,特别是对于大文件 。” 虚拟磁盘映像中没有存储任何快照。 我不确定这是否会减慢他们的速度,但似乎是这样; 在logging快照时,实际的文件图像大小不会增长 ,所以我猜测数据是以一种复杂的方式存储的,这样快照和“工作”驱动器将共享一个群集,直到它被更改,然后整个2MB的簇被复制到新的空间,然后数据被改变。 巧妙但是完全没有效率 我的问题是,是否有什么我失踪,以提高硬盘的效率,或过去的工作,以实现接近原生的I / O速度。 以下是我观察到的其他一些事情: 当我使用-o sync安装虚拟主机的硬盘驱动器时,系统变慢。 这对我来说似乎是反直觉的,因为写入到虚拟硬盘驱动器,这是我的实际硬盘驱动器上的一个文件, 已写入之前已经caching在RAM中。 这基本上是对磁盘的双倍缓冲,使用两倍于RAM的RAM。 戏剧性的加速是非常奇怪的,因为做一个grep ^Dirty /proc/meminfo从来没有说超过1 MB的东西。 除非将“swappiness”( /proc/sys/vm/swappiness )设置为90或更高,否则虚拟机似乎拒绝使用其交换。 虽然我同意这在磁盘I / O方面可能是一件好事,但它使得构build过程与使用RAM的fs缓冲“战斗”。 是的,我确定它有足够的RAM。
我最近发现, qemu-kvm有一个非常有希望的-curses选项,它不是启动一个X窗口,而是从适合于从命令行pipe理Linux客户机的来宾显示一个很好的ncurses输出(或者更令人满意的是,在屏幕会话,甚至通过SSH)。 所以我试了一下,发现我的Arch Linux客户端进入了“graphics模式”渲染这个function没用。 从我已经能够确定,问题是客机内核初始化帧缓冲允许高于80×60字符分辨率(和漂亮的graphics)。 所以我继续寻找一种方法来防止客户内核启动帧缓冲区。 我尝试了各种各样的内核参数, nomodeset , fb=false , vga=0x0FF , vga=ask (然后select一个VGA而不是VESA模式),无效:每次qemu-kvm -curses报告都在客户机上的“graphics模式”(在初始引导菜单之后),我无法从主机上的命令行terminal与客户机进行交互。 有没有简单的方法来保持来宾内核在相同的模式下启动(没有帧缓冲),而不改变内核构build参数? 如果没有,我应该改变什么内核构build选项来编译一个没有framebuffer支持的内核? 有没有更好的方法在纯文本模式下从主机上的terminal获得虚拟机login(例如,适合在主机上的屏幕会话中运行),而无需在客户机上运行sshd?
今天,我们在两台相同的kvm和qemu主机(Dell R910)上遇到了一个非常奇怪的行为。 每个主机系统都有4 x 10个核心,这意味着在操作系统(Ubuntu Linux 10.04 64 Bit,Kernel 3.0)中,有40个物理核心显示为80个。 我们在其中一个节点上启动了Windows 2003 32位虚拟机(1个CPU,1 GB RAM,我们多次更改这些值),并注意到启动过程需要15分钟。 在这15分钟内,黑屏显示,没有任何反应。 libvirt和主机系统显示guest虚拟机的qemu-kvm进程几乎空转。 对这个过程进行维护只会显示一些FUTEX条目,但没有特别之处。 在这15分钟之后,Windows VM突然启动并出现Windows徽标。 几秒钟后,虚拟机就可以使用了。 虚拟机本身是非常高性能的,所以这不是性能问题。 我们试图用virsh和taskset工具来固定CPU,但这只会让事情变得更糟。 当我们使用Linux Live CD启动Windows VM时,也会出现几分钟的黑屏,但不会长达15分钟。在此主机(Ubuntu 10.04)上启动另一台VM时,也会出现黑屏问题,黑屏只显示2-3分钟(而不是15)。 所以,这样做:这些相同节点上的每个访客在启动后几分钟内都会怠速。 几分钟后,启动过程突然开始。 我们观察到,空闲时间恰好在客人的BIOS初始化之后发生。 我们的一个员工有想法限制Grub(内核参数)中maxcpus = 40(因为有40个物理内核)的CPU数量,突然间“黑屏空闲”的行为消失了。 searchKVM和Qemu邮件列表,互联网,论坛,serverfault和其他各种网站的已知错误等没有有用的结果。 即使在开发者IRC频道询问也没有提出新的想法。 那里的人推荐我们使用CPU固定,但如前所述,它并没有帮助。 我现在的问题是:qemu或kvm主机系统的CPU是否有某种限制? 浏览这两个工具的源代码表明,如果你的主机有超过255个CPU,KVM会发出一个警告。 但是,我们甚至没有在这个限制上抓挠。 关于主机系统的一些东西: 3.0.0-20-server kvm 1:84+dfsg-0ubuntu16+0.14.0+noroms+0ubuntu4 kvm-pxe 5.4.4-7ubuntu2 qemu-kvm 0.14.0+noroms-0ubuntu4 qemu-common 0.14.0+noroms-0ubuntu4 libvirt 0.8.8-1ubuntu6 4 x Intel(R) […]
假设你有一个LVM卷/ dev / vg0 / mylv。 您已将此虚拟磁盘作为虚拟化或模拟客户机系统呈现。 在安装过程中,来宾系统将其视为/ dev / sda并将其分区到/ dev / sda {1,2,5,6}并完成安装。 现在,在某些时候,您需要从主机系统内访问这些文件系统,而无需运行来宾系统。 fdisk看到这些分区就好了: # fdisk -l /dev/vg0/mylv Device Boot Start End Blocks Id System /dev/vg0/mylv1 2048 684031 340992 83 Linux /dev/vg0/mylv2 686078 20969471 10141697 5 Extended /dev/vg0/mylv5 686080 8290303 3802112 83 Linux /dev/vg0/mylv6 8292352 11980799 1844224 83 Linux 但是,/ dev / […]
我似乎记得能够启动qemu只有terminal模拟器输出,禁用graphics窗口。 在这里,我不是说用ncurses接口,那是一个很好的,但我希望输出直接stream入我的terminal,使剪切和粘贴更容易。 我努力了: qemu -nographic binary.img # simply no display qemu -curses binary.img # nice text output, but not directly flowing in the terminal qemu -noframe -curses binary.img # same as above qemu -nographic -curses binary.img 我想一个可以接受的解决方法是我可以调整诅咒控制台,以适应我使用的terminal。 现在它很烦人,因为它不适合terminal大小… qemu -curses binary.img SeaBIOS (version 1.7.0-20120603_194846-gandalf) iPXE (http://ipxe.org) 00:03.0 C900 PCI2.10 PnP PMM+07FC86A0+07F886A0 C900 Booting from Hard […]
如何防止VM用户/客户端访问他不拥有的IP地址,但通过KVM / Libvirt上的同一个桥接器路由? IP地址被路由到由24个254个可用地址组成的Cisco交换机vLan。 105.100.1.0/24。 这是一个设置的例子。 VM1 – 105.100.1.5 VM2 – 105.100.1.6 VM3 – 105.100.1.7 我怎样才能防止VM1访问他不拥有的地址?
我正在努力将主机正确检测到的USB设备连接到kvm虚拟机。 我有一个新安装的Ubuntu Server 14.10作为KVM / QEMU主机。 我使用这个命令设置了一个Ubuntu虚拟机: virt-install –connect qemu:///system \ -n test01 \ -r 1024 \ –vcpus=2 \ –disk path=/vmstorage/01/test01.img,size=5 \ –vnc \ –noautoconsole \ –os-variant=ubuntuutopic \ –hvm \ –cdrom /path/to/ubuntu-14.10-server-i386.iso 成功安装后, virsh dumpxml test01返回 <domain type='kvm' id='16'> <name>test01</name> <uuid>f58ca825-c999-4168-9f5a-616057d9955d</uuid> <memory unit='KiB'>1048576</memory> <currentMemory unit='KiB'>1048576</currentMemory> <vcpu placement='static'>2</vcpu> <resource> <partition>/machine</partition> </resource> <os> <type arch='x86_64' machine='pc-i440fx-utopic'>hvm</type> <boot […]
我使用qemu / kvm连接networking。 在主机中有几个没有IP的“vnetX”networking接口。 我正在寻找一种方法来知道哪个vnetX属于一个虚拟机。 我尝试将这些接口上的MAC地址值与虚拟机上的MAC(或定义它们的XML)进行匹配,但不匹配。 有brctl显示,它显示属于桥梁的vnet接口,但这不是有用的信息。 有没有办法知道这种关系? 谢谢!!