虚拟机空间满了别急着删快照,先用三个最省事的方法腾出空间:清理包管理器缓存、压缩日志文件、找出无用的ISO镜像,这三步做完,绝大多数虚拟机都能找回20%以上的磁盘空间。
如果你的虚拟机连系统都启动不了,或者清理完还是不够用,别慌下面这套从浅到深的清理扩容方案,按顺序操作即可,每一步都是独立可用的。
虚拟机空间满了怎么清理:先从不用重启的三件事下手
第一步:用du命令定位“空间杀手”
登录虚拟机后,别凭感觉去找大文件,用下面这条命令,直接列出根目录下占用最大的前10个目录:
sudo du -h --max-depth=1 / | sort -rh | head -10
这条命令会从根目录开始逐层统计,几秒钟就能告诉你空间都被谁吃掉了,多数情况下,结果里排名靠前的不是/var就是/home或/opt。
如果发现/var特别大,继续往下钻:
sudo du -h --max-depth=1 /var | sort -rh | head -10
逐层下钻,直到找到真正的大文件或大目录。切忌上来就删东西,先看清楚再动手,这个习惯能避免误删系统文件。
第二步:清理包管理器缓存
这是最安全、见效最快的一步,无论是CentOS、Ubuntu还是Debian,包管理器都会把下载的安装包缓存在本地。
- CentOS / RHEL 系,执行:
sudo yum clean all
或者新版的:
sudo dnf clean all
- Ubuntu / Debian 系,执行:
sudo apt clean
再顺手清掉已无用的依赖包:
sudo apt autoremove
这一步清理出来的空间通常在1GB到3GB之间,积压时间越久效果越明显,据行业普遍反馈,长期未清理的虚拟机光缓存就能占到好几个GB。
第三步:压缩系统日志
日志文件是另一个被忽视的空间消耗大户。/var/log目录下的日志文件会随时间无限增长,不会自动压缩的历史日志尤其占空间。
先查看日志占用了多少:
sudo du -sh /var/log
如果超过1GB,说明日志太久没管了,用journalctl清理Systemd日志:
# 只保留最近3天的日志 sudo journalctl --vacuum-time=3d
这条命令会自动删除过期日志,不需要重启服务,对于传统的syslog文件,可以用logrotate手动强制执行一次:
sudo logrotate -f /etc/logrotate.conf
行业共识认为,日志占到虚拟机总磁盘的10%以上就属于异常状态,需要排查是否有程序在疯狂刷日志。
虚拟机扩容磁盘空间不足:扩分区前必须搞懂这几点
如果清理过后空间仍然紧张,或者磁盘本身就只有30GB、40GB这种小容量,那就需要扩容了,扩容前先想清楚两件事。
分清虚拟磁盘类型:动态分配还是固定大小
这一步很关键,直接决定你扩容的难度和耗时。
- 动态分配磁盘:最开始只占实际使用的大小,之后随数据增长逐渐变大,这种磁盘扩容简单,主机端改完大小,虚拟机里直接就能看到新空间。
- 固定大小磁盘:创建时就一次性占满设定容量,扩容时不仅主机端要改,虚拟机内部还需要额外步骤才能让系统识别。
不确定自己用的是哪种?在虚拟化平台上检查该虚拟机的磁盘配置文件即可,VMware里查看.vmdk文件属性,VirtualBox里查看.vdi文件详情,描述中会明确标注。
LVM逻辑卷是唯一能热扩容的方案
如果你是装机时选择了默认分区方案,大概率用的是LVM,LVM的好处在于支持在线扩容,不需要停机、不用重启,系统运行中就能完成。
查看当前分区是否LVM:
sudo lvs
如果输出有结果,说明就是LVM,按下面流程操作:
# 1. 查看当前卷组空间 sudo vgs # 2. 扩展物理卷(需先确认主机端已扩容磁盘) sudo pvresize /dev/sda # 3. 扩展逻辑卷,比如根分区 sudo lvextend -l +100%FREE /dev/mapper/centos-root # 4. 让文件系统识别新空间 sudo xfs_growfs /dev/mapper/centos-root
如果是ext4文件系统,最后一步用resize2fs /dev/mapper/centos-root。注意:xfs和ext4的命令不一样,搞混了会报错。
如果你用的不是LVM,而是传统的GPT或MBR分区,那么扩容流程会麻烦不少,大概率需要重启或借助第三方工具。
VMware虚拟机磁盘扩容操作全流程
VMware扩容工具:vmware-vdiskmanager或界面操作
VMware Workstation Pro 16及以上版本,直接在虚拟机设置里就能改:
- 关闭虚拟机
- 右键虚拟机 → 设置 → 硬盘 → 磁盘实用工具 → 扩展
- 输入新容量,点击扩展
等待进度条走完即可。扩容过程中尽量别做其他操作,特别是动态磁盘,整个过程会重新整理数据,耗时取决于磁盘大小。
老版本VMware没有图形化扩容入口,使用命令行工具:
# Windows主机下,进入VMware安装目录执行 vmware-vdiskmanager.exe -x 100GB "F:\VM\MyVM\MyVM.vmdk" # Linux主机下 vmware-vdiskmanager -x 100GB /home/vm/MyVM/MyVM.vmdk
扩容完成后,在虚拟机内部执行fdisk -l确认新空间是否被识别,如果是LVM分区,直接按上面的lvextend流程操作,不需要重启。
常用VMware虚拟机清理瘦身技巧
VMware动态磁盘还有个特点删除文件后不会自动缩回,你删了10GB数据,主机上的.vmdk文件大小还是那么大,这属于正常现象,需要手动瘦身才能让主机端空间释放出来,对虚拟机内部没影响,清理主要影响的是宿主机磁盘占用。
老版本VMware用自带工具压缩:
vmware-vdiskmanager -k "F:\VM\MyVM\MyVM.vmdk"
新版本用VMware自带的“压缩虚拟磁盘”功能,路径在虚拟机设置 → 硬盘工具里。
还有一种更彻底的瘦身方式:用fstrim命令配合虚拟磁盘的TRIM协议,让VMware回收已删除的数据块。
# 安装好VMware Tools后执行 sudo fstrim -av
定期执行fstrim能让动态磁盘长时间使用后体积明显缩小。
VirtualBox虚拟机目录瘦身和磁盘扩容操作指南
VirtualBox磁盘扩容方法
VirtualBox在功能和界面上与VMware有些差异,但扩容思路一致。
先查看磁盘格式:
VBoxManage list hdds
看到格式是VDI或VMDK后,有两种扩容方式。
动态VDI可直接扩容(注意必须是动态分配的VDI;固定大小或VMDK格式需要先转换):
# 把虚拟磁盘改成动态格式(如果之前是固定分配的) VBoxManage modifymedium ubuntu.vdi --compact # 扩大容量到120GB VBoxManage modifymedium ubuntu.vdi --resize 122880
容量单位是MB,122880MB = 120GB,扩容时虚拟机必须处于关机状态。
扩容完成后,虚拟机内部识别流程跟VMware一致LVM分区用lvextend扩展,如果是普通分区则需借助growpart命令:
# Ubuntu系安装cloud-guest-utils后 sudo growpart /dev/sda 1 sudo resize2fs /dev/sda1
VirtualBox系统瘦身列表
VirtualBox虚拟机的日常维护,按下面清单逐项执行:
- 清理APT缓存:
sudo apt clean && sudo apt autoremove - 清理Systemd日志:
sudo journalctl --vacuum-size=200M - 删除用户缓存:
sudo rm -rf /root/.cache/(每个用户目录下的.cache也可检查) - 查找并删除ISO镜像文件:
find / -name ".iso" -size +500M
虚拟机能从四个方向固定压缩清理频率
每月执行一次大文件检查
用crontab设定一个每月的定时任务,自动扫描并邮件通知大文件:
0 2 1 du -ah /home /var /opt 2>/dev/null | sort -rh | head -30 > /tmp/bigfiles.txt
这样月底你瞄一眼列表,就能发现有没有异常增长的文件。
用docker容器内残留镜像瘦身
如果虚拟机里跑着Docker,docker system df 查看占用情况,常会有意外发现:
# 清理悬空镜像和停止的容器 docker system prune -a -f
这一步动辄回收好几个GB,尤其适合跑微服务开发环境的虚拟机。
时刻关注快照数量
快照是虚拟机空间占用的大户,尤其是长期保留的快照链,每打一次快照,后续磁盘写入都会持续累积增量数据。合理保留1到2个快照即可,超过3个就该考虑是否需要保留。
或将虚拟磁盘转为稀疏文件
如果宿主机的文件系统支持稀疏文件(ext4、XFS都支持),可以尝试把虚拟磁盘的预分配容量改小:
# 把固定大小VDI转为动态VDI VBoxManage clonehd ubuntu.vdi ubuntu-dyn.vdi --variant Standard
转换完成后用新文件替换旧的磁盘文件,主机端空间能省出不少。
虚拟机磁盘空间不足的常见问题
虚拟机磁盘扩容会影响系统数据吗?
不会,磁盘扩容只做加法增加可用空间,不改动已有分区和文件系统上的数据,扩容前备份重要数据是基本操作,但正常情况下扩容后系统数据不会受影响,操作时要避免中途断电或强制关闭,这是扩容过程中唯一需要防范的风险。
虚拟机扩容是只能往大了扩还是可以缩小?
可以缩小,不建议随便缩,动态分配磁盘可以通过压缩命令收缩(VMware的-k参数、VirtualBox的modifymedium --compact),固定大小磁盘缩小风险很高,需要专业工具处理,操作失误会导致文件系统损坏,有缩容需求时,更稳妥的做法是新建一块小磁盘,把数据迁移过去,确认无误后再删除旧磁盘。
清理虚拟机有哪些提升空间的好习惯?
定期清理包缓存和日志、常规执行fstrim命令、控制快照数量、避免在虚拟机内长期存放大的临时文件,这四项做到位,虚拟机空间通常不会提前告警,虚拟机不像物理机,磁盘空间是宿主机的资源换来的,维持合理用量对宿主机整体性能也是一种保护。