常见的镜像格式
Supported formats: vvfat vpc vmdk vhdx vdi ssh sheepdog rbd raw host_cdrom host_floppy host_device file qed qcow2 qcow parallels nbd iscsi gluster dmg tftp ftps ftp https http cloop bochs blkverify blkdebug
qemu-img指令
语法
Command syntax:
check [-q] [-f fmt] [--output=ofmt] [-r [leaks | all]] [-T src_cache] filename
create [-q] [-f fmt] [-o options] filename [size]
commit [-q] [-f fmt] [-t cache] filename
compare [-f fmt] [-F fmt] [-T src_cache] [-p] [-q] [-s] filename1 filename2
convert [-c] [-p] [-q] [-n] [-f fmt] [-t cache] [-T src_cache] [-O output_fmt] [-o options] [-s snapshot_name] [-S sparse_size] filename [filename2 [...]] output_filename
info [-f fmt] [--output=ofmt] [--backing-chain] filename
map [-f fmt] [--output=ofmt] filename
snapshot [-q] [-l | -a snapshot | -c snapshot | -d snapshot] filename
rebase [-q] [-f fmt] [-t cache] [-T src_cache] [-p] [-u] -b backing_file [-F backing_fmt] filename
resize [-q] filename [+ | -]size
amend [-q] [-f fmt] [-t cache] -o options filename
RAW Image
- 格式简单,性能较好
创建image
qemu-img create -f raw raw.img 1G
dd if=/dev/zero of=flat1.img bs=1024k count=1000
qcow2的格式
2-Level loopup
- qcow2的数据是存储在data clusters里面的,每个cluster是512 byte sector
- 为了能够管理这些cluster,qcow2保存了两层的Table,L1 table指向L2Table,L2 Table管理data cluster.
- 在image里面的offset会被解析成三部分,L1 Table Pointer先找L1,L1 Table Pointer+ offset[0]是L1中的一个entry,读出来便是L2 Table Pointer, L2 Table Pointer + offset[1]是L2中的一个entry,读出来便是data cluster pointer, data cluster pointer +offset[3]便是数据所在的位置。
Copy-on-write
- backing file就是基于这个原理的用处,一个qcow2的image可以保存另一个disk image的改变,而不影响另一个image
- 创建后端盘
- qemu-img create -f qcow2 -b /var/lib/libvirt/images/centos7.0-1.qcow2 test.qcow2
- 一开始新的image是空的,读取的内容都从老的image里面读取。
- 当一个data cluster被写入,发生改变的时候,在新的image里面创建一个新的data cluster,这就是copy on write的意义。
基于后端盘创建虚拟机
- 基于test.qcow2创建一个虚拟机
-
qemu-system-x86_64 test.qcow2
-
- 在虚拟机里面创建一个100M的文件
-
dd if=/dev/zero of=tmp.img bs=1024k count=100
-
qemu-system-x86_64
是QEMU模拟器的一个命令行工具,用于模拟64位x86架构的系统
镜像格式转换
- raw可以转换为qcow2
- 创建一个raw image: dd if=/dev/zero of=flat.img bs=1024k count=1000
-
进行转换: qemu-img convert -f raw -O qcow2 flat.img flat.qcow2
-
qcow2可以转换为raw
- qcow2也可以转换为qcow2,转换的过程中,没用的data cluster就被去掉
- qemu-img convert -f qcow2 -O qcow2 src.img dst-convert.img
镜像压缩
qemu-img convert -c -f qcow2 -O qcow2 src.img dst-compress.qcow2
镜像加密
qemu-img convert -o encryption -f qcow2 -O qcow2 src.qcow2 dst-encrypt.qcow2
镜像扩容
qemu-img resize test.qcow2 +10G
growpart /dev/vda 1 //扩容vda1分区空间
xfs_growfs /dev/vda1 //扩展vda1分区中的xfs文件系统大小
resize2fs /dev/sda1 //如果文件系统是ext2/ext3/ext4,通过此命令调整文件系统的大小