VirtualBox虚拟机磁盘VDI文件压缩瘦身

2024-02-20 20:44

本文主要是介绍VirtualBox虚拟机磁盘VDI文件压缩瘦身,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 问题现象
    • 虚拟机文件目录结构
    • 处理方法
      • 清除宿主机文件和虚拟机快照
      • 虚拟机磁盘瘦身

问题现象

  • 2月7日下午四点多,我已经休假了,某县的客户运维方打来电话,说平台挂了,无法访问

  • 客户是提供的一台Windows server2016机器部署平台,是使用VirtualBox6.1工具安装的CentOS7.9虚拟机

  • 最终排查发现是虚拟机磁盘文件和备份快照磁盘文件一起把机器磁盘撑满了,机器空间不足引发了这个报错,有兴趣的可以看下《virtualbox虚拟机运行中断,启动报错“获取 VirtualBox COM 对象失败”》

  • 看了下虚拟机文件262G,备份快照218G,一下子就480G了,而机器只有500+G,加上其他文件,慢慢就爆满了

  • 使用 df -h命令查看,虚拟机总共也就占用100G左右,没有使用那么多

  • 搜索后,知道了一个原因:默认情况下VirtualBox会创建动态磁盘,而动态分配的虚拟磁盘,只是逐渐占用物理硬盘的空间(直至达到分配的大小)。不过当其内部空间不用时,不会自动缩减占用的物理硬盘空间
    在这里插入图片描述

  • 我自己测试了下,往虚拟机里上传了一个3GB的文件,发现.vdi文件增大了3G,我删除这个文件,.vdi文件并未变小

  • .vdi文件比较大时,生成备份快照或导出分享,都不太方便,当我们宿主机磁盘空间不足且无法新增磁盘扩展时,还是需要一个方法对.vdi文件进行瘦身,VirtualBox自带有这个工具

虚拟机文件目录结构

  • 进行磁盘清理前,我们需要先了解下VirtualBox相关的一些文件结构
  • VirtualBox没有指定的情况下,默认会在C盘(C:\Users\Administrator)创建2个文件夹,.VirtualBoxVirtualBox VMs
    在这里插入图片描述
  • .VirtualBox是虚拟机实时运行时维护的文件,包含定时更新的VirtualBox.xml和一些日志文件等
    在这里插入图片描述
  • VirtualBox VMs是默认创建的虚拟机文件存储位置,我们导入或新建的虚拟机都在这里面
    在这里插入图片描述
  • 对于使用virtualbox创建的虚拟机,默认情况下(没有备份快照时)会有这样的文件结构
- vName- Logs- VBox.log- VBoxHardening.log- vName.vbox- vName.vbox-prev- vName.vdi
  • 其中vName指虚拟机名称,.vbox文件是定时刷新的配置文件,.vbox-prev是配置的先前的备份文件.vdi是磁盘文件
  • 当我们有了备份快照时,会增加一个Snapshots文件夹
- vName- Logs- VBox.log- VBoxHardening.log- Snapshots- {ID1}.vdi- {ID2}.vdi- 2024-01-10T06-49-42-931165700Z.sav- vName.vbox- vName.vbox-prev- vName.vdi
  • 其中Snapshots文件夹里的.vdi,是该快照的磁盘文件,是相对于上一个快照(或根目录的vdi)的变动的文件。每个快照一个.vdi文件,该快照的变动,都会记录到该文件里。对于.sav文件,有时候创建、删除快照时,系统还是运行状态,文件是会变动的,就会存入.sav文件

  • 示例如下:
    在这里插入图片描述

  • 关于Snapshots.sav文件的更细的解释如下

在 VirtualBox 中,快照(Snapshots)功能允许您保存虚拟机(VM)的某个状态,这样您可以在未来的某个时间点恢复到该状态。这在进行可能会对系统造成重大更改的操作之前,比如安装软件、测试配置等情况下非常有用。.sav 文件是 VirtualBox 快照的一部分,这是 VirtualBox 保存的虚拟机的内存状态文件。当您为虚拟机创建一个快照时,VirtualBox 实际上做了以下几件事情:1. 它将虚拟机当前的物理内存状态保存到一个 .sav 文件中。
2. 它会保存虚拟机的当前设置和配置。
3. 它会记录虚拟磁盘在快照时间点的精确状态,从而在恢复快照时能回到该时刻。当你选择恢复到某个快照时,VirtualBox 会读取 `.sav` 文件来把虚拟机的内存状态回复到当时的状况。结合磁盘镜像文件(例如,以 `.vdi`、`.vmdk` 等格式存储)的快照,这样完整的快照状态让虚拟机返回到之前保存快照时完全相同的工作状态。简而言之,.sav 文件是虚拟机状态的一种形式,它对于快照功能是至关重要的,尤其是当您希望保留VM当前正在进行的操作以及内存中的数据时。
  • 对于VirtualBox工具,一般默认安装到C盘的C:\Program Files\Oracle\VirtualBox里,里面有该软件的所有文件,我们需要的虚拟机磁盘瘦身工具VBoxManage.exe也在里面
    在这里插入图片描述

