记一次博客险些火葬场事件

记一次博客险些火葬场事件

仅作记录

服务器重建日期2023/10/13

起因

脑抽突然想给甲骨文的ARM升级一下系统,上一次做系统是在21年初刚开机的时候,当时用的是Debian10 aarch64,内核还是4.9.10的史前版本,没经住Debian12和6.1.0内核的诱惑。

结果不出意外的出意外了,由于我升级前偷懒没有执行apt update,在更新依赖时直接把动态链接库整的No such file了,此时包括sshd/sulogin全部不可用,这导致了我完全无法登录到服务器,以及MySQL/Nginx等服务全线宕机

处理过程

前期尝试

首先我尝试使用Oracle Cloud Shell登录服务器,这个功能其实就是网页版的VNC窗口,很惊喜的是,VNC窗口显示正常,甚至到了登录的步骤

但随之而来的问题也出现了,由于动态链接库丢失,login的认证无法进行,此时无论我输入什么都无法验证密码

后续尝试进入Grub进入单用户模式,但是无论我如何操作,仍然无法绕过动态链接库丢失的报错,此时的apt/dpkg完全不可用,无法进行修复。

虽然可以在另一个AMD实例里挂载硬盘来进行文件操作,但问题是我也不知道apt到底给我更新炸了多少依赖。

无奈之下,我开始尝试重建服务器。

重建服务器

由于Oracle不提供直接的服务器重建功能,而ARM服务器目前的免费配额可以说删了就别想再开出来,所以我开始寻找如何通过挂载硬盘的方式重建

首先,创建一个AMD的实例,步骤很简单,这里就不再说了。

待AMD实例创建完成后,将ARM实例关机。并分离ARM实例的引导卷。别慌,关机并不会损失配额,后续再开机就行了

图片[1]-记一次博客险些火葬场事件-Rain's Blog

分离引导卷成功后,将引导卷挂载到AMD实例上

图片[2]-记一次博客险些火葬场事件-Rain's Blog

附加完成后会有提示需要登录到服务器上执行命令,直接复制并执行给出的挂载命令即可

在挂载引导盘完成后,直接开始重做引导

下载救砖包到/root文件夹

cd /root && wget -cO debian.sdb.gz https://github.com/MIKU-N/OracleBackup/raw/main/dabian.sdb.gz?download=

开始dd引导盘(注意引导盘路径,通常为这个,有可能有变化,以自身为准)

gzip -dc /root/debian.sdb.gz | dd of=/dev/sdb

等待dd完成后,执行分离引导盘的命令

分离引导盘完成后,将引导盘重新挂载回ARM实例上并开机

通常来说,此时会正常开机,如卡Grub则需要格式化引导盘后再dd

如正常开机,则输入用户名root/密码10086.fit

这个镜像为Debian10,后续升级我直接使用了另一个dd脚本

wget --no-check-certificate -qO InstallNET.sh 'https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh' && chmod a+x InstallNET.sh
bash InstallNET.sh -debian

之后就是自动化的开始重装最新的debian12了,在等待了十来分钟后成功完成,非常轻松

重建环境

在我完成对系统的重建后,我发现一个严重的问题,我设置的自动备份在两个月前莫名出了问题,导致我最近的数据库/网站备份在两个月之前。

不过还好,在我dd之前我将整个数据库和网站包括数据全部打包上传了,然后我发现我忘记了我两年前装的什么数据库了……

幸亏打包了数据库本体,否则真是有数据都恢复不了

最终破案是MariaDB10.5,后面就是经典的数据恢复环节

历时一天半的时间完美恢复了博客数据并重新上线

参考资料

© 版权声明
THE END
喜欢就支持一下吧
点赞1赞赏 分享
评论 抢沙发
头像
说点什么?
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容