云服务器运维实战系列 · 第 2 篇(共 7 篇)
云盘扩容 50G→150G:控制台改完,为什么系统里还是老大小
迁到免费 ARM 实例后,默认系统盘只有 50G。眼下占用不高,但后面要装环境、跑数据库、留备份,我决定把它扩到 150G。
扩容时最容易懵的一点:控制台明明把盘改大了,登录机器一看,df 里还是老大小。这不是没生效,是中间还有两层没打通。这篇把完整步骤走一遍,全程不关机、业务不中断。
扩容到底在扩哪几层
一块云盘从物理容量到你能存文件,隔着三层,要逐层打通:
云平台上的卷(Volume) —— 控制台把 50G 改成 150G ↓ 系统看到的磁盘 /dev/sda —— 让内核重新识别磁盘大小 ↓ 分区 /dev/sda1 + 文件系统 —— 扩分区,再扩文件系统(ext4)
只做第一层,可用空间不会变,因为分区和文件系统还停在旧尺寸。

第一层:控制台改大小
在控制台找到引导卷,编辑容量,50G 改成 150G。几点:
主流云都支持运行中在线扩引导卷,不用关机,网站不受影响;
只改容量,其他别动:性能档位(甲骨文叫 VPU,默认 10)、加密、跨区域复制保持原样,免得影响性能或产生费用;
容量只能调大、不能调回,想清楚再填。
提交后卷已经是 150G,但机器里还看不到。

第二层:让内核重新扫描磁盘
扩容后操作系统未必立刻感知,需要触发一次重新扫描。甲骨文控制台扩容弹窗里会给出命令,核心是这两条:
# 对引导盘做一次只读探测,让内核重新读容量 sudo dd iflag=direct if=/dev/oracleoci/oraclevda of=/dev/null count=1 # 向 SCSI 设备的 rescan 接口写 1,触发重新扫描 echo "1" | sudo tee /sys/class/block/$(readlink /dev/oracleoci/oraclevda | cut -d'/')/device/rescan
/dev/oracleoci/oraclevda 是甲骨文对引导盘的固定别名,等价 /dev/sda。其他云、或盘名不同时,通用做法是往 /sys/class/block/<盘名>/device/rescan 写 1;嫌麻烦,重启一次实例也能识别。
扫描后确认磁盘层面已变大:
lsblk # 或 sudo fdisk -l /dev/sda
这时 sda 整体已是 150G,但分区 sda1 可能还显示约 50G——接着做第三层。
第三层:扩分区(growpart)
用 growpart 把第 1 个分区扩到占满整块盘:
sudo growpart /dev/sda 1
/dev/sda 和分区号 1 之间有空格,意思是扩 sda 的第 1 个分区。成功会输出类似:
CHANGED: partition=1 start=... old: size=... new: size=...
提示 command not found 就先装:
sudo apt update && sudo apt install -y cloud-guest-utils
第四层:扩文件系统(resize2fs)
分区大了,里面的文件系统(Ubuntu 默认 ext4)还不知道,最后在线扩一下:
sudo resize2fs /dev/sda1
ext4 支持挂载状态下在线扩容,不用卸载、不影响业务。
如果是 xfs 文件系统,对应命令是 sudo xfs_growfs /(按挂载点),别用 resize2fs。df -T 能看文件系统类型。
验证
df -h /
实际结果:
Filesystem Size Used Avail Use% Mounted on /dev/sda1 146G 9.9G 136G 7% /
Size 从约 49G 变成 146G(标称 150G,文件系统略小是分区表和元数据占用,正常),可用约 136G。

免费配额会不会超
用免费套餐,这步必须算清楚。按甲骨文"永久免费"文档,存储免费额度是:
块卷 + 引导卷合计 200GB,永久免费,且只在账号的"主区域";
另有 5 个免费卷备份名额。
50G 扩到 150G 后:已用 150G,额度 200G,还剩 50G,不超标。
两个容易忽略的点:
免费额度按主区域算,卷要在主区域才计入;
我没给卷做手动快照,5 个免费卷备份名额仍空着(数据库的
.sql备份是文件,不算卷备份)。
操作前后都建议到官方免费资源页核对一遍,政策偶尔调整,以最新文档为准。
顺序回顾
控制台改大小 → 内核 rescan(或重启)→ growpart 扩分区 → resize2fs(xfs 用 xfs_growfs)扩文件系统 → df 验证,再核对一遍免费配额。