抽空学学KVM(六)qemu-img命令使用

通过KVM创建虚拟机,用到的命令不多,而且可以通过qemu-img -help查看到非常详细的解释,常用的主要有以下几种:

1、qemu-img info  查看磁盘信息     #info [-f fmt] [--output=ofmt] [--backing-chain] filename

1 [root@KVM03-10 opt]# qemu-img info  centos2.1.raw
2 image: centos2.1.raw
3 file format: raw
4 virtual size: 10G (10737418240 bytes)
5 disk size: 1.2G

磁盘文件类型:

RAW:裸格式,连续,不支持快照等高级功能,但性能优异;

qcow2:支持快照,非连续,性能较好,qcow2,q=qemu,cow=copy on write 写时复制,写多少内容,占用多少磁盘空间

 

2、qemu-img create 创建磁盘         #create [-q] [-f fmt] [-o options] filename [size]

复制代码
 1 [root@KVM03-10 opt]# qemu-img --help
 2 qemu-img version 1.5.3, Copyright (c) 2004-2008 Fabrice Bellard
 3 usage: qemu-img command [command options]
 4 QEMU disk image utility
 5 
 6 Command syntax:
 7   check [-q] [-f fmt] [--output=ofmt] [-r [leaks | all]] [-T src_cache] filename
 8   create [-q] [-f fmt] [-o options] filename [size]
 9   commit [-q] [-f fmt] [-t cache] filename
10   compare [-f fmt] [-F fmt] [-T src_cache] [-p] [-q] [-s] filename1 filename2
11   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
12   info [-f fmt] [--output=ofmt] [--backing-chain] filename
13   map [-f fmt] [--output=ofmt] filename
14   snapshot [-q] [-l | -a snapshot | -c snapshot | -d snapshot] filename
15   rebase [-q] [-f fmt] [-t cache] [-T src_cache] [-p] [-u] -b backing_file [-F backing_fmt] filename
16   resize [-q] filename [+ | -]size
17   amend [-q] [-f fmt] [-t cache] -o options filename
18 
19 Command parameters:
20   'filename' is a disk image filename
21   'fmt' is the disk image format. It is guessed automatically in most cases
22   'cache' is the cache mode used to write the output disk image, the valid
23     options are: 'none', 'writeback' (default, except for convert), 'writethrough',
24     'directsync' and 'unsafe' (default for convert)
25   'src_cache' is the cache mode used to read input disk images, the valid
26     options are the same as for the 'cache' option
27   'size' is the disk image size in bytes. Optional suffixes
28     'k' or 'K' (kilobyte, 1024), 'M' (megabyte, 1024k), 'G' (gigabyte, 1024M),
29     'T' (terabyte, 1024G), 'P' (petabyte, 1024T) and 'E' (exabyte, 1024P)  are
30     supported. 'b' is ignored.
31   'output_filename' is the destination disk image filename
32   'output_fmt' is the destination format
33   'options' is a comma separated list of format specific options in a
34     name=value format. Use -o ? for an overview of the options supported by the
35     used format
36   '-c' indicates that target image must be compressed (qcow format only)
37   '-u' enables unsafe rebasing. It is assumed that old and new backing file
38        match exactly. The image doesn't need a working backing file before
39        rebasing in this case (useful for renaming the backing file)
40   '-h' with or without a command shows this help and lists the supported formats
41   '-p' show progress of command (only certain commands)
42   '-q' use Quiet mode - do not print any output (except errors)
43   '-S' indicates the consecutive number of bytes (defaults to 4k) that must
44        contain only zeros for qemu-img to create a sparse image during
45        conversion. If the number of bytes is 0, the source will not be scanned for
46        unallocated or zero sectors, and the destination image will always be
47        fully allocated
48   '--output' takes the format in which the output must be done (human or json)
49   '-n' skips the target volume creation (useful if the volume is created
50        prior to running qemu-img)
51 
52 Parameters to check subcommand:
53   '-r' tries to repair any inconsistencies that are found during the check.
54        '-r leaks' repairs only cluster leaks, whereas '-r all' fixes all
55        kinds of errors, with a higher risk of choosing the wrong fix or
56        hiding corruption that has already occurred.
57 
58 Parameters to snapshot subcommand:
59   'snapshot' is the name of the snapshot to create, apply or delete
60   '-a' applies a snapshot (revert disk to saved state)
61   '-c' creates a snapshot
62   '-d' deletes a snapshot
63   '-l' lists all snapshots in the given image
64 
65 Parameters to compare subcommand:
66   '-f' first image format
67   '-F' second image format
68   '-s' run in Strict mode - fail on different image size or sector allocation
69 
70 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
复制代码

 [root@KVM03-10 ~]# qemu-img create /opt/test.raw 5G

