专栏名称: Linux就该这么学
专注于Linux运维技术培训,让您学习的每节课都有所收获,订阅本号后可每天获得最新Linux运维行业资讯、最实用的Linux免费教程以及独家Linux考证资料,三十多万技术小伙伴的选择,Linux就该这么学!
目录
相关文章推荐
Linux就该这么学  ·  几种 Window 系统测试 UDP 的方法 ·  16 小时前  
Linux就该这么学  ·  运维工程师必看!Nginx ... ·  16 小时前  
Linux就该这么学  ·  NASA 滞留太空 9 个月宇航员顺利返回地球 ·  16 小时前  
Linux就该这么学  ·  成立 57 年第一次!Intel ... ·  昨天  
51好读  ›  专栏  ›  Linux就该这么学

运维常见故障及排查方法,值得学习收藏!

Linux就该这么学  · 公众号  · linux  · 2025-03-17 08:02

正文

转自:高效运维

还是那句话,“稳定是偶然,异常才是常态”。

因为对于IT运维来说,工作最常遇到的就是不稳定性带来的各种故障,经常围绕发现故障、响应故障、定位故障、恢复故障这四大步骤打转。


1、Linux 系统无法启动

原因1

图片
文件系统配置不当,比如 /etc/fstab 文件等配置错误或丢失,导致系统错误无法启动。一般是人为修改错误或者文件系统故障。

排查方法:

系统配置/etc/fstab错误或丢失而无法启动,当启动的时候,出现starting system logger 后停止了。

解决方法:

想办法恢复 /etc/fstab 文件,利用 Linux rescue 修复模式登录系统,从而获取挂载点和分区信息,重构 /etc/fstab 文件。

原因2:

图片

非法关机,导致 root 文件系统破坏,也就是 Linux 根分区破坏,系统无法正常启动。

排查方法:

Linux下普遍采用的是 ext3/ext4 文件系统,ext3/ext4 是一个具有日志记录功能的日志文件系统,可以进行简单的容错和恢复,但是在一个高负荷读写的 ext3 文件系统下,如果突然发生掉电,就很有可能发生文件系统内部结构不一致,导致文件系统破坏。

Linux 在启动时会自动去分析和检查系统分区,如果发现文件系统有简单的错误,会自动修复,如果文件系统破坏比较严重,系统无法完成修复时,系统就会自动进入单用户模式下或者出现一个交互界面,提示用户介入手动修复,现象类似下面所示:

checking root filesyste

/dev/sdb5 contains a file system with errors, check forced

/dev/sdb5:

Unattached inode 68338812

/dev/sdb5:UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY

(i.e., without -a or -p options)

FAILED

/contains a file system with errors check forced

an eror occurred during the file system check

*dropping you to a shell;the system will reboot

when you leave the shell

Press enter for maintenance

(or type Control-D to continue):

give root password for maintenance

从这个错误可以看出,系统根分区文件系统出现了问题,系统在启动时无法自动修复,然后进入到了一个交互界面,提示用户进行系统修复。这个问题发生的机率很高,引起这个问题的主要原因就是系统突然掉电,引起文件系统结构不一致。一般情况下解决此问题的办法是采用fsck命令,进行强制修复。

解决方法:

根据上面的错误提示,当按下“Ctrl-D”组合键后系统自动重启,当输入root密码后进入系统修复模式,在修复模式下,可以执行 fsck 命令,具体操作过程如下:
[root@localhost /]#umount /dev/sdb5[root@localhost /]#fsck .ext3 -y  /dev/sdb5e2fsck 1.39 (29-May-2006)/ contains a file system with errors, check forced.Pass 1: Checking inodes, blocks, and sizesPass 2: Checking directory structurePass 3: Checking directory connectivityPass 4: Checking reference countsInode 6833812




    
 ref count is 2, should be 1.  Fix? yesUnattached inode 6833812Connect to /lost+found? yesInode 6833812 ref count is 2, should be 1.  Fix? yesPass 5: Checking group summary informationBlock bitmap differences:  -(519--529) -9273Fix? yes…… ……/* FILE SYSTEM WAS MODIFIED **/19/128520 files (15.8% non-contiguous), 46034/514048 blocks

需要注意的是,在执行 fsck 的时候,一定要先卸载要修复的分区,然后再执行修复操作!

图片

原因3:

图片
Linux 内核文件丢失或者崩溃,从而无法启动,也可能是因为内核升级错误或者内核存在 bug。这种情况一般 Linux 系统启动会报错找不到内核文件,而内核文件存储在 /boot 分区,主要包括内核文件和初始化文件:
1、vmlinuz:内核镜像文件,包含内核代码和数据

显示 error: file '/vmlinuz' not found

解决方法:

- 使用可启动修复介质启动系统,并挂载系统磁盘的 /boot 分区;

- 从安装介质或系统备份中提取 vmlinuz 内核文件,复制到 /boot 分区;

- 更新引导配置(grub.cfg),将 menuentry 块中的 linux 行指向vmlinuz内核文件;

- 重启系统,在引导菜单选择更新后的菜单项启动系统。

2、initrd/initramfs:初始化 RAM 磁盘,包含启动时需要的模块和驱动

显示 error: file '/initrd.img' not found

解决方法:

● 参考内核文件丢失的解决步骤a,挂载 /boot 分区和获取 initrd.img 文件;

● 将 initrd.img 文件复制到 /boot 分区;

● 更新 grub.cfg,找到 initrd 相关行,将其指向新文件;

● 重启系统,启动更新后的菜单项。

图片

原因4:

图片

硬件故障,比如主板、电源、硬盘等出现问题,导致 Linux 无法启动。

