修复迁移之后无法正常启动的 Oracle Cloud VM

昨天收到了 Oracle Cloud 的邮件,大意是「你有一台虚拟机的母鸡需要升级一下,我们给你安排了计划迁移,你也可以现在就上来手动重启一次完成迁移」。反正上面也没跑什么重要的东西,不如我现在手动迁移一下。

没想到这一重启,机器就直接失联。要命的是,以前我常用的 VNC 连接还问题不断,最终也是没能成功使用。

今天继续研究了一会儿,终于找回了失联的虚拟机。

症状

  • 迁移后虚拟机无响应
    • Ping 不通,SSH 自然也不通
  • 无法通过「控制台连接」提供的「本地连接」使用 VNC 方式连接到虚拟机
    • 较旧的加密方式不受新版 OpenSSH 支持,可以通过添加参数缓解
    • 第一层跳板机经过调试后可以成功连接
    • 第二层 VM 无法连接:Permission denied (publickey).

试图 VNC,拼尽全力无法战胜……?

Updated 2025/02/22: 经测试,可以使用旧版 OpenSSH 建立连接。并非无法战胜!

使用的是 Win32 port of OpenSSH v8.1.0.0p1-Beta(更高或者更低的版本我也懒得测试了,anyway it works for me™),可以成功建立端口转发,然后使用 VNC Viewer 连接到 VM 的 VNC。

1
2
.\ssh-keygen -t rsa -f .\data\vnc_id_rsa
.\ssh -i .\data\vnc_id_rsa -o ProxyCommand='.\ssh -i .\data\vnc_id_rsa -W %h:%p -p 443 <instance-id>@<console-domain>' -N -L localhost:5900:<instance-id>:5900 <instance-id>

但是复活 VNC 也是我修好 VM 之后的事了,修的时候还是拿下面的另一种方法修的。


首先还是要想办法连上去。

如果你遇到 Unable to negotiate with UNKNOWN port 65535: no matching host key type found. Their offer: ssh-rsa 提示,你可以在 SSH 命令中加入 -o HostKeyAlgorithms=+ssh-rsa 来缓解。

如果你想指定私钥的位置(比如你刚使用 ssh-keygen 在当前文件夹生成了一个 vnc-key,并且把 vnc-key.pub 拿去用了;注意 Oracle Cloud 的控制台连接确实只支持 RSA,就别浪费时间搓 ed25519 了),则使用 -i <path/to/private/key>

融合了以上两处的修改命令如下:

1
2
-ssh -o ProxyCommand='ssh -W %h:%p -p 443 ...' ...
+ssh -i vnc-key -o HostKeyAlgorithms=+ssh-rsa -o ProxyCommand='ssh -i vnc-key -o HostKeyAlgorithms=+ssh-rsa -W %h:%p -p 443 ...' ...

此时应该能正常连接到跳板机,但是通过跳板机连接到 VM 时会出现 Permission denied (publickey).目前我不知道怎么解决 已解决,见上

Cloud Shell

既然本地连接不行,那 Oracle 提供的懒人一键包 Cloud Shell 行不行呢?答案是:至少还能用。

启动一个 Cloud Shell 连接,此时发现,其实机器没死,只是卡在了 UEFI Shell 没有自动引导进系统。

可以顺便测试一下网络:ifconfig -s eth0 dhcp 就发现成功拿到了 IP 地址,也能从外界 ping 通了。

进入系统

我使用 netboot.xyz 重装过这台 VM 的系统为 Debian 12,所以我要做的很简单:

1
2
fs0:
EFI\debian\shimx64.efi

就可以引导系统了。但是这样治标不治本,如果再重启一次,VM 还是会卡在 UEFI Shell。

修复 EFI 引导项

使用 sudo efibootmgr -v 查看当前的 EFI 引导项,发现这台机器上的 debian 引导项是缺失的。重建一下:

1
sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian --recheck

重建之后再看看 efibootmgr -v 的输出:

1
2
3
4
5
6
7
BootCurrent: 0004
Timeout: 0 seconds
BootOrder: 0004,0001,0000,0003
Boot0000* UiApp FvVol([Redacted])/FvFile([Redacted])
Boot0001* UEFI ORACLE BlockVolume PciRoot(0x0)/Pci(0x4,0x0)/SCSI(0,1)N.....YM....R,Y.
Boot0003* EFI Internal Shell FvVol([Redacted])/FvFile([Redacted])
Boot0004* debian HD(1,GPT,[Redacted],0x800,0x100000)/File(\EFI\debian\shimx64.efi)

重启测试,正常自动引导进入系统。虽然 VNC 还是连不上,但是至少寻回了失联小鸡。

唉我操 Oracle 怎么他妈的这么坏啊

(真实存在.webp)

修复迁移之后无法正常启动的 Oracle Cloud VM

https://xyx.moe/026-Fix-Oracle-Cloud-VM-after-migration.html

作者

星野 みなと

发布于

2025-02-22

更新于

2025-02-22

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×