wking's blog

  • 文章分类
    • 日常随笔
    • IT技术
    • 系统封装
    • 大航海时代
  • 关于博主
GOD'S IN HIS HEAVEN, ALL'S RIGHT WITH THE WORLD.
  1. 首页
  2. IT技术
  3. 正文

oracle甲骨文云使用吐槽以及通过netboot.xyz救援或重装系统教程

2024-03-14 1176点热度 7人点赞 8条评论

今天成功申请到了甲骨文云的免费帐号,结果体验一番发现槽点实在是太多了,整个甲骨文云的设计简直是反人类思维。这篇文章记录一下使用netboot.xyz救援或重装系统的过程,不需要额外的实例挂载修改引导卷。

槽点

用户体验太差

整个甲骨文云的架构设计,从用户使用体验角度感受,体验实在太差。整个云系统明显可以看出Oracle是完全偏向于技术型的公司,网页管理界面充斥了域、组、策略、权限等技术性字眼,但我找了半天,连修改密码的地方都没找到……

引导卷备份后无法用来恢复

引导卷(也就是通俗理解的系统硬盘)有一个备份功能,类似于硬盘镜像吧。备份以后的镜像,只能用来创建新的实例(VPS),不能用来恢复数据。也就是说,从实例A备份出来的引导卷备份,只能用来创建新实例B,不能用来恢复实例A。

Oracle真TM的是逻辑鬼才!不服不行!

没有Debian系统

为什么预选系统里没有Debian却有Ubuntu?难道Ubuntu比Debian还适合作为服务器系统吗?

免费帐户却显示收费

只要新建第二台以上的实例,虽然是免费帐户,但却还是显示要收费的BUG。这个引导卷每个实例默认给47G容量,免费容量总共200G,按说不超过是应该显示免费的,但甲骨文却要吓一吓你,实际上是不会扣钱的。

操作系统防火墙默认阻挡一切

改了22端口发现再也连不上了,子网安全列表也都允许了,却还是连不上。然后我选择netboot.xyz重装系统。后来我在这篇文章《Oracle 云主机默认镜像ubuntu 18.04的坑》看到:

Oracle给他的默认的linux 的OS 都写入了默认的规则,路径在/etc/iptables/rules.v4 和rules.v6。把rules.v4的规则里的两条reject 规则给他comment out,就可以了.
#-A INPUT -j REJECT --reject-with icmp-host-prohibited
#-A FORWARD -j REJECT --reject-with icmp-host-prohibited

写这篇文章(折腾)的起点就是我改了SSH默认22端口,然后灾难就来了。再来连不上服务器了。

默认不允许ICMP

默认不允许ping,连服务器什么状态都不知道。

实例防火墙设置选项

看见上图,你以为防火墙是在网络安全组里设置吗?我也是这么想的。但进去找了半天,发现并不是在这里,而是在子网里设置?!

子网的安全列表功能,实际就是防火墙。我自己添加了一个空防火墙允许所有规则。

新建实例时只允许RSA算法作为用户密钥

Oracle不允许帐号使用密码,只能使用密钥。新建实例时有一步是要求生成或添加SSH密钥,但也没明确提示用什么算法,我就贴了我之前的ed25519算法的密钥,也没提示我不正确,结果实例生成以后就直接无法登录了?!查他的文档才说必须只能是RSA算法,简直卧槽!看起来安全要求这么严格的Oracle,竟然就要求不安全的RSA算法吗?

拯救操作系统

下面章节记录如何通过Oracle串行控制台重置密码、进入EFI boot、使用netboot.xyz重装系统。

连接Oracle Serial Console串行控制台

官方文档:https://docs.oracle.com/en-us/iaas/Content/Compute/References/serialconsole.htm

有两种连接方法,Cloud Shell网页连接,或本机连接。Cloud Shell网页连接操作简单无需配置,推荐这种方法。

其他还有VNC方法,试了,没成功,操作步骤有点复杂,不如这两种方法简单。

Cloud Shell 连接

在实例详细信息页面 - 控制台连接 - 启动Cloud Shell 连接。网页会弹出来一个类似命令行界面的窗口,显示的就是串行控制台。

本机连接

本节以下内容需要linux可联网环境,并且最好网络稳定不然连一下就断了。

先要生成SSH密钥,然后执行ssh命令连接实例终端。

(为我生成密钥对那个选项,我试了,连不上,提示服务器拒绝没权限。)

生成SSH密钥

如果已经有RSA算法的SSH密钥可以跳过此步骤。但要知道公私钥的路径。

使用ssh-keygen程序生成密钥:

