安岽旭 發表於 2026-5-5 09:02:26

deepin 25 用户常见问题解答 ── 系统启动失败篇

<p><img class="alignnone size-full wp-image-36669" src="https://www.deepin.org/wp-content/uploads/2025/05/技术-分享-1_副本.png" alt="" width="900" height="381" srcset="https://www.deepin.org/wp-content/uploads/2025/05/技术-分享-1_副本.png 900w, https://www.deepin.org/wp-content/uploads/2025/05/技术-分享-1_副本-300x127.png 300w, https://www.deepin.org/wp-content/uploads/2025/05/技术-分享-1_副本-150x64.png 150w, https://www.deepin.org/wp-content/uploads/2025/05/技术-分享-1_副本-768x325.png 768w, https://www.deepin.org/wp-content/uploads/2025/05/技术-分享-1_副本-24x10.png 24w, https://www.deepin.org/wp-content/uploads/2025/05/技术-分享-1_副本-36x15.png 36w, https://www.deepin.org/wp-content/uploads/2025/05/技术-分享-1_副本-48x20.png 48w" sizes="(max-width: 900px) 100vw, 900px" /></p>
<p data-pm-slice="0 0 []">近日,不少社区用户反馈在系统升级后遇到系统无法启动的问题。为帮助大家快速定位和解决问题,同时加深对 Linux 系统的理解,我们整理归纳了此类问题的成因与分析步骤</p>
<p data-pm-slice="0 0 []">特别感谢社区用户 @朕赐你炸鸡 的投稿支持!本文将以 deepin 25 Alpha 系统为例,为大家讲解 Linux 无法启动问题的排查思路,随着后续磐石系统的更新,部分步骤可能会随之变化(如 initrd 中对于 ostree 参数的处理,需要对 initrd 的相关脚本有一定的了解)。</p>
<p data-pm-slice="0 0 []">注:以下方法同样适用于其他 Linux 发行版,细节可能会有不同。<span data-pm-slice="2 4 [&quot;para&quot;,{&quot;tagName&quot;:&quot;p&quot;,&quot;attributes&quot;:{&quot;data-pm-slice&quot;:&quot;0 0 []&quot;,&quot;style&quot;:&quot;-webkit-tap-highlight-color: transparent;margin: 0px 0px 16px;padding: 0px;outline: 0px;max-width: 100%;clear: both;min-height: 1em;color: rgba(0, 0, 0, 0.9);font-family: \&quot;PingFang SC\&quot;, system-ui, -apple-system, BlinkMacSystemFont, \&quot;Helvetica Neue\&quot;, \&quot;Hiragino Sans GB\&quot;, \&quot;Microsoft YaHei UI\&quot;, \&quot;Microsoft YaHei\&quot;, Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;background-color: rgb(255, 255, 255);visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;&quot;},&quot;namespaceURI&quot;:&quot;http://www.w3.org/1999/xhtml&quot;}]">欢迎大家<strong data-pm-slice="0 0 []">在 deepin 论坛或评论中沟通交流类似问题的分析过程和解决方案。</strong></span></p>
<p>&nbsp;</p>
<h2 data-pm-slice="0 0 []"><strong>现象一:启动时出现 "grub&gt;" 命令行,无法进入系统要如何处理?</strong></h2>
<p><span data-pm-slice="0 0 []">如果引导文件(如 </span><code>/boot/grub/grub.cfg</code>文件)被损坏或删除,系统将无法正常启动。启动系统时可能出现下图中的场景:</p>
<p><img loading="lazy" class="alignnone size-full wp-image-36672" src="https://www.deepin.org/wp-content/uploads/2025/05/202504180214309682_0_副本.png" alt="" width="1006" height="305" srcset="https://www.deepin.org/wp-content/uploads/2025/05/202504180214309682_0_副本.png 1006w, https://www.deepin.org/wp-content/uploads/2025/05/202504180214309682_0_副本-300x91.png 300w, https://www.deepin.org/wp-content/uploads/2025/05/202504180214309682_0_副本-150x45.png 150w, https://www.deepin.org/wp-content/uploads/2025/05/202504180214309682_0_副本-768x233.png 768w, https://www.deepin.org/wp-content/uploads/2025/05/202504180214309682_0_副本-24x7.png 24w, https://www.deepin.org/wp-content/uploads/2025/05/202504180214309682_0_副本-36x11.png 36w, https://www.deepin.org/wp-content/uploads/2025/05/202504180214309682_0_副本-48x15.png 48w" sizes="(max-width: 1006px) 100vw, 1006px" /></p>
<p>针对这一场景,可以按照如下步骤解决:</p>
<p>在 GRUB 的终端交互界面中,使用 ls 命令查看当前块设备信息,并找到用户存放 boot 数据的分区位置(由于内核和 initrd 均位于 boot 目录下,后续步骤中需要用到该分区信息)。</p>
<p><img loading="lazy" class="alignnone size-full wp-image-36670" src="https://www.deepin.org/wp-content/uploads/2025/05/84f04f6d-b737-4df5-8eed-33a81c55f9b3.png" alt="" width="1024" height="638" srcset="https://www.deepin.org/wp-content/uploads/2025/05/84f04f6d-b737-4df5-8eed-33a81c55f9b3.png 1024w, https://www.deepin.org/wp-content/uploads/2025/05/84f04f6d-b737-4df5-8eed-33a81c55f9b3-300x187.png 300w, https://www.deepin.org/wp-content/uploads/2025/05/84f04f6d-b737-4df5-8eed-33a81c55f9b3-150x93.png 150w, https://www.deepin.org/wp-content/uploads/2025/05/84f04f6d-b737-4df5-8eed-33a81c55f9b3-768x479.png 768w, https://www.deepin.org/wp-content/uploads/2025/05/84f04f6d-b737-4df5-8eed-33a81c55f9b3-24x15.png 24w, https://www.deepin.org/wp-content/uploads/2025/05/84f04f6d-b737-4df5-8eed-33a81c55f9b3-36x22.png 36w, https://www.deepin.org/wp-content/uploads/2025/05/84f04f6d-b737-4df5-8eed-33a81c55f9b3-48x30.png 48w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<p>例如,若 boot 数据位于 (hd0,gpt3),则通过输入 set root=(hd0,gpt3) 命令来指定该设备。</p>
<p><span data-pm-slice="0 0 []">接下来,需要获取一份与当前系统版本相同的 </span><code>grub.cfg </code>配置文件,并参考其内容,依次执行其中的 GRUB 命令。通常情况下,这些命令主要包括加载内核和 <code>initrd</code>。</p>
<p>以下是其他机器的 <code>/boot/grub/grub.cfg</code>文件内容,供参考:</p>
<p><img src="https://storage.deepin.org/thread/202504180215231940_0.4.png" alt="0.4.png" /></p>
<p>这里需要重点关注 Linux 和 initrd 这两行内容。Linux 命令用于指定引导的内核及其参数,不同机器的内核参数会有所不同。其中,root 和 ostree 参数尤为重要(这里针对的是磐石镜像,其他发行版一般只需指定 root 参数即可)。</p>
<p><span data-pm-slice="0 0 []">在磐石镜像中,</span><code>ostree</code>参数指向系统部署的一个特定目录,通常位于 <code>/persistent/ostree/data//checkout</code>。你可以先通过 <code>ls </code>命令查看当前系统中实际的目录路径。</p>
<p><img loading="lazy" class="alignnone size-full wp-image-36671" src="https://www.deepin.org/wp-content/uploads/2025/05/0ba0f2f8-a5c9-432e-a02d-9f2b0d11bc55.png" alt="" width="1037" height="725" srcset="https://www.deepin.org/wp-content/uploads/2025/05/0ba0f2f8-a5c9-432e-a02d-9f2b0d11bc55.png 1037w, https://www.deepin.org/wp-content/uploads/2025/05/0ba0f2f8-a5c9-432e-a02d-9f2b0d11bc55-300x210.png 300w, https://www.deepin.org/wp-content/uploads/2025/05/0ba0f2f8-a5c9-432e-a02d-9f2b0d11bc55-1024x716.png 1024w, https://www.deepin.org/wp-content/uploads/2025/05/0ba0f2f8-a5c9-432e-a02d-9f2b0d11bc55-150x105.png 150w, https://www.deepin.org/wp-content/uploads/2025/05/0ba0f2f8-a5c9-432e-a02d-9f2b0d11bc55-768x537.png 768w, https://www.deepin.org/wp-content/uploads/2025/05/0ba0f2f8-a5c9-432e-a02d-9f2b0d11bc55-24x17.png 24w, https://www.deepin.org/wp-content/uploads/2025/05/0ba0f2f8-a5c9-432e-a02d-9f2b0d11bc55-36x25.png 36w, https://www.deepin.org/wp-content/uploads/2025/05/0ba0f2f8-a5c9-432e-a02d-9f2b0d11bc55-48x34.png 48w" sizes="(max-width: 1037px) 100vw, 1037px" /></p>
<p><span data-pm-slice="0 0 []">接下来,根据示例 </span><code>grub.cfg</code>的内容,使用L<code>inux </code>命令指定 <code>root=/dev/sda3</code>和 <code>ostree=...</code>,注意在 <code>ostree</code>参数中需去掉实际目录前的 <code>/persistent</code>路径前缀。然后,通过 <code>initrd</code>命令加载实际的 <code>initrd</code>文件。完成后,使用 <code>boot </code>命令开始加载当前设置的引导信息。</p>
<p><img src="https://storage.deepin.org/thread/2025041802154373_0.5.png" alt="0.5.png" /></p>
<p>如果输入无误,此时即可进入系统。但当前系统的 /boot/grub/grub.cfg 仍处于损坏状态。</p>
<p>进入系统后,你可以通过运行 grub-mkconfig -o /boot/grub/grub.cfg 或 update-grub 命令来重建引导信息。之后,系统再次启动时,便无需再手动执行上述命令了。</p>
<p><img src="https://storage.deepin.org/thread/202504180216195181_0.6.png" alt="0.6.png" /></p>
<p>至此,引导修复结束。</p>
<p>&nbsp;</p>
<h2><strong>现象二:在 grub 引导项点击确认后,系统一直处于光标闪动的状态,如何处理?</strong></h2>
<p>现象示例如下图所示:</p>
<p><img src="https://storage.deepin.org/thread/202504180216417577_1.png" alt="1.png" /></p>
<p data-pm-slice="0 0 []">以上情况能是由于 <code>/boot</code> 目录下的 <code>initrd</code> 文件未被正确找到或加载导致的。</p>
<p data-pm-slice="0 0 []">首先应检查 GRUB 引导参数中 <code>initrd</code> 相关配置是否存在错误。在 GRUB 菜单中,按 <code>e</code> 键进入引导参数编辑页面,仔细查看以 <code>initrd</code> 开头的那一行内容,确认其路径和文件名是否准确无误。<code>initrd</code> 是一个临时的根文件系统,内核在启动后会将其挂载,它在内核启动的早期阶段提供必要的驱动程序和工具,以便内核能够顺利访问实际的根文件系统。</p>
<p>针对此类问题,可以在 GRUB 参数编辑页面中,在以 L<code>inux</code> 开头的那一行末尾添加 <code>"debug"</code> 参数。若内核因找不到 <code>initrd</code> 而触发 panic,其报错内容大致如下:</p>
<p><img src="https://storage.deepin.org/thread/202504180216478983_2.png" alt="2.png" /></p>
<p>上图可以明显看到rootfs 无法挂载,这种情况,只需分析为何找不到 initrd 的原因即可。</p>
<p>&nbsp;</p>
<h2><strong>现象三:</strong><strong>系统启动后卡在LOGO界面无日志输出,</strong><strong>如何获取详细信息?</strong></h2>
<p>若系统启动后卡在某个服务上,屏幕上只显示系统 Logo 闪烁,而看不到相关日志。这种情况下,可以删除 GRUB 参数中的 <code>quiet splash</code>,以便查看详细的启动日志。</p>
<p><img src="https://storage.deepin.org/thread/202504180216569820_3.png" alt="3.png" /></p>
<p>如果希望进一步查看内核日志,可以将 <code>loglevel</code> 参数的值设置为最高级别(7,0 是最低级别)。在 GRUB 菜单中,按 <code>e</code> 键进入引导参数编辑页面,然后在 L<code>inux</code> 开头的行中添加 <code>loglevel=7</code> 参数,最后按 <code>F10</code> 键加载引导信息,即可看到更详细的日志信息。</p>
<p><img src="https://storage.deepin.org/thread/202504180217033992_4.png" alt="4.png" /></p>
<p>&nbsp;</p>
<h2><strong>现象四:</strong><strong>系统启动后进入紧急模式,要如何调试?</strong></h2>
<p><img src="https://storage.deepin.org/thread/202504180217121892_4.1.png" alt="4.1.png" /></p>
<section>若系统启动后进入了紧急模式,可以先<span data-pm-slice="0 0 []">按下 Ctrl + Alt + Del 组合键重启系统。</span></section>
<section><span data-pm-slice="0 0 []">随后在 </span><code>GRUB</code> 引导菜单页面中,选择当前的引导项,然后按下 <code>e</code> 键进入 <code>GRUB</code> 编辑模式。在以 <code>linux</code> 开头的行的末尾,添加 <code>init=/bin/bash</code> 参数。</section>
<section><img src="https://storage.deepin.org/thread/202504180217179468_4.2.png" alt="4.2.png" /></section>
<section></section>
<section>接下来,按下 <code>F10</code> 键以加载引导程序,使系统启动后直接进入 <code>bash</code> 环境,而不是执行默认的 <code>/sbin/init</code> 进程。这样可以为我们后续的调试工作提供便利。</section>
<section><img src="https://storage.deepin.org/thread/202504180217244740_4.3.png" alt="4.3.png" /></section>
<section></section>
<section>
<p data-pm-slice="0 0 []">进入此阶段后,我们需要深入分析导致系统进入紧急模式(Emergency Mode)的原因。实际上,紧急模式是由 <code>systemd</code> 提供的一个特殊服务。</p>
<p>在 <code>systemd</code> 的启动流程中,如果某些关键服务启动失败,系统会触发 <code>emergency.target</code>,进而执行 <code>emergency.service</code>,最终进入紧急模式。以下是可能导致系统进入紧急模式的服务故障情况:</p>
</section>
<section><img src="https://storage.deepin.org/thread/202504180217294928_4.4.png" alt="4.4.png" /></section>
<section></section>
<section><span data-pm-slice="0 0 []">接下来,我们将深入分析系统的运行日志,以查找是否有相关服务的报错信息。通过执行 </span><code>journalctl</code> 命令,可以查询 <code>systemd</code> 服务的运行历史日志。在日志中,我们能够定位到问题发生的具体时间点。从日志信息中可以发现,<code>local-fs.target</code> 的依赖条件未能满足,导致该目标未能成功完成初始化。显然,这会触发系统的紧急模式(Emergency Mode)。</section>
<section></section>
<section><img src="https://storage.deepin.org/thread/202504180217351424_4.5.png" alt="4.5.png" /></section>
<section></section>
<section>
<p data-pm-slice="0 0 []">在进一步分析系统运行日志时,我们注意到日志中显示的红色超时信息,特别是 <code>dev-disk-by***.service</code> 服务的超时问题。通过查询相关资料,我们了解到 <code>dev-disk-by***.service</code> 是由 <code>udev</code> 规则触发并由 <code>systemd</code> 动态生成的服务,主要用于管理设备挂载。</p>
<p>系统中的设备挂载配置大概分为两部分:一部分在 <code>initrd</code> 中,另一部分在 <code>/etc/fstab</code> 文件中。从日志中可以看到,由于某个块设备的 UUID 挂载失败,导致 <code>local-fs.target</code> 未能完成初始化,进而触发了紧急模式(Emergency Mode)。</p>
<p>为了进一步排查问题,可以查询系统中所有块设备的 UUID。以下是常用的命令:</p>
<ul class="list-paddingleft-1">
<li>
<section><code>lsblk -f:列出所有块设备及其文件系统信息,包括 UUID;</code></section>
</li>
<li>
<section><code>blkid:直接显示所有块设备的 UUID,包括文件系统类型和分区信息。</code></section>
</li>
</ul>
<section><span data-pm-slice="0 0 []">执行以下命令来查询所有块设备的 UUID:</span></section>
<blockquote>
<section><span class="code-snippet__attribute">lsblk</span> -f</section>
</blockquote>
<section><span style="color: #333333; font-size: 16px;">该命令将列出系统中所有块设备的 UUID,帮助我们确定挂载失败的具体设备。</span></section>
<section><img src="https://storage.deepin.org/thread/202504180217491881_4.6.png" alt="4.6.png" /></section>
<section>
<p data-pm-slice="0 0 []">在排查过程中,我们发现 <code>/dev/vda1</code> 的 UUID 与报错信息中显示的 UUID 仅相差一位。这引起了我们的怀疑,于是进一步检查 <code>/etc/fstab</code> 文件。果不其然,问题出在这里——<code>/etc/fstab</code> 中的 UUID 写错了。</p>
<p>实际上,这是为了展示分析步骤而手动修改的(故意引入了一个错误)。将 <code>/etc/fstab</code> 中多余的字符“a”删除后,重新启动系统,一切便恢复正常了。</p>
<p><img src="https://storage.deepin.org/thread/202504180218386639_4.7.png" alt="4.7.png" /></p>
<p>删除 UUID 最前面的多余字符“a”,保存文件后重启系统,随后系统便能够正常启动了。</p>
</section>
</section>
<p>&nbsp;</p>
<h2><strong>现象五:</strong><strong>启动后找不到 init 进程,要如何处理?</strong></h2>
<p>如果开机后能看到 GRUB 引导项,但系统无法正常启动,一般来说问题不大。</p>
<p><img loading="lazy" class="alignnone size-full wp-image-36673" src="https://www.deepin.org/wp-content/uploads/2025/05/202504180218447836_5_副本.png" alt="" width="717" height="240" srcset="https://www.deepin.org/wp-content/uploads/2025/05/202504180218447836_5_副本.png 717w, https://www.deepin.org/wp-content/uploads/2025/05/202504180218447836_5_副本-300x100.png 300w, https://www.deepin.org/wp-content/uploads/2025/05/202504180218447836_5_副本-150x50.png 150w, https://www.deepin.org/wp-content/uploads/2025/05/202504180218447836_5_副本-24x8.png 24w, https://www.deepin.org/wp-content/uploads/2025/05/202504180218447836_5_副本-36x12.png 36w, https://www.deepin.org/wp-content/uploads/2025/05/202504180218447836_5_副本-48x16.png 48w" sizes="(max-width: 717px) 100vw, 717px" /></p>
<p><span data-pm-slice="0 0 []">首先选中对应的引导项,按 </span><code>e</code> 键进入引导参数编辑页面。</p>
<p><img src="https://storage.deepin.org/thread/202504180218509147_6.png" alt="6.png" /></p>
<p><span data-pm-slice="0 0 []">如果系统在确认引导项后卡死,或者进入 </span><code>initramfs</code> 的 shell 页面,需要具体分析问题。例如,当系统实际的 <code>/</code> 无法找到时,通常会在 <code>initramfs</code> 阶段进入 <code>busybox</code> 内置的 shell 环境。</p>
<p><img src="https://storage.deepin.org/thread/202504180219005710_7.png" alt="7.png" /></p>
<p><span data-pm-slice="0 0 []">在这种情况下,可以查看内核参数,确认是否存在参数错误。例如,在 GRUB 编辑页面中,</span><code>ostree=</code> 参数的值被我故意在最后添加一个字母,从而让系统启动出错,方便展开接下来的排错过程。</p>
<p><img src="https://storage.deepin.org/thread/202504180219051135_8.png" alt="8.png" /></p>
<p><span data-pm-slice="0 0 []">此时,需要确认对应的目录是否存在,需要注意的是,</span><code>ostree</code> 参数的值通常需要以 <code>/root/persistent</code> 为前缀。</p>
<p><img src="https://storage.deepin.org/thread/202504180219113622_9.png" alt="9.png" /></p>
<p><span data-pm-slice="0 0 []">该问题源于系统启动过程中检查的 </span><code>checkouta</code>目录不存在,而实际正确的目录名称应为 <code>checkout</code>,这导致系统启动失败。在排查类似问题时,建议在内核参数中添加 <code>debug</code>选项,以获取 initramfs 初始化阶段的详细调试信息。</p>
<p><img src="https://storage.deepin.org/thread/202504180219273649_10.png" alt="10.png" /></p>
<p>之后按下 <code>F10,</code>加载引导信息,当前这里的 <code>checkout </code>我仍然修改为 <code>checkouta,</code>方便我们复现问题并分析,不出意外,我们又来到了熟悉的页面:</p>
<p><img src="https://storage.deepin.org/thread/202504180219335764_11.png" alt="11.png" /></p>
<p><span data-pm-slice="0 0 []">在 initramfs 的 shell 中,可以通过查看 </span><code>/run/initramfs/initramfs.debug</code> 文件来分析日志。日志文件中包含了详细的启动过程信息,通过查看日志可以找到报错的地方。</p>
<p><img src="https://storage.deepin.org/thread/202504180219475793_12.png" alt="12.png" /></p>
<p data-pm-slice="0 0 []">这里都是熟悉的 bash 脚本,接下来就是找到报错的地方。如下图所示,可以明显看到是 initramfs 阶段找不到对应的 <code>init </code>进程,所以就单独启动了一个 <code>sh </code>终端,方便使用者自行分析。</p>
<p data-pm-slice="0 0 []"><img src="https://storage.deepin.org/thread/202504180220025623_13.png" alt="13.png" /></p>
<p data-pm-slice="0 0 []"><span data-pm-slice="0 0 []">系统无法启动的原因已经找到,接下来就是查看为何找不到 </span><code>init</code>进程,这需要我们找到最初开始报错的地方,异常如下图所示,知道了问题我们在下次启动时,手动调整对应的 <code>grub</code>参数即可解决。</p>
<p data-pm-slice="0 0 []"><img src="https://storage.deepin.org/thread/202504180220104156_14.png" alt="14.png" /></p>
<p>&nbsp;</p>
<h2><b>特殊场景:</b><b>启动时完全卡死,无日志、键鼠无响应,</b><b>要如何处理?</b></h2>
<p><span data-mpa-action-id="makpyh4m1qwc">此类场景极少见,一般只会出现在未经适配的硬件上,需要电脑有串口,并</span><span data-pm-slice="0 0 []">通过</span><strong>串口调试</strong><span data-mpa-action-id="makpyh4msmr">获取内核日志。由于此类问题过于少见,若您无法通过串口定位,可以前往</span><span data-mpa-action-id="makpyh4msmr"> deepin 社区论坛 联系专业的内核研发人员陪同定位。</span></p>
<section>补充知识:</section>
<section>1、如何利用 initramfs 断点定位问题,并<span data-pm-slice="1 1 [&quot;para&quot;,{&quot;tagName&quot;:&quot;section&quot;,&quot;attributes&quot;:{},&quot;namespaceURI&quot;:&quot;http://www.w3.org/1999/xhtml&quot;}]">分阶段调试?</span></section>
<section>由于 initramfs 中存在许多天然断点,这些断点可以通过在 GRUB 参数中添加 <code>break=</code> 来触发。<code>break_point</code> 的取值包括以下几种:</section>
<ul class="list-paddingleft-1">
<li>top:initramfs 启动过程的最开始阶段。</li>
<li>modules:加载必要的内核模块阶段。</li>
<li>premount:挂载根文件系统之前的准备阶段。</li>
<li>mount:挂载根文件系统的阶段。</li>
<li>mountroot:挂载根文件系统的具体实现阶段。</li>
<li>bottom:initramfs 启动过程的最后阶段。</li>
</ul>
<p>所以我们可以在特定阶段暂停启动过程,进而方便检查和干预启动过程,<span data-pm-slice="0 0 []">按照先后执行顺序如下所示:</span></p>
<ul class="list-paddingleft-1">
<li><strong>top</strong>
<ul class="list-paddingleft-1">
<li>作用:这是 initramfs 启动过程的最开始阶段。</li>
<li>调试用途:如果在启动参数中设置 break=top,系统会在 initramfs 的初始化脚本开始执行时暂停,方便用户检查早期启动环境。</li>
</ul>
</li>
<li><strong>modules</strong>
<ul class="list-paddingleft-1">
<li>作用:在这个阶段,系统会加载必要的内核模块。这些模块通常是根据 /conf/modules 文件的配置加载的,尽管在现代系统中,/conf/modules 文件可能不存在,因为很多模块已经通过 udev 动态加载。</li>
</ul>
</li>
<li style="list-style-type: none;">
<ul class="list-paddingleft-1">
<li>调试用途:如果设置 break=modules,系统会在加载模块之前暂停,用户可以检查模块加载情况或干预模块加载过程。</li>
</ul>
</li>
</ul>
<ul class="list-paddingleft-1">
<li><strong>premount</strong>
<ul class="list-paddingleft-1">
<li>作用:这个阶段是为了挂载根文件系统做准备。它会运行 /scripts/init-premount 目录下的脚本,这些脚本通常用于初始化设备和文件系统,例如启动 udev 守护进程、处理 USB 或 FireWire 设备等。</li>
<li>调试用途:如果设置 break=premount,系统会在挂载根文件系统之前暂停,用户可以检查设备初始化情况。</li>
</ul>
</li>
</ul>
<ul class="list-paddingleft-1">
<li><strong>mount</strong>
<ul class="list-paddingleft-1">
<li>作用:这个阶段的主要任务是挂载根文件系统。它会执行 /scripts/local 中的 mountroot 函数,检测根文件系统的类型并将其挂载到 ${rootmnt}。</li>
<li>调试用途:如果设置 break=mount,系统会在挂载根文件系统之前暂停,用户可以检查挂载参数或干预挂载过程。</li>
</ul>
</li>
</ul>
<ul class="list-paddingleft-1">
<li><strong>mountroot</strong>
<ul class="list-paddingleft-1">
<li>作用:这个阶段是挂载根文件系统的具体实现阶段。它会根据启动参数(如 root=)解析根文件系统的设备路径,并尝试将其挂载到指定的挂载点。</li>
<li>调试用途:如果设置 break=mountroot,系统会在挂载根文件系统的过程中暂停,用户可以检查挂载失败的原因。</li>
</ul>
</li>
</ul>
<ul class="list-paddingleft-1">
<li><strong>bottom</strong>
<ul class="list-paddingleft-1">
<li>作用:这是 initramfs 启动过程的最后阶段。在这个阶段,系统会执行 **/scripts/init-bottom 目录下的脚本,这些脚本通常用于清理和完成启动过程中的最后一步操作。</li>
<li>调试用途:如果设置 break=bottom,系统会在启动过程的最后阶段暂停,用户可以检查启动过程中的最后一步操作。</li>
</ul>
</li>
</ul>
<p>通过在 grub 中添加 break= 可以让启动过程分别停止在不同的阶段并启动一个 sh 环境,更方便我们确认是哪个环节出现了问题。</p>
<p>在这个 sh 环境中,当我们检查完系统信息后,可以执行 exit 命令,此时系统会继续启动。</p>
<p>2、initrd 内容异常,应如何排查和修复?</p>
<p><span data-pm-slice="0 0 []">当安装内核获驱动时,我们一般会执行 </span><code>update-initramfs</code> 命令来生成新的 <code>initrd,</code>偶尔可能会出现生成的 <code>initrd </code>内容异常的情况。</p>
<p><span data-pm-slice="0 0 []">由于 initrd 存放于 </span><code>/boot/initrd.img-*,</code>大小一般在200MB以内,所以在出现内容异常的情况时,我们可以通过 <code>lsinitramfs </code>命令查看其内容,通过对比更新前后的 initrd 可以排查绝大部分问题。</p>
<p><img src="https://storage.deepin.org/thread/202504180220199662_15.png" alt="15.png" /></p>
<p><span data-pm-slice="0 0 []">通过排查,如果真的是再 </span><code>update-initramfs </code>命令执行后 initrd 内容出现了问题,也不要恐慌,update-initramfs 也只是一个普通的 bash 脚本而已,分析其源码实现即可,这也是我们了解系统启动过程的一个绝好机会。</p>
<p><img src="https://storage.deepin.org/thread/202504180220276518_16.png" alt="16.png" /></p>
<p>以上便是部分 <span data-pm-slice="0 0 []">Linux 启动故障的常见场景及解决方法</span>,希望能为大家提供有效参考。</p>
<p data-pm-slice="0 0 []">由于设备型号、硬件配置、操作习惯等差异,<strong>部分用户可能会遇到个例场景问题</strong>,如果以上方案无法解决您遇到的问题,欢迎大家前往deepin 社区论坛发帖提问,会有社区产品研发和热心用户第一时间响应。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
                        </div>
頁: [1]
查看完整版本: deepin 25 用户常见问题解答 ── 系统启动失败篇