Ubuntu部署KVM
准备工作
运行KVM前,需要确定处理器是否支持硬件虚拟化,Intel或AMD处理器分别称其为 VT-x 和 AMD-V
egrep -c '(vmx|svm)' /proc/cpuinfo
如果上述输出显示为 0 表明处理器不支持硬件虚拟化。 1 或以上责表示处理器支持,但是依然需要在BIOS中开启。
备注
如果操作系统使用了XEN内核,就不会显示 svm 或者 vmx 标记,此时在XEN环境需要使用如下方法:
cat /sys/hypervisor/properties/capabilities
同样需要在输出中看到 hvm 标记。
如果Ubuntu系统安装了
cpu-checker软件包( 会同时安装cpu-checker和msr-tools软件包 ),则可以使用kvm-ok命令:kvm-ok
提示显示:
INFO: /dev/kvm exists
KVM acceleration can be used
如果输出显示如下:
INFO: Your CPU does not support KVM extensions
KVM acceleration can NOT be used
则依然可以运行虚拟机,但是没有KVM扩展支持则运行缓慢。
使用64位内核
由于32位操作系统会限制VM只能使用2G内存,并且在32位操作系统中无法运行64位虚拟机,所以强烈建议物理主机安装64位操作系统。
要检查处理器是否是64位,可以使用如下方法:
egrep -c ' lm ' /proc/cpuinfo
输出计数大于0就是64位处理器。
检查内核是否是64位:
uname -m
输出显示:
x86_64
则表示是64位内核,如果输出i386, i486, i586 或 i686则是32位内核。
安装KVM
安装必要软件包
Ubuntu 18.10及以上版本:
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst
Ubuntu 16.04及以上版本:
sudo apt install qemu-kvm libvirt-bin virtinst
备注
我的安装命令中附加安装了 virtinst 工具包,原因是我习惯于redhat提供的 virt-install 安装工具
Ubuntu文档建议的安装方法和我上述不同:
Lucid (10.04) 及以后版本:
sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils
Karmic (9.10) 或早期版本:
sudo aptitude install kvm libvirt-bin ubuntu-vm-builder bridge-utils
我做了修订是因为: ubuntu-vm-builder 命令行工具提供构建虚拟机,这个工具并不好用,所以我还是使用 virt-install ( virtinst 软件包 )
安装的软件包说明:
libvirt-bin/libvirt-daemon-system提供libvirtd用于通过libvirt管理qemu和kvm后端使用
qemu-kvm(早期Kamic及更早版本使用kvm)
bridge-utils提供虚拟机网络的网桥
添加用户到用户组
Karmic(9.10)及以后版本(但不包括14.04 LTS)需要确保用户已经添加到组
libvirt中:sudo adduser `id -un` libvirt
然后需要重新登陆系统以便 libvirt 用户组成员身份生效。这个组的成员可以运行虚拟机。
Karmic(9.10)之前版本加入
kvm组:sudo adduser `id -un` kvm
检查:
$ virsh list --all Id Name State --------------------
如果看到报错,例如无法访问sock文件,可以检查 /var/run/libvirt/libvirt-sock 文件权限:
$ sudo ls -la /var/run/libvirt/libvirt-sock
srw-rw---- 1 root libvirt 0 Oct 12 15:51 /var/run/libvirt/libvirt-sock
上述 libvirt-sock 文件对于 libvirt 组用户是可以读写执行的,所以才能够以普通用户身份运行 virsh 命令。
此外可能在创建虚拟机时遇到问题,则检查 kvm 设备的属主:
$ ls -lh /dev/kvm
crw-rw---- 1 root kvm 10, 232 Oct 12 04:05 /dev/kvm
可以看到 kvm 设备的组属主是 kvm 用户组,则需要调整成 libivrt 组(因为前面我们将自己的账号放入了 libvirt 组),或者将自己账号再放入到 kvm 组:
sudo adduser `id -un` kvm
注意:如果你采用修改 /dev/kvm 设备属主,则需要重新启动内核模块:
rmmod kvm
modprobe -a kvm