Linux诊断和故障排除系列(二) — 修复内核服务

当您遇到Linux系统无法到达登录界面时(如下图),这可能是由于某个内核服务加载异常所致。在这种情况下,您需要进入debug shell来诊断和解决问题。以下是一些详细的步骤,帮助您深入了解并解决这一问题。

1. 内核模块分析

1.1 查看内核相关日志

首先,您需要查看内核的日志来获取可能的线索。使用以下命令:
journalctl -k 命令将显示内核的日志,帮助您识别任何可能的错误或警告。
uname -r 命令将显示当前运行的内核版本,这对于确定问题是否与特定内核版本相关非常重要。

1.2 查看模块

lsmod 命令查看当前所有处于激活的被内核使用的模块
modinfo 命令查看特定模块的详细信息

# modinfo ext4  
filename:       /lib/modules/3.10.0-1160.92.1.el7.x86_64/kernel/fs/ext4/ext4.ko.xz
license:        GPL
description:    Fourth Extended Filesystem
author:         Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others
alias:          fs-ext4
alias:          ext3
alias:          fs-ext3
alias:          ext2
alias:          fs-ext2
retpoline:      Y
rhelversion:    7.9
srcversion:     0CFB8A3564B9511105E1727
depends:        mbcache,jbd2
intree:         Y
vermagic:       3.10.0-1160.92.1.el7.x86_64 SMP mod_unload modversions 
signer:         CentOS Linux kernel signing key
sig_key:        87:85:3C:C1:99:05:0D:FA:08:55:B0:16:21:67:A5:37:DF:72:CC:87
sig_hashalgo:   sha256

modinfo -p 命令查看模块的参数

# modinfo -p nvme
use_threaded_interrupts: (int)
use_cmb_sqes:use controller's memory buffer for I/O SQes (bool)
max_host_mem_size_mb:Maximum Host Memory Buffer (HMB) size per controller (in MiB) (uint)
io_queue_depth:set io queue depth, should >= 2

1.3 管理模块

如果确定某个模块是问题的根源,您可以使用以下命令来管理:
modprobe 添加模块
modprobe -r 禁用模块

$ modprobe -r floppy                            //禁用floppy模块
$ modprobe iscsi_tcp                            //启用iscsi_tcp模块
$ lsmod|grep scsi                               //使用lsmod查看,已经有了iscsi_tcp模块
iscsi_tcp              18333  0 
libiscsi_tcp           25146  1 iscsi_tcp
libiscsi               57233  2 libiscsi_tcp,iscsi_tcp
scsi_transport_iscsi   108101  2 iscsi_tcp,libiscsi

2. 服务依赖性分析

2.1 使用systemctl查看服务依赖

systemctl list-dependencies命令用来显示服务间的依赖关系
这将帮助您理解服务如何相互依赖,以及哪些服务可能因为依赖问题而无法启动。

3. Debug shell

如果标准启动流程失败,您可以通过以下快捷键进入debug shell:
按 Ctrl+Alt+F9 连接到 debug shell。
一旦进入debug shell,使用以下命令来验证您已经进入debug shell:
sh-4.4# systemctl status $$

3.1 修复服务

在debug shell中,您可以使用systemctl等命令来诊断无法正常启动的服务。根据诊断结果,您可能需要修复配置文件、重新启动服务或禁用有问题的服务。
完成修复后,就可以重启系统。
这将使您能够重新启动操作系统,并希望这次能够成功进入登录界面。

4. 总结

面对Linux系统无法到达登录界面的问题,通过上述步骤,您可以逐步诊断并解决问题。这不仅需要对Linux系统有一定的了解,还需要能够读懂日志文件和内核模块信息。如果您在诊断过程中遇到困难,不要犹豫,寻求专业人士的帮助。记住,保持冷静和耐心是解决问题的关键。

修复Linux系统的问题是一个技术性很强的过程,但通过仔细的分析和正确的命令,您将能够克服这些挑战。最后,不要忘记在解决问题后更新您的知识库,以便在未来遇到类似问题时能够更快地应对。

更多内容请参见本系列其他文章
<<Linux诊断和故障排除系列(一) -- 修复启动分区>>
<<Linux诊断和故障排除系列(二) -- 修复内核服务>>
<<Linux诊断和故障排除系列(三) -- 重置root密码>>
<<Linux诊断和故障排除系列(四) -- 修复文件系统>>
<<Linux诊断和故障排除系列(五) -- 修复iSCSI>>
<<Linux诊断和故障排除系列(六) -- 修复软件包及管理器>>
<<Linux诊断和故障排除系列(七) -- 应用程序诊断>>
<<Linux诊断和故障排除系列(八) -- 网络问题诊断>>
<<Linux诊断和故障排除系列(九) -- 身份验证和授权问题诊断>>
<<Linux诊断和故障排除系列(十) -- 硬件问题日志>>
<<Linux诊断和故障排除系列(十一) -- dump设置和分析>>
<<Linux诊断和故障排除系列(十二) -- 日志持久化和转发>>
<<Linux诊断和故障排除系列(十三) -- 官方支持数据sos_report及其分析可视化软件>>

本文内容为原创,如需转载,请务必注明原文出处。
更多相关内容,欢迎访问我的个人网站:hongxu.wang。
我们还提供免费的技术支持,欢迎与我们联系。

Index
滚动至顶部