减少qcow2虚拟磁盘文件实际占用的存储空间
2017-08-30 23:01
453 查看
虚拟磁盘文件占用的空间会越来越大,就算从客户机里面删除了很多文件,但这些空间并未释放出来,qcow2文件仍然占用大量的主机存储空间。
虽然qcow2有一个特点,客户机需要时才分配存储空间,这工作的一直很好。但是当从客户机删除了很多文件,释放了很多空间时,从KVM主机端完全看不到qcow2虚拟磁盘文件有变小的迹象。这是因为现在的文件系统都有一个特点,删除文件时并没有真正的清除文件的内容,只是简单的做了标记,这样删除文件会很迅速,只有当用到这些空间时才重新写入新的数据。这也是反删除甚至反格式化软件存在的基础。所以要想缩小qcow2虚拟磁盘文件的大小,就要真正释放这些未使用的空间才可以。
不同的客户机类型有不同解决方式,基本思路就是用0填充未使用的客户机磁盘空间,然后用qemu-img转换磁盘镜像文件,转换后的磁盘镜像文件将只包含所有已使用的磁盘空间。
linux客户机
使用dd命令将客户机未使用的磁盘空间用0填满
$dd if=/dev/zero of=~/junk
dd: writing to `/home/***/junk’: No space left on device
然后
$rm junk
关闭客户机
转换磁盘镜像文件
$qemu-img convert -O qcow2 debian.qcow2 debian_new.qcow2
转换完成后可以看到debian_new.qcow2占用的KVM主机存储空间与客户机使用的磁盘空间基本是一致的。然后用新的磁盘镜像文件debian_new.qcow2启动客户机即可。
windows客户机
删除不需要的文件,清理系统垃圾,然后整理磁盘碎片
下载SDelete(https://docs.microsoft.com/zh-cn/sysinternals/downloads/sdelete),借助sdelete用0来填充未使用硬盘空间
查看sdelete帮助
C:\>sdelete
SDelete – Secure Delete v1.6
Copyright (C) 1999-2010 Mark Russinovich
Sysinternals – www.sysinternals.com
usage: sdelete.exe [-p passes] [-s] [-q] …
sdelete.exe [-p passes] [-z|-c] [drive letter] …
-a Remove Read-Only attribute
-c Clean free space
-p passes Specifies number of overwrite passes (default is 1)
-q Don’t print errors (Quiet)
-s or -r Recurse subdirectories
-z Zero free space (good for virtual disk optimization)
用0填充C分区空闲区域
C:\>sdelete -z c
关闭客户机
最后在KVM主机上转换qcow2磁盘镜像文件
$qemu-img convert -O qcow2 windows.qcow2 windows_new.qcow2
转换完成后可以看到windows_new.qcow2占用的KVM主机存储空间与客户机使用的磁盘空间基本是一致的。然后用新的磁盘镜像文件windows_new.qcow2启动客户机即可。
原文地址:http://openwares.net/linux/reduce_qcow2_image_size_kvm.html
虽然qcow2有一个特点,客户机需要时才分配存储空间,这工作的一直很好。但是当从客户机删除了很多文件,释放了很多空间时,从KVM主机端完全看不到qcow2虚拟磁盘文件有变小的迹象。这是因为现在的文件系统都有一个特点,删除文件时并没有真正的清除文件的内容,只是简单的做了标记,这样删除文件会很迅速,只有当用到这些空间时才重新写入新的数据。这也是反删除甚至反格式化软件存在的基础。所以要想缩小qcow2虚拟磁盘文件的大小,就要真正释放这些未使用的空间才可以。
不同的客户机类型有不同解决方式,基本思路就是用0填充未使用的客户机磁盘空间,然后用qemu-img转换磁盘镜像文件,转换后的磁盘镜像文件将只包含所有已使用的磁盘空间。
linux客户机
使用dd命令将客户机未使用的磁盘空间用0填满
$dd if=/dev/zero of=~/junk
dd: writing to `/home/***/junk’: No space left on device
然后
$rm junk
关闭客户机
转换磁盘镜像文件
$qemu-img convert -O qcow2 debian.qcow2 debian_new.qcow2
转换完成后可以看到debian_new.qcow2占用的KVM主机存储空间与客户机使用的磁盘空间基本是一致的。然后用新的磁盘镜像文件debian_new.qcow2启动客户机即可。
windows客户机
删除不需要的文件,清理系统垃圾,然后整理磁盘碎片
下载SDelete(https://docs.microsoft.com/zh-cn/sysinternals/downloads/sdelete),借助sdelete用0来填充未使用硬盘空间
查看sdelete帮助
C:\>sdelete
SDelete – Secure Delete v1.6
Copyright (C) 1999-2010 Mark Russinovich
Sysinternals – www.sysinternals.com
usage: sdelete.exe [-p passes] [-s] [-q] …
sdelete.exe [-p passes] [-z|-c] [drive letter] …
-a Remove Read-Only attribute
-c Clean free space
-p passes Specifies number of overwrite passes (default is 1)
-q Don’t print errors (Quiet)
-s or -r Recurse subdirectories
-z Zero free space (good for virtual disk optimization)
用0填充C分区空闲区域
C:\>sdelete -z c
关闭客户机
最后在KVM主机上转换qcow2磁盘镜像文件
$qemu-img convert -O qcow2 windows.qcow2 windows_new.qcow2
转换完成后可以看到windows_new.qcow2占用的KVM主机存储空间与客户机使用的磁盘空间基本是一致的。然后用新的磁盘镜像文件windows_new.qcow2启动客户机即可。
原文地址:http://openwares.net/linux/reduce_qcow2_image_size_kvm.html
相关文章推荐
- 虚拟机内删除文件后减少qcow2虚拟磁盘文件实际占用的存储空间
- Unity3D之如何将包大小减少到极致 发表于2014年6月6日由陆泽西 Unity3D之如何将包大小减少到极致,图片是游戏app里最最占空间的资源,所以请各位还没有理解u3d对图片文件存储方式理解
- 为什么文件占用的空间会大于文件实际大小.
- SQL Server使用文件组备份降低备份文件占用的存储空间
- 笔记本硬盘显示所有文件占用空间比实际相差几十G,原因就是系统自己备份导致的
- SQL Server使用文件组备份降低备份文件占用的存储空间
- 解决linux系统下分区文件占用总空间比实际分区总容量要小却提示磁盘空间已满的问题
- 文件大小为什么和占用空间不一样?
- linux下使用 du查看某个文件或目录占用磁盘空间的大小
- iphone空间占用上的QQ程序竟然搞到2个多G,但是QQ本身只有100M左右,剩下的都是QQ接受的文件、视频、图片等,怎么清除这些,腾出空间?
- c++类不含有数据成员(静态除外),则不会为该类实例分配存储空间,该类实例只占用一个字节空间
- Win7减少系统空间占用有妙招分享
- postgresql查看数据库占用的物理存储空间大小
- php计算指定目录下文件占用空间的方法
- 收缩数据文件占用空间大小方法
- php计算指定目录下文件占用空间的方法
- 决定视频文件占用空间大小的因素(编码格式,比特率)
- 访问文件服务器提示“存储空间不足,无法处理此命令”
- Linux查看某目录占用空间以及其下有多少个文件