ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

银河麒麟V10开机卡Logo?单用户模式与GRUB修复实战指南

银河麒麟V10开机卡Logo?单用户模式与GRUB修复实战指南 开机卡Logo这种事在银河麒麟V10上我前前后后碰到过四五次了。上周单位一台工控机又来了这么一出开机后麒麟Logo亮起来下面的小圆点转了两圈就定格风扇呼呼转键盘大小写灯能切换但屏幕永远停在那一帧。按CtrlAltF2想切终端没反应等十分钟还是老样子。说实话这个场景对用过Linux的老手来说并不陌生——就是系统在启动早期阶段卡住了但具体卡在哪儿得一步步查。这篇文章我就把从“卡Logo”到“进单用户模式修复”的完整过程写清楚。内容涵盖先怎么判断卡住的原因、怎么进单用户模式含GRUB改参数和U盘救援两条路、进去后常用修复命令怎么用、以及我踩过的坑和对应的排查思路。无论你是单位的运维还是自己电脑装了银河麒麟V10的普通用户照着这个思路走一遍大概率能把系统救回来。1. 开机卡Logo先判断症状别急着敲命令1.1 卡Logo的几种典型表现卡Logo并不是一种单一故障症状不同排查方向完全不同。我把实际工作中见过的几种表现列出来最典型的一种Logo出现加载动画转圈或进度条卡住之后彻底无响应键盘灯还有反应。另一种Logo出现后黑屏但光标在闪烁偶尔还能跳到字符终端只是无法登录图形界面。还有一种开机直接到GRUB菜单就花屏或者选择系统后立刻重启循环卡Logo。最多的情况其实是系统能启动到登录界面之前的某个服务某个进程阻塞图形桌面起不来。判断方法是看键盘是否响应、NumLock/CapsLock灯能不能切换、能不能按CtrlAltF2切到tty。如果键盘灯能切换但切不到tty大概率是内核早期阶段或initramfs阶段卡住如果能切到tty说明系统核心已经起来了问题出在后续服务或者图形环境上。这一步判断很关键决定了你是去单用户模式改配置还是去救援模式跑文件系统检查。1.2 为什么会卡在Logo界面银河麒麟V10桌面版默认走的是systemd启动流程从内核加载、initramfs解压到systemd拉起各种服务最后启动显示管理器通常是lightdm和桌面环境。卡Logo的位置不一样原因也不一样常见的诱发因素大概是这几类文件系统问题异常断电、强制关机后根分区或/boot分区出现损坏启动时挂载失败或fsck卡住。/etc/fstab配置错误有人改过自动挂载写入了不存在的设备或错误UUIDsystemd在等待挂载时超时很久界面就卡住了。显示管理器问题lightdm或显卡驱动不匹配启动图形界面时崩溃系统反复重试看起来就是转圈卡住。服务阻塞某个第三方服务比如自启动的数据库、容器、监控agent启动超时systemd默认等待90秒甚至更久期间没有界面反馈。根分区空间满或inode耗尽这种情况登录进去都会异常但启动阶段某些服务需要写临时文件写不进去就hang住。看到这里你应该明白进单用户模式的目的就是绕开图形界面和大部分用户态服务得到一个最小可用的root环境然后一步步定位到底是哪个环节出了问题。这也是为什么单用户模式修复而不是盲猜重装是这种情况下最高效的手段。2. 进入单用户模式的两种路径2.1 方法一GRUB菜单临时修改内核参数推荐这是最常用、也最快的一条路整个过程不需要U盘大概一分钟能到root环境。步骤如下重新开机在看到GRUB菜单时马上按键盘上的 e 键。如果没看到菜单重启后在开机自检刚过时就连续按 Shift 或 ESC把GRUB菜单调出来。银河麒麟V10默认的GRUB等待时间很短手慢了容易错过我一般开机就盯着屏幕连按Shift。进入编辑界面后找到以 linux 开头的那一行不同版本可能写作 linuxefi 或 linux16这一行很长包含了 vmlinuz、initrd 等参数。用方向键移动光标到这一行末尾找到安静模式参数的位置。下一步操作是把行尾的 quiet splash可能还有别的参数后面加上我们要的启动参数例如systemd.unitrescue.target如果你希望直接拿到root shell也可以用init/bin/bash修改完成后按 CtrlX 或者 F10 启动系统。系统会直接用刚才修改的参数启动不需要保存到配置文件重启后自动恢复原样所以胆子可以大一点改错了也不怕。这里有个细节很多教程会教你把参数改成 single 或者 1在银河麒麟V10上这两个参数不一定好使我实测更稳定的是 systemd.unitrescue.target因为它会调用systemd的救援单元挂载文件系统并给你一个root shell。当然如果用 init/bin/bash你会直接进入bash连登录提示符都没有适合做文件系统修复但网络服务、udev这些都不完整需要自己手动挂载一些目录。进入之后系统会提示你输入root密码还是直接给shell这个跟具体内核参数有关。用 systemd.unitrescue.target 通常需要root密码用 init/bin/bash 一般直接就是root shell。如果你的系统有root密码又忘了那就得用U盘救援模式去处理这个我们后面说。2.2 方法二U盘启动盘进入救援模式GRUB那条路要求你能看到菜单、能按e如果系统损坏到连GRUB都起不来或者你忘了root密码那就得用安装镜像进入救援模式。银河麒麟V10的安装U盘本身就带救援入口不同版本界面略有差异但流程都差不多用麒麟V10安装镜像做好启动U盘开机进BIOS设置U盘为第一启动项。从U盘启动后选择“安装银河麒麟系统”之前的那个救援/修复入口如果没有单独入口就选“试用系统”或“Live系统”进桌面。进入Live环境后打开终端先看磁盘分区情况lsblk blkid找到根分区一般是 sda2 或者 nvme0n1p2 这种挂载它并挂载必要的系统目录然后chroot进去mount /dev/sda2 /mnt mount /dev/sda1 /mnt/boot # 如果有独立boot分区 mount --bind /dev /mnt/dev mount --bind /proc /mnt/proc mount --bind /sys /mnt/sys chroot /mnt /bin/bashchroot之后就相当于进入了目标系统的root环境你可以在里面执行修复命令跟单用户模式下的操作基本一致。区别是U盘救援模式更安全因为目标系统的内核和驱动完全没有参与启动即使你改了系统文件也不影响当前运行环境适合做比较大手笔的修复。我自己实际碰到的情况是有台机器根分区做了lvm加上GRUB被误覆盖单用户模式根本进不去只能用U盘救援模式把GRUB重新装一遍。所以两种方法都建议你掌握平时觉得用不上关键时刻真的能救命。3. 单用户模式下的修复实战进入单用户模式只是第一步真正的重头戏是进去之后做什么。很多人进去之后对着一个root shell发懵不知道从哪儿查起。我按照最常见的故障类型把排查和修复步骤拆开讲。3.1 先让文件系统可写再查日志定位用 init/bin/bash 进入的单用户模式根文件系统默认是只读挂载的你在里面敲 mount 会看到 / 后面带着 ro。只读状态下很多东西做不了所以第一件事就是重新挂载为读写mount -o remount,rw /如果是用 systemd.unitrescue.target 进来的通常系统已经按要求挂载了文件系统但为了保险我习惯也执行一遍这条命令。文件系统可写之后先别急着乱改优先看日志。很多人忽略这一步盲目执行系统修复工具结果问题没找到反而把系统搞得更乱。日志怎么看在单用户模式下journald 通常可用执行journalctl -xb --no-pager | tail -200-x 参数会输出详细的错误解释-b 表示本次启动。如果这条命令报错或没有输出说明日志服务没起来那就从 dmesg 和系统提示入手dmesg | grep -i error dmesg | grep -i fail还有一个很实用的手段直接看systemd单元状态。假设你怀疑某个服务卡住了可以执行systemctl --failed systemctl list-units --failed这两条命令会把启动失败的服务列出来配合日志基本就能锁定元凶。我见过最经典的情况是NetworkManager-wait-online.service卡了90秒导致开机看起来像卡死在Logo实际就是网络等待超时后面我们用 systemctl disable 把它关掉就正常了。如果连journal和systemctl都不可用你用 init/bin/bash 进来时常见就先查文件系统和磁盘占用的基础信息lsblk -f df -h df -idf -i 很多人不常看但inode耗尽和空间满的症状一样都会导致服务写文件失败、启动hang住。我遇到过一次 /tmp 下面被灌满了成千上万个小文件df -h 看空间还有应用就是起不来最后是 df -i 才发现inode耗尽了。3.2 文件系统检查与fstab修复如果你怀疑是文件系统问题比如之前异常断电、强制关机那么第一步就是检查文件系统。要注意检查文件系统的前提是分区没有被挂载或者至少以只读方式检查。根分区正在被使用没法直接卸载所以要么你在U盘救援模式下执行要么在单用户模式下先 remount 成只读再检查mount -o remount,ro / e2fsck -f /dev/sda2这里的 /dev/sda2 要替换成你自己的根分区设备名用 lsblk 先确认再动手。e2fsck 如果有大量错误会交互式询问是否修复这时候用一个 -y 参数让所有询问默认回答yes适合无人值守e2fsck -fy /dev/sda2检查完了再挂载回读写mount -o remount,rw /除了根分区/boot 分区也值得查一遍特别是内核或initramfs文件损坏时启动会卡在内核加载阶段。如果 /boot 是独立分区同样先卸载再检查。fstab的问题是另一个高发点。检查一下 /etc/fstab 里有没有异常的挂载项cat /etc/fstab看到不认识的UUID或者本来就不存在的设备直接给它所在的行注释掉。我见过一个案例用户加了一行挂载Windows NTFS分区的配置但缺少对应驱动启动时一直重试最后卡死在挂载流程。用文本编辑器把这一行前面加个 # 注释保存后重启问题立刻消失。单用户模式下可以用 vi 或 nano 编辑操作方式和正常系统里一样。还有个经验如果修改了fstab保存后最好执行一次 mount -a 测试看有没有报错。没问题再重启否则改错了你又要再进一次救援模式。3.3 排查启动服务和显示管理器排除文件系统问题后接下来就该查服务和图形环境了。前面说过显示管理器lightdm或gdm启动失败是最常见的卡Logo元凶之一。尤其是系统更新内核或显卡驱动之后或者你装过闭源显卡驱动但没装好重启经常卡在图形界面之前。解决办法是在单用户模式下把显示管理器先禁用让系统先能启动到命令行再慢慢修驱动systemctl list-unit-files | grep -E lightdm|gdm|sddm systemctl disable lightdm有些版本的麒麟V10桌面用的是 lightdm有些老版本可能是 gdm 或别的先查一下再禁用。禁用显示管理器后重启系统会停在字符登录界面这时候说明问题确实出在图形层可以专心修显卡驱动或者显示管理器配置。如果系统里装了不该自启动的第三方服务同样可以用 systemctl 处理。先看所有自启动的服务systemctl list-unit-files | grep enabled对可疑的服务比如你自己装过的、或者不知道什么时候多出来的逐个确认后禁用systemctl disable 服务名有些服务即使禁用了重启还是会尝试启动这时候可以 mask 它systemctl mask 服务名mask会把服务彻底禁用重启也不会被拉起。注意这个操作要慎用想恢复就执行 systemctl unmask 服务名。我还碰到过一种特殊情况内核模块加载导致卡住。比如某台老机器加载了不兼容的显卡模块开机到模块加载阶段直接黑屏。这种情况在单用户模式下可以临时把模块加入黑名单编辑 /etc/modprobe.d/blacklist.conf 加入 blacklist 模块名不过这个操作需要你对硬件和模块有把握不确定的时候别乱blacklist避免越修越坏。3.4 常用修复命令与系统工具速查上面提到了不少命令我整理了一张表方便你进单用户模式后对着用。这张表上的命令我在实际修复中基本都会用到按顺序执行就能覆盖大多数问题。场景命令说明重新挂载根分区为读写mount -o remount,rw /进入单用户模式后第一步查看磁盘与分区lsblk -f确认根分区、boot分区设备名查看挂载和文件系统类型blkid获取UUID方便检查fstab检查根分区文件系统e2fsck -fy 设备名先卸载或只读挂载再执行查看启动错误日志journalctl -xb -p err只看错误级别日志查看内核错误dmesg | grep -i error内核级别的报错列出启动失败的服务systemctl --failed快速定位失败单元查看所有自启动服务systemctl list-unit-files | grep enabled找出可疑服务禁用显示管理器systemctl disable lightdm临时绕开图形环境查看磁盘空间df -h排除空间满问题查看inode占用df -i排除inode耗尽问题测试fstab配置mount -a修改fstab后验证表格里的命令不用全执行按你的症状选择就行。比如你明确是断电后才卡Logo优先跑fsck如果是装完软件重启后卡住优先看systemctl --failed。4. 常见问题与排查技巧实录4.1 单用户模式进不去怎么办进不去单用户模式是很常见的问题原因五花八门。我总结了几种情况和对应的处理办法GRUB菜单来不及按键银河麒麟V10的GRUB等待时间默认很短可以在正常系统里修改 /etc/default/grub 里的 GRUB_TIMEOUT把它改成10秒或更长然后执行 update-grub 让它生效。按e之后改完参数启动还是卡住可能是内核参数加错了。确认你要加的参数是在 linux 那一行不是initrd行而且参数之间要有空格。系统有UEFI安全启动保护个别机器开了Secure Boot之后部分启动参数会被限制这时候先进BIOS把Secure Boot临时关掉再试。真的进不去且数据重要直接上U盘救援模式配合chroot操作这是在最极端情况下的保底方案。另外如果你忘了root密码在单用户模式下重置密码的命令是 passwd root但如果系统要求登录才能进单用户模式那就只能U盘救援chroot再passwd。常规操作是chroot进去之后直接执行 passwd root按提示输入两次新密码就行。4.2 修复完重启还是卡Logo这是最让人崩溃的情况你在单用户模式里折腾半天重启一看还是原样卡Logo。这时候先别急回忆一下修复过程重点检查这几件事第一你有没有真的把问题定位清楚如果只是进来了、随便跑了几个命令就重启那大概率没修到点上。建议重新进入单用户模式这次认真看 journalctl 的输出把关键报错记下来再动手。第二你改的配置是否保存了用vi或nano编辑文件后要确认write保存。尤其是用 :wq! 强制保存的那些操作漏一个就会前功尽弃。第三文件系统有没有修复彻底e2fsck 有时候一轮跑不完报的错误会在下一轮消失但某些目录可能需要多次修复才彻底干净。如果日志里反复出现ext4相关的报错就再跑一轮 e2fsck -fy。第四确认你修改的内核参数是不是临时生效。如果你用GRUB临时改参进去修复修复完重启时菜单又恢复原样之前那些以临时参数为基础做的修改一旦没落到配置文件里等于白干了。所以建议进单用户模式后做的任何修改都要保证它写进了 /etc 下的对应配置文件而不是只存在于当前运行环境。4.3 文件系统只读、挂载失败等问题单用户模式下最常遇到的坑就是“文件系统只读”。你敲任何写命令都报 read-only file system这不是系统坏了而是根分区默认以只读方式挂载。解决办法就是前面说的 mount -o remount,rw /。如果这条命令也报错可能是根分区确实有损坏这时候需要先执行 fsck 修复。挂载失败的问题也经常出现。如果启动时报错“You might want to fix this with e2fsck”之类的提示说明有分区需要检查。如果提示“UUIDxxx does not exist”说明fstab里的UUID和实际磁盘对不上用 blkid 查一下真实UUID修改fstab即可。还有一个容易忽略的点/tmp 权限。有些程序启动时要在 /tmp 创建临时文件如果 /tmp 权限不对比如被改成了700或000程序就会静默失败。正常 /tmp 应该长这样ls -ld /tmp drwxrwxrwt ... /tmp最后一位是 t表示sticky bit。如果不正常用这条命令改回来chmod 1777 /tmp这类权限问题在桌面环境下特别隐蔽因为报错往往不在启动早期而是在你打开某个应用时才暴露但排查时顺手确认一下总没坏处。4.4 修复后如何正常重启在单用户模式下修完bug不要直接拔电源或者用硬复位。正确做法是在修复完所有配置后先执行 sync 把缓存数据写回磁盘再重启sync reboot -f如果你是在chroot环境U盘救援模式里操作的先 exit 退出chroot然后卸载挂载的分区再重启exit umount -R /mnt reboot这一步虽然简单但真的很重要。我见过有人修完系统直接按机箱重启键结果文件系统又出现新损坏等于白忙一场。养成先sync再reboot的习惯能省很多麻烦。5. 写在最后的实操心得5.1 平时就该做好的三件事经历了这么多次卡Logo之后我有几个习惯想分享给大家。第一重要数据一定要有备份而且备份要定期验证能不能恢复。系统修复能救回来的只是系统本身如果你的数据因为磁盘故障丢了再强的单用户模式也变不出来。第二动系统之前先拍照或者记下原来的配置。我每次改fstab、改GRUB参数之前都会先把原文件内容截图或者拷贝一份这样改乱了还能对照恢复。第三装软件、更新驱动之后不要立刻关机先重启一次确认系统正常再把机器交给用户。很多卡Logo的案例就是更新后没验证关机再开才发现出问题。5.2 如果实在修不好也别硬扛有时候系统坏得太彻底比如GRUB丢失加根分区多处损坏修复的成本可能比重装还高。这种情况下我的建议是把数据救出来直接重装系统。重装前记得备份用户目录、/etc下的关键配置文件、数据库和业务数据重装后又是一条好汉。别迷信“高手从不重装系统”这种话在真实运维里能用最少时间恢复业务才是最重要的。最后再补充一个小技巧单用户模式下终端没有图形中文可能会显示成乱码这时候很多命令的输出看不太懂。可以在进入shell后先执行 export LANGen_US.UTF-8把语言切成英文日志里的报错信息反而更好辨认。虽然这是个小细节但实际用起来省了不少眼力。卡Logo这件事说到底是系统启动链路某个环节出问题了但只要掌握了单用户模式这一招大部分问题都能手到擒来。希望这篇记录能帮到你。
返回列表