
你的服务器磁盘又满了。df -h显示/分区100%。网站开始报错,数据库写不进去。你第一反应是删文件,但发现没什么可删的了。这时候你想起云厂商说可以“扩容磁盘”——但你没操作过,怕数据丢,怕服务器起不来。
今天把磁盘扩容的完整流程拆开讲。先做一件事,然后分两步走。
先做一件事:创建快照
扩容前必须创建快照。云盘扩容涉及分区表和文件系统操作,万一操作失误,数据可能丢失。快照是回滚的保险。
各大云厂商都支持在线创建快照,不需要关服务器。创建快照期间不支持扩容,等快照完成再操作。
第一步:在控制台扩容云盘
登录云厂商控制台,找到云盘列表,选择目标云盘,点击“扩容”。
两个关键参数:
扩容方式:推荐在线扩容,不需要重启实例,修改后直接生效。部分老旧实例规格或特定操作系统版本仅支持离线扩容,需要关机操作。
新容量:只能扩大不能缩小。系统盘一般上限1TiB,数据盘上限32TiB。
控制台扩容完成后,云盘容量变大了,但操作系统还不认——需要登录服务器执行第二步。
第二步:扩容分区和文件系统(Linux)
这一步是最容易出错的。不同场景操作不同,先搞清楚你的情况。
场景一:数据盘没有分区,直接挂载了文件系统
bash
# 先确认设备名和挂载点 df -Th # 输出示例:/dev/vdb ext4 40G /data
扩展现有文件系统:
场景二:数据盘已有分区(最常见)
先确认设备名和分区号:
bash
lsblk # 输出示例:vdb 150G # └─vdb1 100G /data
安装扩容工具(如果没装):
- Ubuntu/Debian:
sudo apt-get install -y cloud-guest-utils - CentOS/RHEL:
sudo yum install -y cloud-utils-growpart
扩容分区(设备名和分区号之间有空格):
bash
sudo LC_ALL=en_US.UTF-8 growpart /dev/vdb 1
返回CHANGED表示成功。然后扩容文件系统,和场景一命令一样。
场景三:系统盘扩容
系统盘操作和数据盘类似,但有一点要注意——需要先确认MBR还是GPT分区格式。
bash
fdisk -l /dev/vda # 如果输出 "Disk label type: dos" 是MBR # 如果输出 "Disk label type: gpt" 是GPT
如果系统盘使用了MBR分区,且扩容后容量超过2TiB,MBR不支持超过2TiB的空间,需要将分区格式转换为GPT,这个操作会清除数据,建议在扩容前就评估清楚,必要时重新初始化系统盘。
场景四:Windows系统扩容
登录服务器,打开“磁盘管理”。右键点击“重新扫描磁盘”。如果新增空间没有自动显示,可能需要重启实例(部分旧版virtio驱动需重启才能识别)。
扩容后检查
bash
df -Th
确认分区大小已增加到目标值。再检查业务是否正常运行。
一个真实案例
一台数据库服务器,数据盘/dev/vdb容量100GB,使用率95%。通过控制台扩容到200GB后,执行lsblk看到设备容量已变,但分区/dev/vdb1还是100GB。执行growpart /dev/vdb 1后分区扩容,再执行resize2fs /dev/vdb1,df -h显示分区变为200GB,数据库恢复正常写入。
最后一句
磁盘扩容分两步:控制台扩容+操作系统扩容。先创建快照,再操作。Linux下用growpart扩分区,用resize2fs或xfs_growfs扩文件系统。系统盘和数据盘的区别在于扩容内容和操作细节——系统盘影响操作系统运行,数据盘只存数据。两者扩容流程类似,但系统盘需要更谨慎(确保分区格式兼容),数据盘相对更灵活。MBR分区扩容不能超过2TiB,GPT分区没有这个限制。扩容前查一下分区格式,避免白忙一场。