ssh-keygen -t rsa -N "" -b 2048 -C "oracle_rsa" -f ~/.ssh/oracle_rsa

这条命令生成2048位RSA算法的密钥,密钥密码是空,保存在~/.ssh目录,公钥是oracle_rsa.pub,私钥是oracle_rsa。

上传公钥

在实例详细信息页面 - 控制台连接 - 创建本地连接,上传或者粘贴上一步创建的公钥,然后点“创建控制台连接”。

连接串行控制台

点“创建控制台连接”后,Oracle会出来一个连接信息行,等待状态为绿色“活动”后,点该行最右边的...,选择“复制linux/MAC的串行控制台连接”。

需要先编辑一下连接才能使用,所以打开本机文本软件比如记事本,把复制的信息粘贴进去。

复制出来的信息如下(为了隐私,部分字符做了修改):

1
ssh -o ProxyCommand='ssh -W %h:%p -p 443 ocid1.instanceconsoleconnection.oc1.us-sanjose-9.anzwulj1234567896fjye2xjca@instance-console.us-sanjose-9.oci.oraclecloud.com' ocid1.instance.oc1.us-sanjose-9.anzwulj1234567896fjye2xjca

在两个ssh字符后面,加入-i ~/.ssh/oracle_rsa,也就是上一步生成的密钥路径,其他部分不用修改。修改后的信息如下:

1
ssh -i ~/.ssh/oracle_rsa -o ProxyCommand='ssh -i ~/.ssh/oracle_rsa -W %h:%p -p 443 ocid1.instanceconsoleconnection.oc1.us-sanjose-9.anzwulj1234567896fjye2xjca@instance-console.us-sanjose-9.oci.oraclecloud.com' ocid1.instance.oc1.us-sanjose-9.anzwulj1234567896fjye2xjca

然后复制修改后的信息,执行,就连上Oracle串行控制台了。

进入Oracle Serial Console串行控制台

在实例详细信息页面,点重新引导 - 打钩立即关闭 - 强制重新引导实例。实例就会直接重启。

然后要立刻切换到上一步连上的串行控制台窗口,不停按ESC键,直到出现EFI BOOT界面。如果错过了时机,系统正常启动了,那么重复强制重启按ESC过程。

EFI BOOT界面

使用Oracle Serial Console串行控制台

进入Oracle Serial Console串行控制台后,离成功已经不远了。接下来就是处理解决具体的问题,比如密码忘了、SSH密钥改坏了、被防火墙挡住了、要重装系统等。

如果是密码忘了、SSH密钥改坏了、被防火墙挡住了等只需要执行对应命令就可以解决的问题,不需要重装系统,那么看单用户模式章节。

单用户模式

进入启动菜单

在EFI BOOT界面,选择Boot Manager,高亮行放到UEFI Oracle BlockVolume上,这时候左手放到ESC键上,右手按回车后,左手要立刻狂拍ESC键,直至出现启动菜单。如果错过了系统正常启动了,那么要重复整个过程。

启动菜单

编辑启动菜单

高亮光标移动到第一行上,按e键进入编辑模式。

编辑模式

然后用上下左右键控制光标,把光标移动到linux行末端,但和前面的字符要间隔有空格,注意截图中linux行被\符号分割为好几行,实际上linux只有一行。然后添加内容 init=/bin/bash

添加内容后

确认添加的字符没错后,按键盘快捷键CTRL+X,实例会重新启动。这次让其正常启动。

单用户模式

启动完成后,串行控制台会跳过输入账号密码提示,直接出现命令输入提示窗口。这就是root权限的单用户模式,在这里就可以输入想要恢复系统的命令。

首先为了之后输入的命令可以保存生效,需要输入以下命令:

1
2
3
4
5
# 加载 SElinux 策略,以保留您正在修改的文件的上下文
/usr/sbin/load_policy -i
 
# 重新挂载根分区并赋予读写权限
/bin/mount -o remount, rw /

然后就可以输入解决问题的命令(opc是Oracle系统的默认用户名,用户名在网页实例详细信息页面有),比如

1
2
3
4
5
6
7
8
# 编辑系统配置文件
exec /usr/lib/systemd/systemd
 
# 重置密码 opc是用户名,用户名在网页实例详细信息页面有
sudo passwd opc
 
# 添加opc用户的SSH公钥 >是覆盖源文件,>>是追加源文件
echo '<contents of public key file>' > ~opc/.ssh/authorized_keys

最后,输入命令/usr/sbin/reboot -f重启实例。

重装系统

下载netboot.xyz

