本页目录
当已安装的系统无法启动或无法登录时,救援模式可为您提供一个正常工作的 Linux 环境,并可完全访问硬盘。您可以在其中修复已安装的系统,或在重装系统之前将数据复制出来。
什么是救援模式
救援系统是一个 Linux Live 系统,服务器通过网络启动它,并完全在内存中运行。您的硬盘保持原样:在您决定操作之前,不会挂载、格式化或更改任何内容。您以 root 身份通过 SSH 登录,获得一个普通的 shell,可用于处理硬盘、RAID 阵列和文件系统。救援模式免费,可按需随时使用,不限次数。
如果是网络或防火墙配置导致无法登录,使用 IPMI 控制台往往更快,因为它可以让您直接登录已安装的系统。
启动进入救援系统
启用救援模式。在控制面板中打开该服务器,然后选择“救援模式”。记下系统提供给您的临时 root 密码。
重启服务器:可在控制面板中操作;如果服务器仍有响应,也可以运行
reboot。服务器将启动救援系统,而不是您已安装的系统。通过 SSH 登录(使用临时密码)。救援系统有自己的主机密钥;使用单独的 known-hosts 文件可将其与服务器真正的主机密钥区分开:
ssh -o UserKnownHostsFile=~/.ssh/known_hosts_rescue root@203.0.113.10
识别硬盘并组装 RAID
lsblk -o NAME,SIZE,TYPE,FSTYPE,LABEL,MOUNTPOINT类型为 linux_raid_member 的分区属于软件 RAID 阵列,这是双盘服务器的默认配置。组装阵列(如果 /proc/mdstat 已列出这些阵列,则无需组装),并检查其状态:
mdadm --assemble --scan
cat /proc/mdstat阵列名称可能与已安装系统中的不同,例如显示为 md127 而不是 md0,这并无影响。如果缺少某个成员([U_]),您仍可以操作该阵列,但也请检查硬盘:参见硬盘健康状况。如果 lsblk 显示 LVM2_member,请激活卷组:
vgchange -ay
lvs挂载系统并 chroot 进入
根文件系统是包含 /etc/fstab 的那个文件系统,通常位于容量最大的阵列上。挂载它并查看 fstab,了解还有哪些文件系统属于该系统:
mount /dev/md1 /mnt
cat /mnt/etc/fstab如果系统曾崩溃,或控制台显示过文件系统错误,请先卸载并运行检查:ext4 使用 fsck -f /dev/md1,XFS 使用 xfs_repair /dev/md1(lsblk 的 FSTYPE 列会告诉您是哪一种)。切勿检查已挂载的文件系统。
挂载 fstab 中列出的所有独立的 /boot 和 /boot/efi(blkid 可将 UUID 对应到设备),然后绑定挂载虚拟文件系统,并切换到已安装的系统中:
mount /dev/md0 /mnt/boot
mount /dev/nvme0n1p1 /mnt/boot/efi
mount --rbind /dev /mnt/dev
mount --rbind /proc /mnt/proc
mount --rbind /sys /mnt/sys
mount --rbind /run /mnt/run
chroot /mnt /bin/bash设备名称仅为示例;如果没有独立的 /boot 或 /boot/efi,请跳过前两行。在 chroot 环境中,passwd、systemctl enable 等命令以及包管理器将作用于您已安装的系统,而不是救援系统。
只需要数据?跳过 chroot,直接从 /mnt 复制,例如使用 rsync -a /mnt/var/www/ backup@203.0.113.50:rescue-copy/。
常见修复方法
启动时进入紧急模式:修复 /etc/fstab
/etc/fstab 中错误的 UUID 或已不存在的硬盘会导致 systemd 停在紧急模式。将其中的条目与 blkid 的输出进行比对,使用 vi /etc/fstab(或 nano)更正或注释掉有问题的行,然后验证:
findmnt --verify对于系统启动时不需要的硬盘,请在挂载选项中加入 nofail,这样即使硬盘缺失也不会再阻碍启动。
找不到引导加载程序:在两块硬盘上重新安装 GRUB
使用 RAID 1 时,引导加载程序应安装在两块硬盘上,这样服务器从任一硬盘都能启动。首先确认服务器的启动方式:
[ -d /sys/firmware/efi ] && echo UEFI || echo BIOSBIOS 启动。Ubuntu 和 Debian:
grub-install /dev/nvme0n1
grub-install /dev/nvme1n1
update-grubAlmaLinux 和 Rocky Linux:
grub2-install /dev/nvme0n1
grub2-install /dev/nvme1n1
grub2-mkconfig -o /boot/grub2/grub.cfg在 Ubuntu 和 Debian 上,还需运行 dpkg-reconfigure grub-pc 并选中两块硬盘,以便今后的 GRUB 更新同时写入两块硬盘。
UEFI 启动。GRUB 位于 EFI 系统分区上,该分区挂载在 /boot/efi。Ubuntu 和 Debian:
grub-install --target=x86_64-efi --efi-directory=/boot/efi
update-grubAlmaLinux 和 Rocky Linux(UEFI 系统上不使用 grub2-install):
dnf reinstall -y grub2-efi-x64 shim-x64
grub2-mkconfig -o /boot/grub2/grub.cfg如果第二块硬盘有自己的 EFI 系统分区(即 lsblk 中显示的一个较小的 vfat 分区),也要为其安装引导加载程序。先挂载该分区:
mkdir -p /boot/efi2
mount /dev/nvme1n1p1 /boot/efi2然后,在 Ubuntu 和 Debian 上运行 grub-install --target=x86_64-efi --efi-directory=/boot/efi2 --removable,它会将 GRUB 安装到回退路径,即使没有启动项,固件也能找到该路径。在 AlmaLinux 和 Rocky Linux 上,使用 cp -r /boot/efi/EFI /boot/efi2/ 复制文件。最后运行 umount /boot/efi2。
重置丢失的 root 密码
passwd root在 AlmaLinux 和 Rocky Linux 上,新的密码文件尚无 SELinux 标签,在获得标签之前登录可能会失败:退出救援模式时,请勿跳过重新标记(relabel)步骤。
因 SSH 或防火墙设置而无法登录
将导致无法登录的 SSH drop-in 配置文件移走,并确认您的密钥仍然存在:
ls /etc/ssh/sshd_config.d/
mv /etc/ssh/sshd_config.d/00-keys-only.conf /root/
cat /root/.ssh/authorized_keys如需在不启用防火墙的情况下启动,请运行与您所用防火墙对应的那一行,在下次启动时禁用防火墙:
systemctl disable ufw
systemctl disable firewalld
systemctl disable nftables服务器恢复后,修正规则,并运行 systemctl enable --now 加上相同的名称,重新启用防火墙。
退出救援模式
在 AlmaLinux 和 Rocky Linux 上,如果您在 chroot 中修改过任何文件,请在退出之前运行 touch /.autorelabel。这样 SELinux 会在下次启动时重新标记文件系统,这需要几分钟,之后服务器会自动再重启一次。然后退出 chroot 并卸载所有文件系统:
exit
sync
umount -R /mnt如果 umount 提示某个目标正忙(target is busy),可以继续:重启时会卸载所有文件系统。如果救援模式仍处于启用状态,请在控制面板中关闭它,然后重启服务器。在 IPMI 控制台中观察首次启动:如果再次停止,屏幕上会显示停在了哪里。
仍未解决?
如果救援系统无法启动、某块硬盘未被识别,或 /proc/mdstat 显示有故障成员,请在技术支持页面提交工单。硬件由我们负责:故障部件会在确诊后 4 小时内更换(参见 SLA),软件 RAID 一文介绍了之后如何重建镜像。服务器上的软件由您自行管理,但请告诉我们您已尝试过的操作,我们的工程师会为您指明方向。