服务因磁盘满启动失败时,先清理少量空间恢复服务,再在控制台扩容云硬盘,最后在系统内 Resize 文件系统。
先说结论:在线扩容需要控制台操作与系统内命令配合,单纯控制台扩容不会自动增加系统可用空间。
- 先止血:清理日志或缓存让服务能启动,避免业务中断。
- 再扩容:控制台购买扩容后,务必先创建快照,再根据磁盘类型(标准分区或 LVM)执行系统内扩容命令。
- 后验证:使用 df -h 确认容量变化,检查服务状态,必要时重启服务。
命令速用版
以下命令适用于大多数 Linux 发行版,执行前请确保已创建快照。
# 查看磁盘使用情况 df -h # 查看分区情况 lsblk # 判断是否使用 LVM pvs # 扩容分区(标准分区,以 /dev/vda1 为例) growpart /dev/vda 1 # 扩容物理卷(LVM 环境) pvresize /dev/vda1 # 扩容逻辑卷(LVM 环境) lvextend -l +100%FREE /dev/mapper/centos-root # 扩容文件系统(ext4) resize2fs /dev/vda1 # 扩容文件系统(xfs) xfs_growfs /
为什么会这样
云硬盘扩容分为两层:底层存储层和操作系统层。在控制台购买扩容后,底层块设备大小变了,但操作系统内的分区表和文件系统仍然认为磁盘是原来那么大。如果不执行系统内的扩容命令,多出来的空间无法被挂载和使用,服务依旧会报空间不足。
另外,当磁盘使用率达到 100% 时,很多服务(如 MySQL、Nginx)无法写入日志或锁文件,导致启动进程直接退出。此时直接扩容可能来不及,需要先释放少量空间让服务跑起来。
分步处理
1. 紧急清理空间(止血)
登录服务器,查找大文件。常见位置是日志目录。
cd /var/log
find . -type f -size +100M -exec ls -lh {} \;
# 清空某个日志文件(不要直接 rm,可能导致句柄不释放)
echo > access.log确认空间释放后,尝试重启失败的服务。
2. 控制台扩容云硬盘
登录腾讯云控制台,找到对应 CVM 实例的云硬盘。选择“扩容”,输入新容量。注意扩容是收费操作,按新容量计费。扩容过程中实例通常无需重启,但建议避开业务高峰。
3. 创建快照(重要)
在进行任何系统内分区或 LVM 操作前,务必在控制台为当前云硬盘创建快照。如果分区表操作失误,可能导致数据丢失,快照是唯一回滚手段。建议在控制台扩容完成后,立即创建快照,再进行后续操作。
4. 判断磁盘管理类型
在系统内执行以下命令判断磁盘是标准分区还是 LVM 管理。
# 查看物理卷信息,若有输出则表示使用 LVM pvs # 或使用 lsblk 查看结构 lsblk
若 pvs 有输出或 lsblk 显示层级结构包含 lvm 字样,则需按 LVM 方式扩容;否则按标准分区方式扩容。
5. 系统内扩容
场景 A:标准分区
安装 growpart 工具(部分系统自带)。
# CentOS/Ubuntu 安装示例 yum install -y cloud-utils-growpart # 或 apt-get install -y cloud-guest-utils
执行扩容命令。注意设备名和分区号,lsblk 可查看。假设是系统盘 /dev/vda 的第 1 个分区:
# 仅适用于标准分区,LVM 环境请勿使用 growpart /dev/vda 1
如果提示 success,说明分区表已更新。
场景 B:LVM 逻辑卷
若确认使用 LVM,无需执行 growpart,直接扩容物理卷和逻辑卷。
# 扩容物理卷(假设 /dev/vda1 是物理卷) pvresize /dev/vda1 # 扩容逻辑卷(将空闲空间全部分配给根逻辑卷,路径需根据实际 lvdisplay 确认) lvextend -l +100%FREE /dev/mapper/centos-root
6. 扩容文件系统
根据文件系统类型执行不同命令。使用 df -T 查看类型。
# ext4 类型 resize2fs /dev/vda1 # xfs 类型 xfs_growfs /
怎么验证是否生效
执行 df -h 查看根目录或对应挂载点的 Size 列是否变为扩容后的大小。
检查服务状态,例如:
systemctl status nginx systemctl status mysqld
确认服务处于 active (running) 状态,且日志不再报错"No space left on device"。
注意:部分应用在扩容后可能需要重启才能识别新空间或重置内部状态,若服务仍异常请尝试重启。
常见坑
1. 未创建快照直接操作
分区表调整有风险,一旦失败可能导致系统无法启动。务必在系统内操作前完成快照。
2. 磁盘类型判断错误
标准分区用 growpart,LVM 环境用 pvresize/lvextend。LVM 环境下使用 growpart 无效且可能误导。
3. 文件系统类型搞错
ext4 用 resize2fs,xfs 用 xfs_growfs。混用命令会报错或无效。xfs 文件系统不支持缩小,只能扩容。
4. MBR 分区表限制
如果云硬盘使用 MBR 分区格式,单分区最大支持 2TB。如果扩容后超过 2TB,需要转换为 GPT 格式,这涉及数据迁移,操作复杂,建议新购硬盘迁移数据。
5. 清理文件不生效
直接删除日志文件(rm)后,空间可能不释放。因为进程仍持有文件句柄。正确做法是清空文件内容(echo > file)或重启服务释放句柄。