kvm磁盘管理

  • KVM虚拟磁盘类型
  • raw
  • qcow2
  • qemu-img常用参数
  • 主要参数:
  • 安装qemu-img
  • 查看磁盘信息--info
  • 创建磁盘文件--create
  • 磁盘容量调整--resize
  • 热扩容
  • 磁盘增加容量
  • 磁盘缩小容量(生产环境下禁止操作)
  • 磁盘调整容量到指定大小
  • 转换磁盘格式--convert
  • 转换VMware的vmdk为qcow2
  • 检查磁盘镜像文件
  • 磁盘快照
  • 创建磁盘快照
  • 查看磁盘快照
  • 回滚到磁盘快照
  • 删除磁盘快照
  • 在线附加和卸载VM磁盘
  • 附加磁盘到vm实例--attach-disk
  • 从vm实例中分离磁盘--detach-disk
  • 存储池管理


KVM虚拟磁盘类型

kvm存储池 kvm 磁盘_kvm磁盘



raw

raw为裸格式,占用空间比较大,不支持快照功能,性能较好,不方便传输,创建多大的磁盘就占用多大的空间。



qcow2

qcow2(quick copy on wire --写时复制),占用空间小,支持快照,性能比 raw差一些,方便传输,磁盘的实际大小时动态的(当写入数据时宿主机的磁盘占用才会变大)。



qemu-img常用参数

# 列出指定虚拟机上的磁盘信息
virsh domblklist vm名

kvm存储池 kvm 磁盘_磁盘镜像_02



主要参数:

  • info : 查看镜像的信息;
  • create: 创建镜像;
  • check: 检查镜像;
  • convert: 转化镜像的格式;
  • snapshot :管理镜像的快照;
  • rebase: 在已有的镜像的基础上创建新的镜像;
  • resize: 增加或减小镜像大小


安装qemu-img

# Windows安装
choco install qemu-img -y

# rhel安装
dnf install -y qemu-img

#  Debian安装
apt install -y qemu-utils



查看磁盘信息–info

# 查看磁盘信息
qemu-img info disk_name.raw
qemu-img info disk_name.qcow2

kvm存储池 kvm 磁盘_磁盘镜像_03



创建磁盘文件–create

创建的磁盘文件后缀名不用关注,工作中经常会以.img为磁盘文件后缀。

# 创建raw(默认格式)
qemu-img create /data/vm1.raw 1G

kvm存储池 kvm 磁盘_kvm存储池_04

# 创建qcow2
## 不指定参数,默认创建的是raw格式的磁盘文件
## -f 指定磁盘格式
qemu-img create -f qcow2 /data/vm2.qcow2 1G

kvm存储池 kvm 磁盘_kvm_05



磁盘容量调整–resize



热扩容

# 列出指定虚拟机上的磁盘信息
virsh domblklist vm名

# 对虚拟机的磁盘文件进行扩容
## --paht 为vm的磁盘绝对路径
virsh blockresize --path vm实例的磁盘绝对路径 --size 50G vm名

# 登录vm扩容文件系统容量



磁盘增加容量

# 增加10G容量
qemu-img resize /data/vm1.raw +10G



磁盘缩小容量(生产环境下禁止操作)

# raw磁盘缩小容量
qemu-img resize /data/vm2.raw -500M

kvm存储池 kvm 磁盘_kvm存储池_06

# qcow2磁盘缩小容量---不支持缩容
qemu-img resize /data/vm2.qcow2 -500G

!!!qcow2只能加不能减!

kvm存储池 kvm 磁盘_kvm_07



磁盘调整容量到指定大小

# 将磁盘容量调整至1T
qemu-img resize /data/vm2.qcow2 1T

kvm存储池 kvm 磁盘_kvm存储池_08



转换磁盘格式–convert

运行中的VM实例,要先关机后才能转换VM实例的磁盘格式,转换完成后,要执行virsh edit vm实例修改disktypediskpath为正确值才能启动VM实例。

# 1.将vm实例关机
virsh shutdown vm名称

