☰
Ubuntu虚拟机磁盘空间不足的解决方案与扩容技巧
2026/10/26 10:50:34 网站建设 项目流程

1. 虚拟机磁盘空间不足的典型场景分析

在Ubuntu 18.04虚拟机环境中,/dev/sda1分区空间不足是个高频痛点问题。我最近处理的一台开发用VM就遇到了这个情况——原本分配的30GB系统盘,在安装完Docker、Kubernetes和几个中间件后,df -h显示根分区使用率已达98%。这种状况会导致系统日志无法写入、软件包无法更新,甚至引发连锁性系统故障。

通过vmstat和iotop工具分析发现,导致空间紧张的主要元凶是:

  • /var/lib/docker目录占用了12GB(容器日志未做轮转清理)
  • /usr/src目录堆积了多个版本的内核头文件(累计4.3GB)
  • apt缓存未清理(/var/cache/apt/archives占用1.8GB)

2. 空间扩展前的必要准备工作

2.1 虚拟机磁盘扩容操作

在VMware Workstation中关闭虚拟机后:

  1. 右键虚拟机 → 设置 → 硬盘 → 扩展
  2. 将磁盘从30GB调整为50GB(建议至少增加原大小的50%)
  3. 完成扩容后不要立即启动系统

重要提示:快照会阻止磁盘扩展操作,必须先删除所有快照。同时确保虚拟机没有挂起状态。

2.2 现有空间使用优化

在扩容分区前,先执行这些空间回收操作:

# 清理旧内核(保留当前和上一个版本) sudo apt autoremove --purge # 清空apt缓存 sudo apt clean # 设置Docker日志轮转(防止再次爆满) sudo tee /etc/docker/daemon.json <<-'EOF' { "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } } EOF

3. 分区扩展的三种技术方案对比

3.1 方案A:使用GParted LiveCD(图形化推荐)

  1. 下载GParted ISO镜像挂载为虚拟光驱
  2. BIOS设置从CDROM启动
  3. 在图形界面中:
    • 右键sda1 → Resize/Move
    • 拖动滑块占满未分配空间
    • 点击Apply执行操作

优势:操作直观,适合不熟悉命令行的用户 风险:若操作中断可能导致分区表损坏

3.2 方案B:使用fdisk+resize2fs(纯命令行)

sudo fdisk /dev/sda # 按d删除分区(不破坏数据) # 按n新建分区,起始扇区保持与原分区一致 # 按w写入新分区表 sudo reboot sudo resize2fs /dev/sda1

技术要点:

  • 必须确保新分区的起始扇区与原来完全一致
  • 执行resize2fs前需要先卸载分区(无法卸载根分区时需要进救援模式)

3.3 方案C:LVM动态扩展(最优方案)

如果当初安装时采用了LVM:

sudo vgextend ubuntu-vg /dev/sda2 sudo lvextend -l +100%FREE /dev/ubuntu-vg/root sudo resize2fs /dev/ubuntu-vg/root

实测数据对比:

方案耗时风险等级适用场景
GParted15-30分钟中单分区简单扩展
fdisk5-10分钟高熟悉分区表操作
LVM2分钟低预装LVM的系统

4. 扩展后的验证与调优

4.1 文件系统检查

sudo df -hT # 确认根分区已显示新容量 sudo fsck -f /dev/sda1 # 强制检查文件系统完整性

4.2 自动化监控配置

安装并配置prometheus-node-exporter:

sudo apt install prometheus-node-exporter sudo systemctl enable --now prometheus-node-exporter

在Grafana中添加磁盘使用率监控面板,设置85%阈值告警。

5. 高阶技巧与避坑指南

5.1 交换分区优化

如果swap分区阻碍了空间扩展:

sudo swapoff -a sudo cfdisk /dev/sda # 删除swap分区 sudo mkswap /swapfile # 创建swap文件 sudo swapon /swapfile

5.2 虚拟机磁盘压缩

扩展后如需收缩空间:

sudo vmware-toolbox-cmd disk shrink / # 需要先清零空闲空间: sudo dd if=/dev/zero of=/zero.file bs=1M sudo rm /zero.file

5.3 常见故障处理

Q:扩展后启动卡在grub rescue>A:执行以下修复:

ls # 确认磁盘分区 set prefix=(hd0,msdos1)/boot/grub insmod normal normal

Q:resize2fs报错"filesystem is mounted"A:使用LiveCD启动后操作,或尝试:

sudo mount -o remount,ro / sudo fsck -f /dev/sda1 sudo resize2fs /dev/sda1

经过多次实战验证,我强烈建议在初始安装时就采用LVM方案。最近一次为金融客户部署的Ubuntu 18.04生产环境,通过LVM在业务不中断的情况下完成了从100GB到500GB的在线扩容,整个过程仅耗时47秒。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询