本文记录了我在 Oracle Cloud(甲骨文云)实例从 4C24G 缩容为 2C12G 后重启,系统无法通过 SSH 登录、进入 emergency 模式的整个排查和修复过程,供遇到类似问题的朋友参考。
🧩 背景描述
我有一个运行 Ubuntu 的 Oracle Cloud ARM 实例,原本规格是 4C 24G,因为资源需求变化,我将其缩容为 2C 12G。调整配置后系统自动重启,但重启后发现:
- 无法通过 SSH 登录(超时 / 连接被拒绝)
- 只能通过 Oracle Cloud 提供的 Web 控制台(PowerShell) 进入系统
- 进入系统后,提示处于 emergency 模式
尝试启动 ssh 服务时也报错:
sudo systemctl start ssh
Failed to start ssh.service: Transaction for ssh.service/start is destructive (emergency.target has 'start' job queued, but 'stop' is included in transaction).
🔍 初步排查方向
通过 journalctl -xb 查看启动日志,虽然没有立即发现明显报错,但根据经验,这种 emergency 启动通常是:
❗️
/etc/fstab配置了错误或无法挂载的设备
🧪 实际排查过程
1️⃣ 查看 /etc/fstab
cat /etc/fstab
发现有两条挂载项非常可疑:
129.146.186.4:/home/ubuntu/amd_musics /home/ubuntu/musics/amd_musics defaults 0 0
/var/lib/docker/volumes/nextcloud_nextcloud_data/_data/data/albert/files/bt_wget_downloads /home/ubuntu/bt_wget_downloads none bind 0 0
分析:
- 第一条是一个 NFS 网络挂载,如果网络服务未启动,系统会因挂载失败进入 emergency
- 第二条是一个 Docker bind mount,如果 Docker 没启动或路径不存在,同样失败
2️⃣ 查看磁盘状态
lsblk -f
确认这些挂载目标要么不存在,要么是网络依赖路径(系统启动早期不可用)
🛠 修复方法
✅ 1. 编辑 /etc/fstab 注释问题挂载
sudo vim /etc/fstab
将以下两行注释掉:
#129.146.186.4:/home/ubuntu/amd_musics /home/ubuntu/musics/amd_musics defaults 0 0
#/var/lib/docker/volumes/nextcloud_nextcloud_data/_data/data/albert/files/bt_wget_downloads /home/ubuntu/bt_wget_downloads none bind 0 0
保存退出。
✅ 2. 退出 emergency 模式 / 重启系统
sudo systemctl default
或者:
sudo reboot
此时系统将恢复正常启动,并可以通过 SSH 登录。
🧼 清理与优化
✅ 手动挂载问题路径
# NFS 网络共享
sudo mount -t nfs 129.146.186.4:/home/ubuntu/amd_musics /home/ubuntu/musics/amd_musics
# Docker 数据绑定挂载
sudo mount --bind /var/lib/docker/volumes/nextcloud_nextcloud_data/_data/data/albert/files/bt_wget_downloads /home/ubuntu/bt_wget_downloads
✅ 恢复自动挂载,修改 fstab 为更稳健配置:
129.146.186.4:/home/ubuntu/amd_musics /home/ubuntu/musics/amd_musics nfs defaults,_netdev,x-systemd.automount,nofail 0 0
/var/lib/docker/volumes/nextcloud_nextcloud_data/_data/data/albert/files/bt_wget_downloads /home/ubuntu/bt_wget_downloads none bind,x-systemd.requires=docker.service,nofail 0 0
参数说明:
| 参数 | 作用描述 |
|---|---|
_netdev | 网络就绪后再挂载,防止系统过早挂载失败 |
x-systemd.automount | 开启自动挂载,按需加载,提升稳定性 |
nofail | 挂载失败不会导致系统进入 emergency |
x-systemd.requires=docker.service | 挂载绑定路径需等待 Docker 启动 |
✅ 总结
| 问题 | 原因 | 解决方式 |
|---|---|---|
| 系统重启进入 emergency 模式 | /etc/fstab 中的挂载路径挂载失败(网络 / Docker) | 注释掉挂载 → 正常启动后再手动或延迟挂载 |
🧠 教训 & 建议
fstab是系统启动的关键配置文件,必须 为网络挂载 / Docker 卷加保险参数- Oracle Cloud 的 Web Console(PowerShell)是救命工具,关键时刻能进系统修复
- 所有挂载配置建议在 启动后延迟挂载 或 容错处理,避免影响核心服务(如 SSH)







