最近虚拟机的文件体积越来越大,磁盘空间不够用了 虚拟机的实体文件在宿主机上文件格式为:qcow2 奇怪的是虚拟机上实际占用30g,宿主机上占用70g。 完全额外占用了空间,并且虚拟机的qcow2只会根据文件写入扩容,并不会因为虚拟机删除文件缩容。
本文就简单讲一下怎么给qcow2文件进行压缩。
教程
问下AI知道有两种方法,第一个是在虚拟机上用零填充所有未使用的空间,然后再进行压缩。
另外一种是用工具进行,这里我使用的工具是:virt-sparsify(qcow2压缩) + tmux(后台终端)
安装 virt-sparsify
virt-sparsify 是 libguestfs-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 ls 或 tmux list-sessions |
查看当前运行的会话 |
| 进入已有会话 | tmux attach -t 会话名/会话ID |
例如 tmux attach -t sparsify |
| 临时退出会话(后台运行) | 按 Ctrl+B 后松开,再按 d |
SSH 断开后,会话会自动后台运行 |
| 关闭会话 | 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的情况。