CentOS 虚拟机磁盘空间不足的解决思路
- 先判断是“数据真的多”还是“空间分配不足”。用以下命令查看现状:
- 查看挂载与容量:df -h
- 查看块设备与分区:lsblk、fdisk -l
- 查看 LVM 情况:pvs、vgs、lvs
- 查看文件系统类型:df -T 或 lsblk -f
- 常见两类根因:
- 已分配容量不够:在虚拟化平台给虚拟磁盘扩容后,系统未识别或未扩展到分区/LV/文件系统。
- 容量足够但使用率高:清理日志、缓存、容器/镜像、旧内核等无用数据,释放空间后再按需扩容。
方案一 在线扩容已有虚拟磁盘(不重启,优先推荐)
- 虚拟化平台操作
- 在 VMware/VirtualBox/云平台将虚拟磁盘容量调大(如从 40G → 100G)。如有快照,先删除快照以避免扩容失败或不支持在线扩容。
- 虚拟机内识别新增容量
- 重新扫描 SCSI 总线,使系统识别新容量(无需重启):
- 扫描主机:echo “- - -” > /sys/class/scsi_host/host0/scan(hostX 视实际为 host0/host1…)
- 或扫描设备:echo 1 > /sys/class/scsi_device/1:0:0:0/device/rescan
- 确认新容量:lsblk、fdisk -l
- 扩容分区(两种常见做法)
- 扩展现有分区(推荐,风险低)
- 使用 fdisk /dev/sda(或 parted 处理 >2T 磁盘),删除原有“最后一个分区”并重建为更大的同类型分区(保持起始扇区不变,仅扩大结束扇区),保存退出。
- 通知内核重读分区表:partprobe /dev/sda
- 若是 LVM 分区,扩展物理卷:pvresize /dev/sdaX
- 新建分区
- 在新增空间上新建分区(如 /dev/sda3),类型选择 Linux LVM(8e),保存后用 partprobe 使内核识别。
- 创建物理卷:pvcreate /dev/sda3
- 扩展卷组:vgextend <VG名> /dev/sda3(VG 名可用 vgs 查看)
- 扩容逻辑卷与文件系统
- 扩展逻辑卷(按需选择其一)
- 指定容量:lvextend -L +20G /dev/mapper/-root
- 用尽剩余空间:lvextend -l +100%FREE /dev/mapper/-root
- 扩展文件系统
- XFS:xfs_growfs <挂载点>(如 xfs_growfs /)
- EXT4:resize2fs /dev/mapper/-root
- 验证
方案二 新增一块虚拟磁盘并挂载到目录
- 虚拟化平台新增一块磁盘(如 100G),系统启动后:
- 识别磁盘:lsblk
- 分区并创建 PV(示例为整盘一个分区)
- fdisk /dev/sdb → n → p → 回车默认 → w
- partprobe /dev/sdb
- pvcreate /dev/sdb1
- 加入卷组并扩容 LV(以已有卷组名为例)
- vgextend centos /dev/sdb1
- lvextend -l +100%FREE /dev/mapper/centos-root
- 扩展文件系统
- xfs_growfs /(或 resize2fs 对应 ext4)
- 若需挂载到独立目录(如 /data)
- 新建 LV:lvcreate -L 50G -n data centos
- 格式化:mkfs.xfs /dev/mapper/centos-data
- 挂载:mount /dev/mapper/centos-data /data
- 持久化:echo “/dev/mapper/centos-data /data xfs defaults 0 0” >> /etc/fstab。
方案三 调整分区布局释放空间(如 /home 过大,/ 过小)
- 适用场景:安装时把 /home 分得过大,/ 空间不足,需要把 /home 的空间挪给 /。
- 操作步骤(务必先备份)
- 备份 /home 数据(如打包到临时目录或外部存储)
- 卸载 /home:umount /home(若占用,先停服务或用 fuser -km /home 终止占用)
- 删除 /home 的 LV:lvremove /dev/mapper/-home
- 扩展根 LV:lvextend -L +G /dev/mapper/-root
- 扩展根文件系统:xfs_growfs /(或 resize2fs 对应 ext4)
- 可选:重建较小的 /home LV、格式化并挂载,再恢复数据
- lvcreate -L G -n home
- mkfs.xfs /dev/mapper/-home
- mount /dev/mapper/-home /home
- 验证:df -h 查看 / 与 /home 容量是否符合预期。
常见问题与排错要点
- 扩展分区时报错或设备忙:用 partprobe /dev/sda 重读分区表,必要时重启再试。
- 文件系统类型不匹配:用 df -T 确认;XFS 用 xfs_growfs <挂载点>;EXT4 用 resize2fs <设备>。
- 在线扩容失败:检查是否还有快照、是否使用了旧工具(如仅支持 2T 以内的 fdisk),必要时改用 parted 处理 >2T 磁盘。
- 扩容后容量未变化:确认已执行 pvresize → lvextend → xfs_growfs/resize2fs 的完整链路,并用 df -h 复核。