首页 / 资讯中心 / 文章详情

麒麟V10救援模式实战:桌面进不去也能修复

麒麟V10救援模式实战:桌面进不去也能修复 ★ FEATURED ARTICLE
做系统维护这行最怕听到的消息不是“软件崩溃了”而是“桌面进不去了”。尤其是麒麟桌面系统 V10-SP1 2503 这种承载着日常办公和业务系统的环境一旦开机卡在 Logo、黑屏或者无限循环登录界面很多人的第一反应就是“重装系统”。先别急着格式化麒麟系统内置了一个非常好用的应急通道——救援模式。简单说救援模式就是系统在启动特殊目标时拉起的一个最小化运行环境让你在桌面无法正常进入的情况下仍然能用命令行去修复引导、修复文件系统、重置密码、修改配置。这篇内容我会从原理讲到手把手操作再给出一套完整的排障思路适合运维人员、系统管理员和遇到启动问题的普通用户参考。1. 先说清楚救援模式到底能救什么很多人会把救援模式理解成“系统坏了以后才用的命令窗口”这个理解不算错但太模糊了。救援模式的价值不在于它是个 Shell而在于它能让你绕开图形桌面服务、网络服务、定时任务等一系列可能在启动阶段就出问题的组件直接进入一个干净、可控的维护环境。1.1 我遇到过的典型故障场景先列举几个我实际处理过、也能用救援模式解决的问题开机卡在品牌 Logo 或浅色启动界面。这类问题常见于系统更新内核、显卡驱动异常、磁盘分区表变更之后内核其实已经加载了一部分但图形服务或者某个挂载点卡住了。无限循环登录。输完密码又弹回登录界面看起来“能进系统”实际上进不去桌面。多数情况和纹目文件权限、磁盘写满、家目录挂载错误有关。GRUB 引导菜单损坏。开机直接进了 GRUB 命令行或者出现grub rescue提示符系统既不能正常启动也没有菜单可选。root 密码遗忘。虽然桌面使用普通账号但很多维护操作需要 root 权限一旦 root 密码丢失救援模式可以直接重置。文件系统异常。非正常关机比如断电后分区可能进入只读状态或者出现校验错误导致启动流程反复失败。这些场景的共同点在于系统内核和数据大概率还在只是被某个环节挡住了。救援模式要做的就是绕开“挡路的那个环节”。1.2 麒麟系统救援模式的设计思路麒麟桌面系统底层是 Linux 体系使用 systemd 作为初始化服务管理器。systemd 把启动过程拆成了不同的target目标你可以把它理解为“开机要拉起的服务套餐”。正常图形桌面启动时系统会走到graphical.target拉起显示管理器、桌面环境等一堆服务而救援模式对应的则是rescue.target它只拉起文件系统挂载、基础设备等最低限度的服务最后给你一个root权限的命令行。这种设计有两个直接好处第一启动路径短故障点少第二所有和图形界面相关的进程都不会加载哪怕你装了一个有问题的显卡驱动也不会在这个环境里捣乱。你面对的是一个稳定的、可控制的终端可以做各种恢复操作。2. 进救援模式前先搞懂引导过程和几种“应急入口”的区别救援模式不是唯一的应急通道。进入系统维护环境的方式有好几种它们之间有交集但侧重点完全不同。搞清楚它们的区别能帮你少走弯路。2.1 系统引导链路简述从按下电源键到看到桌面正常流程是固件BIOS/UEFI → 引导程序GRUB → 内核 → systemd 初始化 → 图形服务 → 桌面 UI任何一个环节断掉表现都不一样。比如 GRUB 损坏你可能根本看不到内核选择界面内核加载失败可能会停在黑屏或者报错图形服务出问题则可能表现为桌面进不去但命令行能进。救援模式主要作用于最后三段它通过给内核传递特殊启动参数让 systemd 不再拉起graphical.target转而拉起rescue.target。2.2 救援模式、紧急模式、字符界面多用户模式怎么选很多人分不清这几个名词我来对比一下入口触发方式特征适用场景救援模式内核参数加systemd.unitrescue.target或使用single、1基础文件系统挂载root Shell无网络无图形修复引导、修复 fstab、重置密码紧急模式内核参数加systemd.unitemergency.target或启动时反复按CtrlD后选择只挂载根分区甚至根分区可能是只读环境更精简根文件系统挂载失败、fstab 严重损坏字符界面多用户模式内核参数加systemd.unitmulti-user.target或运行级别3启动完整多用户环境有网络无图形桌面排查图形服务、驱动问题、远程恢复从实战角度来看如果你能进入到 GRUB 菜单我建议优先试一试multi-user.target。因为它带网络方便你远程操作也能用各种排查命令。但如果系统在挂载文件系统阶段就崩了那就只能进救援模式甚至紧急模式。2.3 进入前要做的准备救援模式虽然强大但它不能凭空解决硬件损坏也不会主动帮你恢复数据。所以动手之前先确认三件事物理访问权限。救援模式需要在开机时操作 GRUB远程 SSH 是进不去的除非你已经提前配好了串口或带外管理。如果你是通过 Windows 远程桌面连接麒麟系统那大概率需要到现场或者请现场同事配合。账号情况。救援模式登录的是 root。如果 root 密码忘了也没关系后面我会讲专门的重置方法但如果你不清楚整个磁盘是否有 LUKS 加密需要提前准备好解密口令。加密分区在做修复前必须先解锁。备份心态。进救援模式后很多操作是不可逆的尤其是fsck、grub2-mkconfig、修改密码这类操作。如果你不确定当前分区里的数据是否已经备份不要贸然执行删除类命令。3. 手把手操作从 GRUB 菜单一步步进救援模式下面进入正题这段操作我尽量写得细一些因为救援模式一旦进不去很多人的心态就崩了反而容易误操作。3.1 开机时怎么把 GRUB 菜单调出来麒麟桌面系统默认情况下GRUB 菜单可能一闪而过或者根本不显示。这时候你需要在按下电源键出现品牌 Logo 时快速连续按键盘上的Esc或Shift键。不同机器情况不一样有的按 Esc 有效有的按 Shift 有效我习惯两个都多按几次。如果你用的是虚拟机比如麒麟装在 VMware 或 VirtualBox 里也是同样的操作只是在开机瞬间马上把鼠标焦点放进虚拟机窗口再按键。如果能正常看到 GRUB 菜单你会看到几行条目通常第一行是当前系统内核第二行是另一个内核或者高级选项第三行可能有恢复模式。这里先说明一下麒麟桌面系统 V10-SP1 2503 的实际菜单排版可能因为安装方式、内核数量不同而略有差异但大原则一致。3.2 编辑内核启动参数最常用的进入方式在 GRUB 菜单界面选中第一行默认内核按键盘上的e键进入编辑模式。这时候屏幕会变成类似配置文件的文本界面找到以linux开头的一行注意是linux/linux16/linuxefi开头的那一行不是initrd开头的那一行。把这行末尾的内容看完通常在splash、quiet这些参数后面先输入一个空格然后追加systemd.unitrescue.target追加完成后按CtrlX或者F10保存并启动。等待几十秒系统进入一个黑色的终端界面这就是救援模式。它会提示你输入 root 密码如果密码正确你会得到一个root主机名:~#提示符。这里有个容易被忽略的点以上修改只是对本次启动生效。你并没有改动磁盘上的 GRUB 配置文件所以重启后会自动恢复原来的启动方式。这其实是好事可以放心大胆尝试不用担心改坏系统。如果你是想恢复桌面环境重启即可如果还想继续做排查就在当前 Shell 里执行命令。3.3 如果你看到的是恢复模式菜单或黑屏提示符有些麒麟系统在 GRUB 高级选项里直接列了recovery mode条目选它也能进类似环境但它内部执行的实际上是多个启动步骤的组合会和救援模式有些细微差别。还有一个常见情况系统引导已经坏到 GRUB 菜单都出不来直接停在grub rescue提示符。这种情况要分两步走第一步确认系统根分区位置在grub rescue提示符下执行ls查看磁盘和分区列表。第二步手动指定内核启动。但说实话在grub rescue里临时引导需要记一堆命令不如直接用麒麟安装 U 盘或 Live CD 启动然后挂载硬盘进入 chroot 环境修复引导这个方法更稳定、容错率更高。我会在第五节详细讲这条链路。4. 救援模式里到底能干什么四类高频恢复操作进入救援模式只是开始真正关键的是在里面做什么。以下是我实际使用中最常见的四类操作每一条都能直接落地。4.1 把根文件系统切换成读写模式救援模式默认挂载根文件系统时可能是只读状态。这是因为系统启动流程还没完成分区表校验也未必跑完处于一种“安全”但“不顺手”的状态。如果你要改配置、删文件、重置密码得先把它重新挂载为读写mount -o remount,rw /执行完以后用mount | grep / 确认一下输出里应该能看到rw字样。如果提示设备忙可以先关闭交换分区或者使用systemctl daemon-reexec重置一遍再试。为什么这一步放在最前面因为后续所有写操作——修改/etc/fstab、重设密码、更新 GRUB 配置——都依赖一个可写的根分区。忽略这一步你执行vim /etc/fstab会发现保存失败然后误以为是命令问题白白浪费排查时间。4.2 修复/etc/fstab中的挂载错误/etc/fstab是开机自动挂载分区的清单。这个文件一旦写错比如设备 UUID 对不上、挂载点不存在、文件系统类型写错轻则启动卡住重则直接进入紧急模式。在救援模式下先看当前磁盘和分区的实际 UUIDblkid再看系统预期的挂载配置cat /etc/fstab对比两者重点检查根分区和家目录分区的 UUID 是否匹配。如果发现不一致先备份原文件cp /etc/fstab /etc/fstab.bak.$(date %F)然后用vi或nano修改错误行。修改完以后推荐用以下命令验证一下配置有没有语法问题mount -a如果没有任何报错说明至少语法层面是通的。这里有一个很重要的经验如果你不确定某个非关键分区该怎么写宁可暂时注释掉也不要用一个错的行占位。注释掉最多是少挂一个分区写错了可能整个系统都起不来。4.3 重置忘记的 root 密码如果 root 密码丢失正常登录会有障碍但救援模式下可以直接重置mount -o remount,rw / passwd root系统会提示输入两次新密码。如果当前环境要求你输入当前 root 密码才能进救援模式而你又恰好忘了它这就有点尴尬——不过你仍然可以通过单用户模式参数配合rd.break或直接编辑引导参数临时跳过认证但这些方式在开启强制安全策略时不一定有效。为了不跑偏这里我只建议普通场景下的做法平时就要保管好 root 密码或者确保有 sudo 权限的普通用户能协助查证。重置完密码以后最好顺手执行一次sync确保数据落盘再重启测试。4.4 重建 GRUB 引导配置很多“开机后卡死”或“GRUB 菜单丢失”的问题根源是 GRUB 配置文件和实际系统环境不匹配。在救援模式下重建引导配置是标准流程。先确认引导目录形式ls /boot/grub /boot/grub2 2/dev/null麒麟系统不同版本用的 GRUB 目录有差异有的用/boot/grub有的用/boot/grub2。确认之后再执行相应命令# 如果 /boot/grub 存在多半是 Debian/Ubuntu 系风格 update-grub # 如果 /boot/grub2 存在可以用红帽系风格命令 grub2-mkconfig -o /boot/grub2/grub.cfg如果这两种命令都不存在可以试试直接调用命令的完整路径或者在/usr/sbin下找一找。执行完成后系统会扫描磁盘分区和内核文件重新生成启动菜单。另外如果你需要重装 GRUB 到主引导记录比如在 UEFI 环境下 ESP 分区受损那还要挂载 EFI 分区并用grub-install重新安装。这个操作对磁盘设备名很敏感后续我会单独写一篇更细的内容这里不过多展开。5. 一条完整的排查链路从进不去桌面到彻底恢复光有零散操作还不够下面分享一个相对完整的排查思路你按照这条链路走比到处搜命令要高效得多。5.1 从故障现象反推原因表格是快速定位的好工具我把最常见的现象、可能原因和对应修复方向整理在一起现象可能原因在救援模式下的动作开机卡在 Logo无响应文件系统校验卡住、内核模块冲突进救援模式跑fsck检查磁盘空间进入 GRUB 菜单但选哪个内核都一样黑屏initrd 损坏或内核文件缺失重新生成 initrd修复引导无限循环登录家目录挂载失败、磁盘写满、桌面配置损坏检查/etc/fstab清理磁盘修改用户缓存目录权限直接提示grub rescue引导程序损坏用 Live 介质 chroot 后重装 GRUBroot 密码丢失长期未维护口令遗忘救援模式直接passwd root桌面显示“你已休息”或瞬间退出显示服务崩溃、会话进程异常先进 multi-user.target 看日志再对症处理这个表对应了我开头提到的高频痛点其中“桌面显示你已休息”这类情况听起来有点像屏保文案实际上大概率是桌面会话或显示管理器崩了图形服务没能正常接管。这时你不需要一上来就进救援模式可以先在 GRUB 里加systemd.unitmulti-user.target进字符界面用journalctl -xb查会话退出原因。如果字符界面也进不去再用救援模式。5.2 在救援模式下跑一轮基础体检进入救援模式后我习惯按这个顺序敲命令# 1. 看存储设备和挂载状态 lsblk df -h mount # 2. 检查根文件系统完整性 fsck -y /dev/对应磁盘分区 # 3. 检查最近的内核日志 journalctl -xb --no-pager -n 200先判断是不是磁盘满了。很多启动问题并不是软件故障而是/分区可用空间不足 0KB导致系统写不了临时文件、用户配置无法落盘。如果是这种情况在救援模式下先找大文件清理比如/var/log下旧的日志、/tmp下的临时文件、/home下异常增长的缓存目录。fsck命令只针对未挂载分区才会更安全但对于根分区救援模式下通常已经挂载了。如果你不确定分区是否正在被使用可以先执行umount /dev/对应分区再跑fsck。如果提示无法卸载说明分区在内核中仍被占用那可以带-M参数让 fsck 跳过已挂载分区或者干脆全部用fsck -f -y强制检查。虽然我不太推荐对已挂载分区强制检查但在救援模式下相对可控。5.3 更稳妥的选择用麒麟安装介质进 chroot 环境如果救援模式本身都进不去或者你需要操作的修复已经涉及 GRUB 主引导记录、ESP 分区、以及跨系统环境的文件处理我的建议是直接用麒麟系统的安装 U 盘启动选择“试用系统”或“进入安装前环境”然后在终端里挂载硬盘分区。参考操作# 找到硬盘分区 lsblk # 挂载根分区和必要的虚拟文件系统 mount /dev/对应根分区 /mnt mount /dev/对应EFI分区 /mnt/boot/efi # UEFI 环境需要 mount --bind /dev /mnt/dev mount --bind /proc /mnt/proc mount --bind /sys /mnt/sys # 切入硬盘上的真实系统环境 chroot /mnt /bin/bash # 重置密码、修复 fstab、重建引导都在这个环境里执行 passwd root update-grubchroot 的意思是把你当前所在的命令环境“切换”到硬盘上的系统目录里。用它可以绕过 GRUB、绕过内核加载阶段直接像一个已经启动好的系统那样操作。它比救援模式应用范围更广特别适合处理引导层故障。唯一的缺点是需要有安装 U 盘或者 Live 介质但作为运维人员这个工具应该常备。5.4 修复后如何验证任何修复操作完成以后都不要急着宣称“修好了”。我的习惯是先执行sync把缓存数据刷入磁盘。执行reboot或systemctl reboot重启系统注意观察启动过程的报错点是否还出现。如果系统能进入图形桌面再检查一遍关键挂载点是否正常df -h、mount | grep home。最后做一次业务验证比如打开常用办公软件、连接共享资源确认不光是“能开机”而是“能干活”。如果你修复过程中修改了/etc/fstab重启后尤其要留意multi-user.target能进但graphical.target进不去的情况这往往意味着还有第二个挂载点没有恢复正常。6. 最后一些容易忽略的坑和个人习惯来到这部分我分享几条经验都是从操作失误堆里总结出来的希望能帮你绕开。6.1 进入救援模式后的常见错操作第一随手执行rm -rf清理大文件。别问为什么我见过有人在救援模式下执行rm -rf /var/*结果把系统日志、缓存全删了虽然系统能启动但很多服务直接不能正常工作。救援模式给了你 root 权限不代表所有问题都能用“删”解决。清理文件之前先确认路径和范围。第二修改文件不备份。编辑/etc/fstab、/etc/default/grub这类关键配置之前养成备份的好习惯。一行命令的事关键时刻能救命cp /etc/fstab /etc/fstab.$(date %F).bak第三没有确认分区直接跑代码。有些人在网上复制一段命令里面的盘符写的是sda1你机器上可能是nvme0n1p2或者如果是 SATA 与 NVMe 混用盘符顺序还会变化。所有涉及分区的操作先执行lsblk看清楚再动手。第四忽略加密分区和解锁口令。如果你的系统在安装时开启了磁盘加密救援模式下看到的并不是常规分区内容而是加密设备节点。没有解锁口令你连挂载根分区都做不到更别提修改文件了。这类系统在排障时要先解密cryptsetup luksOpen /dev/对应分区 myroot合理操作加密系统没问题但如果你的部署场景有着严格的安全合规要求还要按照审批流程来不要自行绕过安全策略。6.2 在远程管理场景下怎么配合很多运维环境是 Windows 和麒麟桌面系统混合部署服务器端有远程管理能力但桌面终端很少。如果你的麒麟系统遇到问题而你又不能马上到现场我的建议是让现场同事配合在开机阶段按 Esc/Shift 帮你进入 GRUB然后你通过远程会话指导操作。这里不推荐在没确认能远程进入救援模式的情况下贸然重启远程设备因为救援模式默认无网络一旦进不去图形系统你连 SSH 的机会都可能丢掉。实际上很多基础问题可以在图形桌面还能打开的时候用命令行排查。比如系统用着用着发现打印机有问题、桌面 PDF 虚拟打印机无法工作、或者桌面路径显示异常这些其实不太需要进救援模式先用普通用户终端检查xdg-user-dirs配置和打印服务状态xdg-user-dir DESKTOP systemctl status cupsxdg-user-dir DESKTOP这个命令能直接告诉你当前系统认为的桌面路径在哪如果路径和你预期不一致多半是用户目录配置被改动了。这类小问题和救援模式关系不大但挺典型顺手记一下能省不少事。6.3 我的几个实操习惯第一我会在系统正常的时候提前拍一张lsblk和/etc/fstab的快照存下来或者写到自己的运维笔记里。等出了故障直接对比就知道哪里变了。第二修改 GRUB 参数时我会在附加参数的同一行后面再写一个自己记得住的临时标识比如kylin-rescue-test这样万一系统起不来能在屏幕滚动的信息里知道这行是我加的参数方便复盘。第三在救援模式里做每一步重要操作之前我会先默念一遍“这个命令作用在哪一层”是改内核参数还是改 systemd 服务还是改分区挂载逻辑。层次清楚了出问题的时候才不容易把修复动作本身当成故障原因。第四也是最后一条不要把救援模式当成万能工具。救援模式最擅长的是处理软件层、配置层和文件系统层的故障。如果系统硬件报错风扇转磁盘响开箱检查或备用硬件替换才是正路。该换硬件的时候别在救援模式里反复折腾。麒麟桌面系统 V10-SP1 2503 的救援模式说到底就是给你一条“绕过桌面、直击根本”的维护路径。我这两年处理过的启动类故障里至少有一半靠它就能收尾真正需要重装系统的反而是少数。希望这篇内容能在你的系统遇到问题时派上用场。
阅读完成 · 觉得有帮助?
咨询建站