1. 安装环境
# yum install qemu-kvm libvirt virt-install virt-manager virt-viewer -y # systemctl start libvirtd # virt-host-validate
授予 qemu 用户访问某个目录的权限:
# setfacl -R -m u:qemu:rwx YOUR_DIRECTORY
2. VM相关操作
从 ISO 文件启动 VM:
# 创建一个虚拟磁盘 # qemu-img create -f raw -o size=10G ./ubuntu16.img # 在虚拟磁盘上安装操作系统 # virt-install --name ubuntu16-server --ram 1024 --disk path=./ubuntu16.img --vcpus 2 \ --os-variant ubuntu16.04 --network bridge=virbr0 \ --cdrom ./ubuntu-16.04.7-server-amd64.iso
查看 os-variant: osinfo-query os
从磁盘映像启动 VM:
# virt-install --name ubuntu16 --ram 1024 --disk path=./ubuntu16.img --vcpus 2 \ --os-variant ubuntu16.04 --network bridge=virbr0 --import
查看 VM:
# 查看有哪些 VM 及其状态 # virsh list --all # 查看某个 VM 的详细信息(数字表示 vm id) # virsh dominfo 6 # 查看 VM 定义文件 # cat /etc/libvirt/qemu/ubuntu16.xml
启停 VM:
# 关机 # virsh shutdown 6 # 强制关机 # virsh destroy 6 # 删除:再也查看不到,但不删除磁盘映像 # virsh undefine ubuntu16-server # 启动 # virsh start ubuntu16 # 重启 # virsh reboot ubuntu16 # 自动启动:随 hypervisor 的启动而启动 # virsh autostart ubuntu16 # 取消自动启动:随 hypervisor 的启动而启动 # virsh autostart --disable ubuntu16
启动 virt-manager:
# virt-manager
通过控制台连接 VM:
# 在 ubuntu16 vm 中执行 sudo systemctl enable serial-getty@ttyS0.service sudo systemctl start serial-getty@ttyS0.service # 在宿主机上执行 virsh console 8
ps1:需要按一次回车键才会显示登陆。
ps2:centos vm设置方法参考 https://www.cnblogs.com/heiguu/p/10121084.html。
按 ctrl+] 退出控制台连接。
查看 vm 挂载了哪些块设备:
# virsh domblklist 1
3. 虚拟磁盘相关操作
创建虚拟磁盘:
# qemu-img create -f raw -o size=2G ./disk1.img
磁盘格式转换:
# qemu-img convert -f raw -O qcow2 ./disk1.img ./disk1.qcow2
查看磁盘信息:
# qemu-img info ./disk1.qcow2
挂载磁盘:
# 1 是 vm id;vdb是磁盘在 vm 中的名称
# virsh attach-disk 1 /home/ming/kvm/disk1.img vdb --live --config
卸载磁盘:
# virsh detach-disk 1 vdb
创建快照:
# qemu-img snapshot -c s1 disk1.qcow2
ps:不支持 raw 格式。
查看快照:
# qemu-img snapshot -l disk1.qcow2
从快照中恢复:
# qemu-img snapshot -a s1 disk1.qcow2
删除快照:
# qemu-img snapshot -d s1 disk1.qcow2
4. 网络相关操作(使用 ovs)
创建网络配置文件:
# cat net1.xml <network> <name>net1</name> <forward mode="bridge"/> <bridge name="br0"/> <virtualport type="openvswitch"/> </network>
定义网络:
# virsh net-define net1.xml
启动网络:
# virsh net-start net1
终止网络:
# virsh net-destroy net1
删除网络:
# virsh net-undefine net1
查看网络:
# virsh net-list --all
# virsh net-info net1
网络自启动:
# virsh net-autostart net1 # 取消自启动 # virsh net-autostart --disable net1
创建 ovs 网桥,设置 vm 使用指定的网络:
# ovs-vsctl add-br br0 # virt-install --name vm1 --ram 512 --disk path=./ubuntu16-1.img --vcpus 1 \ --os-variant ubuntu16.04 --network bridge=virbr0 --import # virt-install --name vm2 --ram 512 --disk path=./ubuntu16-2.img --vcpus 1 \ --os-variant ubuntu16.04 --network network=net1 --import # ovs-vsctl show 98c62161-cb7e-44e9-a94d-8bc0b01e60af Bridge "br0" Port "vnet0" Interface "vnet0" Port "vnet1" Interface "vnet1" Port "br0" Interface "br0" type: internal
配置 vm 的 IP地址:
# vm1 root@ubuntu:~# ip addr add 10.0.0.3/24 dev ens3 # vm2 root@ubuntu:~# ip addr add 10.0.0.4/24 dev ens3 # vm2 root@ubuntu:~# ping 10.0.0.3 PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data. 64 bytes from 10.0.0.3: icmp_seq=1 ttl=64 time=2.21 ms
参考资料
https://www.cnblogs.com/zrp2013/p/4529820.html
https://blog.csdn.net/s7799653/article/details/106024674
https://blog.csdn.net/wuliangtianzu/article/details/81870551