服务器用着用着突然起不来了,可能是误改了配置文件,可能是磁盘出了坏道,也可能是grub引导损坏导致黑屏报错。这时候系统本身已经不可用,但数据还在磁盘上,重装系统代价太大。救援模式正是为这种场景准备的:通过一个独立的外部系统(Live CD或救援镜像)启动服务器,把磁盘上的原系统挂载进来,再用chroot切换进去执行修复操作。整套流程并不复杂,掌握之后能解决绝大多数启动类故障。

一、什么是救援模式,为什么它管用
救援模式的核心思路是"借尸还魂"。当原系统的引导程序、内核或关键配置损坏时,机器无法靠自身完成启动,但硬件和磁盘数据通常还是完好的。此时用一张Live CD(比如Ubuntu Live、SystemRescueCd、CentOS安装盘的救援选项)从光驱或U盘启动,就获得了一个完整可用的临时Linux环境。
这个临时环境拥有独立的内核、命令行工具和网络栈,可以自由读写磁盘上的文件。你可以把损坏系统的根分区、boot分区挂载到临时环境的某个目录下,然后通过chroot命令把根目录切换过去。切换之后,你执行的命令就相当于在原系统里运行,可以正常使用原系统的软件包管理器、systemd工具和配置文件,就像系统真的启动了一样。
这个过程的关键在于理解:chroot只是改变了进程眼中的根目录,并不会重启任何服务。它让你能在原系统语境下运行bash、执行修复命令,这在重装grub、重置root密码、修复fstab等场景中不可或缺。
二、准备工作:制作Live CD并进入救援环境
首先在另一台正常的电脑上下载Live镜像。常用的选择有SystemRescueCd(专为救援设计,工具齐全)、Ubuntu Desktop的Live模式,或者直接用对应发行版的安装ISO。用Rufus、Ventoy或dd命令把镜像写入U盘:
dd if=ubuntu.iso of=/dev/sdb bs=4M status=progress
注意of参数要写整个设备而不是分区,写错盘符会毁掉数据,执行前务必用lsblk确认目标U盘。云服务器则更简单,大部分云厂商(阿里云、腾讯云、AWS等)都提供"救援模式"或"挂载恢复镜像"的功能,在控制台点击即可让机器从救援盘启动,省去了物理介质的麻烦。
启动时选择从U盘或光驱引导,进入Live环境后建议优先配置网络(dhclient或ip命令手动配置),这样后续需要下载软件包时不会卡壳。同时用lsblk或fdisk -l查看磁盘分区布局,记下根分区、boot分区、EFI分区的设备名,这是后面挂载的基础。
三、手动挂载原系统分区
假设原系统的根分区是/dev/sda2,EFI分区是/dev/sda1,挂载步骤如下:
mount /dev/sda2 /mnt
mount /dev/sda1 /mnt/boot/efi
如果系统是LVM逻辑卷管理,需要先用vgscan和vgchange -ay激活卷组,再挂载/dev/mapper/centos-root之类的卷设备。如果是btrfs文件系统,挂载后子卷结构可能不同,需额外指定subvol参数。
接下来是新手最容易漏掉的一步:绑定挂载虚拟文件系统。chroot环境下执行很多命令依赖/proc、/sys、/dev这些内核接口,必须把它们挂进来:
- mount --bind /dev /mnt/dev
- mount --bind /proc /mnt/proc
- mount --bind /sys /mnt/sys
- mount --bind /run /mnt/run
如果宿主环境开启了SELinux,还要考虑挂载selinuxfs,否则chroot后部分操作会受限。为方便记忆,下面这张表列出了常见分区与挂载点的对应关系:
| 设备/分区 | 挂载点 | 说明 |
|---|---|---|
| /dev/sda2(根分区) | /mnt | 必须最先挂载 |
| /dev/sda1(EFI分区) | /mnt/boot/efi | UEFI系统需要 |
| /dev/sda3(独立boot) | /mnt/boot | boot单独分区时 |
| 逻辑卷 /dev/mapper/vg-root | /mnt | LVM需先激活卷组 |
| 虚拟文件系统 | /mnt/dev、/mnt/proc、/mnt/sys | chroot前的必要绑定 |
四、chroot切换与实际修复操作
基础挂载完成后,执行chroot /mnt /bin/bash进入原系统环境,并加载环境变量(source /etc/profile)。此时命令提示符虽然没变,但你已经在原系统里了,可以开始针对性的修复。常见的几类操作包括:
1. 重置root密码:直接执行passwd修改即可,这也是救援模式最经典的用途。改完密码后如果系统开启了SELinux,需要执行touch /.autorelabel,否则重启后新密码可能不生效。
2. 修复grub引导:针对grub损坏导致无法引导的情况。BIOS系统执行grub2-install /dev/sda,然后grub2-mkconfig -o /boot/grub2/grub.cfg;UEFI系统则用grub2-install --target=x86_64-efi --efi-directory=/boot/efi,Debian系对应的是update-grub命令。
3. 修复文件系统错误:如果怀疑磁盘有问题,先在chroot之前对未挂载的分区跑一遍fsck -y /dev/sda2。切记fsck不能对已挂载的分区执行,会直接损坏数据。
4. 修改错误配置:fstab写错导致启动卡住、网络配置异常、systemd服务死循环等,都可以直接编辑/mnt/etc下的对应文件。像/etc/fstab、/etc/default/grub这些高频出错文件,建议修改前先备份一份。
五、退出救援模式与注意事项
修复完成后不要直接重启,先执行exit退出chroot,然后按相反顺序卸载所有挂载点:umount /mnt/dev、umount /mnt/proc、umount /mnt/sys、umount /mnt/boot/efi、umount /mnt。如果umount提示target is busy,说明有进程占用,可用lsof或fuser排查。卸载干净后再reboot,并在BIOS里把启动顺序改回原磁盘。
几个容易踩的坑值得提醒:一是根分区设备名要认准,挂错分区后面所有操作都是白费;二是LVM和RAID环境步骤更多,不熟悉的话先在测试机上演练;三是每次救援前尽量先做磁盘快照或备份关键数据,修复操作本身也有风险;四是记好整个过程用过的命令,方便复盘和下次参考。
救援模式看似步骤繁琐,本质上就是"外部启动、挂载、切换、修复、卸载"五个环节。动手练上两三次,形成肌肉记忆之后,面对生产环境的突发故障就能从容应对,而不是慌乱之下选择重装了事。