处理方法

清除宿主机文件和虚拟机快照

  • 磁盘空间不足,可以是虚拟机或者宿主机,这里的问题主要是指宿主机磁盘
  • 可以删除宿主机机器磁盘上不用的文件、压缩包等,留出更多的磁盘空间给虚拟机
  • 可以通过VirtualBox工具删除多余的虚拟硬盘(已经删除的虚拟机,未删除虚拟机磁盘的),这些未被使用的磁盘会继续占用大量空间,不需要的情况下可以删掉
  • 也可以删除多余的备份快照,对于不需要的备份快照,即时删除,可以节省大量空间
  • 也可以定时删除和创建快照备份。删除备份时,快照与当前系统文件比较合并,相当于删除了绝大部分重复的文件,释放了很多空间,定时删除创建快照,这样保持快照文件不会特别大

虚拟机磁盘瘦身

  • 磁盘瘦身前,可以先删除所有的备份快照,只保留一个vdi文件存储我们的虚拟机状态,这样后续的磁盘瘦身更有效果
  • 除了处理快照,虚拟机磁盘本身也需要清理,可以删除不需要的文件,卸载不再使用的程序,清空回收站等,获取更多的可用空间
  • 文件删除会产生一些磁盘碎片,Windows系统是有一个磁盘碎片清理功能,而我们虚拟机的是CentOS7.9,可以使用dd命令实现,写文件再删除,需要用空数据去覆盖那些空间(未使用空间,包含磁盘碎片),再去删除,命令如下:
cd /
sudo dd if=/dev/zero of=/free
sudo rm -rf /free
  • 如果你不止一个root目录,还有home等,可以选一个剩余空间最大的盘,将 /free 换成对应的,如/home/free。注意:这个命令可能执行很久,和磁盘大小与类型有关
  • 最后,使用virtualbox自带的压缩命令对虚拟机硬盘文件进行压缩,对VDI文件压缩瘦身
  • dos窗口,执行命令 VBoxManage modifyhd v2.0.0-disk1.vdi --compact
  • 执行VBoxManage命令时,参数是是不允许有空格的,否则会报错,我们可以换个思路,进到磁盘VDI文件所在位置,再执行
    在这里插入图片描述
  • 使用 Win + R,输入cmd,进入DOS命令窗口,再进到虚拟机磁盘文件所在目录,以我当前截图的过VirtualBoxv2.0.0虚拟机为例,命令如下(实际执行请换成自己的目录路径和VDI文件名称):
cd C:\Users\Administrator\VirtualBox VMs\version\v2.0.0"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyhd v2.0.0-disk1.vdi --compact
  • 这个过程也会比较慢,可以看到类似这样0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%的进度条,执行完成后可以看到磁盘占用变小了
  • 注意:如果省掉磁盘清理那一步,也可以执行这个命令,只不过磁盘压缩效果不是很好
    在这里插入图片描述

这篇关于VirtualBox虚拟机磁盘VDI文件压缩瘦身的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/729484

相关文章

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

Linux给磁盘扩容(LVM方式)的方法实现

《Linux给磁盘扩容(LVM方式)的方法实现》本文主要介绍了Linux给磁盘扩容(LVM方式)的方法实现,涵盖PV/VG/LV概念及操作步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录1 概念2 实战2.1 相关基础命令2.2 开始给LVM扩容2.3 总结最近测试性能,在本地打数据时,发现磁盘空

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

SQL中redo log 刷⼊磁盘的常见方法

《SQL中redolog刷⼊磁盘的常见方法》本文主要介绍了SQL中redolog刷⼊磁盘的常见方法,将redolog刷入磁盘的方法确保了数据的持久性和一致性,下面就来具体介绍一下,感兴趣的可以了解... 目录Redo Log 刷入磁盘的方法Redo Log 刷入磁盘的过程代码示例(伪代码)在数据库系统中,r

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个