【VirtualBox&Ubuntu】VirtualBox中Ubuntu虚拟机磁盘碎片整理并压缩磁盘空间

本文介绍了如何在OracleVMVirtualBox中回收和压缩虚拟机磁盘空间。首先,通过磁盘碎片整理确保已使用的空间连续,然后使用dd命令清理挂载点,最后使用VBoxManage工具进行硬盘压缩。详细步骤包括确认磁盘分区、执行碎片整理、执行压缩操作等,旨在帮助用户释放虚拟机占用的多余存储空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Oracle VM VirtualBox中,相信大部分人都会使用动态分配存储空间大小的方式配置虚拟机,但这种方式带来的一个问题就是,只会自动动态的增大,而不会自动动态的减少,即,随着虚拟机的使用越来越久或者虚拟机中安装的软件越来越多,VirtualBox软件会自动分配相应的存储空间到虚拟机,此时会发现,我们明明在虚拟机卸载了软件或者删除了大量无效文件,按理说该虚拟机占用本机存储空间应该会有所降低,也即,原本vdi文件占用30G,虚拟机中删了10G,vdi文件占用应该变为20G,可VirtualBox软件本身并不会自动减少这部分存储空间的大小,即仍然是30G,只不过你后续使用过程中只有超过30G后VirtualBox软件才会再分配新的存储空间。如果需要回收已分配中未使用的存储空间,这里介绍一种简便的方法进行手动回收这部分空间。

Oracle VM VirtualBox中

第一步:VirtualBox中虚拟机进行磁盘碎片整理

磁盘碎片整理是为了确保虚拟机中已使用的空间都是连续的,这更有利于能尽可能地压缩磁盘存储空间大小。

Ubuntu虚拟机磁盘碎片整理

1、确认当前磁盘的分区情况(重点在挂载点)

在进行磁盘碎片整理前,需要确认当前磁盘的分区情况(重点在挂载点),压缩磁盘占用空间大小主要对当前磁盘中使用频繁或者占用存储空间较大的挂载点有明显的效果,例如://usr或者/usr/local/home,以及使用较多的自定义挂载目录。如果不了解自己的虚拟机磁盘分区情况,可以使用下面的命令进行查看:

$ df -h

查看磁盘使用情况

主要看文件系统栏中为/dev/sdaN的分区的挂载点,找到三个主要挂载点(这里的其它挂载点均为Linux系统自动挂载的),即://usr/home,所以这三个挂载点是下面进行磁盘碎片整理的目录

这里的磁盘分区因人而异,有的只有/根目录和linux-swap交换空间。因此,有就整理,没有就无需整理,因为/根分区已经囊括了,而独立分区出去的就需要单独整理

除了分配大小少于1G或2G的/boot,/var以及linux-swap这些分区没有必要进行磁盘整理外,其他的尽可能都进行磁盘碎片整理【主要的还是这些分区://usr或者/usr/local/home,以及使用较多的自定义分区】。

这里介绍一种查看磁盘的分区情况的软件–GParted分区编辑器:
详细安装过程可查看博文:Ubuntu中 GParted分区编辑器的安装,卸载与启动
下面提供安装命令:

$ sudo apt-get update
$ sudo apt-get install gparted

搜索GParted启动或者使用命令进行启动,命令如下:

$ sudo gparted

启动GParted

由上图看出,该虚拟机中磁盘分区由三个分区(挂载点)使用占比较大,即://usr/home

2、磁盘碎片整理
下面是笔者在虚拟机中放置了两个大文件(共约4G),并移动了几次文件的位置后的虚拟机实际分配的空间,可以看到实际分配的空间已经由原来的16.70G增长到25.01G,增长了8.31G,说明虚拟机并不是按实际使用大小进行分配,会多分配一些。
压缩前

这里把新增的两个大文件删除,模拟删除大量文件并清空回收站或者卸载软件后的情况。

各挂载点的碎片整理命令如下,至于需要执行哪些命令,看上面:
/

$ sudo dd if=/dev/zero of=/EMPTY bs=1M 
$ sudo rm -f /EMPTY

/home

$ sudo dd if=/dev/zero of=/home/EMPTY bs=1M 
$ sudo rm -f /home/EMPTY

/usr

$ sudo dd if=/dev/zero of=/usr/EMPTY bs=1M 
$ sudo rm -f /usr/EMPTY

/自定义或其它挂载点

$ sudo dd if=/dev/zero of=/改为自定义或其它挂载点/EMPTY bs=1M 
$ sudo rm -f /改为自定义或其它挂载点/EMPTY
下面为执行的详细过程:
碎片整理开始后:

碎片整理开始后会处于等待空白等待状态,此时已经开始运行的了,碎片整理是可以同时进行的,担心出问题的话可以单独进行碎片整理。若需要查看整理过程,可打开新的终端执行下面的命令,然后在执行碎片整理的终端就会输出内容:
$ sudo watch -n 5 pkill -USR1 -x dd
这里整理的时长与磁盘各挂载点的磁盘分配空间大小有关,分配空间越大,耗时越久。

碎片整理开始时

碎片整理结束后:

碎片整理结束时有的会提示空间不足,选择忽略即可,终端输出的出错信息也无需关注,此时一定要把生成的文件删了再关虚拟机

在这里插入图片描述

删除各碎片整理生成的文件:

这里一定一定一定要删除碎片整理生成的所有指定文件,【下图中没在对应终端删除,但也不是不能删除是吧,小失误,删除了即可 ^^】,所有都删除后即可关闭虚拟机

删除碎片整理生成的空文件

第二步:VirtualBox中压缩虚拟硬盘的磁盘空间
1、找到虚拟机的虚拟硬盘所在位置

