资讯详情

资讯详情

Linux启动过程与systemd管理实战:GRUB配置和故障排查

1. 启动流程整体拆解从按下电源键到登录界面很多人学RH134第10章的时候第一反应是“不就是要记住systemctl那几个命令吗”。如果你也这么想那这门课基本白学了。控制启动过程的核心不是会敲几条命令而是能完整讲清楚操作系统的启动接力赛到底怎么跑的——每一棒是谁、怎么交接、交接失败时会卡在哪里。这一章要解决的问题很实际系统开不了机了怎么办某个服务没起来怎么看日志想临时进入单用户模式改配置怎么操作GRUB内核参数加错了怎么救回来。这些场景在考试里是填空题、选择题在真实生产环境里就是深更半夜的告警电话。说白了启动过程是Linux系统管理的“最后一道防线”你对这个流程理解得越深排障的时候就越不容易慌。适合谁看考RH134的人当然要仔细过一遍不过我建议所有做Linux运维、经常碰服务器的人哪怕不考证也把这一章的底层思路吃透。启动过程不涉及高深算法它就是一套严谨的接力流程了解了这套流程你会发现排障思路变得特别清晰。1.1 第一阶段固件自检与介质选择启动的第一步不是操作系统干的活而是硬件层面的。按下电源键之后主板的固件程序传统BIOS或者现代UEFI先做自检也就是POST。POST会检查CPU、内存、硬盘这些基础硬件是否正常这个阶段如果报错屏幕上会出现对应的硬件错误信息键盘灯、蜂鸣器这些都会有反应。自检通过之后固件按照启动顺序去查找可引导设备。实际工作中最常见的三种引导介质是本地硬盘、U盘和网络引导。固件发现可用介质之后会把控制权转交给介质上特定位置存储的引导加载程序。顺序上可以简单理解为先硬件自检再选引导源最后把控制棒交出去。这一段里有个容易忽略的细节UEFI模式和传统BIOS模式下安装系统时的分区方案是有讲究的比如UEFI需要独立的EFI分区存放引导文件如果你在实验环境里经常遇到“装完系统启动不起来”的问题先检查固件模式和磁盘分区表类型是否匹配。生活里有个很贴切的类比这段流程就像你早上出门上班。先检查手机、钥匙带了没有POST自检然后决定今天开哪辆车选择启动介质拉开车门坐进去才算把出发权真正交给路上的系统引导加载程序接手。1.2 第二阶段引导加载程序接管引导加载程序的任务是把内核从磁盘加载到内存并传递启动参数。在RH134所基于的发行版中主力引导加载程序是GRUB2。GRUB2的配置文件在启动时会先去读取自己那一堆模块和菜单定义默认菜单文件位于/boot/grub2/grub.cfg新版本统一使用/boot/efi/EFI/redhat/grub.cfg也可以取决于固件类型。你要记住一个关键点grub.cfg不是一个给人手动编辑的文件。它是由grub2-mkconfig命令根据/etc/default/grub和/etc/grub.d/目录下的脚本自动生成的。很多人第一次看grub.cfg觉得很复杂缩进、函数、菜单项嵌套在一大堆脚本里其实你完全不用理解每一行。你需要做的是修改/etc/default/grub这种“源头配置”然后重新生成grub.cfg。GRUB2阶段常出现问题的地方主要有三个一是/boot分区和根分区分离的情况下GRUB找不到内核文件二是内核更新后grub.cfg没有重新生成启动菜单里还是旧内核三是GRUB配置被改坏系统启动直接掉进grub应急提示符。第三个问题在考RH134时并不常考但真实运维里几乎人人都遇到过。1.3 第三阶段内核与initramfs配合GRUB选好菜单项之后会加载两样东西内核镜像vmlinuz和初始内存盘initramfs。initramfs这个文件的作用容易被新人忽略它其实是一个迷你的根文件系统里面装了内核启动早期阶段需要用到的驱动和工具——比如磁盘控制器驱动、LVM相关工具、加密解密模块等。为什么需要initramfs因为内核启动时根文件系统还没有挂载而“加载根文件系统”这件事本身又可能需要磁盘驱动。这就成了一个先有鸡还是先有蛋的问题。initramfs就是用来打破这个循环的先用内存里的迷你系统把必要的驱动加载好内核再去挂载真正的根文件系统。这个阶段如果initramfs损坏或者里面的驱动和硬件不匹配就会出现内核恐慌屏幕上一堆看不懂的寄存器状态和栈信息常见的提示是类似“Kernel panic - not syncing: VFS: Unable to mount root fs”。内核完成根文件系统挂载之后会启动第一个用户空间进程。在systemd系统里这个进程就是/sbin/init它其实是一个指向systemd的软链接。到这里内核阶段结束init拉起所有用户空间的系统服务启动流程进入了systemd的主场。1.4 快速查看当前启动耗时的技巧学习启动过程时有个非常实用的扩展技巧用systemd-analyze查看启动耗时分析。这个工具能告诉你整个启动过程花了多少秒哪个服务耗时最长哪些服务拖了后腿。# 查看总启动耗时 systemd-analyze # 查看每个服务分别耗时多少按启动顺序排列 systemd-analyze blame # 查看关键事件时间线 systemd-analyze critical-chaincritical-chain这个子命令特别适合排查“启动慢”的问题。比如你发现系统开机要等一分多钟跑一下systemd-analyze critical-chain往往能看到某个网络服务在等什么超时。真实环境里最常见的“罪魁祸首”就是网络挂载超时、某个服务等待DNS解析超时这类间接依赖问题。学会用这组命令你对启动过程的理解就不只是停留在考试层面了。2. systemd掌控启动过程的核心大脑RH134第10章花费大量篇幅讲systemd不是没有道理的。当前的Linux发行版里systemd已经全面取代了早期的SysVinit。它承担了系统初始化、服务管理、日志管理、定时任务触发、设备热插拔处理、套接字激活等一堆职责。很多人问systemd为啥那么重要用一个比喻你就懂了SysVinit时代系统启动就像流水线工人按固定顺序做一批零件顺序写死在脚本里效率一般灵活性差。systemd则更像一个智能调度中心它允许服务之间声明依赖关系并尽可能让相互独立的服务并行启动。电脑从原来的“一件一件来”变成“多条流水线同时跑”开机速度自然提升。更重要的是systemd提供了统一的接口来查看和管理这些服务——也就是systemctl命令族。2.1 Unit单元整个systemd的核心概念systemd的一切管理对象都叫单元Unit。你可以把Unit想象成一张“任务卡片”上面写着系统里某个东西该怎么启动、怎么停止、怎么定义依赖。Unit的类型有很多常考试的主要是这几种service后台服务、target启动目标下一节细说、socket套接字监听、timer定时器、mount挂载点、path路径监控。其中service是日常打交道最多的。启动过程说白了就是systemd根据当前目标target按依赖关系把一系列Unit激活的过程。每张“任务卡片”都有名字和后缀比如sshd.service、multi-user.target、tuned.timer。后边这个后缀非常重要它决定了systemd按什么类型去解析这个Unit。考试里会故意让你辨析sshd和sshd.service到底是不是同一个东西答案是很多命令在省略后缀时systemd会智能补全但写配置文件和精确引用时务必写全后缀。2.2 单元文件到底放在哪里Unit定义文件有三个存放位置优先级从高到低分别是目录作用优先级/etc/systemd/system/管理员自定义或覆盖系统单元最高/run/systemd/system/运行时生成的临时单元中等/usr/lib/systemd/system/软件包安装的默认单元最低这个层级关系特别重要。比如某个服务软件包自带的unit文件在/usr/lib/systemd/system/下你在/etc/systemd/system/下放一个同名文件就相当于覆盖了默认配置。这样既保留了原始文件不动又实现了自定义参数。真实运维中用systemctl edit命令或者手动在/etc下创建覆盖文件是常见的做法。有个细节值得注意/run目录下的unit文件是临时的重启就没了一般由系统服务在运行时动态生成。需要持久生效的改动一律放/etc下否则重启后白折腾。2.3 Wants与Requires依赖规则Unit文件里描述依赖关系的指令主要有四个Requires、Wants、After和Before。这四个指令之间的关系是RH134的重点也是很多人死记硬背都记不牢的知识点。简单概括Requires表示硬依赖。A单元Requires B单元那么启动A必须先启动B如果B启动失败A也不会启动。Wants表示软依赖。A单元Wants B单元系统会尝试启动B但如果B失败了A照样启动。After和Before不决定“是否启动”只决定“启动顺序”。A单元After B单元意思是A必须在B之后启动但不代表B需要被A拉起。这四者结合使用才是完整的依赖描述。最常见、最合适的组合是RequiresAfter或者WantsAfter。单独写After而不写Wants/Requires系统不会主动拉起依赖服务只是排列顺序而已。2.4 写一个最小可用的服务单元文件只看不练容易忘。我建议你在虚拟机上手工写一个最简服务单元文件体验一下整体流程。比如我们写一个每秒记录当前时间的后台小服务# 先创建脚本 cat /usr/local/bin/clock-log.sh EOF #!/bin/bash while true; do echo $(date) /var/log/clock.log sleep 1 done EOF chmod x /usr/local/bin/clock-log.sh接着创建单元文件# /etc/systemd/system/clock.service [Unit] DescriptionClock logger service [Service] Typesimple ExecStart/usr/local/bin/clock-log.sh [Install] WantedBymulti-user.target执行systemctl daemon-reload重新加载配置然后systemctl start clock再systemctl enable clock。这时候你就完成了一个自定义服务的“生产、加载、启动、开机自启”全流程。把Typesimple换成Typeoneshot、forking观察启动行为的不同体会会更深刻。这个练习花不了10分钟但对理解Unit文件结构和systemd工作方式非常值。3. systemctl实战服务管理的常用招式systemctl是这一章必须熟练掌握的命令。我挑几个考试和工作中都高频出现的点详细展开重点不只是命令怎么敲而是每个命令背后解决的是什么问题。3.1 日常运维中最常用的9个命令systemctl start name.service # 立即启动服务 systemctl stop name.service # 立即停止服务 systemctl restart name.service # 重启服务先停后启 systemctl reload name.service # 重新加载配置不中断服务 systemctl status name.service # 查看服务当前状态 systemctl enable name.service # 设置开机自启 systemctl disable name.service # 取消开机自启 systemctl mask name.service # 彻底禁用服务无法手动启动 systemctl unmask name.service # 取消mask这些命令中有两个进阶理解点。第一个是reload和restart的区别reload只重新读取配置文件进程不退出连接不会中断restart则完全停止旧进程再启动新进程。对于像Nginx这种支持平滑重载的服务改完配置应该优先用reload而不是restart避免服务中断。第二个是enable和start的区别下面单独展开。3.2 start和enable的区别start和enable是新人最容易混淆的命令。区分方法很简单start管的是“当前这次开机”enable管的是“下一次开机”。start命令调用单元文件里的ExecStart立即拉起服务进程enable命令则负责在相应target的Wants目录下创建符号链接从而让系统下次开机时自动拉起这个服务。所以日常操作里一个服务做了enable没做start它当前不会运行做了start没做enable当前能跑但重启后就没了。想让服务从立即运行到永久自启都搞定两个命令都要执行。这也是很多自建服务的坑手动启动看起来一切正常一重启系统服务就消失了多半是忘了enable。3.3 mask与disable的区别mask这个命令值得单独讲。disable只是取消开机自启服务本身仍然可以被手动systemctl start拉起。但mask在/etc/systemd/system目录下创建了一个指向/dev/null的符号链接相当于把单元文件“屏蔽”了系统再也找不到这个服务的定义。mask之后就算你手动start也会失败提示Unit is masked。mask适用于什么场景通常是某个服务确实不能在机器上以任何形式存在或运行或者软件包预装的单元文件和你想要的行为冲突。比如你装了A软件但它自带的B服务总会拉起来你想彻底压住B那就mask B。解除屏蔽就用unmask。3.4 学会看服务状态输出systemctl status的输出信息量很大学会解读比死记命令更重要。以sshd为例systemctl status sshd输出里一般包含单元文件路径、加载状态、是否设置了开机自启、当前进程状态Active/Inactive/Failed、主进程PID、最近日志、占用资源等。其中Active后面有一串更细致的描述active (running)表示正在运行active (exited)表示曾经运行但当前进程已退出常见于oneshot类型服务active (dead)表示已经停止failed表示启动失败。failed激活的服务一定会有红色高亮一眼就能看到。看到failed之后用systemctl status -l name.service查看详细日志或者直接journalctl -u name.service -b定位失败原因。排查失败服务的基本流程我放到后面第6章集中讲。还有一个高级技巧systemctl list-unit-files能列出所有单元文件和自启状态配合grep可以快速找出哪些服务开了开机自启systemctl list-unit-files | grep enabled考试里经常出这类“找出所有开机自启服务”的题这条命令比逐个status快得多。4. GRUB2配置与内核参数修改控制启动过程的手段里修改GRUB2配置和内核参数是技术含量最高、也最危险的部分。稍有不慎系统就起不来了。这一节我们分开讲配置文件怎么改、改完怎么做、临时参数怎么传。4.1 /etc/default/grub配置文件关键项GRUB2的源头配置集中在/etc/default/grub。最常见的几个参数参数作用示例GRUB_TIMEOUT菜单等待秒数设为0则直接启动GRUB_TIMEOUT5GRUB_CMDLINE_LINUX传给内核的默认启动参数GRUB_CMDLINE_LINUXrhgb quietGRUB_DEFAULT默认启动哪个菜单项可用数字或菜单标题GRUB_DEFAULTsavedGRUB_DISABLE_RECOVERY是否生成恢复模式菜单true为禁用GRUB_DISABLE_RECOVERYtrueGRUB_TERMINAL_OUTPUT输出方式可能影响console重定向GRUB_TERMINAL_OUTPUTconsole重点说GRUB_CMDLINE_LINUX。rhgb表示图形化启动画面quiet表示隐藏内核滚动信息。这两个参数在桌面环境、实验环境很常见但在纯服务器生产环境很多人会去掉它们目的是启动失败时能看到更详细的内核日志。追加内核参数也在这个变量里做比如想临时禁止IPv6就加上ipv6.disable1。4.2 修改内核参数之后必须做的事修改/etc/default/grub之后必须重新生成grub.cfg否则改动不会生效。在RH134对应系统上命令是grub2-mkconfig -o /boot/grub2/grub.cfg如果是UEFI启动的系统则可能是grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg如何确认该写哪个路径检查/boot下有没有efi目录或者查看是否有/boot/efi挂载点。运行mount | grep efivars也能判断当前是否运行于UEFI模式。这一步是大量新手翻车的重灾区改完配置忘了重新生成重启后没有任何变化还以为自己改错了地方。顺便说一个贴心技巧重新生成grub.cfg之前建议先把原文件备份一份。虽然grub2-mkconfig一般不会把文件写坏但手滑写错路径、或者系统里同时存在多套配置时备份能让你有后悔药可吃。4.3 启动时临时编辑GRUB条目有时你只是想临时试一个内核参数不想永久写入grub.cfg。做法是在GRUB启动菜单界面按e进入编辑模式找到linux那一行在行尾追加参数然后按CtrlX或F10启动。比如你怀疑系统进不去图形界面是显卡驱动问题可以先临时去掉rhgb和quiet这样启动时就能看到详细输出。又比如你想临时以单用户模式进入系统追加systemd.unitrescue.target启动后直接掉进救援模式。这种临时修改只对本次引导有效重启后自动恢复原样。这种方式在排障时极其常用比反复修改配置文件、生成、重启要高效得多。4.4 常用内核参数解读有必要总结几个RH134考试常见的内核启动参数这些也是生产环境中会用到的rhgb图形化启动进度条quiet抑制大部分内核日志输出systemd.unitmulti-user.target指定启动到命令行多用户目标systemd.unitrescue.target指定启动到救援模式rd.break在initramfs阶段提前中断进入一个极早期的紧急shell常用于重置root密码enforcing0关闭SELinux强制模式临时selinux0彻底禁用SELinux临时maxcpus1限制CPU核数排查多核不稳定问题这几个参数里reset root密码是技能点我会在第6章给完整操作流程这里不展开。需要提醒的一点是SELinux相关参数在生产环境慎用临时关闭排查问题可以但长期关闭会被安全审计扣分在考试里也会被判定为错误配置。5. 启动目标target的理解与切换系统启动到不同环节该拉起哪些服务这个“答案集合”在systemd里就叫target。简单说target就是一组Unit的集合你可以把它理解成一家餐厅的“套餐”——一个套餐里包含哪些菜由配置文件决定。在RH134里target的设计取代了老SysVinit的runlevel概念。5.1 runlevel与target的对应关系老工程师都熟悉runlevel0关机、1单用户、3多用户命令行、5图形界面、6重启。systemd里的target和它们能对应上runleveltarget说明0poweroff.target关机1rescue.target救援模式2multi-user.target多用户无图形3multi-user.target多用户无图形4multi-user.target多用户无图形5graphical.target图形界面6reboot.target重启注意runlevel2/3/4在systemd里都映射到multi-user.targetrunlevel概念被大大简化了。multi-user.target和graphical.target之间的差别就看graphical.target的依赖里是否包含display-manager.service。考点一般是让你把传统runlevel和target对应关系连线、判断默认target。生产环境里更多场景是系统默认进图形界面但你希望开机直接进命令行模式以节约资源——直接改默认target就能实现。5.2 查看和修改默认target查看当前系统的默认启动目标systemctl get-default修改默认启动目标systemctl set-default multi-user.target执行set-default后systemd会在/etc/systemd/system目录下创建对应target的符号链接名字叫default.target。这套机制和enable创建Wants链接是同一套路理解了符号链接的运作就理解了systemd持久化配置的底层逻辑。临时切换target本次开机生效重启后仍按默认值systemctl isolate multi-user.targetisolate相当于“立即执行target切换”它会先停止当前target里的服务再拉起目标target的服务。从图形界面切到multi-user会直接退出桌面环境。这个命令在考试里经常出现注意和set-default区分一个当场生效一个指明方向。5.3 rescue.target与emergency.target的差别rescue.target和emergency.target都用于故障修复但层级不同。rescue.target是“单用户救援模式”挂载本地文件系统启动必要的系统服务提供最基本的shell环境。它等于传统意义上的单用户模式适合做系统配置修复。emergency.target则更极端只挂载根文件系统还是只读的不启动任何非必要服务。它适合在根文件系统损坏、必须手动fsck或重新挂载的场景使用。进入emergency之后你会发现什么服务都没有连网络都没有完全是一台“裸机”状态。在GRUB菜单里临时进入这两种模式的方式在linux那一行追加systemd.unitrescue.target或者systemd.unitemergency.target然后CtrlX自动启动。还有一种情况是系统启动失败自动掉进emergency报错信息通常会提示“Welcome to emergency mode”此时需要输入root密码进入shell排障。5.4 target切换的完整场景示例举个实际场景你的机器默认图形界面偶尔需要在机房维护时快速进入命令行。如果你开机时总是手动进multi-user.target太麻烦坚持用get-default改又影响日常使用。有一个两全其美的办法保留默认graphical.target但把display-manager服务mask掉这样开机不会进桌面同时调试其他服务时还能systemctl start display-manager临时手动拉起桌面。这个思路结合前面说的mask命令比改默认target灵活很多。还有一个常见运维需求某个服务只在特定的target下允许启动。在服务单元文件[Install]段中写WantedBygraphical.target这样只有系统进入graphical.target时该服务才被自动拉起。如果你希望服务仅在某一种启动模式下出现改这个字段即可。这样的设计让服务的“生存环境”由启动目标决定非常契合systemd的设计哲学。6. 启动故障排查与修复实操这一章的内容在实际排障里含金量最高。我把最常见的几个故障场景和完整修复流程写出来建议你在虚拟机里亲手破坏再修复至少一遍形成肌肉记忆。读文章只能懂思路不动手练很快就会忘。6.1 忘记root密码的两种修复思路忘记root密码是面试和考试中最经典的场景。在RH134体系里有两条主流的修复路径。第一种通过GRUB追加rd.break进入早期shell。步骤重启系统在GRUB菜单界面按e进入编辑模式。找到linux或linuxefi开头的那一行在末尾追加 rd.break。按CtrlX启动。系统会在initramfs阶段中断进入一个只读的shell。此时根文件系统还没有真正挂载它挂载在/sysroot目录下且是只读的。mount -o remount,rw /sysroot chroot /sysroot在chroot环境里执行passwd root修改密码。如果之前启用了SELinux还需要执行touch /.autorelabel让系统下次启动时自动重置文件安全上下文否则修改过的passwd文件可能因为安全上下文问题无法使用。退出chroot重启。exit reboot第二种通过systemd.unitrescue.target进入救援模式修改。在GRUB编辑界面追加systemd.unitrescue.target启动后会进入单用户模式直接passwd修改密码相对更简单直接。但有些系统在rescue模式下root文件系统也是只读挂载需要先重新挂载为读写mount -o remount,rw / passwd root reboot两条路都练一遍你对启动过程中根文件系统的挂载时机、SELinux的工作机制都会理解得更深。6.2 启动卡住时的日志排查方法系统启动卡死在某个环节屏幕可能停在一个黑屏或者某个服务启动日志上这种情况怎么定位首先如果你有耐心可以直接看屏幕卡住时最后输出的服务名。在行业里多数系统的启动界面默认隐藏了详细日志所以先追加systemd.log_leveldebug参数重启能拿到更多启动输出。但更可靠的方式是进入救援模式后查看日志# 进入rescue.target后 journalctl -b # 查看本次启动日志 journalctl -b -p err # 只看错误级别 journalctl -b -u 卡住的服务 # 只看某个服务本次启动的日志注意journalctl的-b参数表示“本次启动”不带-b则是查看持久化日志。如果某次启动完全失败没有进系统你还可以用journalctl --list-boots查看历史启动记录加-1、-2等参数访问前几次的日志。这套逻辑在生产环境排障非常常用。系统启动卡住还可能和systemd任务排队有关交互式排障时可以用systemctl list-jobs查看当前待执行的任务。如果有某个job一直卡在running或者waiting基本能锁定问题源头。此时再配合systemctl status 服务看具体状态顺着依赖链往下挖原因。6.3 排查失败服务的标准流程服务启动失败是高频故障。我给你一个标准排查流程按顺序做能大幅缩短定位时间systemctl status 服务看失败状态和最近日志。journalctl -u 服务 -b -n 50翻出最近50行日志重点看最后几行报错。手动前台启动服务直接执行服务对应的可执行文件观察输出。很多服务支持前台运行模式比如sshd -d调试模式这样能看到更直观的错误。检查配置文件的语法错误比如Nginx用nginx -tBIND用named-checkconf。查看系统安全组件是否拦截在相关发行版上检查SELinux的avc日志。确认依赖服务是否正常。用systemctl list-dependencies查看依赖链上游服务挂了往往会导致下游启动失败。这套流程里最容易出问题的是第3步——很多人不知道有些服务可以在前台手动运行来调试。我举个例子手动运行一个服务脚本时报“Permission denied”而服务文件本身权限正常这通常不是文件权限而是SELinux上下文被破坏。此时执行restorecon -Rv /etc/配置目录重建上下文即可。6.4 被忽略了很久的启动安全底线最后聊一个容易被忽略的事任何修复操作都有风险虚拟机/实验环境随便折腾无所谓但生产环境操作前必须考虑备份和回滚方案。修改GRUB配置前备份grub.cfg修改内核参数前记录原参数修改root密码前确认有没有其他管理入口。这台机器如果还承担着业务流量该走的变更审批流程一样都省不了。还有一点修复启动问题的时候务必全程记录操作步骤。系统能救回来当然好万一救不回来你至少能告诉后来的人自己做了什么避免二次破坏。这个习惯平时就要养成紧急时刻会救你命。7. 常见问题与启动故障速查表把这一章的常见问题整理成一个速查表方便你考试前和实际排障时快速定位。故障现象可能原因处理思路启动后直接进grub提示符GRUB配置文件缺失或损坏手动指定内核启动或重装GRUB引导启动卡在“Reached target ...”之后黑屏显卡驱动或图形相关服务问题临时去掉rhgb quiet参数观察详细日志系统提示“Welcome to emergency mode”文件系统挂载失败或fstab错误输入root密码查看journalctl排查挂载问题服务启动失败status显示failed配置错误、依赖缺失、SELinux拦截按6.3节标准流程逐层排查修改了GRUB配置但重启不生效忘记执行grub2-mkconfig确认固件模式重新生成grub.cfg重启后自定义服务丢失enable和start只执行了其一检查服务是否为enabled状态系统启动特别慢网络超时、服务依赖等待、磁盘问题systemd-analyze critical-chain定位耗时点开机默认进入图形界面但想改命令行默认target是graphical.targetsystemctl set-default multi-user.target7.1 我的几条实操心得文章最后分享几条我用血泪教训换来的经验希望能帮你少走弯路。第一虚拟机上一定要做破坏性练习。把grub.cfg改坏、把内核参数写错、把服务依赖改乱然后尝试修复。每破坏一次你对启动过程的敬畏和理解就加深一层。我认识的运维老手几乎都有这种折腾经验。第二阅读日志时要学会抓重点。服务报错日志可能有一大堆真正有用的往往是最后几行或者第一个报错。不要在海量日志里迷失方向先看第一条ERR/FAIL很多时候后续报错都是连锁反应。第三环境里如果有SELinux这套安全机制排障时不要想当然。服务启动失败有时候并不是脚本错误而是安全上下文或布尔值设置不对。在相关发行版上看/var/log/messages里的avc提示或者用ausearch -m avc最近记录都会比盲改配置高效得多。第四启动问题修复之后记得把经验记下来。我习惯在笔记本上记录每次故障的现象、原因、修复命令、耗时时间长了这就是一本私人排障手册。考试复习时翻一翻比临时翻书有用无数倍。RH134第10章控制启动过程知识点说起来也就这些启动流程、systemd、systemctl、GRUB、target、故障修复。真正吃透它靠的是反复的动手练习和对日志语感的培养。希望这篇总结能帮你在备考路上省一点时间在真实排障时多一分底气。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →