🛠 Ubuntu 重启后 SSH 无法连接,进入 Emergency 模式的排查与修复实录(Oracle Cloud)

本文记录了我在 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)

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