987 words
5 minutes
ubuntu虚拟机容量不足问题
📝 虚拟机空间不足问题解决笔记
一、问题描述
现象
- 执行
apt安装/更新、编译代码、保存文件时提示 空间不足。 df -h查看根分区(如/dev/sda2)使用率接近 100%(例:20G 根分区已用 18G,可用仅 702M,使用率 97%)。- 部分命令因空间不足无法正常执行(如
apt缓存写入失败)。
环境信息
- 虚拟化平台:VMware Workstation
- 虚拟机硬盘:最大容量 40G,但系统内仅识别并使用 20G
- 操作系统:Ubuntu(根分区为 ext4 格式,非 LVM)
二、问题分析
1. 表面原因:根分区空间耗尽
- 系统日志、缓存、旧内核、编译产物等持续占用根分区空间,导致可用空间不足。
- 直接表现为
df -h显示根分区使用率过高。
2. 根本原因:虚拟机磁盘与系统分区不匹配
- 虚拟机层面:硬盘已配置为 40G(最大容量),但系统初始仅分配 20G 给根分区。
- 系统层面:剩余 20G 空间处于“未分配”状态,未被 Linux 系统识别和使用。
- 仅清理缓存无法彻底解决问题,需将未分配空间合并到根分区。
3. 关键矛盾
- 虚拟机磁盘容量 ≠ 系统内分区容量 → 需完成“虚拟机扩容 → 分区扩展 → 文件系统扩容”的完整流程。
三、解决流程
阶段1:紧急释放空间(临时缓解)
1. 清理系统日志
sudo journalctl --vacuum-time=7d # 保留最近7天日志2. 清理冗余依赖与缓存
sudo apt autoremove --purge -y # 删除旧内核与无用依赖sudo apt clean -y # 清理apt缓存3. 定位并删除大文件
sudo find / -type f -size +1G 2>/dev/null -exec ls -lh {} \; # 查找>1G文件# 重点关注 /var/log/、/var/cache/、用户目录下的无用大文件阶段2:永久扩容根分区(根本解决)
1. 虚拟机层面扩展磁盘(VMware 操作)
- 关闭虚拟机。
- 编辑虚拟机设置 → 硬盘 → 点击「扩展」→ 设置最大容量(如 40G)→ 确定。
- 重启虚拟机。
2. 系统内识别并扩展分区
# 安装扩容工具sudo apt update && sudo apt install -y cloud-guest-utils gparted
# 刷新磁盘分区表sudo partprobe /dev/sda
# 扩展根分区(/dev/sda2)到最大可用空间sudo growpart /dev/sda 23. 在线扩展文件系统(ext4)
sudo resize2fs /dev/sda2 # 无需卸载,在线扩容4. 验证结果
df -h /✅ 预期输出:根分区容量变为 40G,可用空间大幅增加(例:40G 总容量,可用 21G,使用率 45%)。
四、关键命令总结
| 步骤 | 命令 | 作用 |
|---|---|---|
| 查看空间 | df -h / | 查看根分区使用情况 |
| 清理日志 | sudo journalctl --vacuum-time=7d | 清理旧系统日志 |
| 清理依赖 | sudo apt autoremove --purge -y | 删除无用依赖与旧内核 |
| 刷新分区 | sudo partprobe /dev/sda | 让系统识别新磁盘空间 |
| 扩展分区 | sudo growpart /dev/sda 2 | 扩展第2个分区到最大 |
| 扩容文件系统 | sudo resize2fs /dev/sda2 | 在线扩容 ext4 根分区 |
五、注意事项
- 数据备份:扩容前建议备份重要数据,避免操作失误。
- 分区类型:若为 LVM 分区,需额外执行
pvresize、lvextend等命令;本案例为非 LVM 分区,直接使用growpart+resize2fs。 - 文件系统差异:ext4 用
resize2fs,XFS 用xfs_growfs,不可混用。 - 权限要求:所有磁盘操作需加
sudo,避免权限不足。 - 在线扩容:
resize2fs支持在线扩容(根分区挂载状态下操作),无需进入单用户模式。
六、预防建议
- 定期清理:每月执行一次
apt autoremove+ 日志清理,避免空间累积。 - 合理分区:新建虚拟机时,根分区建议分配 ≥40G(开发环境)。
- 监控空间:使用
df -h或监控工具,根分区使用率控制在 80% 以下。 - 预留余量:虚拟机磁盘容量预留 20% 余量,方便后续扩容。
ubuntu虚拟机容量不足问题
https://blog.huangzy.xyz/posts/乌班图虚拟机容量不足问题/ Some information may be outdated