#/opt/test.raw   虚拟磁盘存放的位置和文件名;

# 5G 虚拟磁盘大小;

复制代码
[root@KVM03-10 ~]# qemu-img create /opt/test.raw
qemu-img: /opt/test.raw: Image creation needs a size parameter
[root@KVM03-10 ~]# qemu-img create /opt/test.raw 5G
Formatting '/opt/test.raw', fmt=raw size=5368709120
[root@KVM03-10 opt]#
[root@KVM03-10 opt]# ll -h
total 5.3G
-rw-------. 1 qemu qemu  10G Oct 11 10:32 centos2.1.raw
-rw-r--r--. 1 qemu qemu 4.1G Apr 27 20:56 CentOS-7.3-x86_64-DVD-1611.iso
-rw-r--r--. 1 root root 5.0G Oct 11 10:37 test.raw
[root@KVM03-10 opt]#

[root@KVM03-10 opt]# qemu-img info test.raw
image: test.raw
file format: raw
virtual size: 5.0G (5368709120 bytes)
disk size: 0
[root@KVM03-10 opt]

复制代码

其实以前Linux的dd命令同样可用于创建和负责磁盘并实现转换,具体可以man dd阅读或参照前辈的博客:https://www.cnblogs.com/ginvip/p/6370836.html

复制代码
[root@KVM03-10 dev]# dd if=/dev/zero of=/opt/test-dd.raw bs=100M count=4
4+0 records in
4+0 records out
419430400 bytes (419 MB) copied, 1.93646 s, 217 MB/s
[root@KVM03-10 dev]# cd /opt/
[root@KVM03-10 opt]# ll -h
total 5.7G
-rw-------. 1 qemu qemu  10G Oct 11 10:46 centos2.1.raw
-rw-r--r--. 1 qemu qemu 4.1G Apr 27 20:56 CentOS-7.3-x86_64-DVD-1611.iso
-rw-r--r--. 1 root root 400M Oct 11 10:58 test-dd.raw
-rw-r--r--. 1 root root 5.0G Oct 11 10:50 test.raw
[root@KVM03-10 opt]# qemu-img info test-dd.raw
image: test-dd.raw
file format: raw
virtual size: 400M (419430400 bytes)
disk size: 400M
[root@KVM03-10 opt]#
复制代码

发现在不加磁盘类型参数的时候,默认创建的是raw类型磁盘,raw和qcow2格式各有优缺点,在创建的过程中可以指定磁盘格式,也可以创建完成后进行磁盘格式装换。下面就学习一下磁盘转换的命令。

create [-q] [-f fmt] [-o options] filename [size]   

'fmt' is the disk image format. It is guessed automatically in most cases

复制代码
[root@KVM03-10 opt]# qemu-img  create -f qcow2 /opt/test.qcow2 2G
Formatting '/opt/test.qcow2', fmt=qcow2 size=2147483648 encryption=off cluster_size=65536 lazy_refcounts=off
[root@KVM03-10 opt]# ll
total 5520240
-rw-------. 1 qemu qemu 10737418240 Oct 11 11:21 centos2.1.raw
-rw-r--r--. 1 qemu qemu  4379901952 Apr 27 20:56 CentOS-7.3-x86_64-DVD-1611.iso
-rw-r--r--. 1 root root  5368709120 Oct 11 11:19 test-1.raw
-rw-r--r--. 1 root root  5368709120 Oct 11 11:15 test-2.raw
-rw-r--r--. 1 root root      197120 Oct 11 11:24 test.qcow2
-rw-r--r--. 1 root root  5368709120 Oct 11 10:50 test.raw
[root@KVM03-10 opt]# qemu-img info test.qcow2
image: test.qcow2
file format: qcow2                          #文件类型:qcow2
virtual size: 2.0G (2147483648 bytes)      #虚拟磁盘大小:2G
disk size: 196K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
复制代码

