- 服务器和系统内核信息
# 服务器
dmidecode|grep "System Information" -A9|egrep "Manufacturer|Product"
# 宿主机CPU
lscpu
# 只适合Redhat系的Linux
cat /etc/redhat-release
# 查看内核
uname -a
- KVM 相关组件安装
# 安装qemu-kvm模块
yum install qemu-kvm
# 安装libvirt虚拟机管理模块
yum install libvirt
# 启动虚拟化守护进程并检查状态
systemctl start libvirtd
- AAVMF 是支持 uefi 虚拟机启动固件,一定要,否则会报 uefi 不支持错误
# centos安装
yum install AAVMF
# kylin安装
wget http://mirror.centos.org/altarch/7/os/aarch64/Packages/AAVMF-20180508-6.gitee3198e672e2.el7.noarch.rpm
rpm -ivh AAVMF-20180508-6.gitee3198e672e2.el7.noarch.rpm
# 注意配置
```bash
# /etc/libvirt/qemu.conf
nvram = [
"/usr/share/OVMF/OVMF_CODE.fd:/usr/share/OVMF/OVMF_VARS.fd",
"/usr/share/OVMF/OVMF_CODE.secboot.fd:/usr/share/OVMF/OVMF_VARS.fd",
"/usr/share/AAVMF/AAVMF_CODE.fd:/usr/share/AAVMF/AAVMF_VARS.fd",
"/usr/share/AAVMF/AAVMF32_CODE.fd:/usr/share/AAVMF/AAVMF32_VARS.fd"
]
...
user = "root"
# The group for QEMU processes run by the system instance. It can be
# specified in a similar way to user.
group = "root"
- 要支持e1000网卡,arm64需要手动编译qemu
wget https://download.qemu.org/qemu-2.12.0.tar.xz
# 编译的依赖包
wget https://centos.pkgs.org/7/centos-aarch64/glib2-devel-2.56.1-7.el7.aarch64.rpm
wget https://centos.pkgs.org/7/centos-aarch64/pixman-0.34.0-1.el7.aarch64.rpm
wget https://centos.pkgs.org/7/centos-aarch64/libseccomp-devel-2.3.1-4.el7.aarch64.rpm
# 手动编译
cd qemu-2.12.0
./configure --target-list=aarch64-softmmu --prefix=../qemu_install/ --enable-seccomp
make j64
make install
# 安全检查
setenforce 0
reboot
- 创建虚拟机
$ qemu-img create -f qcow2 /var/lib/libvirt/images/vm1.qcow2 100G
$ virt-install --virt-type=kvm --name=vm1 --vcpus=4 --memory=4096 --location=/var/lib/libvirt/images/xxx.iso --disk path=/var/lib/libvirt/images/kvm1.qcow2,size=100,format=qcow2 --network bridge=br0 --graphics none --extra-args='console=ttyS0' --force
# 失败销毁
virsh destroy vm1
virsh undefine vm1 --nvram
- KVM虚拟机静态迁移
$ virsh destroy vm1
$ virsh dumpxml vm1 >/etc/libvirt/qemu/vm2
$ uuidgen
$ virsh edit vm2
<name>vm2</name>
<uuid>4aba494c-6f6a-f992-2ec2-23795f6c4680</uuid>
...
$ virsh define vm2
$ virsh undefine vm1 --nvram
$ virsh start vm2
$ virsh list
- KVM虚拟机全量copy
virsh destroy vm1;
rm -rf /var/lib/libvirt/images/vm1.qcow2;
virsh undefine vm1 --nvram;
virt-clone --connect qemu:///system --original vm2 --name vm1 --file /var/lib/libvirt/images/vm1.qcow2;
virsh start vm1