ubuntu虚拟机磁盘空间不够怎么办
小樊
36
2025-12-24 07:44:52
Ubuntu 虚拟机磁盘空间不足的完整处理指南
一、先快速释放空间以恢复系统
- 查看占用:执行 df -h 确认哪个分区已满(如 / 或 /home),再用 du -sh /path 定位大目录。
- 清理常见垃圾:
- 包管理缓存:sudo apt clean、sudo apt autoremove
- 日志与缓存:sudo journalctl --vacuum-time=7d、清理 ~/.cache
- 图形界面进不去时:
- 进入恢复模式:重启,长按 Shift 进 GRUB → 选择 Recovery Mode → Root Drop to root shell;或按 Ctrl+Alt+F2 到 TTY 执行清理。
- 必要时删除无用大文件(如构建产物、镜像、旧日志),再 reboot。
- 若曾用工具删除过大量文件导致索引未释放,可用 e2fsck -f -y /dev/sdaX 修复文件系统后再启动。
以上步骤能在不扩容的情况下先恢复系统可用性与登录能力。
二、扩容流程总览
- 步骤顺序:
- 在宿主机上扩展虚拟磁盘容量(关机操作)。
- 在客户机里识别新增空间(分区表/PV 扩容)。
- 扩展分区(非 LVM 用 growpart/parted;LVM 则扩展 PV → LV)。
- 扩展文件系统(resize2fs/xfs_growfs)。
- 常用命令一览:
- 非 LVM:
- 分区扩容:growpart /dev/sda 2、parted /dev/sda resizepart 2 100%
- 文件系统:resize2fs /dev/sda2(ext4);如为 xfs:xfs_growfs /mount/point
- LVM:
- 识别新增空间:growpart /dev/vda 2(若底层是整盘 PV)
- 扩展 PV:pvresize /dev/vda2
- 扩展 LV:lvextend -l +100%FREE /dev/mapper/vg-xxx
- 扩展文件系统:resize2fs /dev/mapper/vg-xxx(ext4)或 xfs_growfs /(xfs)
- 不同虚拟化平台的关键操作:
- VMware Workstation/VirtualBox:关机 → 设置 → 硬盘 → 扩展;启动后用 gparted 移动/调整分区。
- KVM/QEMU:宿主机执行 qemu-img resize image.qcow2 +20G;客户机内 growpart 与 LVM/文件系统扩容。
以上为主流平台与两类分区方案的通用扩容路径。
三、按分区方案给出可直接复制的命令
- 场景 A:非 LVM 的 MBR 单分区(常见为 /dev/sda1)
- 宿主机扩容虚拟磁盘后启动客户机,安装分区工具:sudo apt-get install gparted
- 启动 sudo gparted,禁用并删除 swap(如 /dev/sda5),删除扩展分区(如 /dev/sda2),将 /dev/sda1 向右扩展到未分配空间,末尾留出 1–2G 新建扩展分区与 swap。
- 应用变更后启用 swap:sudo swapon /dev/sda5;如需开机自动挂载,编辑 /etc/fstab 添加:/dev/sda5 swap swap defaults 0 0。
- 若未使用 gparted,也可用 growpart /dev/sda 1 后执行 resize2fs /dev/sda1。
- 场景 B:LVM(典型路径 /dev/mapper/ubuntu–vg-ubuntu–lv)
- 宿主机扩容后,客户机先扩展底层分区:growpart /dev/vda 2
- 扩展 PV:pvresize /dev/vda2
- 扩展 LV:lvextend -l +100%FREE /dev/mapper/ubuntu–vg-ubuntu–lv
- 扩展文件系统:resize2fs /dev/mapper/ubuntu–vg-ubuntu–lv(ext4);如为 xfs:xfs_growfs /
- 场景 C:GPT 表不一致(扩容后可能出现 GPT PMBR size mismatch)
在客户机执行:sudo parted -l,提示时选择 Fix,再继续分区与文件系统扩容。
以上命令覆盖 VMware/VirtualBox 与 KVM 的常见 LVM/非 LVM 场景。
四、常见问题与排错
- 未分配空间不连续导致无法扩展:在 gparted 中先移动分区,使未分配空间与目标分区相邻,再进行扩容。
- 扩容后文件系统未变化:确认已对正确的对象执行扩容(如先扩 PV/LV,再扩 文件系统;ext4 用 resize2fs,xfs 用 xfs_growfs)。
- 开机出现 grub rescue:
- 查找正确分区:ls (hd0,msdosX)/boot/grub
- 设置并进入:set root=(hd0,msdosX);set prefix=(hd0,msdosX)/boot/grub;insmod normal;normal
- 进入系统后修复引导:sudo update-grub、sudo grub-install /dev/sda
- 图形界面因满盘无法进入:先按“一”清理出几百 MB 空间,再重启进入系统完成扩容。
以上为扩容过程中高频风险点与修复方法。
五、数据安全与回退建议
- 操作前务必创建快照/备份(宿主机层或导出镜像);KVM 场景可先基于原盘创建 backing file 演练:qemu-img create -b ubuntu.qcow2 -F qcow2 -f qcow2 ubuntu-test.qcow2。
- 分区与 LVM 操作存在数据风险,关键业务环境建议在维护窗口进行,并准备回滚方案。
- 扩容后使用 df -h、lsblk、vgs/lvs/pvs 复核容量是否生效。
这些做法能显著降低扩容失败带来的影响。