Linux 系统应急故障排查

2025-12-31 15:45:33 228

Linux 系统应急故障排查

欢迎来到8455线路检测中心技术小课堂,每天分享一个技术小知识。Linux 服务器运行过程中,突发故障可能导致服务中断、业务停摆,聚焦运维最常遇到的 4 类核心故障,提供 “故障现象→定位命令→恢复方案→根因排查” 的闭环流程,适用于 CentOS、Ubuntu 等 Linux 发行版,让你在应急场景下快速破局。


一、故障分类与应急排查

故障 1:服务器无法远程登录(SSH 连接失败)

现象:

  • 客户端提示 Connection refused(连接被拒绝);

  • 提示 Timeout(超时,无响应);

  • 输入密码后无法登录,直接断开。

应急定位步骤(按优先级):

1. 先确认服务器网络可达(本地/跳板机执行)
ping 服务器IP  # 测试网络连通性(通则跳步骤2,不通查网络)

2. 检查 SSH 服务端口是否监听(跳板机/同网段机器)
telnet 服务器IP 22  # 或用 nc 命令:nc -zv 服务器IP 22
# 输出 "Connected to 服务器IP" 说明端口正常,否则端口未开放/服务未启动

3. 若能物理访问服务器(或通过 IPMI 远程控制台),本地登录后检查:
3.1 查看 SSH 服务状态
systemctl status sshd  # CentOS 用 sshd,Ubuntu 用 ssh

3.2 查看 SSH 日志(找登录失败原因)
tail -f /var/log/secure  # CentOS
tail -f /var/log/auth.log  # Ubuntu
# 关键词:Permission denied(权限拒绝)、Too many authentication failures(认证失败次数过多)、
sshd: refused connect from(IP被拒绝)

3.3 检查防火墙是否拦截 SSH 端口
firewall-cmd --list-ports | grep 22  # CentOS
ufw status | grep 22  # Ubuntu

3.4 检查 SSH 配置文件是否有误(如端口修改、禁用密码登录)
cat /etc/ssh/sshd_config | grep -E "Port|PasswordAuthentication|PermitRootLogin"

快速恢复方案:

  1. SSH 服务未启动:systemctl start sshd,设置开机自启 systemctl enable sshd;

  1. 防火墙拦截:开放 22 端口(firewall-cmd --add-port=22/tcp --permanent && firewall-cmd --reload);

  1. 配置文件错误:还原 sshd_config 备份(cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config),重启 SSH 服务;

  1. 密码登录被禁用且免密失败:本地登录后重新上传公钥(ssh-copy-id),或临时启用密码登录(PasswordAuthentication yes)。

故障 2:服务崩溃(如 Nginx、MySQL 无法启动)

现象:

  • 执行 systemctl start 服务名 提示 failed;

  • 客户端访问服务端口无响应(如 curl 服务器IP:80 超时);

  • 服务进程不存在(ps -ef | grep 服务名 无结果)。

定位步骤:

1. 查看服务启动日志(最核心,直接暴露错误原因)
journalctl -u 服务名 -f  # 实时查看日志(如 journalctl -u nginx -f)
# 或查看服务自身日志(Nginx:/var/log/nginx/error.log;MySQL:/var/log/mysqld.log)

2. 检查服务配置文件语法(配置错误是最常见原因)
nginx -t  # Nginx 配置校验
mysqld --help --verbose  # MySQL 配置校验
systemctl daemon-reload  # 若修改过服务配置文件,先重载

3. 检查服务端口是否被占用(端口冲突导致启动失败)
netstat -tulpn | grep 服务端口  # 如 grep 80(Nginx)、grep 3306(MySQL)

4. 检查服务依赖(如 MySQL 依赖数据库目录权限、Java 服务依赖 JDK)
# 查看服务依赖的文件/目录权限
ls -la 服务数据目录  # 如 ls -la /var/lib/mysql(MySQL 数据目录)
# 检查依赖软件是否安装(如 Java 服务:java -version)

处理方案:

  1. 配置文件错误:修正错误配置(参考日志提示),重新校验后启动;

  1. 端口冲突:杀掉占用端口的进程(kill -9 进程ID),或修改服务端口;

  1. 权限不足:修复数据目录权限(如 chown -R nginx:nginx /var/log/nginx);

  1. 依赖缺失:安装缺失的依赖(如 yum install -y java-1.8.0-openjdk);

  1. 服务进程崩溃:直接重启服务(systemctl restart 服务名),若反复崩溃,需排查内存泄漏(top 查看内存占用)。


故障 3:磁盘空间不足(no space left on device)

现象:

  • 执行 touch/vim 等操作提示 “磁盘空间不足”;

  • 服务无法写入日志、数据(如 MySQL 无法插入数据、Nginx 无法生成访问日志);

  • 系统响应缓慢,部分命令执行超时。

故障定位步骤:

1. 查看整体磁盘占用(确认哪个分区满了)
df -h  # 重点看 Use% 列,100% 即为满分区(如 /dev/sda1)

