qemu 是一个轻量级的虚拟机/模拟器12。使用 Linux 内核虚拟机 (Kernel Virtual Machine, KVM) 作后端的 qemu 叫做 qemu-kvm。qemu-kvm 的客户机可以达到接近宿主机的性能。
这篇文章讲述的是 qemu-kvm,但其中大多数信息也适用于无 kvm 的 qemu。目前(2011),qemu和kvm两个项目之间呈现一种较强的融合趋势。
- 客户机和宿主机的 CPU 架构相同或类似的是虚拟机。不同则是模拟器。例如 VirtualBox 是纯虚拟机(只支持在 x86/x86_64 宿主机上模拟 x86/x86_64),而各种游戏终端模拟器则是模拟器。典型的 Android 模拟器(x86/x86_64 宿主机上跑 ARM 客户机)也是模拟器。 (1)
- comments from yuexin. qemu是完全的软件虚拟,而xen、kvm、virtualbox都是硬件虚拟,从而速度有提高。xen是有自己的内核,学名为type-I hypervisor,不同guest之间的进程调度由xen完成。kvm和virtualbox没有自己的内核,type-II hypervisor,因此必须有host OS,不同guest之间的调度通过linux kernel完成,因此轻量,并且两者都使用了qemu的代码用于完成IO虚拟化。virtualbox可以认为是kvm+virt-manager,在运行前都需要加载内核模块,只是由于非完全开源,virtualbox具有一定的速度瓶颈。 (2)
序曲之 KVM
硬件要求
KVM 需要 CPU 支持硬件虚拟化。以下命令如果无输出,说明硬件不支持。(vmx for intel,svm for amd)
$ egrep "vmx|svm" /proc/cpuinfo
硬件虚拟化还需要在bios中enable,某些厂商会默认禁用,相关设置可以在BIOS 里面找到。
加载kvm module
# modprobe kvm # modprobe kvm-intel
主线剧情
super quick start
a disk less, single core machine, boot from livecd
$ qemu-kvm -m 1024 -cdrom livecd-path
虚拟磁盘
不像 VirtualBox,qemu 并不使用配置文件:虚拟机的参数都在命令行指定,qemu 虚拟机需要的文件只有虚拟磁盘文件。创建虚拟机第一步,建立虚拟磁盘:
% qemu-img create -f qcow2 debian.qcow 20G
上述命令应该是自明的。其中的 -f 代表 format;而 qcow2 是 qemu 当前推荐的虚拟磁盘格式,qemu 某些高级的特性会需要它。cow 是 Copy-on-write 。
安装系统
然后我们就可以开始安装系统了。各种硬件配置都先用默认的。挂载光驱和硬盘,启动 qemu-kvm:
% qemu-kvm -m 1024 -smp 4 -hda ./debian.qcow -cdrom iso/debian-6.0.2.1-i386-xfce+lxde-CD-1.iso -boot d
几点解释:
- 重要:根据 ArchLinux 的 wiki QEMU ,如果你的宿主机是 64 位系统,强烈建议把上面的 qemu-kvm 换成 qemu-system-x86_64 。以后也是这样。(不过不用担心,目前而言(20111027)arch上面如果你安装的是qemu-kvm,qemu和qemu-kvm都是指向qemu-system-x86_64。by yuexin)
- -hda 的 hda 并不代表它在 Linux 中的设备节点名会是 /dev/hda。(-hda类似的参数还有-hdb,-hdc,-hdd,实际上就是IBM compatible PC所能支持的4个分区)。实际上它会是 /dev/sda,因为 qemu 默认虚拟 SATA 硬盘。
- 上述的 -hda 和 -cdrom 都只是 -drive 命令的“快捷方式”。
- 上面的 -hda 是可以省略的。qemu 的选项中也只有 -hda 可以省略。
- -boot 参数参见 man 1 qemu-kvm。
- -m memory, if ommited, defaults to 128
- -smp the number of core. 也可以设置每个核心的thread数目,具体参数man qemu-doc
使用 qemu
参见 {wiki:http://en.wikibooks.org/wiki/QEMU/Monitor}from https://wiki.tuna.tsinghua.edu.cn/QemuKvmHowto
No comments:
Post a Comment