一、事故背景
某天服务器突然出现异常:
- 宝塔面板无法访问
- SSH 无法连接(22端口连接失败)
- 只能通过云控制台 VNC 进入
尝试登录时发现:
login: root
Password:
Login incorrect同时,系统启动卡在:
Starting Switch Root...问题叠加:
- 磁盘疑似已满
- root 密码遗忘
二、问题分析
这是一个典型的“双重故障”:
1. 磁盘满
磁盘写满后会导致:
- sshd 无法写日志,启动失败
- systemd 服务异常
- 宝塔等服务崩溃
- 系统启动卡住
2. 忘记 root 密码
导致无法:
- 登录系统
- 清理磁盘
- 修复服务
结论:
必须绕过密码进入系统,手动清理磁盘。
三、常规方法尝试(失败记录)
方法一:init=/bin/bash
在 GRUB 中添加:
init=/bin/bash结果:
- 系统仍进入 dracut 流程
- 被 systemd 接管
- 无法进入 shell
方法二:init=/sysroot/bin/sh
rw init=/sysroot/bin/sh
结果:
Failed to start Switch Root
分析:
云厂商镜像(如 OpenStack + CentOS7)对启动流程有定制,普通方式可能失效。
四、最终解决方案
使用 GRUB 命令行强制进入 shell
1. 重启服务器,进入 GRUB
2. 按 c 进入命令行
grub>3. 输入以下命令
set root=(hd0,msdos1)
linux16 /boot/vmlinuz-3.10.0-1160.119.1.el7.x86_64 root=/dev/vda1 rw init=/bin/sh
initrd16 /boot/initramfs-3.10.0-1160.119.1.el7.x86_64.img
boot4. 成功进入系统
sh-4.2#此时已经获得 root 权限(无需密码)。
五、修复步骤
1. 挂载为可写
mount -o remount,rw /2. 修改 root 密码
passwd root注意密码复杂度要求:
- 至少包含三类字符(大小写、数字、符号)
示例:
A9x!Q7p#L23. 清理磁盘
rm -rf /var/log/*
rm -rf /www/wwwlogs/*
rm -rf /www/server/panel/logs/*
rm -rf /tmp/*4. 查看磁盘使用情况
df -h示例:
/dev/vda1 112G 104G 8G 93%说明空间已释放。
5. 重启系统
由于当前环境为精简 shell,需要使用完整路径:
/sbin/reboot -f六、恢复结果
系统重启后:
- SSH 可以正常连接
- root 登录恢复
- 宝塔面板正常
- 系统服务恢复
七、问题根因总结
本次问题本质是:
磁盘写满引发的系统级故障:
- 日志无法写入
- 服务启动失败
- 系统启动异常
同时密码遗忘,使问题复杂化。
八、经验总结
1. 定期监控磁盘
df -h建议设置告警阈值(80% / 90%)。
2. 日志定期清理
建议配置:
logrotate或定期清理:
rm -rf /www/wwwlogs/*3. root 密码必须可恢复
建议:
- 使用密码管理工具
- 或记录在安全位置
- 或启用云厂商密码重置功能
4. 掌握 GRUB 救援方法
在无法登录系统时,这是最关键的自救手段。
九、总结
磁盘满 + 忘记密码 是典型的复合型故障,但只要能够进入 GRUB,就一定可以恢复系统。
关键在于:
- 能否绕过认证进入 shell
- 能否快速释放磁盘空间

