KVM 是一种基于 Linux 内核的虚拟化技术,能够实现将一台物理机器上的计算资源分隔成多个虚拟机从而提高硬件资源的利用率和灵活性。使用虚拟机的过程中,由于系统和软件的安装,虚拟机的磁盘镜像经常需要进行扩容或压缩。本文就介绍如何在 KVM 虚拟机上实现磁盘镜像的扩容和压缩。
KVM 虚机磁盘扩容 步骤一:关闭虚拟机在扩容磁盘的过程中,必须先关闭虚拟机。使用下面的命令可以关闭虚拟机:
virsh shutdown <虚拟机名称>
步骤二:编辑 XML 配置文件
使用下面的命令,编辑虚拟机的 XML 配置文件,找到磁盘镜像对应的部分:
virsh edit <虚拟机名称>
找到磁盘镜像所在的设备,在 <disk>
标签内部加入 <capacity unit='G'>扩容大小</capacity>
标签,如下所示:
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/<镜像文件名>.qcow2'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
<discard mode='unmap'/>
<capacity unit='G'>10</capacity>
</disk>
注意修改 <capacity>
标签中的 10
参数为需要扩容的大小(GB)。
保存 XML 配置文件后,使用下面的命令重新启动虚拟机:
virsh start <虚拟机名称>
虚拟机启动后,使用下面的命令重新配置磁盘大小:
qemu-img resize <镜像文件名>.qcow2 +<扩容大小>G
注意,<镜像文件名>.qcow2
指的是虚拟机磁盘镜像文件的名称,+<扩容大小>G
表示将磁盘扩容 <扩容大小>
GB。
完成以上步骤后,开机登录虚拟机,使用 lsblk
命令可以查看磁盘是否扩容成功。
如果磁盘压缩前的使用率较低,那么进入虚拟机,删除一些不必要的文件或者清理系统缓存,可以减少文件系统的大小,然后再执行磁盘压缩操作。虚拟机磁盘压缩操作需要使用 qemu-img
命令。对于 qcow2 格式的文件,压缩会把文件里面已经标记为删除的虚拟块删除,然后将使用的块移到文件最后面,并将文件截断,因此可以减小文件大小。
连接到虚拟机上,执行下面的命令:
sudo apt-get install zerofree
sudo apt-get autoremove && sudo apt-get clean
zerofree
是一个用于清空虚拟机系统磁盘空间的工具。autoremove
和 clean
命令则是用于删除不再需要的软件包和缓存文件。
执行以上命令后,我们再执行 sudo shutdown -h now
命令,等待虚拟机关闭即可。
执行下面的命令,压缩虚拟机磁盘:
qemu-img convert -c -f qcow2 <原镜像文件>.qcow2 <新镜像文件>.qcow2
这个命令将会使用 qcow2 格式重新编码虚拟磁盘文件,从而压缩文件。<原镜像文件>.qcow2
是虚拟机磁盘镜像文件的名称,<新镜像文件>.qcow2
是新的压缩后磁盘镜像文件的名称。
等待命令执行完成后,我们更新 XML 配置文件,修改虚拟磁盘文件名并删除原始文件。
virsh edit <虚拟机名称>
找到磁盘镜像所在的设备,修改 <source file='原文件地址'/>
中的文件名为新的镜像文件名。
然后使用下面的命令删除原始文件:
rm <原镜像文件>.qcow2
重新启动虚拟机,使用 lsblk
命令可以查看磁盘是否压缩成功。
KVM 虚机磁盘扩容和压缩是日常运维中的基本技能,上述步骤简明扼要,可以让大家迅速上手。需要注意的是,磁盘操作需要在关闭虚拟机后进行,而在操作磁盘后,需要及时更新虚拟机的 XML 配置文件,以保证正常启动虚拟机。