通过文件管理可以直接查看、修改、复制虚拟机的内部文件。例如,当系统因为配置文件无法启动时,可以直接修改虚拟机的文件。虚拟机磁盘文件主要有raw和qcow2格式。raw格式性能最好,速度最快,它的缺点就是不支持一些新的功能,如支持镜像,zlib磁盘压缩,AES加密等。要使用镜像功能,磁盘格式必须为qcow2。

raw格式的话,速度稍微快点,在高版本的qemu-kvm中,几乎不比qcow2的格式快,而qcow2格式节省空间,可动态增长,在公有云中广泛使用,建议使用qcow2。所有有时候,我们需要将raw格式的磁盘转换成qcow2格式(qemu-img convert -f raw -O qcow2 /kvm-vm/vmtest01.img /kvm-vm/vmtest01.qcow2)。

虚拟磁盘离线访问工具

离线访问工具应用场景
观看或下载位于虚拟机磁盘中的文件
编辑或上传文件到虚拟机磁盘
读取或写入的虚拟机配置
准备新的磁盘映像,其中包含文件、目录、文件系统、分区、逻辑卷和其他选项
拯救和修复客户无法启动或需要更改启动配置的虚拟机
监控虚拟机的磁盘使用情况
根据组织安全标准审计虚拟机的合规性
通过克隆和修改模板来部署虚拟机
读取CD和DVD ISO和软盘映像

主要是安装libguestfs libguestfs-tools软件工具,就可以直接读取qcow2格式的磁盘文件。

下面的这些操作最好要在虚拟机关机状态下做,否则会出错。

virt­inspector 显示os版本、内核、驱动、挂载点、应用等等

virt-inspector /mykvm/vms/vm1
virt-inspector --format=qcow2 -a /mykvm/vms/vm1 |more

virt­cat命令类似于cat命令

virt-cat -a /mykvm/vms/vm1 /etc/hostname

vrit-edit命令用于编辑文件,用法与vim基本一致,例如把主机名改成
vmtest001.test.com

virt-edit -a /kvm-vm/vmtest01.qcow2 /etc/hostname vmtest001.test.com

virt-df命令用于查看虚拟机磁盘信息

virt-df -h -a vmtest01

virt-copy-out这个命令可以把虚拟机里的文件复制出来, 用法如下

virt-copy-out -d domname file|dir [file|dir ...] localdir
virt-copy-out -a disk.img file|dir [file|dir ...] localdir
virt-copy-out -d vmtest01 /etc/passwd ./

virt-copy-in是将文件复制到虚拟机里面,用法和virt-copy-out基本相同

echo "this is a test" > test.txt
virt-copy-in -d vmtest01 test.txt /opt/

guestfish命令用于引导虚拟机文件系统和磁盘映像:

guestfish [--ro|--rw] -i -a /path/to/disk.img
guestfish [--ro|--rw] -i -d name-of-libvirt-domain
guestfish --ro -i -a /kvm-vm/vmtest1.qcow2

Guestmount:

在一些使用场景中,可以直接把虚机镜像文件挂接在本地系统中

guestmount -a vm1.qcow2 -m /dev/vg_centosbase/lv_root --rw /mnt

如果事先不知道虚机内部分区的路径信息,则可以使用参数-i来让guestmount自己决定使用哪一个挂接点:

guestmount -a vm1.qcow2 -i --rw /mnt

卸载

guestunmount /mnt

管理虚拟磁盘

虚拟化项目中存储的注意事项

存储的性能几乎总是虚拟化的瓶颈
通过多个磁盘驱动以分布磁盘I/O来实现存储解决方案
驱动器的速度越快越好,考虑SSD与机械磁盘的混合使用
考虑部署集中化的SAN/NFS来实现高可用性和实时迁移

虚拟磁盘类型

(1)固定 Fixed
在配置时,指定磁盘大小
不管在虚拟磁盘上实际存储多少数据,都将占用相同大小主机磁盘空间

(2)动态 Dynamic
增长到最大容量,但是只根据需求使用更多的空间

(3)差异(差分盘) Differencing
因为创建是差异磁盘,所以只保存变更的数据,类似于lvm的快照
例如,将操作系统安装在父盘,然后创建差异化磁盘来执行进一步配置,桌面虚拟化使用很多。

KVM支持的虚拟磁盘类型:
raw
这并非是一种真正的磁盘格式,而是代表虚拟机所使用的原始镜像
它并不存储元数据,因此可以作为保证虚拟机兼容性的候选方案。然而,也正因为它不存储元数据,因此不能支持某些高级特性,比如快照和压缩等
格式简单,容易转化为其他的格式。需要文件系统的支持才能支持sparse file
cow: copy-on-wirte格式,昙花一现
qcow: QEMU早期的copy-on-write格式,过渡性方案

qcow2:
按需进行分配磁盘空间,不管文件系统是否支持
支持快照
支持zlib的磁盘压缩
支持AES的加密

vmdk(virtual machine disk)
VMware环境当中默认使用的磁盘格式

vhd\vhdx(virtual Hard Disk)
微软默认采用的文件格式

vdi(virtual Box)

可以通过qemu-img --help | grep Supported命令查看KVM所支持的磁盘格式

qemu-img --help | grep Supported

qemu-img是QEMU的磁盘管理工具,在qemu-kvm源码编译后就会默认编译好qemuimg这个二进制文件。qemu-img也是QEMU/KVM使用过程中一个比较重要的工具

