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

相关文章

虚拟机与物理机的文件共享方式

《虚拟机与物理机的文件共享方式》文章介绍了如何在KaliLinux虚拟机中实现物理机文件夹的直接挂载,以便在虚拟机中方便地读取和使用物理机上的文件,通过设置和配置,可以实现临时挂载和永久挂载,并提供... 目录虚拟机与物理机的文件共享1 虚拟机设置2 验证Kali下分享文件夹功能是否启用3 创建挂载目录4

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virtual disk”问题

《VMWare报错“指定的文件不是虚拟磁盘“或“Thefilespecifiedisnotavirtualdisk”问题》文章描述了如何修复VMware虚拟机中出现的“指定的文件不是虚拟... 目录VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virt

不删数据还能合并磁盘? 让电脑C盘D盘合并并保留数据的技巧

《不删数据还能合并磁盘?让电脑C盘D盘合并并保留数据的技巧》在Windows操作系统中,合并C盘和D盘是一个相对复杂的任务,尤其是当你不希望删除其中的数据时,幸运的是,有几种方法可以实现这一目标且在... 在电脑生产时,制造商常为C盘分配较小的磁盘空间,以确保软件在运行过程中不会出现磁盘空间不足的问题。但在

SQL Server数据库磁盘满了的解决办法

《SQLServer数据库磁盘满了的解决办法》系统再正常运行,我还在操作中,突然发现接口报错,后续所有接口都报错了,一查日志发现说是数据库磁盘满了,所以本文记录了SQLServer数据库磁盘满了的解... 目录问题解决方法删除数据库日志设置数据库日志大小问题今http://www.chinasem.cn天发

Qt实现文件的压缩和解压缩操作

《Qt实现文件的压缩和解压缩操作》这篇文章主要为大家详细介绍了如何使用Qt库中的QZipReader和QZipWriter实现文件的压缩和解压缩功能,文中的示例代码简洁易懂,需要的可以参考一下... 目录一、实现方式二、具体步骤1、在.pro文件中添加模块gui-private2、通过QObject方式创建

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

hdu1565(状态压缩)

本人第一道ac的状态压缩dp,这题的数据非常水,很容易过 题意:在n*n的矩阵中选数字使得不存在任意两个数字相邻,求最大值 解题思路: 一、因为在1<<20中有很多状态是无效的,所以第一步是选择有效状态,存到cnt[]数组中 二、dp[i][j]表示到第i行的状态cnt[j]所能得到的最大值,状态转移方程dp[i][j] = max(dp[i][j],dp[i-1][k]) ,其中k满足c

HotSpot虚拟机的经典垃圾收集器

读《深入理解Java虚拟机》第三版笔记。 关系 Serial、ParNew、Parallel Scavenge、Parallel Old、Serial Old(MSC)、Concurrent Mark Sweep (CMS)、Garbage First(G1)收集器。 如图: 1、Serial 和 Serial Old 收集器 2、ParNew 收集器 3、Parallel Sc