kvm虚拟机通过使用`attach-disk`命令在线新增虚拟磁盘,使用`blockresize`命令在线调整现有虚拟磁盘大小,增加存储空间并提升性能。虚拟机内部系统采用lvm逻辑卷管理技术,创建和管理逻辑卷,实现磁盘存储空间的动态管理。
1,查看虚拟机及现有磁盘
[root@localhost ~]# virsh list --all
Id Name State
-------------------------------
7 uos20-1060e running
- uosv20-1060a shut off
[root@localhost ~]# virsh domblklist uos20-1060e
Target Source
----------------------------------------------------------------
vda /var/lib/libvirt/images/uos20-1060e_new.qcow2
hdb /mnt/cdrom/uos-server-20-1060e-amd64.iso
2,创建qcow2虚拟磁盘
qemu-img create -f qcow2 uos20-1060e_new-disk01.qcow2 5G
3,attach-disk 在线添加虚拟磁盘
virsh attach-disk uos20-1060e /var/lib/libvirt/images/uos20-1060e_new-disk01.qcow2 vdb --cache=none --subdriver=qcow2
Disk attached successfully
####查看虚拟机虚拟磁盘
[root@localhost ~]# virsh domblklist uos20-1060e
Target Source
----------------------------------------------------------------
vda /var/lib/libvirt/images/uos20-1060e_new.qcow2
vdb /var/lib/libvirt/images/uos20-1060e_new-disk01.qcow2
hdb /mnt/cdrom/uos-server-20-1060e-amd64.iso
虚拟机文件系统管理
(1)创建lvm逻辑卷
创建pv
pvcreate /dev/vdb
创建vg(datavg)
vgcreate datavg /dev/vdb
创建lv(datalv)
lvcreate -l 100%FREE -n datalv datavg
查看lv列表
lvs
(2)格式化文件系统
mkfs.xfs /dev/datavg/datalv
(3)挂载文件系统
mkdir /data
mount /dev/datavg/datalv /data
(4)设置开机自动挂载
查看lvm uuid
blkid /dev/datavg/datalv
写入fstab 文件
echo "`blkid |grep datavg |awk -F " " '{print $2}'` /data xfs defaults 0 0" >> /etc/fstab
#
mount -a
虚拟磁盘热扩容
(1)blockresize 调整虚拟磁盘大小(调整至10G)
[root@localhost ~]# virsh blockresize uos20-1060e /var/lib/libvirt/images/uos20-1060e_new-disk01.qcow2 10G
Block device '/var/lib/libvirt/images/uos20-1060e_new-disk01.qcow2' is resized
(2)pvresize更新pv容量
pvresize /dev/vdb
(3)扫描系统硬盘并列出物理卷列表
pvscan
(4)扩容lv
lvextend -l +100%FREE /dev/datavg/datalv
(5)刷新文件系统容量
xfs文件系统
xfs_growfs /dev/datavg/datalv
/data目录容量从5G扩容到10G
ext文件系统
resize2fs /dev/datavg/datalv
虚拟机配置文件更新
将新增的磁盘配置写到虚拟机磁盘配置,避免重启丢失
(1)查看当前虚拟机生效磁盘配置
virsh dumpxml uos20-1060e
(2)编辑虚拟机,将vdb 磁盘的配置,添加到配置文件
virsh edit uos20-1060e
</disk>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='none'/>
<source file='/var/lib/libvirt/images/uos20-1060e_new-disk01.qcow2'/>
<backingStore/>
<target dev='vdb' bus='virtio'/>
<alias name='virtio-disk1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</disk>
qemu-img 介绍
qemu-img是QEMU虚拟化软件的一个工具,它可以用来创建、转换和管理各种虚拟磁盘格式。
qemu-img 功能介绍
check:检查完整性
create:创建镜像
commit:提交更改
compare:比较
convert:转换
info:获取信息
map:映射
snapshot:快照管理
rebase:在已有的的基础上创建新的镜像
resize:调整大小
amend:修订镜像格式选项
qemu-img 命令格式
qemu-img create [-q] [--object objectdef] [-f fmt] [-b backing_file] [-F backing_fmt] [-u] [-o options] filename [size]
qcow2 格式选项:
创建新的磁盘映像文件
命令格式:
qemu-img create -f <format> <filename> <size>
创建大小30G qcow2类型磁盘
qemu-img create -f qcow2 /var/lib/libvirt/images/uos20-1060e_new.qcow2 30G
创建大小30G raw类型磁盘
qemu-img create -f raw /var/lib/libvirt/images/uos20-1060e_new.qcow2 30G
查看磁盘映像信息
qemu-img info /var/lib/libvirt/images/uos20-1060e_new.qcow2 -U
image: /var/lib/libvirt/images/uos20-1060e_new.qcow2
file format: qcow2
virtual size: 30 GiB (32212254720 bytes)
disk size: 4.63 GiB
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false
返回字段:
转换磁盘映像格式
命令格式:
qemu-img convert -f <source_format> -O <destination_format> <source_file> <destination_file>
qcow2镜像转化为raw镜像文件
qemu-img convert -f qcow2 -O raw uos20-1060e_new.qcow2 uos20-1060e_new.raw
raw镜像转化为qcw2镜像文件
qemu-img convert -f qcow2 -O raw uos20-1060e_new.raw uos20-1060e_new.qcow2
调整磁盘映像大小
命令格式:
qemu-img resize <filename> <new_size>
磁盘在原来基础上增加10G
sudo qemu-img resize uos20-1060e_new.qcow2 +10G
磁盘扩容至100G
sudo qemu-img resize uos20-1060e_new.qcow2 100G
qemu-img 操作需要关闭虚拟机,在线扩容使用virsh blockresize命令
扩容磁盘至30G
virsh blockresize uos20-1060e uos20-1060e_new.qcow2.qcow2 30G
虚拟机磁盘信息
virsh domblklist uos20-1060e
磁盘映像快照管理
命令格式:
qemu-img snapshot -c <snapshot_name> <filename>
创建虚拟磁盘快照(虚拟机关闭状态)
qemu-img snapshot -c uos20-1060e_new_20240627 /var/lib/libvirt/images/uos20-1060e_new.qcow2
删除磁盘快照
qemu-img snapshot -d uos20-1060e_new_20240627 /var/lib/libvirt/images/uos20-1060e_new.qcow2
回滚快照
命令格式:
qemu-img snapshot -a <snapshot_name> <filename>
回滚虚拟磁盘快照
qemu-img snapshot -a uos20-1060e_new_20240627 /var/lib/libvirt/images/uos20-1060e_new.qcow2
虚拟机运行时快照
创建虚拟机运行快照
virsh snapshot-create-as uos20-1060e uos20-1060e-20240627
查看虚拟机镜像快照列表
virsh snapshot-list uos20-1060e
虚拟机回滚快照
virsh snapshot-revert uos20-1060e uos20-1060e-20240627
虚拟机删除快照
virsh snapshot-delete uos20-1060e uos20-1060e-20240627
生成链接克隆磁盘文件
链接克隆是基于源虚拟机的增量拷贝,其中基础时源虚拟机,克隆后的变化存放在新创建的链接磁盘文件中
qemu-img create -f qcow2 -F qcow2 -b uos20-1060e_new.qcow2 uos20-1060e_linkclone03.qcow2
磁盘完整性检查
对镜像执行一致性检查,只支持 qcow2、 qed 、 vdi 格式。
qemu-img check /var/lib/libvirt/images/uos20-1060e_new.qcow2
qemu-img check /var/lib/libvirt/images/uos20-1060e_new.qcow2 --output=json
虚拟机磁盘格式转换,raw转qcow2
1.关机
virsh shutdown rke01
virsh destroy rke01
2.转换磁盘文件格式
qemu-img convert -f raw -O qcow2 /data/images/rke01.img /data/images/rke01.qcow2
修改虚拟磁盘文件属性
chown -R qemu:qemu /data/images/rke01.qcow2
3.修改配置文件的磁盘类型和磁盘路径
virsh edit rke01
5.修改配置重新定义虚拟机配置
virsh define /etc/libvirt/qemu/rke01.xml
Domain rke01 defined from /etc/libvirt/qemu/rke01.xml
6.开启虚拟机
virsh start rke01
qcow2 虚拟磁盘精简导出
虚拟机内删除⽂件,实际只是在分区表中把⽂件的索引给删除,删除的⽂件的物理数据还是依然占⽤着磁盘上对应的block块;通过虚拟磁盘⽂件转换,宿主机存储占用空间与客户机虚拟机使用的磁盘空间基本是一致的。使用新的磁盘镜像文件uos20-1060e_new.qcow2启动客户机即可(注意修改虚拟机的xml更改硬盘名称)。
转换虚拟磁盘文件
cd /var/lib/libvirt/images/
qemu-img convert -O qcow2 uos20-1060e.qcow2 uos20-1060e_new.qcow2
qemu-img查看虚拟磁盘
qemu-img info uos20-1060e_new.qcow2 -U
image: uos20-1060e_new.qcow2
file format: qcow2
virtual size: 30 GiB (32212254720 bytes)
disk size: 4.63 GiB
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false