一,KVM常用的两种磁盘格式的比较:

raw格式:

raw (default) the raw format is a plain binary p_w_picpath of the disc p_w_picpath, and is very portable. On filesystems that support sparse files, p_w_picpaths in this format only use the space actually used by the data recorded in them.

raw格式是原始镜像,会直接当作一个块设备给虚拟机来使用,至于文件里面的空洞,则是由宿主机的文件系统来管理的,linux下的文件系统可以很好的支持空洞的特性。生成一个raw磁盘格式文件也很简单,dd一个file就模拟了一个raw格式的镜像。由于裸的彻底,性能上来说的话还是不错的。目前,KVM和XEN默认的格式都是raw。因为其原始,有很多原生的特性,例如直接挂载也是一件简单的事情。

qcow2格式:

qcow2 QEMU copy-on-write format with a range of special features, including the ability to take multiple snapshots, smaller p_w_picpaths on filesystems that don't support sparse files, optional AES encryption, and optional zlib compression.

qcow2 镜像格式是 QEMU 模拟器支持的一种磁盘镜像。它也是可以用一个文件的形式来表示一块固定大小的块设备磁盘。与普通的 raw 格式的镜像相比,有以下特性:
1,更小的空间占用,即使文件系统不支持空洞(holes);
2,支持写时拷贝(COW, copy-on-write),镜像文件只反映底层磁盘的变化;
3,支持快照(snapshot),镜像文件能够包含多个快照的历史;
4,可选择基于 zlib 的压缩方式
5,可以选择 AES 加密   

 总之,qcow2 格式的文件虽然在性能上比rRaw 格式的有一些损失(主要体现在对于文件增量上,qcow2 格式的文件为了分配 cluster 多花费了一些时间),但是 qcow2 格式的镜像比 Raw 格式文件更小,只有在虚拟机实际占用了磁盘空间时,其宿主机上的img文件才会增长,能方便的减少迁移花费的流量,更适用于云计算系统,同时,它还具有加密,压缩,以及快照等 raw 格式不具有的功能。



二,raw磁盘扩容的两种方法:(原磁盘数据不丢失)

第一种方法:

在原先raw类型的100G数据盘上动态追加70G,把虚拟机现有磁盘扩容为170G

1,在宿主机上先备份虚拟机的所有文件,防止磁盘扩容失败

2,然后开始操作

查看img文件类型:

# qemu-img info disk.local 
p_w_picpath: disk.local
file format: raw
virtual size: 98G (105612574720 bytes)
disk size: 98G

关闭虚拟机:

# virsh destroy instance-yq250

用dd命令给磁盘追加70G

# dd if=/dev/zero bs=1024k count=70000 >> disk.local


如果系统盘和数据盘不是同一块盘,且数据盘只有一个分区,执行如下e2fsck和resize2fs步骤:

检查磁盘上的文件系统是否有分区错误:

# e2fsck -f disk.local

扩大ext2/ext3/ext4文件系统到磁盘所有分区:

# resize2fs disk.local

如果数据盘上有多个分区或者系统只有一个磁盘镜像,不要执行e2fsck和resize2fs

如上两步骤,而是直接启动虚拟机。然后,在虚拟机执行fdisk -l查看已经追加的磁盘空间,然后根据自己实际的需要进行分区使用即可。

注:resize2fs调整分区大小的前提是你必须先将该分区umount,这台主机只有一个”/”分区,根本无法卸载!如果是正常的物理主机,你可以用liveCD挂装一个系统,然后启动resize2fs甚至PQ之类的第三方工具调整;如果虚拟机是ubuntu操作系统包含一个名为cloud-initramfs-growroot的软件,该软件可以在虚拟机启动的过程中自动扩充root分区的大小,安装完此软件包重启虚拟机系统即可

启动虚拟机:

# virsh start instance-yq250

启动之后,你会发现系统磁盘和分区都已经扩容到了170G

第二种方法:

用qemu-img命令新生成一个img文件做虚机的第二块数据磁盘使用,然后修改kvm虚拟机配置文件,把新的磁盘文件配置进去重启即可:

1,在宿主机上先备份虚拟机的所有文件,防止磁盘扩容失败

2,生成一个10G的raw格式img文件

# cd /data0/instances/instance-yq250/

# qemu-img create test.local 10G
Formatting 'test.local', fmt=raw size=10737418240 

3,关闭虚拟机

# virsh destroy instance-yq250

4,,修改虚拟机xml配置文件

# vim instance-yq250.xml

添加类似如下内容:




5,启动虚拟机查看新加的磁盘

# virsh start instance-yq250

# fdisk -l
会多出如下信息:
Disk /dev/vdc: 10.7 GB, 10737418240 bytes
16 heads, 63 sectors/track, 20805 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/vdc doesn't contain a valid partition table

至此,raw磁盘格式扩容方法介绍完成。



三,KVM虚拟机qcow2磁盘格式扩容:(原磁盘数据不丢失)

第一种方法:

1,先备份kvm虚拟机镜像和配置文件等,然后关闭虚拟机

2,直接使用qemu-img命令改变磁盘容量:

如下直接追加64G磁盘空间

# qemu-img resize data.qcow2 +64G

3,启动虚拟机

virsh start instance-yq250

4,在虚拟机中查看已经磁盘大小

# fdisk -l

5,根据自己的需要重新分区或者使用resize2fs等命令扩大原来的分区使用即可

第二种方法:

和raw格式磁盘扩容的方法相同,用qumu-img生成一个qcow2的磁盘格式,在宿主机上修改虚拟机的配置文件,然后启动虚机

第三种方法:

1,先备份kvm虚拟机镜像和配置文件等,然后关闭虚拟机

2,先把qcow2格式转换为raw格式,再使用dd扩容,扩容之后再转换为qcow2格式:

# qemu-img convert -f qcow2  -O raw 
# data.raw
# qemu-img convert -f raw data.raw -O qcow2 data.qcow2

3,启动虚拟机

# virsh start instance-yq250

4,在虚拟机中查看已经磁盘大小

# fdisk -l

5,根据自己的需要重新分区或者使用resize2fs等命令扩大原来的分区使用即可