## qemu-img convert如果不-O指定输出格式,默认转换为raw格式
# 将raw磁盘转换为qcow2磁盘
# 转换镜像为qcow2格式
## -f:参数值为源镜像文件的格式。
## -O(大写):参数值分别为输出镜像格式、源镜像文件名称和输出镜像文件名称。
qemu-img convert -f raw -O qcow2 vm1.raw vm2.qcow2

# 修改vm实例的磁盘type和path
virsh edit vm名称

原来的磁盘格式是raw

kvm存储池 kvm 磁盘_配置文件_09


修改成qcow2格式磁盘

kvm存储池 kvm 磁盘_kvm存储池_10



转换VMware的vmdk为qcow2

# 转换VMware的vmdk为qcow2
## qemu-img convert如果不-O指定输出格式,默认转换为raw格式
# 将raw磁盘转换为qcow2磁盘
# 转换镜像为qcow2格式
## -f:参数值为源镜像文件的格式。
## -O(大写):参数值分别为输出镜像格式、源镜像文件名称和输出镜像文件名称。
qemu-img convert -f vmdk -O qcow2 source-name.vmdk target-name.qcow2 

# 转换&压缩命令:
## -c 压缩镜像
qemu-img convert -c -f vmdk -O qcow2 source-name.vmdk target-name.qcow2

kvm存储池 kvm 磁盘_磁盘镜像_11


kvm存储池 kvm 磁盘_kvm存储池_12



检查磁盘镜像文件

对磁盘镜像文件进行一致性检查,查找镜像文件中的错误,目前仅支持对qcow2qedvdi格式文件的检查。

# 检查磁盘文件
qemu-img check vm2.qcow2



磁盘快照

默认会把磁盘快照的配置文件存储到/var/lib/libvirt/qemu/snapshot/虚拟机名称/快照名称.xml



创建磁盘快照

# -c:表示创建磁盘快照
qemu-img snapshot -c 快照名 磁盘镜像文件路径



查看磁盘快照

# -l:查看磁盘文件的快照列表
qemu-img snapshot -l /kvm/images/centos7.qcow2



回滚到磁盘快照

# -a:应用磁盘快照,将磁盘恢复到做快照那一刻
qemu-img snapshot -a 快照名 磁盘镜像文件路径



删除磁盘快照

# -d:删除磁盘快照
qemu-img snapshot -l /kvm/images/centos7.qcow2



在线附加和卸载VM磁盘

kvm存储池 kvm 磁盘_kvm_13



附加磁盘到vm实例–attach-disk

附件磁盘热生效的,通过virsh attach-disk添加硬盘时,只能是虚拟机运行时才能添加,而且是即时生效的。

# 将磁盘挂载到vm实例--立即且永久生效
## --live 热生效,但不保存到配置文件
## --config 写入到配置文件永久生效
virsh attach-disk vm名称 [--source] /data/raw/disk02.qcow2 sdb --subdriver=qcow2 --live --config

# 查看指定虚拟机的磁盘是否增加
virsh domblklist vm名

virsh

附加磁盘 / 卸载磁盘

vm名称

vm磁盘路径

vm中块设备名

指定vm磁盘格式(可选参数)

其他参数(可选参数)

virsh

attach-disk

vm1

/data/raw/disk02.qcow2

vdb

–subdriver=qcow2

–live --config


从vm实例中分离磁盘–detach-disk

附加的磁盘一定要在虚拟机运行时卸载,
vm关机卸载磁盘会报错,但也能把该磁盘卸载掉。

# 从vm实例中删除磁盘--立即且永久生效
virsh detach-disk vm名称 –target vdb --live --config

# 查看指定虚拟机的磁盘是否减少
virsh domblklist vm名

virsh

附加磁盘 / 卸载磁盘

vm名称

–target

vm中块设备名

其他参数(可选参数)

virsh

detach-disk

vm1

–target

vdb

–live --config


存储池管理


# 查看所有Storage Pool 
virsh pool-list --all