GCP海外版 谷歌云如何增加磁盘容量
你有没有过这种体验?凌晨两点,盯着监控告警疯狂刷新——磁盘使用率98%,日志写不进去了,数据库开始报错,而你的GCP虚拟机里,那块20GB的启动盘,正用它单薄的身躯,扛着一个本该跑在100GB硬盘上的Spring Boot全家桶。
别慌。这不是世界末日,只是你和谷歌云之间,少了一次心平气和的「扩容对话」。
先划重点:扩容 ≠ 拉伸一张贴纸
很多人以为在GCP控制台点几下“增大磁盘”,重启一下VM,空间就自动长出来了——结果重启完df -h一看,还是老样子。不是谷歌云耍流氓,是你漏掉了最关键的两步:底层块设备扩容 + 文件系统重挂载。这就像给汽车换了个更大的油箱,但忘了把输油管接上,油还在那儿,车就是不走。
第一步:确认磁盘类型和挂载方式
打开你的GCP控制台 → Compute Engine → VM实例 → 点击目标实例 → 滚到「磁盘」区域。注意两个关键信息:
- 磁盘类型:是
pd-standard(机械盘)还是pd-balanced/pd-ssd(SSD)?扩容都支持,但SSD性能更好,价格稍高; - 是否为启动盘:启动盘扩容要额外小心——不能在线扩容(必须关机),且不能缩小(GCP政策铁律)。
顺手在VM里执行:lsblk —— 看清哪个是根分区(通常是sda1或nvm0n1p1);df -Th —— 记下当前文件系统类型(大概率是ext4,也可能是xfs);sudo fdisk -l /dev/sda —— 查看分区表结构(MBR or GPT?这点后面扩容分区时会救命)。
第二步:关机,扩容磁盘(控制台 or CLI)
⚠️重要提醒:启动盘扩容必须关机! 数据盘可在线扩容(但建议仍停机操作,更稳妥)。
控制台操作路径:
Compute Engine → 磁盘 → 找到对应磁盘 → 点「编辑」→ 修改「大小」→ 保存 → 等待状态变「正在使用」→ 再启动VM。
命令行党请掏出终端(需提前配置gcloud并授权):gcloud compute disks resize my-disk-name --size=50GB --zone=us-central1-a
执行后你会看到类似:Updating disk [my-disk-name]...done. —— 别急着欢呼,这只是让磁盘「物理变大」了,Linux还蒙在鼓里。
第三步:让Linux看见新空间(核心!)
启动VM后,SSH进去,先执行:sudo lsblk
对比扩容前后输出:
# 扩容前
sda 8:0 0 20G 0 disk
└─sda1 8:1 0 20G 0 part /
# 扩容后(注意!sda显示50G,但sda1还是20G)
sda 8:0 0 50G 0 disk
└─sda1 8:1 0 20G 0 part /
看到了吗?sda已变成50G,但sda1这个分区还卡在20G。这就叫「磁盘扩容完成,分区尚未跟上」。
GCP海外版 第四步:扩展分区(根据磁盘类型二选一)
情况A:MBR分区表(老式磁盘,fdisk可用)
执行:sudo fdisk /dev/sda
输入:d(删除分区)→ n(新建主分区)→ 回车三次(默认起始扇区+全部剩余空间)→ w(写入)
⚠️注意:删除分区不会删数据!fdisk只改分区表,只要你不格式化,数据纹丝不动。但——务必确认只删sda1,别手抖删了sda2(swap)。
情况B:GPT分区表(较新实例,默认GPT,fdisk不友好)
用parted更稳:sudo parted /dev/sda
输入:print(查看分区编号)→ resizepart 1 100%(把第1个分区拉满)→ quit
执行完后,再跑一遍lsblk,你会发现sda1已经涨到50G了。
第五步:扩展文件系统(最后临门一脚)
分区扩完了,但文件系统还不知道「地盘变大了」。这里分两种主流情况:
如果是ext4(最常见):sudo resize2fs /dev/sda1
(无需卸载,热扩容!输出类似:Resizing the filesystem on /dev/sda1 to 13107200 (4k) blocks.)
如果是xfs(常用于高性能场景):sudo xfs_growfs /
(注意:xfs_growfs作用于挂载点/,不是设备名!且必须已挂载)
完成后,再敲一遍df -h——恭喜,那个久违的「Available」数字,终于从1.2G跳到了30.5G。
Bonus:数据盘扩容(可在线!)
假设你挂了另一块/dev/sdb作为数据盘:
- 控制台或gcloud扩容磁盘(无需关机);
- 执行
sudo growpart /dev/sdb 1(自动扩展sdb1分区); - 再执行
sudo resize2fs /dev/sdb1或sudo xfs_growfs /mnt/data(根据挂载点)。
真实踩坑现场回放(血泪总结)
- 坑1:扩容后df没变化? → 忘了resize2fs/xfs_growfs;
- 坑2:resize2fs报错「The filesystem is already mounted」? → 别慌,ext4支持热扩容,这个提示是告诉你「正在挂载中,我这就扩」,不是报错;
- 坑3:parted resizepart报错「Error: Partition(s) 1 on /dev/sda have been written, but we have been unable to inform the kernel…」? → 执行
sudo partprobe刷新内核分区表,再试; - 坑4:扩容后启动失败? → 大概率MBR误删了bootloader分区(/dev/sda未分配的前512字节)。此时需用GCP串口日志定位,或从另一个实例挂载修复。
终极建议:养成三个好习惯
- 扩容前快照:哪怕只是点一下「创建快照」,30秒的事,能救你两小时;
- 监控磁盘趋势:用Cloud Monitoring配个「磁盘使用率 > 85%」告警,别等爆了才想起扩容;
- 初始化即留余量:新实例别抠门选20GB启动盘,直接32GB起步,省去未来半夜爬起来折腾的力气。
最后说句掏心窝的:云计算的魅力,从来不是「永不宕机」,而是「出了问题,你还有至少三种方式把它修好」。扩容这事,第一次像拆弹,第二次像煮面,第三次——你甚至能边听播客边敲完所有命令。
现在,去你的GCP控制台,找那块可怜的磁盘,给它一次长大成人的机会吧。