用法如下:
qemu-img command [command options]

qemu-img常用功能命令

check    检查完整性
create   创建镜像
commit   提交更改
compare  比较
convert  转换
info     获取信息
map      映射
snapshot 快照管理
rebase   在已有的镜像的基础上创建新的镜像
resize   调整大小
amend    修订镜像格式选项

创建虚拟磁盘,默认是创建raw格式的磁盘

qemu-img create t1.img  1g

创建qcow2格式磁盘时,可以指定选项,通过-o参数,常用参数主要有:

backing_file   指定后端镜像文件
backing_fmt    设置后端镜像的镜像格式
encryption     设置加密
cluster_size   设置簇大小,取值在512到2M之间,默认是64K
preallocation  预分配模式 (allowed values: off, metadata, falloc,full)
off            缺省策略,既不使用预分配策略
metadata       分配元数据,预分配后的虚拟磁盘仍然属于稀疏模式类型磁盘
full           分配所有磁盘空间并置零,预分配后的虚拟磁盘属于厚盘(非稀疏映像类型)
falloc         分配文件的块并标示它们的状态为未初始化,创建速度快

例如:

qemu-img create -f qcow2 test2.qcow2 1g -o preallocation=full

后备差异虚拟磁盘(VMware中称作链接克隆)

存储与基础镜像(父)磁盘的变化:
基础镜像(父)磁盘不会改变
差异磁盘隔离变化
多个差异磁盘可以使用相同的基础镜像(父)磁盘
优点:标准化基础镜像,节省空间
缺点:增加了开销,较差的性能 (尤其是vmware虚拟机中的试验环境,要等待很久才能启动)

需要拥有一个基础虚拟磁盘,可以通过安装一个全新的虚拟机得到,然后将各种使用的基本软件设置好。
创建差异虚拟磁盘:

qemu-img create -f qcow2   -o backing_file=vmtest1.qcow2   oa-vmtest1.qcow2
                                      指定父磁盘2文件

然后根据差异磁盘创建虚拟机

virt-install  --import  --name=oa  --vcpus=1 --ram=1024  --disk path=oa-vmtest1.qcow2  --network netwrok=default  --graphics vnc,listen=0.0.0.0  --os-type=linux 	 --os-variant=centos7.0

(启动速度很慢)

还有一种方式(通过修改配置文件)

可以复制一份源磁盘文件进行修改

cp test1.xml os-test1.xml
vim os-test1.xml

如果修改配置文件的话,只需要修改主机名,uuid值,磁盘文件及mac地址即可。

<name>oa-vmtest1</name>
<uuid>6035e384-0f3f-4123-901e-11177637df7b</uuid>    \ uuidgen随机生成
<source file='/kvm-vm/oa-vmtest1.qcow2'/>
<mac address='58:54:00:23:03:eb'/>

定义主机

virsh  define  /etc/libvirt/qemu/os-test1.xml

虚拟磁盘格式转换

语法格式:
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
例如:

qemu-img convert my-vmware.vmdk my-kvm.img
qemu-img convert -O qcow2 rhel6u3.img rhel6u3-a.qcow2

调整虚拟磁盘大小
语法格式:
resize [-q] filename [+ | -]size
操作之前一定要做好数据备份
增加文件大小后,需要在客户机中使用fdisk、parted等分区工具进行相应的操作才能真正让客户机使用到增加后的镜像空间
缩小镜像之前,要在客户机中保证里面的文件系统有空余空间,否则会数据丢失。
qcow2不支持缩小镜像的操作。

 qemu-img resize test2.qcow2 +2G

磁盘快照管理

快照/检查点 Snapshot/Checkpoint
磁盘快照:
对磁盘数据进行快照
主要用于虚拟机备份等场合

内存快照:
对虚拟机的内存/设备信息进行保存
该机制同时用于休眠恢复、迁移等场景
主要使用virsh save(qemu migrate to file)实现,只能对运行的虚拟机进行

检查点快照:
同时保存虚拟机的磁盘快照和内存快照
用于将虚拟机恢复到某个时间点
可以保证数据的一致性

磁盘快照分类–不推荐使用
按快照信息保存分为:
内置快照:快照数据和base磁盘数据放在一个qcow2文件中
外置快照:快照数据单独的qcow2文件存放

按虚拟机状态可以分为:
关机态快照:数据可以保证一致性
运行态快照:数据无法保证一致性,类似于系统crash后的磁盘数据,使用时可能需要fsck等操作。

按磁盘数量可以分为:
单盘:单盘快照不涉及原子性
多盘:涉及原子性。主要分为两个方面:1、是所有盘快照点相同2、所有盘要么都快照成功,要么都快照失败。主要依赖于qemu的transaction实现。

qemu-img的快照语法格式:
snapshot [-q] [-l | -a snapshot | -c snapshot | -d snapshot] filename
‘snapshot’ is the name of the snapshot to create, apply or delete
‘-a’ 切换到某一指定快照点
‘-c’ 创建一个快照
‘-d’ 删除一个快照
‘-l’ 列出指定域的所有快照

创建名为s1的磁盘快照:

qemu-img snapshot -c s1 centos7-vm001.qcow2

恢复快照:

qemu-img snapshot -a s1 centos7-vm001.qcow2

删除S1快照

qemu-img snapshot -d s1 centos7-vm001.qcow2
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