一.kvm虚拟机磁盘格式概述
1.raw格式
raw俗称裸格式,raw格式的优缺点:
- 优点;
可以顺序写磁盘,读写性能性能好。
- 缺点:
raw格式存在不支持快照,不方便传输等缺点。
举个例子:
假设我们为KVM虚拟机分配了50GB的磁盘,若使用raw格式,则会立刻分配这50GB的空间,这样做的好处就是磁盘底层存储数据的磁盘扇区是连续的。
如果我们仅使用了其中的2GB空间,但在传输时依旧要传输50GB空间。
2.qcow2格式
QCOW2(Qemu Copy On Write):
- 优点:
占用空间小,支持快照。
- 缺点:
性能相比raw差一些。
举个例子:
假设我们为KVM虚拟机分配了50GB的磁盘,若使用qcow2格式,不会立刻分配50GB空间,而是根据需求写时复制,当空间不足时再去系统申请格式化磁盘,因此底层存储的数据扇区可能不是连续的,因此性能相比于raw格式会差一些。
如果我们仅使用了其中的2GB空间,在传输时仅需要传输2GB的空间。
温馨提示:
QCOW2是比QCOW性能会更好些,但是QCOW2相比QCOW会额外占用一定的空间。
3.生产环境磁盘类型选择
如果对磁盘追求快照功能那就只能选择qcow2格式了。
如果追求磁盘的性能,对快照没有太大需求,则可以考虑使用raw格式,但是在迁移的时候可以临时将raw格式转换为qcow2格式。
二.创建虚拟机时指定磁盘格式
1.指定raw格式
virt-install --virt-type kvm \
--os-type=linux \
--os-variant rhel7 \
--name yinzhengjie-kvm02 \
--memory 2048 \
--vcpus 2 \
--disk /opt/yinzhengjie-kvm02.raw,format=raw,size=20 \
--cdrom /opt/CentOS-7-x86_64-DVD-2009.iso \
--network network=default \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
相关参数说明:
--virt-type:
指定虚拟机的类型,支持kvm,qemu,xen等虚拟机。
--os-type:
指定系统的类型。
--os-variant:
指定系统的版本号。
--name:
指定虚拟机的名称,每个虚拟机的名称必须唯一。
--memory:
指定虚拟机的内存大小。
--vcpus
指定CPU的核心数。
--disk:
指定磁盘的路径,使用format指定磁盘的格式,使用size自定磁盘大小,默认单位为GB。
--cdrom
自定ISO镜像文件连接。
--network
指定网络,可以自定多块网卡设备。
--graphics
指定图形化使用的协议及监听地址,如果不指定监听地址,默认监听地址为"127.0.0.1"。
--noautoconsole
不自动连接虚拟机的console,该参数可有可无。
2.指定qcow2格式
virt-install --virt-type kvm \
--os-type=linux \
--os-variant rhel7 \
--name yinzhengjie-kvm03 \
--memory 2048 \
--vcpus 2 \
--disk /opt/yinzhengjie-kvm03.qcow2,format=qcow2,size=30 \
--cdrom /opt/CentOS-7-x86_64-DVD-2009.iso \
--network network=default \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole
相关参数说明:
--virt-type:
指定虚拟机的类型,支持kvm,qemu,xen等虚拟机。
--os-type:
指定系统的类型。
--os-variant:
指定系统的版本号。
--name:
指定虚拟机的名称,每个虚拟机的名称必须唯一。
--memory:
指定虚拟机的内存大小。
--vcpus
指定CPU的核心数。
--disk:
指定磁盘的路径,使用format指定磁盘的格式,使用size自定磁盘大小,默认单位为GB。
--cdrom
自定ISO镜像文件连接。
--network
指定网络,可以自定多块网卡设备。
--graphics
指定图形化使用的协议及监听地址,如果不指定监听地址,默认监听地址为"127.0.0.1"。
--noautoconsole
不自动连接虚拟机的console,该参数可有可无。
三.磁盘工具常用命令
1.查看虚拟磁盘信息
[root@yinzhengjie-kvm189 ~]# qemu-img info /opt/yinzhengjie-kvm01.raw
image: /opt/yinzhengjie-kvm01.raw
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 1.5G
[root@yinzhengjie-kvm189 ~]#
2.创建一块qcow2格式的虚拟硬盘
[root@yinzhengjie-kvm189 ~]# qemu-img create -f qcow2 yinzhengjie-kvm10.qcow2 2G # 创建一个qcow2格式的磁盘。
Formatting 'yinzhengjie-kvm10.qcow2', fmt=qcow2 size=2147483648 encryption=off cluster_size=65536 lazy_refcounts=off
[root@yinzhengjie-kvm189 ~]#
[root@yinzhengjie-kvm189 ~]# qemu-img info yinzhengjie-kvm10.qcow2
image: yinzhengjie-kvm10.qcow2
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
[root@yinzhengjie-kvm189 ~]#
[root@yinzhengjie-kvm189 ~]# qemu-img create yinzhengjie-kvm11 3G # 如果不使用-f选项指定磁盘格式,默认创建raw格式。
Formatting 'yinzhengjie-kvm11', fmt=raw size=3221225472
[root@yinzhengjie-kvm189 ~]#
[root@yinzhengjie-kvm189 ~]# qemu-img info yinzhengjie-kvm11
image: yinzhengjie-kvm11
file format: raw
virtual size: 3.0G (3221225472 bytes)
disk size: 0
[root@yinzhengjie-kvm189 ~]#
[root@yinzhengjie-kvm189 ~]# ll -h yinzhengjie-kvm10.qcow2 # 注意,qcow2磁盘格式并不会立刻使用2GB的空间哟~
-rw-r--r--. 1 root root 193K Apr 8 04:13 yinzhengjie-kvm10.qcow2
[root@yinzhengjie-kvm189 ~]#
[root@yinzhengjie-kvm189 ~]# ll -h yinzhengjie-kvm11 # 注意,raw格式会立刻分配3GB的磁盘空间哟~
-rw-r--r--. 1 root root 3.0G Apr 8 04:14 yinzhengjie-kvm11
[root@yinzhengjie-kvm189 ~]#
[root@yinzhengjie-kvm189 ~]#
3.调整磁盘容量
[root@yinzhengjie-kvm189 ~]# qemu-img info yinzhengjie-kvm10.qcow2
image: yinzhengjie-kvm10.qcow2
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
[root@yinzhengjie-kvm189 ~]#
[root@yinzhengjie-kvm189 ~]#
[root@yinzhengjie-kvm189 ~]# qemu-img resize yinzhengjie-kvm10.qcow2 +3G # 扩容方式一: 在原有的基础上扩容3GB数据。
Image resized.
[root@yinzhengjie-kvm189 ~]#
[root@yinzhengjie-kvm189 ~]# qemu-img info yinzhengjie-kvm10.qcow2
image: yinzhengjie-kvm10.qcow2
file format: qcow2
virtual size: 5.0G (5368709120 bytes)
disk size: 260K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
[root@yinzhengjie-kvm189 ~]#
[root@yinzhengjie-kvm189 ~]# qemu-img resize yinzhengjie-kvm10.qcow2 10G # 扩容方式二: 直接扩容磁盘到指定大小。
Image resized.
[root@yinzhengjie-kvm189 ~]#
[root@yinzhengjie-kvm189 ~]# qemu-img info yinzhengjie-kvm10.qcow2
image: yinzhengjie-kvm10.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 260K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
[root@yinzhengjie-kvm189 ~]#
温馨提示:
- qcow2磁盘格式只能扩容不能缩容,raw磁盘格式可以扩容也可以缩容,
- 但生产环境中无论是哪种磁盘格式都不要使用缩容,避免造成数据丢失;
4.转换磁盘格式
1.转换虚拟机磁盘时需要先关机
[root@yinzhengjie-kvm189 ~]# virsh list --all
Id Name State
----------------------------------------------------
3 yinzhengjie-kvm01 running
[root@yinzhengjie-kvm189 ~]#
[root@yinzhengjie-kvm189 ~]# virsh shutdown yinzhengjie-kvm01
Domain yinzhengjie-kvm01 is being shutdown
[root@yinzhengjie-kvm189 ~]#
[root@yinzhengjie-kvm189 ~]# virsh list --all
Id Name State
----------------------------------------------------
- yinzhengjie-kvm01 shut off
[root@yinzhengjie-kvm189 ~]#
2.将raw格式转换为qcow2格式
[root@yinzhengjie-kvm189 ~]# qemu-img convert -f raw -O qcow2 -c /opt/yinzhengjie-kvm01.raw /opt/yinzhengjie-kvm01.qcow2
[root@yinzhengjie-kvm189 ~]#
[root@yinzhengjie-kvm189 ~]# qemu-img convert -f raw -O qcow2 /opt/yinzhengjie-kvm01.raw /opt/yinzhengjie-kvm01-bak.qcow2
[root@yinzhengjie-kvm189 ~]#
[root@yinzhengjie-kvm189 ~]# ll -h /opt/yinzhengjie-kvm01.qcow2 /opt/yinzhengjie-kvm01.raw /opt/yinzhengjie-kvm01-bak.qcow2
-rw-r--r--. 1 root root 1.6G Apr 8 04:42 /opt/yinzhengjie-kvm01-bak.qcow2
-rw-r--r--. 1 root root 767M Apr 8 04:38 /opt/yinzhengjie-kvm01.qcow2
-rw-------. 1 root root 10G Apr 8 04:34 /opt/yinzhengjie-kvm01.raw
[root@yinzhengjie-kvm189 ~]#
相关参数说明:
-f:
指定镜像的原格式。
-O:
指定镜像要转换的格式。
-c:
是否启用压缩功能,如果启用压缩功能,转换的时间会久一点。
3.修改虚拟机的磁盘格式为qcow2格式及磁盘文件路径(如上图所示)
[root@yinzhengjie-kvm189 ~]# virsh edit yinzhengjie-kvm01
<domain type='kvm'>
...
<devices>
...
<disk type='file' device='disk'>
...
<driver name='qemu' type='qcow2'/>
<source file='/opt/yinzhengjie-kvm01.qcow2'/>
...
4.启动虚拟机
[root@yinzhengjie-kvm189 ~]# ll -h /opt/yinzhengjie-kvm01.qcow2 # 启动前查看磁盘大小
-rw-r--r--. 1 root root 767M Apr 8 04:38 /opt/yinzhengjie-kvm01.qcow2
[root@yinzhengjie-kvm189 ~]#
[root@yinzhengjie-kvm189 ~]# ll /opt/yinzhengjie-kvm01.qcow2
-rw-r--r--. 1 root root 803512320 Apr 8 04:38 /opt/yinzhengjie-kvm01.qcow2
[root@yinzhengjie-kvm189 ~]#
[root@yinzhengjie-kvm189 ~]# virsh list --all
Id Name State
----------------------------------------------------
- yinzhengjie-kvm01 shut off
[root@yinzhengjie-kvm189 ~]#
[root@yinzhengjie-kvm189 ~]# virsh start yinzhengjie-kvm01
Domain yinzhengjie-kvm01 started
[root@yinzhengjie-kvm189 ~]#
[root@yinzhengjie-kvm189 ~]# virsh list --all
Id Name State
----------------------------------------------------
4 yinzhengjie-kvm01 running
[root@yinzhengjie-kvm189 ~]#
[root@yinzhengjie-kvm189 ~]# ll /opt/yinzhengjie-kvm01.qcow2 # 启动虚拟机会产生日志,因此该文件会变大哟~
-rw-r--r--. 1 qemu qemu 806682624 Apr 8 04:50 /opt/yinzhengjie-kvm01.qcow2
[root@yinzhengjie-kvm189 ~]#
[root@yinzhengjie-kvm189 ~]# ll -h /opt/yinzhengjie-kvm01.qcow2 # 启动后再次查看磁盘大小
-rw-r--r--. 1 qemu qemu 770M Apr 8 04:50 /opt/yinzhengjie-kvm01.qcow2
[root@yinzhengjie-kvm189 ~]#
5.检查磁盘是否出差
[root@yinzhengjie-kvm189 ~]# qemu-img check yinzhengjie-kvm10.qcow2
No errors were found on the image.
Image end offset: 262144
[root@yinzhengjie-kvm189 ~]#