3、磁盘格式转换

  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

 # -f 原磁盘格式

# -O 目标磁盘格式

复制代码
[root@KVM03-10 opt]# qemu-img convert -f raw -O qcow2 test.raw raw-to-qcow2.qcow2
[root@KVM03-10 opt]# ll
total 5509896
-rw-------. 1 qemu qemu 10737418240 Oct 11 11:51 centos2.1.raw
-rw-r--r--. 1 qemu qemu  4379901952 Apr 27 20:56 CentOS-7.3-x86_64-DVD-1611.iso
-rw-r--r--. 1 root root      197120 Oct 11 11:55 raw-to-qcow2.qcow2
-rw-r--r--. 1 root root  1073741824 Oct 11 11:35 resize.raw
-rw-r--r--. 1 root root      262656 Oct 11 11:36 test.qcow2
-rw-r--r--. 1 root root  5368709120 Oct 11 10:50 test.raw
[root@KVM03-10 opt]#
[root@KVM03-10 opt]# qemu-img info raw-to-qcow2.qcow2
image: raw-to-qcow2.qcow2
file format: qcow2
virtual size: 5.0G (5368709120 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
[root@KVM03-10 opt]#
复制代码

 

 转换以后,不会对原文件有任何修改,而是新增一个文件目标磁盘格式的文件出来。这与电脑视频转换软件类似,转换以后原文件还在。

对文件进行转换后,修改虚机的xml文件中使用的磁盘文件,即可实现使用qcow2类型的磁盘文件启动。

复制代码
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/opt/centos2.1.raw.qcow2'/>           #修改虚机的磁盘文件
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>

[root@KVM03-10 ~]# virsh list --all
Id Name State
----------------------------------------------------
1 test-kvm running

复制代码

好像不太对,虽然通过virsh list --all,可以看到正处于运行状态,但是通过vnc连接发现,启动异常。检查发现,还需要修改磁盘类型的参数!

复制代码
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/opt/centos2.1.raw.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </disk>
复制代码

 

修改以后重新启用正常。

4、调整虚拟磁盘容量大小   resize [-q] filename [+ | -]size

创建完磁盘以后 ,可能需要对磁盘进行扩容操作,这个时候可以用过 qemu-img resize命令实现

 测试发现,qcow2和RAW格式的磁盘文件均支持扩容,但是仅raw格式文件支持缩容,qcow2不支持,这与两种磁盘文件类型有关,raw为连续的。另外,需要注意,在生产环境中,对磁盘进行缩容是危险操作,不建议缩容。

复制代码
[root@KVM03-10 opt]# ll -h
total 5.3G
-rw-------. 1 qemu qemu  10G Oct 11 11:27 centos2.1.raw
-rw-r--r--. 1 qemu qemu 4.1G Apr 27 20:56 CentOS-7.3-x86_64-DVD-1611.iso
-rw-r--r--. 1 root root 1.0G Oct 11 11:30 resize.raw
-rw-r--r--. 1 root root 193K Oct 11 11:24 test.qcow2
-rw-r--r--. 1 root root 5.0G Oct 11 10:50 test.raw
[root@KVM03-10 opt]# qemu-img resize resize.raw +1G
Image resized.
[root@KVM03-10 opt]# ll -h
total 5.3G
-rw-------. 1 qemu qemu  10G Oct 11 11:27 centos2.1.raw
-rw-r--r--. 1 qemu qemu 4.1G Apr 27 20:56 CentOS-7.3-x86_64-DVD-1611.iso
-rw-r--r--. 1 root root 2.0G Oct 11 11:31 resize.raw
-rw-r--r--. 1 root root 193K Oct 11 11:24 test.qcow2
-rw-r--r--. 1 root root 5.0G Oct 11 10:50 test.raw
[root@KVM03-10 opt]#
复制代码
posted @   woshinidaye  阅读(2722)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示