解决方法: 一般来说由硬件造成的故障,只需更换硬件设备即可解决。


2、Linux系统网络故障

1

排查1:检查网络硬件

图片

检查网络故障,首先要排除网络硬件设备是否存在问题。比如网卡,网线,路由器,交换机等设备是否正常。

这些是网络正常运行的基本条件,如果发现某些设备出现故障,只需更换硬件即可解决问题。

2

排查2:检查网卡是否正常工作

图片
1、检查网卡是否正常加载
可以通过 ifconfig 命令判断网卡是否正常加载。如果通过 ifconfig 可以显示网络接口的配置信息,表示系统找到网卡驱动程序,网卡加载正常;

解决方法:如果发现问题网卡,我们可以使用 ethtool 工具查看问题网卡的具体状态信息 (注意: Speed / Link deteced 等字段 )


2、检查网卡IP设置是否正确

接下来就要检查网卡的软件设定,比如IP是否配置,配置是否正确,确保IP的配置和局域网其它计算机配置没有冲突。

3

排查3:检查局域网内主机能否互连

图片

检查网络之间的连通是否存在故障,可以先通过ping命令测试局域网主机之间的连通性,然后ping网关,检测主机到网关的通信是否正常。

4

排查4:检查系统路由表信息是否正确

图片
检查系统路由表状态是处理网络故障的一种很重要的方法。很多时候都是 ip 地址没有配错,网卡也正常加载但是路由配置不正确,而导致网络问题的出现。
因此需要检查系统的路由表设置是否正确,如果一个 Linux 系统有两块网卡,同时两块网卡设置的IP不在一个网段,要特别注意系统路由表的设置。例如下面这个系统的网络接口信息:
图片
从上面输出可知,本系统有两块网卡,分别配置不同网段的IP地址,假定eth0 通过映射的方式对外提供ssh连接服务,而eth1仅供局域网主机之间共享数据使用。
现在的问题是,外界无法ssh远程登录到此系统,而网卡加载没有问题,网卡IP设置也没问题,接下来看看此系统的路由设置:
图片


图片
至此问题已经基本排查出来了:从 route 的输出可知,Linux 的缺省路由是192.168.200.1,而 192.168.200 段的 IP 仅仅供局域网主机之间共享数据使用,没有连接出去的访问权限,因而,外界无法连接到 Linux 系统。

解决方法:删除192段的缺省路由,然后增加10段的缺省路由即可:


# route delete default# route add default gw 10.10.1.254


此时外界就可以通过ssh服务远程连接到 Linux 系统了。


5

排查5:检查DNS解析

图片
在 Linux 系统中,有两个文件用来指定系统到哪里寻找相关域名解析的库。分别是文件 /etc/host.conf 和 /etc/nsswitch.conf。

/etc/host.conf 文件指定系统如何解析主机名,Linux 通过域名解析库来获得主机名对应的 IP 地址。

下面是 RedHat Linux 安装后缺省的 /etc/host.conf 内容:
order hosts,bind
其中,order 指定主机名查询顺序,这里表示首先查找 /etc/hosts 文件对应的解析,如果没有找到对应的解析,接着就根据 /etc/resolve.conf 指定的域名服务器进行解析。
/etc/nsswitch.conf 文件是由 SUN 公司开发的,用于管理系统中多个配置文件查询的顺序,由于 nsswich.conf 提供了更多的资源控制方式,nsswich.conf 文件现在已经基本取代了 hosts.conf,虽然 LINUX 系统中默认这两个文档都存在,但实际上起作用的是 nsswitch.conf 文件。

nsswitch.conf 文件每行的配置都以一个关键字开头,后跟冒号: 紧接着是空白,然后是一系列方法的列表。例如这段信息:

hosts  files dns

表示系统首先查询主机库文件,如果没有找到对应的解析,接着会去DNS配置文件指定的 DNS 服务器进行解析。

清楚了Linux下域名解析的原理和过程,我们就可以根据这两个文件的设定,确定解析的顺序,从而判断出域名解析可能出现的问题。

6

排查6:检查相关服务是否开启

图片

在一个应用出现故障时,必须要检测服务本身。比如服务是否开启,配置是否正确等。

检查服务是否正确打开,分为两步,第一步是查看服务的端口是否打开:
例如,我们不能用root用户ssh登录到192.168.60.133这台 Linux 服务器,首先检查sshd服务的22端口是否打开:
# telnet 192.168.60.133 22 SSH-2.0-OpenSSH_4.3
这个输出表示 192.168.60.133 的22端口对外开放,或者可以说sshd服务是处于打开状态。如果没有任何输出,可能是服务没有启动,或者服务端口被屏蔽。也可以在服务器上通过 netstat 命令检查22端口是否打开:
图片



3 MBR扇区故障

故障现象:

1、找不到引导程序,启动中断

2、无法加载操作系统,开机后黑屏


故障原因:

1、病毒、木马等造成的破坏

2、错误的分区操作,磁盘读写错误操作


解决办法:

1

备份MBR扇区数据

图片
● 在关机状态下添加一块新硬盘:虚拟机-->硬盘-->添加-->选择硬盘-->下一步。
● 启动主机进入Linux系统,并对新硬盘进行分区。查看硬盘分区情况:fdisk -l -->对新硬盘进行分区:fdisk/dev/sdb。
● 建立新硬盘的文件系统(即格式化文件系统)。查看sdb磁盘的列表信息-->对磁盘进行格式化。
● 挂载硬盘。创建挂载点-->挂载分区。

● 备份MBR扇区数据。

2

模拟MBR扇区被破坏的故障







请到「今天看啥」查看全文