关闭虚拟机后点击设置->存储->点击需要压缩磁盘空间的虚拟硬盘(例如这里的Ubuntu16.04.vdi)->找到属性中的位置
注:如果有多个虚拟硬盘,则需要分别对这些虚拟硬盘进行压缩操作。
这里发现磁盘分配的空间大小又有所增长,但增长的不是很多,问题不大

找到虚拟机的虚拟硬盘所在位置

这里的vdi所在目录(根据自己的而定,在属性位置那里一键复制即可):
D:\PortableApps\VirtualBox VMS\Ubuntu16.04\Ubuntu16.04.vdi

2、在命令提示符[cmd]执行压缩操作(已优化)

以管理员身份运行命令提示符[cmd],在终端输入以下命令:

#1、进入Oracle VM VirtualBox软件的运行程序所在目录
cd/d D:\Program Files\Oracle VM VirtualBox
#2、将""中的路径改为上面的《1、找到虚拟机的虚拟硬盘所在位置》的自己的虚拟硬盘vdi的完整路径
VBoxManage modifyhd "D:\PortableApps\VirtualBox VMS\Ubuntu16.04\Ubuntu16.04.vdi" –compact

建议使用下面的模板在记事本里编辑好了再一键复制到cmd中右键即可粘贴执行
其中cd/d为cmd命令,与盘符无关

cd/d xxxVirtualBox软件目录
VBoxManage modifyhd "虚拟硬盘vdi的完整路径" –compact

下面是详细操作过程:
以管理员身份运行命令提示符
win10的话搜索cmd即可找到命令提示符,注意最好是以管理员身份运行。命令提示符怕找不到的话,建议把它固定到开始屏幕
查找cmd
如果不知道Oracle VM VirtualBox软件的运行程序所在目录,可通过下面的方法查看
查找VirtualBox软件的位置
编辑命令(以下两个命令均可用,推荐使用优化后的)
编辑命令
以下是优化后的命令,其中cd/d为cmd命令,与盘符无关
编辑命令2

执行命令【复制命令,在cmd中右键粘贴即可】
执行命令

等待压缩到100%即可,返回VirtualBox软件中查看压缩后的大小,需要注意的是,这里的压缩并非所有情况下都会带来减少分配空间的大小,个别情况下会出现比原来多的情况。但是如果是删除了大量文件后再压缩,还是会有所减少的。

压缩后

可以发现压缩后,减少到了16.83G,至于为什么相比原本的16.70G多了那么一点,那个咱也不懂,反正减少了,哈哈。【如果有懂的小伙伴欢迎在下方评论区留言】

好了,到这里就结束了,最后提醒一下,别看这篇文章很长,这里因为需要介绍所以会偏长,但对于同一个虚拟机的命令其实都是一样的而且不多,大家可以按照下面的保存好自己的命令,下次使用起来就很方便啦。

#虚拟机压缩内存
sudo dd if=/dev/zero of=/EMPTY bs=1M 
sudo rm -f /EMPTY

sudo dd if=/dev/zero of=/home/EMPTY bs=1M
sudo rm -f /home/EMPTY

sudo dd if=/dev/zero of=/usr/EMPTY bs=1M
sudo rm -f /usr/EMPTY

【sudo watch -n 5 pkill -USR1 -x dd】查看dd进度,一般无需执行

cd/d D:\Program Files\Oracle VM VirtualBox
VBoxManage modifyhd "D:\PortableApps\VirtualBox VMS\Ubuntu16.04\Ubuntu16.04.vdi" –compact

大家多多支持,有什么不足之处,欢迎大家在下方留言讨论!

### 如何扩展 VirtualBoxUbuntu 虚拟机磁盘空间 #### 关闭虚拟机 为了安全地调整磁盘容量,在执行任何更改前需确保已关闭目标 Ubuntu 虚拟机。 #### 使用命令行工具增加 VDI 文件大小 通过命令提示符或终端窗口输入特定指令来增大现有 .vdi 文件尺寸: 对于 Windows 主机操作系统而言,打开 CMD 或 PowerShell 导航到 VirtualBox 安装目录下;如果是 Linux 或 macOS 则直接在 shell 终端操作即可。接着运行下面这条语句修改指定 vdi 的实际占用量至新的数值(此处以20GB为例): ```bash VBoxManage modifyhd "C:\path\to\your\Ubuntu16.04.vdi" --resize 20480 ``` 上述路径应替换为真实的文件所在位置[^1]。 #### 更新分区表和文件系统 仅改变底层映像文件不能立即让 guest OS 认识到新增加的部分,还需登录到该 VM 内部进一步处理: 启动虚拟机之后,利用 `lsblk` 命令查看当前设备布局情况,确认新分配的空间确实存在但尚未被使用。随后借助 GParted 图形化界面或是 fdisk 文字模式下的编辑器创建/调整相应逻辑卷及其挂载点所对应的分区边界,最后同步更新 ext4/xfs 等具体类型的 filesystem metadata 结构使之能够充分利用整个可用区间[^3]。 #### 清理无用数据优化存储效率 完成扩容工作后建议定期实施必要的维护措施,比如删除不必要的软件包、清空缓存日志记录以及执行 defragmentation 和 compact operation 来减少冗余开销提高读写性能表现[^2]: 关闭虚拟机后点击设置->存储->点击需要压缩磁盘空间的虚拟硬盘(例如这里的 Ubuntu16.04.vdi)->找到属性中的位置。如果有多个虚拟硬盘,则需要分别对这些虚拟硬盘进行压缩操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一点年羊

创作不易,支持作者

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值