第1章 磁盘文件格式介绍
资料参考:http://www.cnblogs.com/feisky/archive/2012/07/03/2575167.html
1.1 硬盘格式分类
- 全镜像格式:特点是设置多大就是多大,写入速度快,方便转换为其他格式,性能最优,但是占用空间大。典型代表为raw格式。
- 稀疏格式:特点是支持压缩、快照、镜像,更小的存储空间(即用多少占多少)。典型代表为qcow2格式。
提示:硬盘格式可以通过qemu-img管理,详情参看qemu-img --help。
1.2 raw和qcow2的简单区别
- raw不支持快照
- qcow2支持快照
注意:快照必须关闭虚拟机后操作。
1.3 磁盘格式操作命令
1.3.1 格式转换
[root@CentOS7-GUI ~]# qemu-img create -f raw /server/kvm_data/test.raw 1G # 创建测试raw磁盘 # raw转换为qcow2格式 [root@CentOS7-GUI ~]# cd /server/kvm_data [root@CentOS7-GUI kvm_data]# ls test.raw [root@CentOS7-GUI kvm_data]# qemu-img convert -c -f raw -O qcow2 test.raw test.qcow2 # 格式转换 [root@CentOS7-GUI kvm_data]# ls test.qcow2 test.raw # qcow2转换为raw格式,此时不支持压缩即不支持-c参数 [root@CentOS7-GUI kvm_data]# rm -f test.raw [root@CentOS7-GUI kvm_data]# ls test.qcow2 [root@CentOS7-GUI kvm_data]# qemu-img convert -f qcow2 -O raw test.qcow2 test.raw [root@CentOS7-GUI kvm_data]# ls test.qcow2 test.raw
1.3.2 检查虚拟磁盘
[root@CentOS7-GUI ~]# qemu-img check /server/kvm_data/test.qcow2 No errors were found on the image. Image end offset: 262144 [root@CentOS7-GUI ~]# qemu-img info /server/kvm_data/test.qcow2 image: /server/kvm_data/test.qcow2 file format: qcow2 virtual size: 1.0G (1073741824 bytes) disk size: 196K cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false
第2章 克隆虚拟机
2.1 注意事项
2.1.1 CentOS6克隆虚拟机注意事项
- 清除网卡配置文件的UUID和MAC地址,否则克隆后网卡错乱
- 清空 /etc/udev/rules.d/70-persistent-net.rules ,否则克隆后网卡错乱
- 最后关闭虚拟机,在虚拟机中使用halt命令关机
2.1.2 CentOS7克隆虚拟机注意事项
- 清除网卡配置文件的UUID和MAC地址(不清除网卡也能启动)
- 关机克隆
2.2 克隆虚拟机
2.2.1 本机间克隆
- 通过复制磁盘文件克隆虚拟机的两要素(尤其适用于异机的静态迁移):
- 导出xml文件
- 导出磁盘文件
- 手动修改配置文件注意事项:
- 直接修改虚拟机的xml文件不生效,需要用virsh edit<虚拟机名>修改
- 修改xml后reboot重启不生效,因为宿主机的进程没关闭,新的配置文件不会重新加载,必须关机再开启。
2.2.1.1 克隆前关机
[root@moban ~]# shutdown -h now # 关闭KVM虚拟机 Connection to 192.168.122.84 closed by remote host. Connection to 192.168.122.84 closed. [root@CentOS7-GUI ~]# virsh list --all # 查看KVM虚拟机状态 Id Name State ---------------------------------------------------- - CentOS7.2-moban shut off
2.2.1.2 复制模板机虚拟磁盘
[root@CentOS7-GUI ~]# cp /server/kvm_data/moban.qcow2 /server/kvm_data/clone.qcow2
2.2.1.3 导出XML
[root@CentOS7-GUI ~]# virsh dumpxml CentOS7.2-moban > /etc/libvirt/qemu/CentOS7.2-clone.xml
2.2.1.4 修改XML文件
[root@CentOS7-GUI ~]# uuidgen # 获取虚拟磁盘UUID值 ebefe196-7d06-4b94-8ba9-5135b8d0be25 [root@CentOS7-GUI ~]# vim /etc/libvirt/qemu/CentOS7.2-clone.xml 2 <name>CentOS7.2-clone</name> 3 <uuid>ebefe196-7d06-4b94-8ba9-5135b8d0be25</uuid> 34 <source file='/server/kvm_data/clone.qcow2'/> 67 <mac address='52:54:00:df:fa:2e'/> # 或 [root@CentOS7-GUI ~]# sed -i.bak "2s#CentOS7.2-moban#CentOS7.2-clone#;3s#.*#<uuid>`uuidgen`</uuid>#;s#moban.qcow2#clone.qcow2#;s#^.*<mac address=.*/># <mac address='52:54:00:df:fa:2e'/>#" /etc/libvirt/qemu/CentOS7.2-clone.xml
提示:直接修改虚拟机的XML文件不生效,需要使用virsh edit <虚拟机名称>修改;
修改XML后reboot重启不生效,因为宿主机的进程没关闭,新的配置文件不会加载,必须关机再开。
2.2.1.5 导入XML文件
[root@CentOS7-GUI ~]# virsh define /etc/libvirt/qemu/CentOS7.2-clone.xml Domain CentOS7.2-clone defined from /etc/libvirt/qemu/CentOS7.2-clone.xml
2.2.1.6 启动克隆的虚拟机
[root@CentOS7-GUI ~]# virsh start CentOS7.2-clone [root@CentOS7-GUI ~]# virsh list Id Name State ---------------------------------------------------- 3 CentOS7.2-clone running [root@CentOS7-GUI ~]# virsh list --all Id Name State ---------------------------------------------------- 3 CentOS7.2-clone running - CentOS7.2-moban shut off