2. 定位满分区下的大文件(快速找到占用空间的进程)
du -sh /分区路径/*  # 如 du -sh /root/*(查看 /root 目录下文件大小)
du -sh /分区路径/.[!.]*  # 别忘了隐藏文件(如 .log 缓存、.tmp 临时文件)

3. 查找最近修改的大文件(按时间排序,优先清理临时/日志文件)
find /分区路径 -type f -size +100M -mtime -7  # 查找7天内修改的大于100M的文件

4. 检查 inode 占用(特殊情况:磁盘空间未满,但 inode 满了)
df -i  # 若 Use% 100%,说明 inode 耗尽(多为大量小文件导致)
find /分区路径 -type f | wc -l  # 统计文件总数,定位小文件密集目录

处理方案:

  1. 清理大日志文件

    • 临时清理(不删除文件,清空内容):> /var/log/nginx/access.log;

    • 长期清理:启用日志轮转(参考之前的日志轮转指南);

  1. 删除无用文件

    • 删除过期备份、临时文件:rm -rf /opt/backup/*.tar.gz;

    • 删除大量小文件:find /tmp -name "*.tmp" -delete;

  1. inode 耗尽处理:删除小文件密集目录(如 /tmp 下的临时文件),或扩展分区;

  1. 紧急扩容:若暂无文件可删,挂载临时磁盘(mount /dev/sdb1 /mnt),将部分数据迁移至临时磁盘。


故障 4:网络不通(服务器无法访问外网 / 内网)

现象:

  • ping 网关/ping 外网IP 提示 Destination Host Unreachable;

  • 服务器无法下载软件(yum install 超时);

  • 内网其他机器无法访问该服务器。

故障定位步骤:

1. 查看网卡配置(确认IP、网关、DNS是否正确)
ip addr  # 查看网卡IP是否正常(如 192.168.1.100)
cat /etc/sysconfig/network-scripts/ifcfg-eth0  # CentOS 网卡配置(Ubuntu:/etc/netplan/00-installer-config.yaml)

2. 检查路由表(确认网关是否正确)
route -n  # 查看默认网关(如 192.168.1.1)

3. 测试网关连通性(判断是否内网故障)
ping 网关IP  # 如 ping 192.168.1.1

4. 测试DNS解析(判断是否DNS故障)
nslookup baidu.com  # 若无法解析,说明DNS配置错误

5. 检查防火墙/SELinux(是否拦截出站/入站流量)
firewall-cmd --state  # 查看防火墙状态(关闭测试:systemctl stop firewalld)getenforce  # 查看SELinux状态(关闭测试:setenforce 0)# 6. 检查网卡是否正常(是否down掉)ip link show  # 查看网卡状态(UP 为正常,DOWN 为异常)

处理方案:

1.IP / 网关配置错误:修改网卡配置文件,重启网络服务(systemctl restart network 或 netplan apply);


2.DNS 错误:临时修改 DNS(echo "nameserver 8.8.8.8" > /etc/resolv.conf),长期配置在网卡文件中;


3.网卡 down 掉:启用网卡(ip link set eth0 up);


4.防火墙 / SELinux 拦截:临时关闭测试,确认后配置放行规则(如开放 80、443 端口);


5.物理网络故障:联系机房运维检查网线、交换机端口。


二、故障排查工具集

工具 / 命令

作用

适用故障场景

ping/telnet/nc

测试网络连通性、端口可达性

登录失败、网络不通、服务不可用

systemctl status

查看服务状态

服务崩溃

journalctl/tail

查看系统 / 服务日志

所有故障(核心定位工具)

df/du/find

磁盘空间、大文件定位

磁盘满

ip/route/nslookup

网络配置、路由、DNS 解析

网络不通

ps/top/kill

进程查看、资源占用、进程终止

服务崩溃、端口冲突


三、应急排查注意

  1. 先恢复,后排查:业务中断时,优先用最快方式恢复服务(如重启服务、清理磁盘),后续再分析根本原因;

  1. 最小操作原则:应急时只做必要操作(如只清理无用日志,不删除不确定的文件),避免二次故障;

  1. 保留现场:恢复前尽量记录故障现象(日志截图、命令输出),便于后续根因分析;

  1. 优先临时方案:如磁盘满时先清空日志(临时),而非直接删除数据文件;网络不通时先关闭防火墙测试,而非直接修改配置。


总结

Linux 应急故障排查的四大高频故障(登录失败、服务崩溃、磁盘满、网络不通)占运维应急场景的 80% 以上。掌握这些排查流程和工具后,可在突发故障时避免慌乱,按步骤高效解决问题。应急能力的提升依赖实战积累,建议平时模拟故障场景(如手动占用磁盘、修改错误配置)进行练习。

8455线路检测中心官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,8455线路检测中心整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。更多技术知识,8455线路检测中心期待与你一起探索。


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题:
XML 地图