AWS顶尖云 AWS顶尖云 立即咨询

谷歌云账号购买 GCP谷歌云清理磁盘空间技巧

谷歌云GCP / 2026-04-17 19:58:38

你有没有在某个凌晨三点,被一条邮件惊醒——「/dev/sda1 使用率 99%」?打开GCP控制台,发现磁盘像被塞进三年没整理的衣柜:快照堆成山、旧实例删了但磁盘还在、日志文件悄悄长到40GB……别慌,这不是服务器中邪,而是GCP磁盘空间管理的日常修行。

谷歌云(GCP)不像本地电脑——你删个文件,空间不会立刻回来;你删个实例,它的磁盘可能还在后台默默吃着账单。今天这篇不讲概念、不贴文档截图,只掏干货:从定位垃圾到一键清空,从防踩坑到建立长效机制,全是实测有效的「磁盘瘦身术」。

第一步:先别删!搞清谁在占地方

盲目 rm -rf 是运维大忌,尤其在GCP里——误删系统快照可能让你回滚不了昨天的bug修复。先登录你的虚拟机(比如用SSH),跑这三行:

df -h                  # 看整体使用率(重点盯 / 和 /var/log)
du -sh /var/log/* | sort -hr | head -10  # 日志谁最能吃?
sudo lsof +L1            # 找「已删除但进程还占着」的幽灵文件(常见于nginx、java应用)

你会发现:一个 /var/log/journal 目录竟有18GB?别急着清空——这是systemd日志,默认永不清除。执行:
sudo journalctl --disk-usage 查用量,再用 sudo journalctl --vacuum-size=500M 限制上限,永久生效就加进 /etc/systemd/journald.conf 里的 SystemMaxUse=500M

第二步:干掉「僵尸磁盘」——那些没人认领的挂载盘

GCP里最隐蔽的空间杀手,是「已停止实例但未删的磁盘」。它们不运行、不收费计算资源,却按月收你存储费(标准持久化磁盘约$0.04/GB/月)。去控制台 → Compute Engine → Disks,按「状态」排序,一眼揪出「unused」磁盘。

更狠的是命令行批量扫描:

gcloud compute disks list \
    --filter='status=READY AND users:""' \
    --format='table(name,zone,sizeGb,creationTimestamp)' \
    --project=YOUR_PROJECT_ID

注意:users:"" 表示该磁盘当前没被任何实例引用。但请务必二次确认——有些磁盘可能刚解绑、正准备挂给新实例。安全做法是:先加标签 cleanup:pending,观察48小时无异常再删。

第三步:快照不是保险柜,是碎纸机待填区

很多人把快照当备份神器,结果快照越攒越多,费用反超原磁盘。查快照清单:

gcloud compute snapshots list \
    --sort-by=~creationTimestamp \
    --limit=20 \
    --format='table(name,sourceDisk,diskSizeGb,creationTimestamp,storageBytes)' \
    --project=YOUR_PROJECT_ID

重点关注:
• 创建时间超过90天的快照(业务稳定期后老快照基本无用)
• 源磁盘已删除的快照(sourceDisk 字段为空或显示 NOT_FOUND
• 多个快照指向同一磁盘且时间间隔<24小时(自动备份脚本没设去重)

删快照前,先锁定关键快照(比如上线前打的):
gcloud compute snapshots add-labels SNAPSHOT_NAME --labels=keep=true --project=YOUR_PROJECT_ID
再批量清理非锁定快照:
gcloud compute snapshots list --filter='labels.keep!=true' --format='value(name)' | xargs -I {} gcloud compute snapshots delete {} --quiet

第四步:Docker?它在你的根分区挖了个矿

装过Docker的GCP实例,/var/lib/docker 常成黑洞。即使你删了所有容器和镜像,docker system prune -a 可能仍留着构建缓存、匿名卷、停滞的build cache。

终极清理(慎用!确保无正在运行的容器):

sudo docker system prune -a --volumes --force
# 再手动扫尾
sudo du -sh /var/lib/docker/* | sort -hr
# 若 build cache 占大头,直接删(Docker 24+支持 --prune-builder)
sudo rm -rf /var/lib/docker/buildkit
# 清理旧容器日志(默认不轮转)
sudo find /var/lib/docker/containers/ -name '*.log' -size +100M -delete

一劳永逸?改Docker daemon.json:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "storage-driver": "overlay2",
  "default-ulimits": {
    "nofile": {
      "Name": "nofile",
      "Hard": 65536,
      "Soft": 65536
    }
  }
}

第五步:启动盘也能「瘦身」——别让100GB磁盘只装2GB系统

新建实例时选「100GB启动盘」很常见,但Ubuntu 22.04系统本身才2.3GB。多出来的97.7GB不仅是钱的问题,更是安全隐患(攻击面更大、克隆耗时更长)。

正确姿势:
• 新建实例时,启动盘大小设为「30GB」(预留20%冗余)
• 已有大磁盘?用 gcloud compute instances disk-resize 缩容(⚠️仅支持缩小至小于当前使用量!先清理再缩)
• 或更稳妥:创建新小盘 → dd克隆 → 切换启动盘 → 删除旧盘(GCP支持在线切换)

最后送你三条「血泪守则」

  1. 快照命名必须带语义:别叫 snapshot-20240520,改成 prod-db-pre-migration-v2——三个月后你仍知道它为何而生;
  2. 所有自动任务加「dry-run」开关:写清理脚本时,第一版必须输出要删什么、不真删,确认无误再关开关;
  3. 每月第一个周五下午,花15分钟执行「磁盘健康检查」:就跑一遍开头那三行命令 + 快照列表,养成习惯比救火强十倍。

谷歌云账号购买 技术没有玄学,只有可重复的动作。下次再看到磁盘告警,别先抓头发——打开终端,按顺序敲完这五步,喝口咖啡,看着 df -h 里的百分比回落到70%以下,你会觉得,云计算,原来也可以很清爽。

(完)

下载.png
Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系