第3章 制作虚拟机快照
3.1 创建快照注意事项
- 磁盘格式要为qcow2
- 关机做快照最好,开机也能做快照
- 虚拟机迁移的时候要提前删除所有快照,否则迁移后无法使用virsh查看快照,容易导致磁盘文件损坏和出错
- 模板虚拟机不要创建快照,否则通过模板虚拟机克隆后新虚拟机会有模板机的快照,并且无法通过virsh命令查看,浪费虚拟机磁盘文件空间
Tips:最优快照制作方式:创建初始磁盘后,关机将磁盘复制并重命名后保留初始磁盘文件作为快照使用。
3.2 使用virsh操作快照
Tips:使用此方法建立的快照在虚拟机迁移后使用snapshot-list命令无法显示快照内容,容易导致误以为没有快照,从而重复创建快照,导致迁移出错,推荐使用qemu-img方式创建快照。
3.2.1 创建快照
[root@CentOS7-GUI ~]# virsh snapshot-create-as CentOS7.2-clone CentOS7.2-clone_shot1 Domain snapshot CentOS7.2-clone_shot1 created
3.2.2 查看快照列表
[root@CentOS7-GUI ~]# virsh snapshot-list CentOS7.2-clone Name Creation Time State ------------------------------------------------------------ CentOS7.2-clone_shot1 2017-10-23 17:11:29 +0800 running
3.2.3 查看快照信息
[root@CentOS7-GUI ~]# virsh snapshot-info CentOS7.2-clone CentOS7.2-clone_shot1 Name: CentOS7.2-clone_shot1 Domain: CentOS7.2-clone Current: yes State: running Location: internal Parent: - Children: 0 Descendants: 0 Metadata: yes
3.2.4 还原快照
[root@CentOS7-GUI ~]# virsh snapshot-revert CentOS7.2-clone CentOS7.2-clone_shot1
3.2.5 删除快照
[root@CentOS7-GUI ~]# virsh snapshot-delete CentOS7.2-clone CentOS7.2-clone_shot1 Domain snapshot CentOS7.2-clone_shot1 deleted
3.3 使用qemu-img创建快照
注意:使用此方法时必须要关机再进行操作,否则会导致映像文件损坏。
【语法】:
[root@kvm kvm]# qemu-img snapshot --help snapshot [-q] [-l | -a snapshot | -c snapshot | -d snapshot] filename Parameters to snapshot subcommand: 'snapshot' is the name of the snapshot to create, apply or delete '-a' applies a snapshot (revert disk to saved state) '-c' creates a snapshot '-d' deletes a snapshot '-l' lists all snapshots in the given image
3.3.1 创建磁盘内置快照
[root@kvm ~]# qemu-img snapshot -c nginx /kvm/CentOS7.4-Fpm.qcow2
3.3.2 查看磁盘快照信息
[root@kvm ~]# qemu-img snapshot -l /kvm/CentOS7.4-Fpm.qcow2 # 或 [root@kvm ~]# qemu-img info /kvm/CentOS7.4-Fpm.qcow2 image: /kvm/CentOS7.4-Fpm.qcow2 file format: qcow2 virtual size: 100G (107374182400 bytes) disk size: 3.8G cluster_size: 65536 Snapshot list: ID TAG VM SIZE DATE VM CLOCK 1 fpm 0 2018-08-11 16:19:20 00:00:00.000 2 nginx 0 2018-12-13 16:57:20 00:00:00.000 3 nginx 0 2018-12-16 15:55:11 00:00:00.000 Format specific information: compat: 1.1 lazy refcounts: false
3.3.3 还原快照
[root@kvm ~]# qemu-img snapshot -a fpm /kvm/CentOS7.4-Fpm.qcow2
3.3.4 删除快照
[root@kvm kvm]# qemu-img snapshot -d 3 CentOS7.4-Fpm.qcow2 # 此处-d参数后面接的是快照ID [root@kvm kvm]# qemu-img info /kvm/CentOS7.4-Fpm.qcow2 image: /kvm/CentOS7.4-Fpm.qcow2 file format: qcow2 virtual size: 100G (107374182400 bytes) disk size: 3.8G cluster_size: 65536 Snapshot list: ID TAG VM SIZE DATE VM CLOCK 1 fpm 0 2018-08-11 16:19:20 00:00:00.000 2 nginx 0 2018-12-13 16:57:20 00:00:00.000 Format specific information: compat: 1.1 lazy refcounts: false
第4章 KVM桥接模式
4.1 什么是网桥
默认KVM的网络是NAT模式,如果需要KVM的网络同宿主机同网段则需要桥接网卡。
Bridge方式即虚拟网桥的网络连接方式,使客户机和子网里面的机器能够互相通信,可以使虚拟机成为网络中具有独立IP的主机。
桥接网络(也叫物理设备共享)被用作把一个物理设备复制到一台虚拟机,网桥多用于高级设置,特别是主机多个网络接口的情况。
4.2 配置宿主机网桥
4.2.1 生成网桥配置文件br0
[root@CentOS7-GUI ~]# cp /etc/sysconfig/network-scripts/{ifcfg-eth0,ifcfg-br0}
4.2.2 配置网卡文件eth0
[root@CentOS7-GUI ~]# cat>/etc/sysconfig/network-scripts/ifcfg-eth0<<EOF DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BRIDGE=br0 EOF
4.2.3 配置网桥文件br0
[root@CentOS7-GUI ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0 TYPE=Bridge BOOTPROTO=none DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no NAME=br0 UUID=e18df07e-683e-440b-8612-b2e7d4367d36 DEVICE=br0 ONBOOT=yes IPADDR=10.0.0.201 PREFIX=24 GATEWAY=10.0.0.254 DNS1=223.5.5.5 IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_PRIVACY=no # 或 [root@CentOS7-GUI ~]# sed -i.bak 's#Ethernet#Bridge#;s#eth0#br0#g' /etc/sysconfig/network-scripts/ifcfg-br0
4.2.4 重启网络服务
[root@CentOS7-GUI ~]# systemctl restart network
4.2.5 查看网络情况
[root@CentOS7-GUI ~]# ifconfig br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.0.201 netmask 255.255.255.0 broadcast 10.0.0.255 inet6 fe80::20c:29ff:fec8:7fc1 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:c8:7f:c1 txqueuelen 0 (Ethernet) RX packets 18275 bytes 1116962 (1.0 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 15687 bytes 7668379 (7.3 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether 00:0c:29:c8:7f:c1 txqueuelen 1000 (Ethernet) RX packets 85880 bytes 39422386 (37.5 MiB) RX errors 0 dropped 16 overruns 0 frame 0 TX packets 74735 bytes 54644178 (52.1 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.16.1.201 netmask 255.255.255.0 broadcast 172.16.1.255 inet6 fe80::20c:29ff:fec8:7fcb prefixlen 64 scopeid 0x20<link> ether 00:0c:29:c8:7f:cb txqueuelen 1000 (Ethernet) RX packets 4 bytes 240 (240.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 125 bytes 15153 (14.7 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 0 (Local Loopback) RX packets 12 bytes 636 (636.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 12 bytes 636 (636.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:96:67:4e txqueuelen 0 (Ethernet) RX packets 272 bytes 34209 (33.4 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 323 bytes 38541 (37.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether fe:54:00:df:fa:2e txqueuelen 500 (Ethernet) RX packets 13 bytes 1734 (1.6 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 991 bytes 53178 (51.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@CentOS7-GUI ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000c29c87fc1 no eth0 virbr0 8000.52540096674e yes virbr0-nic vnet0
4.3 更改网桥的方式
4.3.1 新创建虚拟机时
创建虚拟机时将virt-install的--network network=default
参数改为--network bridge=br0
:
[root@CentOS7-GUI ~]# virt-install --virt-type=kvm --name=CentOS7.2-moban --vcpus=1 -r 1024 -c /server/tools/CentOS-7-x86_64-DVD-1511.iso --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=rhel7 --disk path=/server/kvm_data/moban.qcow2,size=20 ,format=qcow2
4.3.2 对已经创建的主机修改成网桥模式
修改虚拟机配置文件:
[root@CentOS7-GUI ~]# vim /etc/libvirt/qemu/CentOS7.2-moban.xml 73 <interface type='bridge'> # network修改为bridge 74 <mac address='52:54:00:df:fa:2d'/> 75 <source network='br0'/> # default修改为br0 76 <model type='virtio'/> 77 <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> 78 </interface>
4.3.3 给虚拟机添加新网桥网卡
[root@CentOS7-GUI ~]# virsh attach-interface CentOS7.2-clone --type bridge --source br0 Interface attached successfully
添加网卡后使用8.2的方式设置桥接网卡或使用ip命令直接添加IP即可。
[root@moban ~]# #ip address add 10.0.0.2/24 dev ens8 # ip 会自动消失
第5章 KVM图形界面管理

我的微信
如果有技术上的问题可以扫一扫我的微信