![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5Sb2tGO1cTNzADNxMDMwIzXv9CXwcTO1UjNx8CX0cDOx0SbvhWdpF3Lc12bj91cn9Gbi52YvwVbvNmLzd2bsJmbj5ycldWYtl2Lc9CX6MHc0RHaiojIsJye.png)
在linux系統上檔案的字尾隻是起給人看的作用,友善人區分它,系統它不以字尾來确定它的格式;從上面的幫助資訊可以看到create子指令的選項有size,該選項用于指定建立磁盤檔案的大小;compat選項用于指定相容性;backing_file用于指定備份檔案名稱;backing_fmt用于指定備份檔案的格式;encryption用于指定是否加密,true表示加密false表示不加密,預設不指定是false;cluster_size指定磁盤的簇大小;preallocation用于指定磁盤預配置設定政策,其中off表示不預配置設定,metadata表示隻預配置設定中繼資料大小,falloc表示随檔案的增加而配置設定,full表示立即配置設定所有磁盤空間;預設是指不預配置設定磁盤空間大小;
在前邊的部落格中,我們大緻了解了virsh這個工具對kvm虛拟機的一些操作,回顧請參考https://www.cnblogs.com/qiuhom-1874/tag/virsh/;今天我們來了解下kvm的磁盤管理工具qemu-img常用指令的用法;
1、qemu-img的幫助資訊
[root@node1 ~]# qemu-img -h
qemu-img version 1.5.3, Copyright (c) 2004-2008 Fabrice Bellard
usage: qemu-img command [command options]
QEMU disk image utility
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
Command parameters:
'filename' is a disk image filename
'fmt' is the disk image format. It is guessed automatically in most cases
'cache' is the cache mode used to write the output disk image, the valid
options are: 'none', 'writeback' (default, except for convert), 'writethrough',
'directsync' and 'unsafe' (default for convert)
'src_cache' is the cache mode used to read input disk images, the valid
options are the same as for the 'cache' option
'size' is the disk image size in bytes. Optional suffixes
'k' or 'K' (kilobyte, 1024), 'M' (megabyte, 1024k), 'G' (gigabyte, 1024M),
'T' (terabyte, 1024G), 'P' (petabyte, 1024T) and 'E' (exabyte, 1024P) are
supported. 'b' is ignored.
'output_filename' is the destination disk image filename
'output_fmt' is the destination format
'options' is a comma separated list of format specific options in a
name=value format. Use -o ? for an overview of the options supported by the
used format
'-c' indicates that target image must be compressed (qcow format only)
'-u' enables unsafe rebasing. It is assumed that old and new backing file
match exactly. The image doesn't need a working backing file before
rebasing in this case (useful for renaming the backing file)
'-h' with or without a command shows this help and lists the supported formats
'-p' show progress of command (only certain commands)
'-q' use Quiet mode - do not print any output (except errors)
'-S' indicates the consecutive number of bytes (defaults to 4k) that must
contain only zeros for qemu-img to create a sparse image during
conversion. If the number of bytes is 0, the source will not be scanned for
unallocated or zero sectors, and the destination image will always be
fully allocated
'--output' takes the format in which the output must be done (human or json)
'-n' skips the target volume creation (useful if the volume is created
prior to running qemu-img)
Parameters to check subcommand:
'-r' tries to repair any inconsistencies that are found during the check.
'-r leaks' repairs only cluster leaks, whereas '-r all' fixes all
kinds of errors, with a higher risk of choosing the wrong fix or
hiding corruption that has already occurred.
Parameters to snapshot subcommand:
'snapshot' is the name of the snapshot to create, apply or delete
'-a' applies a snapshot (revert disk to saved state)
'-c' creates a snapshot
'-d' deletes a snapshot
'-l' lists all snapshots in the given image
Parameters to compare subcommand:
'-f' first image format
'-F' second image format
'-s' run in Strict mode - fail on different image size or sector allocation
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@node1 ~]#
提示:從上面的幫助資訊可以看到qemu-img這個指令分了check、create、commit、compare、convert、info、map、snapshot、rebase、resize、amend這些子指令,每個子指令都有特有的功能和文法以及選項;
qemu-img create:用于建立磁盤檔案使用的指令,文法格式:qemu-img create [-q] [-f fmt] [-o options] filename [size];其中-f用于指定磁盤的格式,常用的格式有,raw,qcow,qcow2;如果要檢視create子指令還有那些選項可用,可以是使用-o ?來指定,如下示例;
示例:檢視create子指令的選項說明,可以使用qemu-img create -f qcow2 -o ? /kvm/images/test.img
[root@node1 ~]# qemu-img create -f qcow2 -o ? /kvm/images/test.img
Supported options:
size Virtual disk size
compat Compatibility level (0.10 or 1.1)
backing_file File name of a base image
backing_fmt Image format of the base image
encryption Encrypt the image
cluster_size qcow2 cluster size
preallocation Preallocation mode (allowed values: off, metadata, falloc, full)
lazy_refcounts Postpone refcount updates
[root@node1 ~]#
提示:以上示例表示要建立/kvm/images/test.img磁盤檔案格式為qcow2它有哪些選項;這裡需要說明一點在linux系統上檔案的字尾隻是起給人看的作用,友善人區分它,系統它不以字尾來确定它的格式;從上面的幫助資訊可以看到create子指令的選項有size,該選項用于指定建立磁盤檔案的大小;compat選項用于指定相容性;backing_file用于指定備份檔案名稱;backing_fmt用于指定備份檔案的格式;encryption用于指定是否加密,true表示加密false表示不加密,預設不指定是false;cluster_size指定磁盤的簇大小;preallocation用于指定磁盤預配置設定政策,其中off表示不預配置設定,metadata表示隻預配置設定中繼資料大小,falloc表示随檔案的增加而配置設定,full表示立即配置設定所有磁盤空間;預設是指不預配置設定磁盤空間大小;
示例:建立一個2G的磁盤,分别用不同的預配置設定政策機制
[root@node1 ~]# qemu-img create -f qcow2 -o preallocation=off,size=2G /kvm/images/a1.img
Formatting '/kvm/images/a1.img', fmt=qcow2 size=2147483648 encryption=off cluster_size=65536 preallocation='off' lazy_refcounts=off
[root@node1 ~]# ll -h /kvm/images/a1.img
-rw-r--r-- 1 root root 193K 8月 18 22:17 /kvm/images/a1.img
[root@node1 ~]# qemu-img info /kvm/images/a1.img
image: /kvm/images/a1.img
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@node1 ~]# qemu-img create -f qcow2 -o preallocation=metadata,size=2G /kvm/images/a2.img
Formatting '/kvm/images/a2.img', fmt=qcow2 size=2147483648 encryption=off cluster_size=65536 preallocation='metadata' lazy_refcounts=off
[root@node1 ~]# ll -h /kvm/images/a2.img
-rw-r--r-- 1 root root 2.1G 8月 18 22:18 /kvm/images/a2.img
[root@node1 ~]# qemu-img info /kvm/images/a2.img
image: /kvm/images/a2.img
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 708K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
[root@node1 ~]# qemu-img create -f qcow2 -o preallocation=falloc,size=2G /kvm/images/a3.img
Formatting '/kvm/images/a3.img', fmt=qcow2 size=2147483648 encryption=off cluster_size=65536 preallocation='falloc' lazy_refcounts=off
[root@node1 ~]# ll -h /kvm/images/a3.img
-rw-r--r-- 1 root root 2.1G 8月 18 22:19 /kvm/images/a3.img
[root@node1 ~]# qemu-img info /kvm/images/a3.img
image: /kvm/images/a3.img
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 2.0G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
[root@node1 ~]# qemu-img create -f qcow2 -o preallocation=full,size=2G /kvm/images/a4.img
Formatting '/kvm/images/a4.img', fmt=qcow2 size=2147483648 encryption=off cluster_size=65536 preallocation='full' lazy_refcounts=off
[root@node1 ~]# ll -h /kvm/images/a4.img
-rw-r--r-- 1 root root 2.1G 8月 18 22:21 /kvm/images/a4.img
[root@node1 ~]# qemu-img info /kvm/images/a4.img
image: /kvm/images/a4.img
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 2.0G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
[root@node1 ~]#
提示:從上面的示例可以看到除了off指定建立的磁盤,我們看到的大小是一個很小的大小,其他模式在檔案系統上表現形式都是我們指定大小的空間;從qemu-img info 指令來看,off和metadata disk size是很小的空間,虛拟空間是我們指定的大小;後者falloc和full disk大小和virtual size大小都是我們指定的大小;在檔案系統上看到的磁盤檔案之是以要大于我們指定的空間,是因為在檔案系統上它作為一個檔案形式存在,它也有元素資料資訊的;
qemu-img info :用于檢視指定磁盤檔案的詳細資訊;用法格式:qemu-img info [-f fmt] [--output=ofmt] [--backing-chain] filename
[root@node1 ~]# qemu-img info /kvm/images/centos7.qcow2
image: /kvm/images/centos7.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
[root@node1 ~]# qemu-img info /kvm/images/win7.qcow2
image: /kvm/images/win7.qcow2
file format: qcow2
virtual size: 50G (53687091200 bytes)
disk size: 8.5G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
[root@node1 ~]#
qemu-img check:對指定磁盤檔案做檢查;用法格式:qemu-img check [-q] [-f fmt] [--output=ofmt] [-r [leaks | all]] [-T src_cache] filename
[root@node1 ~]# qemu-img check /kvm/images/win7.qcow2
No errors were found on the image.
138808/819200 = 16.94% allocated, 27.22% fragmented, 0.00% compressed clusters
Image end offset: 9098887168
[root@node1 ~]# qemu-img check /kvm/images/centos7.qcow2
No errors were found on the image.
Image end offset: 262144
[root@node1 ~]#
qemu-img snapshot:對指定磁盤檔案做快照相關操作;文法格式:qemu-img snapshot [-q] [-l | -a snapshot | -c snapshot | -d snapshot] filename
-c:表示建立快照
[root@node1 ~]# qemu-img snapshot -c snapshot_centos7_1 /kvm/images/centos7.qcow2
-l:檢視指定磁盤檔案的快照清單
[root@node1 ~]# qemu-img snapshot -l /kvm/images/centos7.qcow2
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 snapshot_centos7_1 0 2017-03-29 01:16:08 00:00:00.000
[root@node1 ~]#
-a:應用快照,将磁盤恢複到做快照那一刻;
[root@node1 ~]# qemu-img snapshot -a snapshot_centos7_1 /kvm/images/centos7.qcow2
[root@node1 ~]#
-d:删除快照
[root@node1 ~]# qemu-img snapshot -l /kvm/images/centos7.qcow2
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 snapshot_centos7_1 0 2017-03-29 01:16:08 00:00:00.000
[root@node1 ~]# qemu-img snapshot -d snapshot_centos7_1 /kvm/images/centos7.qcow2
[root@node1 ~]# qemu-img snapshot -l /kvm/images/centos7.qcow2
[root@node1 ~]#
qemu-img convert:鏡像格式轉換,文法格式:qemu-img 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;-c表示壓縮輸出檔案,但隻有qcow2和qcow格式的鏡像檔案才支援壓縮,而且這種壓縮是隻讀的,如果壓縮的扇區被重寫,則會被重寫為未壓縮的資料。-p用于顯示轉換進度;-o用于指定輸出檔案的選項,比如是否加密呀,大小,等等。。
示例1:不加輸出格式直接轉換qcow2格式的磁盤檔案
[root@node1 ~]# qemu-img create -f qcow2 /kvm/images/test1.img 1G
Formatting '/kvm/images/test1.img', fmt=qcow2 size=1073741824 encryption=off cluster_size=65536 lazy_refcounts=off
[root@node1 ~]# qemu-img info /kvm/images/test1.img
image: /kvm/images/test1.img
file format: qcow2
virtual size: 1.0G (1073741824 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
[root@node1 ~]# qemu-img convert /kvm/images/test1.img test1-1.img
[root@node1 ~]# qemu-img info test1-1.img
image: test1-1.img
file format: raw
virtual size: 1.0G (1073741824 bytes)
disk size: 0
[root@node1 ~]#
提示:qemu-img convert輸入的檔案格式它會自動識别,輸出格式如果不指定它預設轉換為raw格式;
示例2:就vmdk格式的檔案轉換成qcow2格式的磁盤檔案
[root@node1 ~]# cd /kvm/images/
[root@node1 images]# ls
centos7.qcow2 test1.img
[root@node1 images]# rz
rz waiting to receive.
zmodem trl+C ȡ
100% 512 KB 512 KB/s 00:00:01 0 Errors01-s001.vmdk...
[root@node1 images]# ls
CentOS-6.9-x86_64-000001-s001.vmdk centos7.qcow2 test1.img
[root@node1 images]# qemu-img info CentOS-6.9-x86_64-000001-s001.vmdk
image: CentOS-6.9-x86_64-000001-s001.vmdk
file format: vmdk
virtual size: 4.0G (4261412864 bytes)
disk size: 512K
cluster_size: 65536
Format specific information:
cid: 4294967295
parent cid: 4294967295
create type: monolithicSparse
extents:
[0]:
virtual size: 4261412864
filename: CentOS-6.9-x86_64-000001-s001.vmdk
cluster size: 65536
format:
[root@node1 images]# qemu-img convert ./CentOS-6.9-x86_64-000001-s001.vmdk -O qcow2 ./centos6.qcow2
[root@node1 images]# ll
總用量 1244560
-rw-r--r-- 1 root root 524288 4月 19 2020 CentOS-6.9-x86_64-000001-s001.vmdk
-rw-r--r-- 1 root root 197120 3月 29 01:33 centos6.qcow2
-rw-r--r-- 1 qemu qemu 1273561600 3月 29 01:32 centos7.qcow2
-rw-r--r-- 1 root root 197120 3月 29 01:24 test1.img
[root@node1 images]# qemu-img info ./centos6.qcow2
image: ./centos6.qcow2
file format: qcow2
virtual size: 4.0G (4261412864 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
[root@node1 images]#
提示:我們可以根據把不同格式的磁盤檔案互相轉換,進而實作把虛拟機從一個平台遷移到另一個平台;
qemu-img resize:動态增删磁盤的大小;文法格式:qemu-img resize [-q] filename [+ | -]size;
[root@node1 images]# ll -h
總用量 1.2G
-rw-r--r-- 1 root root 512K 4月 19 2020 CentOS-6.9-x86_64-000001-s001.vmdk
-rw-r--r-- 1 root root 193K 3月 29 01:33 centos6.qcow2
-rw-r--r-- 1 qemu qemu 1.2G 3月 29 02:03 centos7.qcow2
-rw-r--r-- 1 root root 193K 3月 29 01:24 test1.img
[root@node1 images]# qemu-img info test1.img
image: test1.img
file format: qcow2
virtual size: 1.0G (1073741824 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
[root@node1 images]# qemu-img resize test1.img +1G
Image resized.
[root@node1 images]# qemu-img info test1.img
image: test1.img
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 260K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
[root@node1 images]# ll -h
總用量 1.2G
-rw-r--r-- 1 root root 512K 4月 19 2020 CentOS-6.9-x86_64-000001-s001.vmdk
-rw-r--r-- 1 root root 193K 3月 29 01:33 centos6.qcow2
-rw-r--r-- 1 qemu qemu 1.2G 3月 29 02:04 centos7.qcow2
-rw-r--r-- 1 root root 257K 3月 29 02:04 test1.img
[root@node1 images]#
提示:動态縮減空間必須保證磁盤空間大于裡面存儲的資料空間,在做删減操作有必要先備份一免磁盤損壞導緻資料丢失;
[root@node1 images]# qemu-img info test1.img
image: test1.img
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 200K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
[root@node1 images]# qemu-img resize test1.img -1G
qemu-img: qcow2 doesn't support shrinking images yet
qemu-img: This image does not support resize
[root@node1 images]#
提示:這裡還需要注意一點,qcow2的格式磁盤不支援删減操作;
2、示例:動态将建立好的磁盤插入現運作的虛拟機上;
建立磁盤
[root@node1 ~]# qemu-img create -f qcow2 -o preallocation=metadata,size=2G /kvm/images/c1.img
Formatting '/kvm/images/c1.img', fmt=qcow2 size=2147483648 encryption=off cluster_size=65536 preallocation='metadata' lazy_refcounts=off
[root@node1 ~]# qemu-img info /kvm/images/c1.img
image: /kvm/images/c1.img
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 708K
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
[root@node1 ~]# ll -h /kvm/images/c1.img
-rw-r--r-- 1 root root 2.1G 3月 29 02:18 /kvm/images/c1.img
[root@node1 ~]#
把磁盤附加到現運作的虛拟機上
[root@node1 ~]# virsh list --all
Id 名稱 狀态
----------------------------------------------------
2 centos7 running
[root@node1 ~]# virsh domblklist centos7
目标 源
------------------------------------------------
vda /kvm/images/centos7.qcow2
hda -
[root@node1 ~]# virsh help attach-disk
NAME
attach-disk - 附加磁盤裝置
SYNOPSIS
attach-disk <domain> <source> <target> [--targetbus <string>] [--driver <string>] [--subdriver <string>] [--iothread <string>] [--cache <string>] [--io <string>] [--type <string>] [--mode <string>] [--sourcetype <string>] [--serial <string>] [--wwn <string>] [--rawio] [--address <string>] [--multifunction] [--print-xml] [--persistent] [--config] [--live] [--current]
DESCRIPTION
附加新磁盤裝置.
OPTIONS
[--domain] <string> domain name, id or uuid
[--source] <string> 磁盤裝置源
[--target] <string> 磁盤裝置目标
--targetbus <string> target bus of disk device
--driver <string> 磁盤裝置驅動
--subdriver <string> 磁盤裝置副驅動
--iothread <string> IOThread to be used by supported device
--cache <string> 磁盤裝置的緩存模式
--io <string> io policy of disk device
--type <string> 目标裝置類型
--mode <string> 裝置讀寫模式
--sourcetype <string> 源類型 (block|file)
--serial <string> 磁盤裝置序列号
--wwn <string> 磁盤裝置的 wwn
--rawio 需要 rawio 容量
--address <string> 磁盤裝置位址
--multifunction 在指定位址中使用多功能 pci
--print-xml 輸出 XML 文檔而不是附加該磁盤
--persistent 讓實時更改持久
--config 影響下一次引導
--live 影響運作的域
--current 影響目前域
[root@node1 ~]# virsh attach-disk centos7 /kvm/images/c1.img hda
錯誤:附加磁盤失敗
錯誤:XML 錯誤:磁盤源 'hda' 和 '<null>' 有重複的目标 '/kvm/images/c1.img'
[root@node1 ~]# virsh attach-disk centos7 /kvm/images/c1.img hdb
錯誤:附加磁盤失敗
錯誤:不支援的操作:無法熱插拔磁盤總線 'ide'。
[root@node1 ~]# virsh attach-disk centos7 /kvm/images/c1.img vdb
成功附加磁盤
[root@node1 ~]# virsh domblklist centos7
目标 源
------------------------------------------------
vda /kvm/images/centos7.qcow2
vdb /kvm/images/c1.img
hda -
[root@node1 ~]#
提示:hd類型的磁盤上ide接口,ide接口類型的磁盤上不支援熱插拔的,是以我們要給它識别成支援熱插拔的磁盤類型,比如vd類型(virtual disk虛拟磁盤)
驗證:連接配接至centos7控制台,用fdisk -l指令檢視 是否有新的磁盤加入到虛拟機?
[root@node1 ~]# virsh console centos7
連接配接到域 centos7
換碼符為 ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-693.el7.x86_64 on an x86_64
localhost login: root
Password:
Last login: Wed Aug 19 09:30:56 on tty1
[root@localhost ~]# fdisk -l
Disk /dev/vda: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000a5c54
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 1050623 524288 83 Linux
/dev/vda2 1050624 20971519 9960448 8e Linux LVM
Disk /dev/mapper/centos-root: 10.2 GB, 10192158720 bytes, 19906560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/centos-swap: 4 MB, 4194304 bytes, 8192 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/vdb: 2148 MB, 2148073472 bytes, 4195456 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
[root@localhost ~]#
提示:可以看到有一個vdb的磁盤已經被虛拟機識别;
在虛拟機内部對/dev/vdb進行分區,并格式化
[root@localhost ~]# fdisk /dev/vdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xe6bebed1.
Command (m for help): p
Disk /dev/vdb: 2148 MB, 2148073472 bytes, 4195456 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xe6bebed1
Device Boot Start End Blocks Id System
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-4195455, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-4195455, default 4195455):
Using default value 4195455
Partition 1 of type Linux and of size 2 GiB is set
Command (m for help): p
Disk /dev/vdb: 2148 MB, 2148073472 bytes, 4195456 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xe6bebed1
Device Boot Start End Blocks Id System
/dev/vdb1 2048 4195455 2096704 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# mkfs.xfs /dev/vdb1
meta-data=/dev/vdb1 isize=512 agcount=4, agsize=131044 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=524176, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]#
提示:到此我們新加的硬碟就可以實作挂載使用了;
挂載/dev/vdb1到/mnt
[root@localhost ~]# df -TH
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 11G 940M 9.3G 10% /
devtmpfs devtmpfs 509M 0 509M 0% /dev
tmpfs tmpfs 521M 0 521M 0% /dev/shm
tmpfs tmpfs 521M 14M 507M 3% /run
tmpfs tmpfs 521M 0 521M 0% /sys/fs/cgroup
/dev/vda1 xfs 534M 124M 410M 24% /boot
tmpfs tmpfs 105M 0 105M 0% /run/user/0
[root@localhost ~]# mount /dev/vdb1 /mnt
[root@localhost ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 9.5G 897M 8.7G 10% /
devtmpfs devtmpfs 486M 0 486M 0% /dev
tmpfs tmpfs 497M 0 497M 0% /dev/shm
tmpfs tmpfs 497M 13M 484M 3% /run
tmpfs tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/vda1 xfs 509M 119M 391M 24% /boot
tmpfs tmpfs 100M 0 100M 0% /run/user/0
/dev/vdb1 xfs 2.0G 33M 2.0G 2% /mnt
[root@localhost ~]#
3、示例:動态将插入到虛拟機上的磁盤拆卸下來;
[root@node1 ~]# virsh domblklist centos7
目标 源
------------------------------------------------
vda /kvm/images/centos7.qcow2
vdb /kvm/images/c1.img
hda -
[root@node1 ~]# virsh help detach-disk
NAME
detach-disk - 分離磁盤裝置
SYNOPSIS
detach-disk <domain> <target> [--persistent] [--config] [--live] [--current] [--print-xml]
DESCRIPTION
分離磁盤裝置。
OPTIONS
[--domain] <string> domain name, id or uuid
[--target] <string> 磁盤裝置目标
--persistent 讓實時更改持久
--config 影響下一次引導
--live 影響運作的域
--current 影響目前域
--print-xml print XML document rather than detach the disk
[root@node1 ~]# virsh detach-disk centos7 vdb
成功分離磁盤
[root@node1 ~]# virsh domblklist centos7
目标 源
------------------------------------------------
vda /kvm/images/centos7.qcow2
hda -
[root@node1 ~]#
提示:拆除硬碟可以直接使用virsh detach-disk 直接拆卸即可;
驗證:連結到虛拟機内部檢視磁盤是否被拆卸了?
[root@node1 ~]# virsh console centos7
連接配接到域 centos7
換碼符為 ^]
[root@localhost ~]# fdisk -l
Disk /dev/vda: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000a5c54
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 1050623 524288 83 Linux
/dev/vda2 1050624 20971519 9960448 8e Linux LVM
Disk /dev/mapper/centos-root: 10.2 GB, 10192158720 bytes, 19906560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/centos-swap: 4 MB, 4194304 bytes, 8192 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
[root@localhost ~]#
提示:可以看到在虛拟機内部就隻有vda沒有vdb了,說明我們把磁盤成功拆除了;
檢視拆除下來的磁盤資訊
[root@node1 ~]# qemu-img info /kvm/images/c1.img
image: /kvm/images/c1.img
file format: raw
virtual size: 2.0G (2148073472 bytes)
disk size: 11M
[root@node1 ~]#
提示:這裡需要說明一下,我們在附加磁盤到虛拟内部以後,如果對磁盤進行了分區格式化,它的格式預設會變成raw格式;
4、示例:給虛拟機做快照;
[root@node1 ~]# virsh help snapshot-create-as
NAME
snapshot-create-as - 使用一組參數生成快照
SYNOPSIS
snapshot-create-as <domain> [--name <string>] [--description <string>] [--print-xml] [--no-metadata] [--halt] [--disk-only] [--reuse-external] [--quiesce] [--atomic] [--live] [--memspec <string>] [[--diskspec] <string>]...
DESCRIPTION
使用一組參數生成快照(磁盤和 RAM)
OPTIONS
[--domain] <string> domain name, id or uuid
--name <string> 快照名稱
--description <string> 快照描述
--print-xml 輸出 XML 文檔而不是生成 XML
--no-metadata 提取快照但不生成中繼資料
--halt 生成快照後停止域
--disk-only 捕獲磁盤狀态而不是 vm 狀态
--reuse-external 重新使用任意現有外部檔案
--quiesce 靜默虛拟機的檔案系統
--atomic 需要自動操作
--live 提取實時快照
--memspec <string> 記憶體屬性:[file=]name[,snapshot=type]
[--diskspec] <string> 磁盤屬性: disk[,snapshot=type][,driver=type][,file=name]
[root@node1 ~]# virsh snapshot-create-as centos7 --name centos7-snap1 --description "touch test file before"
已生成域快照 centos7-snap1
[root@node1 ~]# virsh snapshot-list centos7
名稱 生成時間 狀态
------------------------------------------------------------
centos7-snap1 2017-03-29 02:44:58 +0800 running
[root@node1 ~]#
提示:以上指令是使用指令行參數來建立虛拟機快照,它預設會把快照的配置檔案存儲到/var/lib/libvirt/qemu/snapshot/虛拟機名稱/快照名稱.xml;
檢視快照檔案
[root@node1 ~]# ll /var/lib/libvirt/qemu/snapshot/
總用量 0
drwxr-xr-x 2 root root 31 3月 29 02:45 centos7
[root@node1 ~]# tree /var/lib/libvirt/qemu/snapshot/
/var/lib/libvirt/qemu/snapshot/
└── centos7
└── centos7-snap1.xml
1 directory, 1 file
[root@node1 ~]# cat /var/lib/libvirt/qemu/snapshot/centos7/centos7-snap1.xml
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
virsh snapshot-edit
or other application using the libvirt API.
-->
<domainsnapshot>
<name>centos7-snap1</name>
<description>touch test file before</description>
<state>running</state>
<creationTime>1490726698</creationTime>
<memory snapshot='internal'/>
<disks>
<disk name='vda' snapshot='internal'/>
<disk name='hda' snapshot='no'/>
</disks>
<domain type='kvm'>
<name>centos7</name>
<uuid>a15b793e-055b-4c91-89a5-ceba0c7ec98d</uuid>
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>2</vcpu>
<resource>
<partition>/machine</partition>
</resource>
<os>
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
</features>
<cpu mode='custom' match='exact' check='partial'>
<model fallback='forbid'>Broadwell</model>
</cpu>
<clock offset='utc'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<pm>
<suspend-to-mem enabled='no'/>
<suspend-to-disk enabled='no'/>
</pm>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/kvm/images/centos7.qcow2'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<target dev='hda' bus='ide'/>
<readonly/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
<controller type='usb' index='0' model='ich9-ehci1'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x7'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci1'>
<master startport='0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci2'>
<master startport='2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci3'>
<master startport='4'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/>
</controller>
<controller type='ide' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<controller type='virtio-serial' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<interface type='network'>
<mac address='52:54:00:ff:51:f1'/>
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<serial type='pty'>
<target type='isa-serial' port='0'>
<model name='isa-serial'/>
</target>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<channel type='unix'>
<target type='virtio' name='org.qemu.guest_agent.0'/>
<address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>
<input type='tablet' bus='usb'>
<address type='usb' bus='0' port='1'/>
</input>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'>
<listen type='address' address='0.0.0.0'/>
</graphics>
<video>
<model type='cirrus' vram='16384' heads='1' primary='yes'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</memballoon>
<rng model='virtio'>
<backend model='random'>/dev/urandom</backend>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</rng>
</devices>
</domain>
<cookie>
<cpu mode='custom' match='exact' check='full'>
<model fallback='forbid'>Broadwell</model>
<feature policy='require' name='hypervisor'/>
<feature policy='disable' name='erms'/>
<feature policy='require' name='xsaveopt'/>
</cpu>
</cookie>
<active>1</active>
</domainsnapshot>
[root@node1 ~]#
5、示例:還原虛拟機到做快照時的狀态;
首先連接配接至虛拟機内不在root目錄下建立一個測試檔案,然後将虛拟機關機,然後在還原到建立測試檔案前端快照狀态,然後開機,看看虛拟機是否回到測試檔案建立前的狀态了?
[root@node1 ~]# virsh console centos7
連接配接到域 centos7
換碼符為 ^]
[root@localhost ~]# ls
anaconda-ks.cfg
[root@localhost ~]# echo "this is test file" >test.xml
[root@localhost ~]# cat test.xml
this is test file
[root@localhost ~]#
[root@node1 ~]# virsh destroy centos7
域 centos7 被删除
[root@node1 ~]# virsh list --all
Id 名稱 狀态
----------------------------------------------------
- centos7 關閉
[root@node1 ~]# virsh domstate centos7
關閉
[root@node1 ~]#
将虛拟機歡迎到剛才建立的快照狀态
[root@node1 ~]# virsh snapshot-list centos7
名稱 生成時間 狀态
------------------------------------------------------------
centos7-snap1 2017-03-29 02:44:58 +0800 running
[root@node1 ~]# virsh snapshot-revert centos7 centos7-snap1
[root@node1 ~]# virsh list --all
Id 名稱 狀态
----------------------------------------------------
3 centos7 running
[root@node1 ~]# virsh snapshot-current centos7
<domainsnapshot>
<name>centos7-snap1</name>
<description>touch test file before</description>
<state>running</state>
<creationTime>1490726698</creationTime>
<memory snapshot='internal'/>
<disks>
<disk name='vda' snapshot='internal'/>
<disk name='hda' snapshot='no'/>
</disks>
<domain type='kvm'>
<name>centos7</name>
<uuid>a15b793e-055b-4c91-89a5-ceba0c7ec98d</uuid>
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>2</vcpu>
<resource>
<partition>/machine</partition>
</resource>
<os>
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
</features>
<cpu mode='custom' match='exact' check='partial'>
<model fallback='forbid'>Broadwell</model>
</cpu>
<clock offset='utc'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<pm>
<suspend-to-mem enabled='no'/>
<suspend-to-disk enabled='no'/>
</pm>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/kvm/images/centos7.qcow2'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<target dev='hda' bus='ide'/>
<readonly/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
<controller type='usb' index='0' model='ich9-ehci1'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x7'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci1'>
<master startport='0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci2'>
<master startport='2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci3'>
<master startport='4'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/>
</controller>
<controller type='ide' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<controller type='virtio-serial' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<interface type='network'>
<mac address='52:54:00:ff:51:f1'/>
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<serial type='pty'>
<target type='isa-serial' port='0'>
<model name='isa-serial'/>
</target>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<channel type='unix'>
<target type='virtio' name='org.qemu.guest_agent.0'/>
<address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>
<input type='tablet' bus='usb'>
<address type='usb' bus='0' port='1'/>
</input>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'>
<listen type='address' address='0.0.0.0'/>
</graphics>
<video>
<model type='cirrus' vram='16384' heads='1' primary='yes'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</memballoon>
<rng model='virtio'>
<backend model='random'>/dev/urandom</backend>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</rng>
</devices>
</domain>
<cookie>
<cpu mode='custom' match='exact' check='full'>
<model fallback='forbid'>Broadwell</model>
<feature policy='require' name='hypervisor'/>
<feature policy='disable' name='erms'/>
<feature policy='require' name='xsaveopt'/>
</cpu>
</cookie>
</domainsnapshot>
[root@node1 ~]#
提示:從上面的資訊可以看到,我們還原虛拟機到我們做的快照狀态後,虛拟機處于運作狀态,并且目前虛拟機快照是centos7_snap1這個快照是我們在建立測試檔案前建立的快照;
驗證:連接配接虛拟控制台,檢視測試檔案是否還存在?
[root@node1 ~]# virsh console centos7
連接配接到域 centos7
換碼符為 ^]
[root@localhost ~]# ls
anaconda-ks.cfg
[root@localhost ~]# pwd
/root
[root@localhost ~]#
提示:可以看到測試檔案沒有了;
檢視目前虛拟機磁盤檔案資訊
[root@node1 ~]# virsh domblklist centos7
目标 源
------------------------------------------------
vda /kvm/images/centos7.qcow2
hda -
[root@node1 ~]# qemu-img info /kvm/images/centos7.qcow2
image: /kvm/images/centos7.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.5G
cluster_size: 65536
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 centos7-snap1 294M 2017-03-29 02:44:58 01:33:32.709
Format specific information:
compat: 1.1
lazy refcounts: false
[root@node1 ~]#
提示:可以看到磁盤資訊上有我們給虛拟機做到快照資訊;
有關虛拟機快照的指令有
[root@node1 ~]# virsh help snapshot
Snapshot (help keyword 'snapshot'):
snapshot-create 使用 XML 生成快照
snapshot-create-as 使用一組參數生成快照
snapshot-current 擷取或者設定目前快照
snapshot-delete 删除域快照
snapshot-dumpxml 為域快照轉儲 XML
snapshot-edit 編輯快照 XML
snapshot-info 快照資訊
snapshot-list 為域列出快照
snapshot-parent 擷取快照的上級快照名稱
snapshot-revert 将域轉換為快照
[root@node1 ~]#
提示:以上指令和virsh 其他指令都比較類似,我這裡就不過多闡述,不清楚指令文法可以檢視每個指令的幫助資訊來使用;
作者:Linux-1874
出處:https://www.cnblogs.com/qiuhom-1874/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利.