运行debian-10-buster的谷歌云VM实例无法SSH连接故障求助
排查&解决步骤
核心根因说明
本次故障的核心诱因是磁盘100%占满:SSHD服务启动、权限校验过程需要写入临时文件、日志文件,磁盘满时SSHD无法正常启动,因此出现所有SSH方式都无法连接的问题。你之前清理空间后依旧显示占满,是因为删除的文件仍被运行中的进程持有句柄,空间未真正释放。
第一步:挂载启动盘到正常实例清理磁盘
- 先停止故障实例,在GCE控制台进入该实例的引导磁盘详情页,选择「附加到实例」,选择同区域的另一台正常运行的Debian系列实例作为挂载目标,挂载时不要勾选只读选项。
- 登录正常实例,执行
lsblk找到刚挂载的磁盘设备(大小和故障实例启动盘一致,通常为/dev/sdb),创建临时挂载目录并挂载主分区:mkdir /mnt/fault_disk # 以下分区名根据lsblk输出的实际分区结构调整,通常为/dev/sdb1 mount /dev/sdb1 /mnt/fault_disk - 清理冗余大文件,优先排查Docker相关占用:
- 进入Docker默认存储路径:
cd /mnt/fault_disk/var/lib/docker - 先执行查看Docker资源占用:
docker --root /mnt/fault_disk/var/lib/docker system df - 注意:如果有未备份的重要Docker镜像、容器数据,执行清理前请先确认资源归属,避免误删
- 清理Docker冗余资源(停止的容器、悬空镜像、未使用的卷):
docker --root /mnt/fault_disk/var/lib/docker system prune -a -f - 若清理后空间仍不足,执行
du -h --max-depth=1 /mnt/fault_disk逐层排查大文件,优先清理/var/log下的老旧日志、用户目录下的冗余安装包、缓存文件。
- 进入Docker默认存储路径:
- 清理完成后执行
df -h /mnt/fault_disk确认磁盘占用率降到90%以下,卸载磁盘:umount /mnt/fault_disk,回到GCE控制台将该磁盘从正常实例卸载,重新挂载回原故障实例作为启动盘。
第二步:验证恢复与后续优化
- 启动原故障实例,等待2-3分钟后查看串行控制台输出,确认无磁盘满相关报错、
sshd服务显示启动成功后,尝试本地SSH或GCE在线SSH连接即可。 - 连接成功后建议做2项配置避免后续再次触发同类故障:
- 配置Docker日志轮转,限制日志大小避免无限占盘:修改
/etc/docker/daemon.json加入以下配置:
配置完成后执行{ "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" } }systemctl daemon-reload && systemctl restart docker生效。
2. 确认ext4文件系统预留5%的root用户空间(默认会预留,若之前手动调整过可恢复):tune2fs -m 5 /dev/sda1(对应你的启动盘主分区名),预留空间后即便普通用户占满磁盘,root用户仍可登录清理。 - 配置Docker日志轮转,限制日志大小避免无限占盘:修改
内容的提问来源于stack exchange,提问作者porcelainsnake
相关产品推荐
相关产品推荐

