跳至内容

救援模式

有时,由于网络中断、安装错误、配置错误、内核升级、防火墙规则错误等原因,服务器无法通过 SSH 访问。当您根本无法登录服务器时(您没有 root 密码或服务器无法启动),您可以使用我们的救援模式,该模式将原始 Alpine Linux 映像加载到服务器的 RAM 中。

如果您确实拥有服务器的 root 密码和 SSH 密钥,则应该使用我们的 通过 SSH 进行串口通信的控制台

要求

三层网络 - 为了将救援操作系统加载到您的服务器上,服务器必须可通过 IP 地址访问。因此,您的服务器必须处于三层或混合网络模式。如果您的服务器当前处于纯二层配置,则必须将其转换为三层或混合网络模式才能使用救援模式。

SSH密钥 - 服务器启动进入救援操作系统后,您必须拥有有效的SSH密钥才能访问服务器。救援操作系统使用您最初配置服务器时关联的SSH公钥。

根分区 - 根据您需要执行的修复或恢复操作类型,您需要找到原始操作系统的根分区位置。查找此信息的最佳方法是在进入救援模式之前,直接从操作系统本身获取。例如,在 Ubuntu 系统中,您可以使用 df -h 找到根分区。

启动进入救援模式

要进入救援模式,您可以在服务器的主“概览”页面找到救援模式。点击“服务器操作”,然后从下拉菜单中选择“救援操作系统”。

Rescue OS in the Server Actions Menu

这将重启服务器,将救援操作系统 Alpine Linux 镜像加载到内存中,然后启动服务器进入 Alpine Linux 系统。服务器的公网 IPv4 地址保持不变。

服务器启动后,您可以使用授权的 SSH 密钥以 root 身份通过 SSH 连接服务器。如果您之前使用 SSH 连接过服务器,可能会收到主机密钥已更改的警告,请先从本地计算机上的已知 hosts 文件中删除该主机密钥,然后才能连接。

ssh root@<server_ip_address>

当您成功通过 SSH 进入服务器后,您将看到 Rescue OS 简介和命令行提示符。

,------. ,--. ,--.
| .---' ,---. ,--.,--.`--',--,--, `--',--. ,--.
| `--, | .-. || || |,--.| \,--. \ `' /
| `---.' '-' |' '' '| || || || | / /. \
`------' `-| | `----' `--'`--''--'`--''--' '--'
`--'
===============================================
OS Rescue Environment
Commit: dd4b2268 (main) BuildNo: unknown
===============================================
Based on Alpine Linux 3.18.4

Use "apk" package manager for additional utilities.
See docs at http://wiki.alpinelinux.org
localhost:~#

挂载原始根分区

要解决许多问题,您需要挂载原始操作系统的根分区。如果您不知道原始操作系统的根分区在哪里,可以尝试猜测。通常情况下,它是 dev/sda3dev/sdc3。对于我们的一些服务器,它可能位于 dev/mdxxx 中,其中 xxxmd 设备的编号。

本页示例的等级从 dev/sda3/mnt

mount -t ext4 /dev/sda3 /mnt

成功挂载分区后,将 cd 添加到该分区。

cd /mnt

运行 ls 查看原始操作系统的文件系统。

localhost:/mnt# ls

此示例输出来自 Ubuntu 20.04。

bin home libx32 opt sbin tmp
boot lib lost+found proc snap usr
dev lib32 media root srv var
etc lib64 mnt run sys

如果您已成功访问根分区,则可以修复它。

常见用例和修复

重置Root密码

如果您可以正常通过 SSH 进入服务器,但由于忘记或未保存 root 密码而无法使用 SOS/OOB 控制台,则可以通过救援模式重置它。

将根文件系统挂载到 /mnt 后,我们可以使用 chroot 加载已挂载的文件系统,并直接使用 passwd 命令修改现有的根密码。

chroot /mnt /bin/bash
>
passwd

恢复文件

如果服务器无法启动到原始操作系统,并且您需要恢复任何重要文件,您可以使用救援模式下的 scp 将它们移动到其他位置。

因此,如果您在主目录的 /demo 文件夹中有一个 demo 文件夹,您可以使用 scp 将其保存到本地计算机。

scp -r root@<server_ip_address>:/mnt/home/demo /User/Downloads

调整大小或添加分区

默认情况下,启动驱动器会有一个根分区,该分区会占用驱动器的所有空间。某些服务器有其他未格式化的驱动器,但如果您需要在同一个启动驱动器中创建多个分区,您可以进入救援模式来缩小根分区并创建新的分区。

执行此操作的过程可能因您使用的文件系统而异,但如果您使用的是 ext4 操作系统(例如 Ubuntu),则可以使用 resize2fsgdisk 来调整文件系统/分区的大小并创建其他分区。

值得注意的是,我们镜像中的默认 cloud-init 配置文件启用了 growpartresizefs 模块,如果您仅缩小根分区而不创建新分区,则会将根分区恢复到其最大驱动器大小。如果您希望避免此行为,可以编辑位于 /etc/cloud/cloud.cfg 处的 cloud-init 配置文件,移除 -growpart-resizefs 模块。保存文件后,cloud-init 将不会在每次操作系统启动时尝试调整分区大小。

Alpine Linux 的附加软件包

用于救援模式的 Alpine Linux 镜像可能缺少某些特殊操作所需的软件包。例如,要运行 fsck,您需要安装 e2fsprogs 软件包。

apk add e2fsprogs

安装成功后,例如,您可以在 sda1 上运行 fsck

fsck.ext4 -f -y /dev/sda1

如果您要格式化分区的文件系统不是 ext4,则可能需要其他软件包,例如 zfs。您可以在 Alpine Linux 软件包目录 中找到所有可安装的软件包。

返回原始操作系统

要恢复原始操作系统,我们只需重新启动服务器即可。

来自 Alpine Linux:

要重启 Alpine Linux,请使用 reboot 命令。

reboot

从控制台:

要从服务器的“概览”页面重启服务器,请点击“服务器操作”,然后从下拉菜单中选择“重启”。

Rebooting a Server from the Console

一旦服务器从任一过程完成重启,它将重新启动到您原来的操作系统。

此页面有帮助吗?