虚拟机常用镜像格式对比
目前主要虚拟机的镜像格式:raw,cow,qcow,qcow2,vmdk。
raw格式镜像
raw:老牌的镜像格式,用一个字来说就是裸,也就是赤裸裸,你随便dd一个file就模拟了一个raw格式的镜像。由于裸的彻底,性能上来说的话还是不错的。centos6 上KVM和XEN默认的格式还是这个格式。centos7以上默认是qcow2。
裸的好处还有就是简单,支持转换成其它格式的虚拟机镜像对裸露的它来说还是很简单的(如果其它格式需要转换,有时候还是需要它做为中间格式),空间使用来看,这个很像磁盘,使用多少就是多少(du -h看到的大小就是使用大小)。
例: qcow2 转为 vmdk
方法是: qcow2 转为 raw ,然后把raw转为vmdk。也可以直接qcow2 转为 vmdk
扩展:
佳能相机上的高保真用的就是这种raw格式。RAW的原意就是“未经加工”。可以理解为:RAW图像就是CMOS或者CCD图像感应器将捕捉到的光源信号转化为数字信号的原始数据。RAW理解为“数字底片”
缺点:不支持snapshot快照。
cow、qcow、qcow2格式
cow格式:还没有成熟,就被放弃了。后来被qcow格式所取代。
qcow格式:刚刚出现的时候有比较好的特性,但其性能和raw格式对比还是有很大的差距,目前已经被新版本的qcow2取代。
qcow2格式:
现在比较主流的一种虚拟化镜像格式,经过一代的优化,目前qcow2的性能上接近raw裸格式的性能
qcow2格式支持snapshot快照,可以在镜像上做N多个快照,具有以下优点:
1、更小的存储空间
2、支持创建image镜像
3、支持多个snapshot快照,对历史snapshot进行管理
4、支持zlib的磁盘压缩
5、支持AES的加密
vmdk 格式:
VMware的格式,整体性能最好,因为原本VMware就是做虚拟化起家。
从性能和功能上来说,vmdk应该算最出色的,由于vmdk结合了VMware的很多能力
目前来看,KVM和XEN使用这种格式的情况不是太多。
但就VMware的企业级虚拟化Esxi来看,它的稳定性和各方面的能力都很好
1、qcow2格式转换成raw,启动虚拟机
方法1:
关闭kvm2,转换格式
[root@cong11 ~]# virsh shutdown kvm2
转换格式(默认这些格式都为qcow2)
[root@cong11 ~]# qemu-img convert -f qcow2 -O raw /var/lib/libvirt/images/kvm2.img /var/lib/libvirt/images/kvm2_new.img
qemu-img 的参数
-f 原镜像的格式
-O 目标镜像的格式
查看转换后的格式
[root@cong11 ~]# qemu-img info /var/lib/libvirt/images/kvm2_new.img
修改虚拟机配置文件,使用raw格式镜像文件
[root@cong11 ~]# virsh edit kvm2 #修改标红部分
修改:
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/kvm2.img'/>
<target dev='vda' bus='virtio'/>
<boot order='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</disk>
为:
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/var/lib/libvirt/images/kvm2 _new.img'/>
<target dev='vda' bus='virtio'/>
<boot order='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</disk>
方法2:
直接修改vim /etc/libvirt/qemu/kvm2.xml配置文件,修改相同位置
#注意vim直接编辑配置文件/etc/libvirt/qemu/xuegod63-kvm2.xml不生效, 修改后,需要重启服务
[root@cong11 ~]# systemctl restart libvirtd #重启服务
[root@cong11 ~]# virsh start kvm2 #启动KVM2测试
[root@cong11 ~]# ssh root@192.168.1.101
KVM快照的作用
1、热备
2、灾难恢复
3、回滚到历史中的某个状态
快照的使用空间
kvm快照分两种:
方法1:使用lvm快照,如果分区是lvm,可以利用lvm进行kvm的快照备份
方法2:使用qcow2格式的镜像创建快照。
创建KVM快照
注意:在centos6下,kvm虚拟机默认使用raw格式的镜像格式,性能最好,速度最快,它的缺点就是不支持一些新的功能,如支持镜像,zlib磁盘压缩,AES加密等。要使用快照功能,磁盘格式必须为qcow2。
查看磁盘格式
[root@cong11 ~]# qemu-img info /var/lib/libvirt/images/kvm2.img
image: /var/lib/libvirt/images/kvm2.img
file format: qcow2
virtual size: 9.0G (9663676416 bytes)
disk size: 1.4G #创建虚拟机时,选择不要立即分配磁盘空间
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: true
创建一个快照
创建快照的语法:virsh snapshot-create 虚拟机的名字
对kvm2虚拟机创建快照(这样创的没有名字,是时间)
关闭虚拟机比不管虚拟机创的快!(现在是正在运行)
[root@cong11 images]# virsh domstate kvm2 #查看kvm虚拟机的状态
运行
[root@cong11 ~]# cd /var/lib/libvirt/images/
[root@cong11 images]# virsh snapshot-create kvm2
[root@cong11 images]# virsh shutdown kvm2
域 kvm2 被关闭
[root@cong11 images]# virsh snapshot-create kvm2 #这时创建快照很快
已生成域快照 1565193751
创建快照时起个名字的语法:virsh snapshot-create-as KVM虚拟机名 快照名(快照名也支持中文)
给kvm2虚拟机创建一个名字叫httpd的快照
[root@cong11 images]# virsh snapshot-create-as kvm2 httpd
已生成域快照 httpd
查看虚拟机镜像快照列表
[root@cong11 images]# virsh snapshot-list kvm2
查看最近一次使用的快照
[root@cong11 images]# virsh snapshot-current kvm2
快照配置文件的存放位置
[root@cong11 images]# ll -h /var/lib/libvirt/qemu/snapshot/kvm2/
查看快照占用的大小
快照空间占用的是哪的空间? 虚拟机自身img镜像空间?还是云平台自身的空间?
[root@cong11 images]# qemu-img info /var/lib/libvirt/images/kvm2.img
可以看到img变大了,说明占用的是img空间。
恢复快照
确认需要恢复的快照,这里恢复到httpd
[root@cong11 images]# virsh snapshot-list kvm2
[root@cong11 images]# virsh snapshot-revert kvm2 httpd
查看恢复结果
[root@cong11 images]# virsh snapshot-current kvm2 | more
删除快照
[root@cong11 images]# virsh snapshot-list kvm2
名称 生成时间 状态
------------------------------------------------------------
1565193640 2019-08-08 00:00:40 +0800 running
1565193751 2019-08-08 00:02:31 +0800 running
httpd 2019-08-08 00:05:20 +0800 shutoff
[root@cong11 images]# virsh snapshot-delete kvm2 1565193640
已删除域快照 1565193640
查看结果
[root@cong11 images]# virsh snapshot-list kvm2
virsh常用命令
# virsh list #查看已打开虚拟机列表
# virsh list --all #查看所有虚拟机列表
# virsh version #查看virsh版本号
# virsh start kvm2 #启动kvm2虚拟机
# virsh shutdown kvm2 #关机kvm2虚拟机
# virsh destroy kvm2 #强制关闭kvm2虚拟机。
# virsh autostart centos7.0 #设置开机自启动centos7.0。
# virsh autostart --disable centos7.0 #取消虚拟机开机自启
# virsh suspend kvm2 #挂起虚拟机
# virsh resume kvm2 #恢复虚拟机
# virsh console kvm2 #控制台管理虚拟机
导出centos7.0虚拟机配置文件
[root@cong11 images]# virsh dumpxml centos7.0 > centos7.0.xml
[root@cong11 images]# ls
centos7.0.qcow2 centos7.0.xml CentOS7.iso kvm2.img
取消centos7.0虚拟机定义
[root@cong11 images]# virsh undefine centos7.0 //取消centos7.0定义
域 centos7.0 已经被取消定义
[root@cong11 images]# ls /etc/libvirt/qemu #这目录下面,虚拟机配置文件不见了
把虚拟机重新加入到virt-manager目录列表
语法:virsh define 虚拟机.xml的绝对路径
[root@cong11 images]# virsh define /var/lib/libvirt/images/centos7.0.xml
定义域 centos7.0(从 /var/lib/libvirt/images/centos7.0.xml)
[root@cong11 images]# ls /etc/libvirt/qemu #发现配置文件又回来了
2、使用命令装一台KVM虚拟机(要做好上篇博文的所有准备工作)
安装依赖包
[root@cong11 ~]# yum -y install qemu-kvm qemu-img qemu-kvm-toolsvirt-manager libvirt libvirt-python libvirt-client virt-* bridge-utilslibiscsilibcanberra-gtk2 libvirt-cim.x86_64 libvirt-java.noarch libiscsi-1.9.0-7.el7.x86_64 dbus-devel libguestfs-tools acpid
启动libvirtd服务
[root@cong11 ~]# systemctl start libvirtd #开启虚拟化服务
[root@cong11 ~]# systemctl enable libvirtd #设置libvirtd服务开机启动
启动acpid服务
[root@cong11 ~]# systemctl start acpid
[root@cong11 ~]# systemctl enable acpid
[root@cong11 ~]# systemctl is-enabled libvirtd #查看是不是开机启动
enabled
查看kvm 模块
[root@cong11 ~]# lsmod | grep kvm
如果没有加载,运行以下命令:
[root@cong11 ~]# modprobe kvm
内核模块导出了一个名为/dev/kvm的设备,这个设备将虚拟机的的地址空间独立于内核或者任何应用程序的地址空间。
使用virt-install安装虚拟机,使用virt-install定义虚拟机硬件配置
[root@cong11 ~]# virt-install --virt-type=kvm --name centos7_5 --vcpus=2 --memory=1024 --location=/var/lib/libvirt/images/CentOS7.iso \
--disk path=/var/lib/libvirt/images/centos7_5.qcow2,size=10,format=qcow2 --network bridge=br0 --graphics none --extra-args='console=ttyS0' --force
virt-install命令参数说明:
-n NAME, --name NAME:虚拟机名称,需全局惟一;
--memory:虚拟机内存大小,单位为MB;
--vcpus:VCPU个数及相关配置;
-l LOCATION, --location=LOCATION:安装源URL,支持FTP、HTTP及NFS等,如ftp://172.16.0.1/pub;
--disk DISK : 指定存储的各种选项。例如:
--disk size=10 (在默认位置创建 10GiB 镜像)
--disk /my/existing/disk,cache=none
--disk device=cdrom,bus=scsi
--disk=?
-w NETWORK, --network NETWORK
配置客户机网络接口。例如:
--network bridge=mybr0
--network network=my_libvirt_virtual_net
--network network=mynet,model=virtio,mac=00:11...
--network none
--network help
--graphics GRAPHICS 配置客户机显示设置。例如:
--graphics vnc
--graphics spice,port=5901,tlsport=5902
--graphics none
--graphics vnc,password=foobar,port=5910,keymap=ja
-console CONSOLE 配置文本控制台连接主机与客户机
--force
防止交互式提示。如果预期的提示为是/否,总是回答是。
修改虚拟机的配置
带!号的项都需要修改,跟图形化安装centos设置一样。
修改时区,选择2修改时区
硬盘分区
选择安装系统的硬盘
这里就一块硬盘,就选择这一块硬盘,c是保存
选择硬盘使用空间
安装需要对硬盘进行分区。选择要使用的空间对于安装目标。这里使用所有空间
分区选项
选择分区方案配置,默认就好
修改root密码
开始安装
按b开始安装
按回车键继续
登陆
修改IP地址(设置KVM能联网)
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 #修改标红部分
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=d7953127-7643-4051-87c4-c14c4d68f092
DEVICE=eth0
ONBOOT=yes
IPADDR="192.168.1.102"
PREFIX="24"
GATEWAY="192.168.1.1"
DNS1="202.106.0.20"
DNS2="8.8.8.8"
重启网卡
[root@localhost ~]# systemctl restart network
[root@localhost ~]# ip a
ssh测试连接
重新打开一个客户端测试
[root@cong11 ~]# ssh root@192.168.1.102
关闭虚拟机
[root@bogon ~]# init 0
查看所有虚拟机列表
[root@cong11 ~]# virsh list --all
启动虚拟机
[root@cong11 ~]# virsh start centos7_5
域 centos7_5 已开始
[root@cong11 ~]# virsh list
virt-manager连接虚拟机
[root@cong11 ~]# virt-manager
如果黑屏请按2次回车键,或者强制重启虚拟机
配置虚拟机参数
修改hostname
[root@kvm3 ~]# hostname set-hostname kvm3
开机启动ttyS0
开启serial-getty@ttyS0.service方便virsh console连接虚拟机,不开启serial-getty@ttyS0.service使用virsh console连接虚拟机会卡主
[root@kvm3 ~]# systemctl enable serial-getty@ttyS0.service
[root@kvm3 ~]# systemctl start serial-getty@ttyS0.service
控制台连接虚拟机
使用命令行控制台连接虚拟机centos7_5,先把virt-manager关掉,才能连接
[root@cong11 ~]# virsh console centos7_5
连接到域 centos7_5
console退出连接方法快捷键 CTRL+]