xChar
·a month ago

最近虚拟机的文件体积越来越大,磁盘空间不够用了 虚拟机的实体文件在宿主机上文件格式为:qcow2 奇怪的是虚拟机上实际占用30g,宿主机上占用70g。
完全额外占用了空间,并且虚拟机的qcow2只会根据文件写入扩容,并不会因为虚拟机删除文件缩容。

本文就简单讲一下怎么给qcow2文件进行压缩。

教程

问下AI知道有两种方法,第一个是在虚拟机上用零填充所有未使用的空间,然后再进行压缩。

另外一种是用工具进行,这里我使用的工具是:virt-sparsify(qcow2压缩) + tmux(后台终端)

安装 virt-sparsify

virt-sparsifylibguestfs-tools 包的一部分,用于精简虚拟机磁盘镜像。根据不同的 Linux 发行版,安装方法如下:

Debian/Ubuntu

sudo apt update
sudo apt install libguestfs-tools

CentOS/RHEL

sudo yum install libguestfs-tools-c

Fedora

sudo dnf install libguestfs-tools

安装 tmux

tmux 是一个终端复用器,可在单个终端窗口中管理多个会话。安装方法如下:

Debian/Ubuntu

sudo apt update
sudo apt install tmux

CentOS/RHEL

sudo yum install tmux

Fedora

sudo dnf install tmux

macOS(使用 Homebrew):

brew install tmux

验证安装
安装完成后,可以通过以下命令验证版本:

virt-sparsify --version
tmux -V

压缩qcow2

首先我们使用tmux创建一个新的终端窗口,因为处理时间比较长 为了防止终端因为网络问题断开 任务中断。

操作命令说明
创建新会话tmux new -s 会话名例如 tmux new -s sparsify(处理稀疏化任务)
列出所有会话tmux lstmux list-sessions查看当前运行的会话
进入已有会话tmux attach -t 会话名/会话ID例如 tmux attach -t sparsify
临时退出会话(后台运行)Ctrl+B 后松开,再按 dSSH 断开后,会话会自动后台运行
关闭会话tmux kill-session -t 会话名结束指定会话(谨慎使用,会终止其中进程)

再使用下面的命令去压缩qcow2:

virt-sparsify \
  --compress \
  --tmp /home/kvm/tmp \
  /opt/kvm/kvm656-system1.qcow2 \
  /opt/kvm/kvm656-system.qcow2
  • --tmp /home/kvm/tmp 是指生成的qcow2的缓存目录
  • /opt/kvm/kvm656-system1.qcow2 是指需要压缩的qcow2文件
  • /opt/kvm/kvm656-system.qcow2 是指压缩后的qcow2文件

大家根据自己的需求修改路径就行了,根据我的多次测试压缩率大概在30-60% 还会出现虚拟机上占用10g,在宿主机上压缩后才3g的情况。

Loading comments...