通過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]#