Proxmox VE等虚拟化平台下qcow2类型磁盘文件瘦身命令随记:修订间差异
来自三线的随记
小无编辑摘要 |
小无编辑摘要 |
||
(未显示同一用户的1个中间版本) | |||
第29行: | 第29行: | ||
在这种情况下,如果需要在pve平台中对虚拟机进行节点间的迁移(虚拟机磁盘文件没有放在分布式存储上),有可能带来较长的耗时 | 在这种情况下,如果需要在pve平台中对虚拟机进行节点间的迁移(虚拟机磁盘文件没有放在分布式存储上),有可能带来较长的耗时 | ||
(vm migration任务可能一直卡在Formatting '/vm-files/images/xxx/xxx.qcow2'状态) | |||
第44行: | 第47行: | ||
root@pve-211:/vm-files/images/103# lsattr | root@pve-211:/vm-files/images/103# lsattr | ||
----i---------e------- ./base-103-disk-0.qcow2 | ----i---------e------- ./base-103-disk-0.qcow2 | ||
一般是由于该文件属性被设置了i属性(immutable, | 一般是由于该文件属性被设置了i属性(immutable, 在文件上启用这个属性时,不能更改、重命名或者删除这个文件)导致的,只需要移除 i 属性然后再删除即可 | ||
chattr -i ./base-103-disk-0.qcow2 | chattr -i ./base-103-disk-0.qcow2 | ||
对于此类重命名后的瘦身磁盘文件,也可以顺手把i属性加回去以保护文件 | 对于此类重命名后的瘦身磁盘文件,也可以顺手把i属性加回去以保护文件 |
2023年5月14日 (日) 20:29的最新版本
先确保相关的磁盘关联的虚拟机已经关机
Proxmox VE(又简称 pve) 等基于qemu的虚拟化管理平台建虚拟机的时候,有的不支持设置磁盘创建模式为精简置备模式 (精简置备模式是vmware的磁盘磁盘置备模式描述,pve目前似乎没找到类似的概念)
这种情况下在ls -lh
命令中,文件size大小会跟平台上对应磁盘的总体大小基本一致,但是与 du -sh
下显示的大小相差特别大( du -sh 才是实际的占用大小)
这种文件一般又称为: 稀疏文件(sparse file)
example:
root@pve-211:/vm-files/images/110# ls -lh total 3.6G -rw-r----- 1 root root 33G Apr 3 20:16 vm-110-disk-0.qcow2 root@pve-211:/vm-files/images/110# du -sh vm-110-disk-0.qcow2 3.6G vm-110-disk-0.qcow2 root@pve-211:/vm-files/images/110# stat vm-110-disk-0.qcow2 File: vm-110-disk-0.qcow2 Size: 34365243392 Blocks: 7359256 IO Block: 4096 regular file Device: 812h/2066d Inode: 25559069 Links: 1 Access: (0640/-rw-r-----) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2022-04-03 20:16:28.146186594 +0800 Modify: 2022-04-03 20:16:27.638194604 +0800 Change: 2022-04-03 20:16:27.638194604 +0800 Birth: 2022-04-03 20:13:59.396532193 +0800
可以看出id为110的虚拟机,disk-0在创建的时候声明了约33G的容量,目前实际占用约3.6G
在这种情况下,如果需要在pve平台中对虚拟机进行节点间的迁移(虚拟机磁盘文件没有放在分布式存储上),有可能带来较长的耗时
(vm migration任务可能一直卡在Formatting '/vm-files/images/xxx/xxx.qcow2'状态)
使用以下命令可以进行文件瘦身
qemu-img convert -O qcow2 base-103-disk-0.qcow2 base-103-disk-0.qcow2_new rm base-103-disk-0.qcow2 mv base-103-disk-0.qcow2_new base-103-disk-0.qcow2
如上即可完成磁盘文件的瘦身
额外的情况
部分磁盘文件会出现无法删除的情况(特别是pve中template类型虚拟机的关联磁盘文件),会提示
rm: cannot remove 'base-103-disk-0.qcow2': Operation not permitted
这时候需要检查一下磁盘文件属性
root@pve-211:/vm-files/images/103# lsattr ----i---------e------- ./base-103-disk-0.qcow2
一般是由于该文件属性被设置了i属性(immutable, 在文件上启用这个属性时,不能更改、重命名或者删除这个文件)导致的,只需要移除 i 属性然后再删除即可
chattr -i ./base-103-disk-0.qcow2
对于此类重命名后的瘦身磁盘文件,也可以顺手把i属性加回去以保护文件
chattr +i ./base-103-disk-0.qcow2
一键命令(对模板类型虚拟机无效)
进入到相应的磁盘文件目下下后
ls -1|awk '{print "qemu-img convert -O qcow2 "$1" "$1"_prune && rm -vf "$1" && mv -v "$1"_prune "$1" && chmod 640 "$1}'|sh
效果如下
root@pve-211:/vm-files/images/110# ls -lh total 3.6G -rw-r----- 1 root root 33G Apr 3 20:16 vm-110-disk-0.qcow2 root@pve-211:/vm-files/images/110# ls -1|awk '{print "qemu-img convert -O qcow2 "$1" "$1"_prune && rm -vf "$1" && mv -v "$1"_prune "$1" && chmod 640 "$1}'|sh removed 'vm-110-disk-0.qcow2' renamed 'vm-110-disk-0.qcow2_prune' -> 'vm-110-disk-0.qcow2' root@pve-211:/vm-files/images/110# ls -lh total 3.6G -rw-r----- 1 root root 3.6G Apr 3 21:58 vm-110-disk-0.qcow2