网上教程说在EFI BOOT - boot manager - EFI Internal Shell 里,可以配置网卡、DHCP后用tftp下载netboot.xyz,我试了,不成功,自己搭建tftp服务器也不行。并且EFI Internal Shell有个http下载命令,我也试了,还是不行。

所以,只能通过先进入单用户模式,然后执行wget命令下载了。netboot.xyz.efi是AMD机型的UEFI启动程序,ARM的下载地址是https://boot.netboot.xyz/ipxe/netboot.xyz-arm64.efi

1
2
cd /boot/efi/EFI/
wget https://boot.netboot.xyz/ipxe/netboot.xyz.efi

使用netboot.xyz启动

netboot.xyz启动选择演示动画

下载完成后,通过上文《进入Oracle Serial Console串行控制台》章节,进入EFI BOOT,选择Boot Maintenance Manager - Boot From File - 选择硬盘 - 选择netboot.xyz.efi,就可以进入netboot了。

进入netboot后,就可以选择安装各种linux系统了。但还没完,还有最后一个BUG。

解决卡在EFI stub: Loaded initrd from LINUX_EFI_INITRD_MEDIA_GUID device path

卡在 EFI stub: Loaded initrd from LINUX_EFI_INITRD_MEDIA_GUID device path

不论选择Network install还是Live CD哪种安装方式,都会卡在EFI stub: Loaded initrd from LINUX_EFI_INITRD_MEDIA_GUID device path显示这里。

搜索后,解决办法是:

Once you have booted into netboot.xyz on x86_64, if you plan on using Linux images, you must still set up custom Kernel cmdline params under Utilities (UEFI).

Set Kernel cmdline params: [] to console=ttyS0,9600.

If you make a mistake, move with arrow keys, and use the Delete key.

Once you have typed it in, you might have to press the Escape key twice.

https://netboot.xyz/docs/kb/providers/oci/#x86_64---console-quirks-linux

文字描述有点麻烦,不如看图操作:

接下来,终于可以进入到linux系统的安装界面了,再没遇到什么问题,系统安装成功完成,Oracle实例终于救活了!

通过netboot.xyz进入linux系统安装界面
本作品采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
标签: linux
最后更新:2024-03-18

wking

不管博客型博主

点赞
< 上一篇
下一篇 >

文章评论

  • r

    好用

    2024-05-06
    回复
  • y

    恢复密码操作确实好用,直接用windows vnc 修改ro 引导直接黑屏。还得是在控制台vnc操作

    2024-07-15
    回复
  • 太丰富

    用了是,好用,装完debian 重启进不去系统了,改了grub后能进系统,但grub-install /dev/sda/
    Installing for x86_64-efi platform.
    grub-install: error: unknown filesystem.

    2024-08-01
    回复
    • wking

      @太丰富 可以在netboot下先格式化硬盘?

      2024-08-01
      回复
  • 测试者

    博主好!能否有偿请您帮忙重装甲骨文系统?

    2024-08-08
    回复
  • wa

    博主你的博客文章页面在非魔法环境下,丢失css样式。

    2024-10-14
    回复
  • bajins

    确实不能进去,还得进入EFI BOOT,选择Boot Maintenance Manager - Boot From File - 选择debian 目录里对应的grub那个efi文件启动
    而且我装Rocky Linux、AlmaLinux两个系统都会到reboot: System halted结束,无法正常安装成功!

    2025-03-24
    回复
    • wking

      @bajins 出错原因我也不知道。先装个debian/ubuntu,然后再dd吧

      2025-03-25
      回复
  • razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
    取消回复

    目录
    • 槽点
      • 用户体验太差
      • 引导卷备份后无法用来恢复
      • 没有Debian系统
      • 免费帐户却显示收费
      • 操作系统防火墙默认阻挡一切
      • 默认不允许ICMP
      • 实例防火墙设置选项
      • 新建实例时只允许RSA算法作为用户密钥
    • 拯救操作系统
    • 连接Oracle Serial Console串行控制台
      • Cloud Shell 连接
      • 本机连接
        • 生成SSH密钥
        • 上传公钥
        • 连接串行控制台
    • 进入Oracle Serial Console串行控制台
    • 使用Oracle Serial Console串行控制台
      • 单用户模式
        • 进入启动菜单
        • 编辑启动菜单
      • 重装系统
        • 下载netboot.xyz
        • 使用netboot.xyz启动
        • 解决卡在EFI stub: Loaded initrd from LINUX_EFI_INITRD_MEDIA_GUID device path
    标签聚合
    大航海时代 wordpress 一支红杏 C++ win10 linux R6300V2 OneNote

    COPYRIGHT © 2024 wkings.blog. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang