kvm虚拟机和kvm宿主机 回首页
一、2007年

做过最小的kvm虚拟机:
1.内核+initrd: 只包括了hda、半虚拟化的xvd(块驱动)、virtio(半虚拟化网卡)、vga还有cpu、内存、终端tty、虚拟终端pts、ACPI,一共是2M.
2.文件系统: busybox和bash 3.0, 800K
3.应用: syslogd, sysctl, nginx, php, mysql, openssh一共是8M,没有审计,没有pam控制,没有ipv6,没有run-level,没有防火墙(也就开了22,80,3306端口,所以省了网络过滤和防火墙)仅定义host.allow, host.deny, hosts, resolv.conf, sysctl.conf.
4.网络配置通过虚机引导时的内核参数传进去。(每个虚拟机的区别就是:网络参数不同,访问块设备不同。)
跑得非常快。

最小的kvm宿主机:
就多了一些控制和硬件支持,如:netfilter, iptables, 服务器阵列卡、网卡支持,惠普阵列cciss(标称为块设备)支持。

把它们一起放在一个64M的电子硬盘里面,就可以衍生多个web为主的功能服务器。(其它功能服务器定制也很easy)
把它们放在nfs服务端,就可以让一些网络启动的物理机,直接载入内核、init镜像、rootfs镜像,在内存(ram0)中启动、引导,然后去把硬盘分区启动不同的虚拟机。
如果再有个管理服务器+数据库,实现角色分配、应用和配置分配,就可以实现整个绿色数字机房。

当时实现了两个版本,基于as4u4和as5.0(64位)编译的2.6.22内核,一年后我把内核升级到2.6.29.2。

后记:
    我停止了开发,如果没有真正需要云的大公司的资金和销售业务支持,以个人兴趣难以继续支持它和优化下去。
    同一些技术交流者无缘——他们只在乎自已的利益,而不愿意三方共赢;给他们支持再多,愈加接触不到他们供职的公司,这些公司在付出时间成本,让他们边学习边开发,等他们出成果;做为工作者的他们,宁可自已边学习边开发一年半载,也不会让企业知道你的存在。

二、现在的情况(2012年):

先说下redhat5/centos5里面的几个发现:
1.redhat5里的虚拟机管理要经过virsh,它建立的虚机是stub hvm或pvm方式的,虚机很可能是由grub(pv方式)引导的,它同hvm(全虚拟化)的区别可以理解为是hvm的启动方式然后换成了半虚化的驱动。
2.我的虚拟机是内核、引导镜像都放在操作系统所在的镱像的外面,这样我可以统一升级所有虚机共用的内核、引导镜像,virsh似乎不支持这个方式。
3.我尝试在centos5的虚拟终端里以原先的纯shell脚本以kvm-system-x86_64或qemu-system-x86_64加参数的方式启动虚拟机,很快(数秒后)导致centos5宿主机重启。
4.以virsh方式,不支持kvm-system-x86_64的“-enable-nesting”参数,无法把硬件虚拟化指令集(VT-d,vmx,svm)带入虚拟机(让虚拟机也具备全虚拟化它的虚拟机的能力)。

我的2.6.29.2内核的宿主机:
我以全虚拟化+nesting参数,虚拟了一个64位xen0“宿主机”,我在这个xen0“宿主机”又虚拟了几个xenU虚拟机。
运行很稳定.

对于kvm世界的检索,发现只有suse linux支持纯的kvm-system-x86_64的参数方式的使用了,而不依赖任何virsh, python, ruby, perl。。。
看来我的kvm方案还没有绝后路啊。

三、总结:
虚拟化管理:
    很多资源管理者在基于java, python来开发boss系统(把它当成企业信息管理系统来开发),这是徒劳的(耗费成本和代价太多,技术续接上有人力资源的风险);但做为crm提供给客户自维护,是有效的。
    以我管理过数千台服务器的经验来看,最重要的是基于信号、交易码、认证,然后做出响应的管理系统。(你们看看网易那套coremail底层)
    如果要看总览,是可以遍历采集然后和库里的信息做匹配的。
    数据库是必须的。
    考虑成本和人力资源风险,我更趋向于购买现成的云机管理方案,比如,vmware的vSphere系列。变通是:布署的操作系统可以单独定制,布署方案和应用调用还以原平台的做法。
虚拟机:
    只放置所需的内核、驱动、文件系统、应用。其它一律丢弃掉,注意定制性。
社会情况:
    5年了,我看到一些公司在瞎搞,做为工匠练出手艺的一群“精英”在主持大局,而继承数百年信息管理分析方法的人却投递无门、无法参与进去。

相关词条:
Nested KVM Hypervisor Support
Nested Virtualization
modprobe kvm-amd nested=1
dmesg | grep kvm
kvm: Nested Virtualization enabled

















.