ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

云终端GRUB Shell进二层菜单:引导修复与维护入口实操

2026/9/17 14:54:47 拓冰建站 浏览量
云终端GRUB Shell进二层菜单:引导修复与维护入口实操 锐捷云课堂这套方案在学校机房里的存在感一直很强但真正把一台云终端拆开、从按下电源键第一秒开始看它怎么跑到桌面的人并不多。我前阵子因为一台学生机起不来被迫从固件一路跟到引导加载器才把云终端这三个字背后的启动链路摸了个大概。这里说的云终端本质是一台本地存储极小、算力和系统镜像大多放在后端服务器上的瘦客户机它上电后要经历固件、引导加载器、内核、根文件系统一连串交接最后通过网络或者本地还原分区把桌面环境挂起来。而 grub就是这个链条里最容易被忽略、却在维护时最常被用到的一环。尤其是标题里提到的 grub shell 进二层 grub menu说白了就是在默认看不到菜单的情况下用命令行手动把第二份引导配置拉起来从而拿到系统还原、重新部署、故障恢复之类的维护入口。这套东西适合谁看学校的机房管理员、做教育信息化运维的工程师以及手上有几台云终端、想搞清楚它脾气的人。1. 拆开一台云课堂云终端算力到底放在哪一端1.1 从一台学生机按下电源键说起理解云终端最好的切入点是跟着一次开机走一遍。学生按下电源键主板固件先自检然后按预设顺序去找可引导设备——可能是本地那块小小的 flash 或 eMMC也可能是网卡发起的网络引导。找到引导程序后引导加载器把内核和初始内存盘读进内存内核接手挂载根文件系统最后拉起一个瘦客户端进程这个进程再去和教室里的服务器建立会话把真正的桌面投到这台机器的显示器上。整条链路里云终端自己干的事其实很有限显示画面、采集键鼠输入、跟服务器保持连接。学生在屏幕上看到的软件、打开的文件、保存的资料绝大多数实际跑在服务器侧的虚拟机里。这也是为什么一台配置看起来很寒酸的终端能流畅跑起办公套件的根本原因——它只是个精致的显示与输入终端重活都在后端。这个分工决定了故障排查的方向。当一台机器黑屏或者卡住你得先判断问题出在终端本地这一段还是服务器那一段。而 grub 相关的操作几乎全部落在本地这一段这也是它值得单独拿出来讲的原因。1.2 本地那块小存储被切成了哪几个区云终端本地存储通常不大常见是几 GB 到十几 GB 的 flash 或 eMMC。空间虽小分区却不少典型的划分思路是这样的引导分区存放引导加载器和它的配置文件体积最小但最关键。系统分区放一份精简的本地系统用于终端启动时初始化硬件、拉起客户端。还原或备份分区存放出厂镜像或上次同步的干净系统供还原操作使用。配置与数据分区存放本机参数、网络设置、设备标识等。正因为本地存在当前系统和还原镜像这两套东西引导时就需要一个入口让维护人员选择从哪套启动——这正是后面要讲的两层引导菜单存在的物理基础。理解了分区布局再看引导流程就顺了第一层引导负责把控制权交给系统第二层引导则在需要维护时提供可选项。1.3 一节课同时开机压力到底在哪很多人以为云课堂的瓶颈在终端算力其实不是。真正吃紧的是并发启动时刻的网络和后端存储。一个机房四五十台终端同时上电如果都用网络引导那瞬间的引导流量是相当可观的如果都用本地引导那服务器侧的桌面会话建立又会集中爆发。所以实际部署里引导策略往往做了折中终端优先从本地引导快速把本地系统拉起来缩短开机时间本地系统坏了才退回网络引导或还原流程。这个优先本地、兜底网络的策略直接影响了引导菜单的设计——正常情况下菜单是隐藏的直接走默认项进系统只有维护人员主动干预才会停下来让你选。这也是为什么很多管理员从来没见过菜单等到需要进维护界面时反而不知道怎么把菜单调出来。2. 云终端上电后的引导链grub 站在哪个位置2.1 固件到内核之间的那段真空期固件自检完成到内核接管之间的这段时间机器其实处于一个很尴尬的状态硬件有了但没有任何操作系统在跑。这段时间必须由一个专门的程序顶上来去读磁盘、找内核、把内核加载进内存然后把执行权交出去。这个程序就是引导加载器grub 是其中最常见的一种。grub 在这段真空期要完成几件事识别可用的存储设备和分区、读取自己的配置文件、根据配置决定加载哪个内核、给内核传参数、最后跳转到内核入口。别看它只是个搬运工但它掌握着机器启动方向的最终决定权。谁能命令 grub 换一个内核启动谁就掌握了这台机器的维护主动权。这也解释了一个现象为什么进不去系统的时候老手第一反应往往是能不能进 grub。因为只要 grub 的命令行还在就意味着你还有机会手动指定从哪启动、加载哪份配置而不是对着黑屏束手无策。grub shell 的价值就体现在这里。2.2 引导加载器凭一份配置文件干活grub 本身不认识哪个系统是好的它完全依赖配置文件里的指令。配置文件通常放在引导分区里内容大致包括默认启动项、超时时间、每个启动项对应的内核路径和参数、以及一些环境变量。关键在于这份配置文件是可以被接力的。grub 在执行过程中可以用一条指令去加载另一份配置文件把控制权转移过去。这份被加载的配置可能位于同一个分区也可能位于另一个分区。当系统为了维护方便把日常启动和维护菜单拆成两份配置、放在两个位置时就自然形成了一层引导加载一层的结构。标题里说的两层 grub menu本质上就是这种配置文件接力的结果。理解这一点很重要所谓进入二层菜单绝大多数情况下不是去破解什么密码而是用命令手动把那份平时不加载的配置文件加载起来而已。方法本身并不高深难点在于知道它在哪、怎么定位它。2.3 网络引导和本地引导的分工在云课堂环境里引导来源主要有两种。本地引导靠终端自己的 flash速度快、对网络依赖小网络引导靠服务器的引导服务好处是镜像统一、更新方便坏处是并发时对网络和服务端压力大。实际部署中两者常常是配合的正常上课走本地引导快速开机当本地系统需要重建时通过网络引导拉取干净镜像重刷。这种配合意味着终端的引导流程里可能既涉及本地引导加载器的配置也涉及网络引导的入口。对于维护人员来说需要清楚当前这台机器应该走哪条路。如果一台机器本该本地引导却反复尝试网络引导那可能是引导顺序被改了或者本地引导分区出了问题。而定位这类问题几乎都要先进到引导加载器的层面去看它到底加载了什么。3. 两层 grub menu 的分工维护入口为什么被藏起来3.1 第一层引导负责的事情第一层引导通常位于引导分区是开机后最先被固件交给控制权的那个引导程序。它的默认行为很安分按内置配置直接加载系统内核尽量不打扰用户。这一层的配置往往追求极简和稳定因为它一旦出问题机器连本地系统都进不去。这一层通常还会做一些环境准备比如设置根设备、加载必要模块、传递基本启动参数。做完这些之后它要么直接启动系统要么把控制权交给第二层配置。平时用户完全感知不到这一层的存在只有开机时守在屏幕前按对按键才能在这一层停留下来操作。需要注意第一层是否能被中断取决于固件和引导程序的设置。有的机器在这一层按特定功能键就能进命令行有的则需要在固件设置里开启相关选项。这也是为什么同样的操作方法在不同批次设备上表现可能不一样。3.2 第二层菜单里通常放着什么第二层配置一般由维护人员使用菜单内容通常是面向修复和重建的典型项包括正常启动进入本地系统走日常上课流程。系统还原从备份分区恢复干净镜像。网络重装从服务器拉取镜像重新部署。硬件自检或参数设置检查设备状态、调整参数。退出并返回上一层把控制权交回一层引导。可以看出第二层才是真正给维护人员用的操作台。它被藏起来的原因也很简单日常上课不需要学生看到这些选项误点一个系统还原可能就把一台机器刷了影响下一节课。所以设计上让第二层默认不显示需要时再手动拉出来是合理的取舍。3.3 把这个入口藏起来带来的副作用入口藏起来有好处也有代价。代价就是当真正需要用它的人不熟悉这台设备的维护方式时会误以为根本没有这个功能。我就见过管理员把一台本可以一键还原的机器直接抱去返修只因为不知道二层菜单怎么进。另外不同的部署批次、不同的镜像版本二层配置的路径和文件名可能不同。这就意味着不能死记一个固定路径而要学会用命令自己去找。下一节会讲怎么用命令行去定位。掌握了找的方法比记住某台机器的具体路径有用得多。4. 进 grub shell 的实操从自动引导中把控制权抢回来4.1 时机问题什么时候按才有效想进 grub 命令行核心是在引导程序运行、但还没把控制权交出去之前把它叫停。这个窗口很短通常在开机后几秒内。做法一般是在开机时连续敲击能唤醒菜单或命令行的按键常见的是c键进命令行、e键编辑当前项也有设备用Esc或功能键。这里有个非常实际的坑太早按没用因为固件还没把控制权交给引导程序太晚按也没用因为已经进系统了。稳妥的做法是从开机开始就匀速连按别猛按也别停。如果型号未知可以先把c、e、Esc都试一试看哪个能停在引导界面。还有一个细节有些设备默认超时时间被设成了 0也就是说它根本不显示菜单、直接启动。这种情况下靠等菜单出现是等不到的必须靠连按按键去打断默认流程或者先在固件里把引导相关设置调出来看看有没有残留的入口。4.2 键盘和显示这一关先得过进命令行之前有一个容易被忽视的前提键盘和显示要正常工作。云终端大多只有一个显示输出键盘走 USB。如果用的是 USB 转接、KVM 切换器或者键盘本身有兼容问题可能出现按了没反应的假象让人误以为进不去。排查建议是直接用最普通的 USB 键盘插在机身前置口别经过任何转接设备。显示方面确认显示器信号源选对了。如果设备同时有多个输出口要确认当前输出了画面的是哪个口。这一步看起来简单但我见过至少两次进不去命令行其实只是键盘插在了失效的口上。提示部分设备在固件层面可以设置是否允许中断引导或者设置引导超时。如果反复试都进不去值得进固件设置看一眼而不是死磕按键。4.3 进了命令行之后先别急着敲命令真正进入 grub shell 后屏幕上会出现一个类似grub的提示符。很多人一进来就慌想赶紧敲点什么结果敲错了反而更乱。我的习惯是先做两件不改变任何状态的事一是看清楚提示符所在的设备和路径二是用只读命令把环境摸一遍。只读命令里最有用的就是列设备、列分区、看分区内容。这些操作不会写盘、不会改配置纯属看看清楚之后再动手。命令行状态下上一条命令的结果会打印在屏幕上你可以据此判断下一步该往哪走。记住一个原则在这个环境里任何带写字的操作都要谨慎我们绝大多数时候只是在读和选择从哪里加载不需要改任何东西。保持只读风险就很低。5. 手动拉起二层菜单命令逐条拆解5.1 先用 ls 把设备和分区摸清楚进入命令行后第一条命令基本固定就是列出设备grub ls输出里会看到类似(hd0)、(hd0,msdos1)、(hd0,msdos2)这样的条目。hd0代表第一块磁盘后面的msdos1、msdos2等代表这块盘上的不同分区。有的设备是整块 flash有的则是分区的形式呈现看到几个分区很正常。接下来逐个看分区里有什么grub ls (hd0,msdos1)/这一步的目的是找出哪个分区里有引导相关的目录或文件。你会看到该分区根目录下的内容如果里面有引导目录或者明显的配置文件名就说明找对地方了。逐个分区试下来通常几分钟就能锁定目标分区。这里有个经验分区编号不一定是按逻辑顺序排的也就是说不一定第一个分区就是引导分区。必须一个一个看过去别想当然。我有一次直接假设引导在第一个分区结果折腾半天其实它在第三个。5.2 用 search 命令让机器自己找如果不太确定配置文件在哪可以用 search 命令让引导程序自己搜索比手动遍历分区省事grub search --no-floppy --file --setroot /boot/grub2/grub.cfg这条命令的含义是在所有磁盘里找路径为/boot/grub2/grub.cfg的文件找到后把它所在的分区设置为根设备也就是设置成root。--no-floppy是跳过软驱纯属加快速度现在基本可以忽略。执行成功后根设备就自动指向了正确的分区省去了手动判断的麻烦。不同系统的引导配置文件路径可能不同常见的有/boot/grub/grub.cfg、/boot/grub2/grub.cfg、/EFI/BOOT/grub.cfg等。如果一条 search 没找到换一个路径再试。这也说明了一个问题死记某一个路径不如理解要找的是配置文件这件事本身。5.3 用 configfile 把二层配置加载起来定位到配置文件之后加载它只需要一条命令grub configfile (hd0,msdos1)/boot/grub2/grub.cfg如果前面用 search 已经设置了根设备也可以直接写相对路径grub configfile /boot/grub2/grub.cfgconfigfile的作用是读取并执行指定的配置文件执行的结果就是让第二层菜单显示出来。如果这个文件正是一层引导平时不加载的那份维护配置那么菜单一出现你就成功进入了所谓的二层 grub menu。到了这里接下来的事就顺理成章了用方向键在菜单里选回车执行。常见的选项就是前面说的还原、重装、正常启动等等。整个过程没有改任何东西只是让引导程序换了一份配置来读而已。5.4 加载失败时怎么体面地退回去如果configfile执行后报错别慌。常见原因无非几种路径拼错了、分区号选错了、那份文件其实不在这台机器上。处理方式也很直接重新ls一遍确认路径再试一次。如果怎么试都加载不了最稳妥的退路是直接重启回到默认流程。因为你在命令行里做的所有操作都只存在于内存中没有写盘重启就清零了不会对机器造成任何持久影响。这一点可以让人放心大胆地试——只要不主动执行写盘操作乱敲命令的代价顶多是重启一次。真正需要注意的是别去执行那些明显的写盘操作。命令行的输入是会被记住的屏幕上也能看到自己敲了什么动手前多看两眼提示符和路径基本就不会出事。6. 实测踩过的坑与常见故障对照6.1 分区号认错导致反复失败这是最高频的坑。看到(hd0,msdos1)没内容就跳到(hd0,msdos2)结果正确的那份配置其实在(hd0,msdos1)的某个子目录里被自己一眼略过了。解决办法是别只看根目录往里多走一层。下面这张表是我整理出来的排查思路现象可能原因处理方向分区根目录看不到引导文件引导文件在子目录逐层进入子目录查找search 找不到配置文件路径写错或版本不同换常见路径重试configfile 报文件不存在分区号或路径错重新 ls 定位按 c 没反应时机不对或键盘问题换键盘、调整按键时机菜单出来但选项都失败镜像或分区损坏走还原或网络重装流程这张表基本覆盖了我遇到的绝大多数情况。核心思路是先确认能看到文件再谈加载跳过确认直接加载出错率很高。6.2 键盘布局和输入法带来的迷惑命令行里输入符号时键盘布局会影响结果。比如斜杠、下划线、括号这些符号在某些布局下位置和标准布局不一样。如果发现自己敲出来的字符跟屏幕上显示的不一致先别怀疑命令写错了检查一下键盘布局。USB 键盘本身也有兼容性差异。老式键盘、带额外功能键的键盘、经过 KVM 的键盘在引导阶段可能无法被正确识别。备一把最普通的键盘能省掉很多无谓的折腾。这一点在机房环境下尤其重要因为机房里可能只有一把公用键盘出问题时手边能用的设备很有限。6.3 不同批次设备的行为差异同一品牌的设备不同批次、不同镜像版本引导行为可能不一样。有的默认显示菜单有的默认隐藏有的按c进命令行有的用别的键配置文件的路径也可能不同。我的建议是不要迷信标准操作每接触一批新设备先用一台做试验把它的引导行为摸清楚再批量操作。这种先打样再推广的习惯能避免一次性改错几十台机器的尴尬。尤其涉及引导这类底层操作宁可慢一点也别一次性冒险。6.4 批量处理时的效率问题一个机房几十台机器如果每台都手动进命令行、手动加载效率很低。实际维护中能批量就批量如果只是要重启进入默认流程直接统一下电重启即可不需要每台都去操作引导命令行。真正需要逐台进命令行的场景通常是排查个别故障机。所以我的做法是日常批量重启用统一控制手段个体故障才动用手动引导。把手动引导当作手术刀而不是日常工具用在刀刃上。7. 这套操作真正派上用场的几类维护场景7.1 系统被学生改乱之后的还原学生机最大的特点是使用行为不可控桌面被改乱、软件被误删、设置被改错都很常见。这时候二层菜单里的还原选项就是救星进去选还原机器从备份分区恢复干净系统几分钟搞定。关键是维护人员得先知道怎么进这个菜单否则就只能干看着。我见过的最有效率的做法是把进二层菜单的操作步骤打印出来贴在机房墙上让值班人员照着做。这个方法听起来土但非常管用比临时查资料快得多。7.2 本地系统起不来时的应急处理当本地系统损坏、正常引导进不去时引导命令行就是最后一根救命稻草。你可以用它去检查文件是否还在、尝试加载另一份配置、或者直接走网络重装流程。这种时候之前练过的手感就体现出价值了——临时翻文档和平时练熟操作速度差很多。我个人的习惯是新到一批设备先花十几分钟把进命令行、看分区、加载配置这套流程走一遍记一下这台机器上配置文件的路径。这样真出故障的时候不用现场摸索。7.3 教学环境切换前的验证有时候一个机房要切换不同的教学镜像比如换成另一门课需要的软件环境。切换前用引导命令行的方式先进去确认一下镜像和配置是否正确再批量铺开能避免一整节课学生都进不去系统的尴尬。这种先验证再铺开的流程是我踩过几次坑之后养成的习惯。7.4 硬件和固件层面的基础排查引导界面还能帮我们做一件容易被忽略的事确认硬件是否被识别。在命令行里列设备和分区本质上也是在验证存储、固件对设备的识别是否正常。如果连设备都列不出来那问题很可能不在系统而在硬件或固件层面方向一下子就清楚了。这一层验证的价值在于它帮我们把软件问题和硬件问题分开。很多时候一台机器起不来管理员会先怀疑系统但实际上如果引导阶段连存储都读不到那多半是硬件或者连接上的事没必要在软件层面瞎折腾。最后分享一个我个人一直在用的小技巧每次接触一批新设备我都会用手机拍一张它的引导界面和分区列表存进一个专门的相册。时间一长这批设备的脾气就都记下来了。等到再出故障翻出那张照片几乎不用现场重新摸索就能上手。这个习惯看着不起眼但在多批次、多型号混杂的机房里能省下大量时间。