Linux系统故障排查技术指南
【免费下载链接】Script-Reset-Windows-Update-ToolThis script reset the Windows Update Components.项目地址: https://gitcode.com/gh_mirrors/sc/Script-Reset-Windows-Update-Tool
一、问题识别与诊断流程
技术难度:基础
1.1 故障现象分类
Linux系统故障可分为以下主要类型:
- 启动故障:系统无法正常引导或卡在启动过程
- 网络故障:网络连接异常或服务无法访问
- 性能问题:系统响应缓慢或资源占用过高
- 服务故障:关键系统服务无法启动或异常终止
- 文件系统问题:磁盘错误或文件损坏
1.2 诊断流程
1.3 基础诊断命令集
| 故障类型 | 排查命令 | 预期输出 | 修复阈值 |
|---|---|---|---|
| 系统负载 | top -b -n 1 | 系统进程及资源占用情况 | CPU使用率持续>90% |
| 内存问题 | free -h | 内存使用统计 | 可用内存<10% |
| 磁盘空间 | df -h | 文件系统使用情况 | 使用率>90% |
| 网络连接 | netstat -tulpn | 网络连接及监听端口 | 关键端口未监听 |
| 服务状态 | systemctl list-units --failed | 失败的系统服务 | 存在任何失败服务 |
1.4 日志分析方法
# 查看系统启动日志 journalctl -b # 过滤错误信息 journalctl -p err # 查看特定服务日志 journalctl -u sshd.service # 实时监控日志 tail -f /var/log/syslog日志文件位置说明:
- 系统日志:/var/log/syslog (Debian/Ubuntu) 或 /var/log/messages (RHEL/CentOS)
- 应用日志:/var/log/[应用名称]/
- 用户登录日志:/var/log/auth.log
二、核心排查工具解析
技术难度:进阶
2.1 文件系统检查工具
fsck - 文件系统一致性检查
# 检查/dev/sda1分区(需卸载或只读挂载) fsck /dev/sda1 # 自动修复错误(谨慎使用) fsck -y /dev/sda1⚠️风险提示:使用fsck前请确保数据已备份,强行修复可能导致数据丢失。建议先使用只读模式检查:fsck -n /dev/sda1
dumpe2fs - 查看ext文件系统信息
dumpe2fs /dev/sda1 | grep -i 'block count'2.2 系统日志分析工具
journalctl - 系统日志管理
# 查看最近100行错误日志 journalctl -p err -n 100 # 按时间范围查看日志 journalctl --since "2023-01-01 00:00:00" --until "2023-01-01 12:00:00" # 查看特定进程日志 journalctl _PID=1234journalctl工作原理: systemd-journald服务收集系统日志,存储在/var/log/journal/目录。相比传统syslog,提供更强大的过滤和查询能力,支持按服务、进程ID、用户ID等多维度筛选。
2.3 网络诊断工具集
ss - 网络连接统计
# 显示所有TCP连接 ss -tuln # 显示监听状态的端口 ss -l # 显示进程ID和程序名 ss -pltcpdump - 网络数据包捕获
# 捕获eth0接口上的HTTP流量 tcpdump -i eth0 port 80 -w capture.pcap # 读取捕获文件 tcpdump -r capture.pcap2.4 性能监控工具
vmstat - 系统资源监控
# 每2秒输出一次系统状态,共5次 vmstat 2 5输出示例: procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 102400 12345 234567 0 0 5 10 123 456 1 2 97 0 0
iostat - 磁盘I/O性能
# 显示所有磁盘I/O统计 iostat -x # 监控sda磁盘,每3秒刷新一次 iostat -x sda 3三、分级解决方案
技术难度:基础/进阶/专家
3.1 启动故障修复(基础)
3.1.1 GRUB引导修复
命令行修复路径:
# 安装GRUB到MBR grub-install /dev/sda # 更新GRUB配置 update-grub图形界面修复路径:
- 使用Ubuntu Live CD启动
- 打开"启动修复"工具
- 选择"推荐修复"选项
- 重启系统
⚠️风险提示:错误的GRUB配置可能导致系统无法启动,请在操作前备份/boot/grub/grub.cfg文件。
3.1.2 initramfs修复
# 重新生成initramfs update-initramfs -u -k all # 针对特定内核版本 update-initramfs -u -k 5.4.0-80-generic3.2 文件系统修复(进阶)
3.2.1 磁盘错误修复
前置检查项:
- 确认磁盘状态:
smartctl -H /dev/sda - 检查分区表:
fdisk -l /dev/sda
修复步骤:
# 卸载文件系统 umount /dev/sda1 # 执行文件系统检查 e2fsck -f -v /dev/sda1 # 对于XFS文件系统 xfs_repair /dev/sda1验证步骤:
# 挂载文件系统 mount /dev/sda1 /mnt # 检查磁盘健康状态 dmesg | grep sda3.3 系统服务恢复(进阶)
3.3.1 服务启动故障排查
# 检查服务状态 systemctl status nginx.service # 查看服务日志 journalctl -u nginx.service --since "10 minutes ago" # 尝试手动启动 systemctl start nginx.service # 检查依赖关系 systemctl list-dependencies nginx.service3.3.2 服务自启动配置
# 设置服务开机自启 systemctl enable nginx.service # 禁止服务开机自启 systemctl disable nginx.service # 查看服务启动顺序 systemctl show -p Before nginx.service3.4 内核问题处理(专家)
3.4.1 内核升级与回滚
升级内核:
# Debian/Ubuntu apt-get install linux-image-generic # RHEL/CentOS yum install kernel # 重启系统 reboot回滚方案:
- 启动时在GRUB菜单选择旧内核
- 卸载问题内核:
# Debian/Ubuntu apt-get remove linux-image-5.4.0-80-generic # RHEL/CentOS yum remove kernel-3.10.0-1160.el7.x86_64内核选择原则:
- 生产环境建议使用LTS(长期支持)版本
- 新硬件支持可能需要更新的内核版本
- 内核升级前应测试兼容性
四、自动化排查脚本
技术难度:进阶
4.1 系统健康检查脚本
#!/bin/bash # 系统健康状态自动检查脚本 # 检查CPU使用率 cpu_usage=$(top -b -n 1 | grep "Cpu(s)" | awk '{print $2 + $4}') if (( $(echo "$cpu_usage > 80" | bc -l) )); then echo "警告: CPU使用率过高 ($cpu_usage%)" fi # 检查内存使用 mem_usage=$(free | awk '/Mem/{printf "%.2f", $3/$2*100}') if (( $(echo "$mem_usage > 90" | bc -l) )); then echo "警告: 内存使用率过高 ($mem_usage%)" fi # 检查磁盘空间 disk_usage=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//') if [ $disk_usage -gt 90 ]; then echo "警告: 根分区使用率过高 ($disk_usage%)" fi # 检查失败服务 failed_services=$(systemctl list-units --failed --type=service --no-legend | wc -l) if [ $failed_services -gt 0 ]; then echo "警告: 有 $failed_services 个服务启动失败" systemctl list-units --failed --type=service --no-legend fi # 检查系统日志错误 error_count=$(journalctl -p err --since "1 hour ago" | wc -l) if [ $error_count -gt 10 ]; then echo "警告: 过去一小时内有 $error_count 个错误日志" fi4.2 网络诊断自动化工具
#!/bin/bash # 网络连接问题诊断脚本 echo "=== 网络诊断报告 ===" date echo -e "\n--- 网络接口状态 ---" ip addr show echo -e "\n--- 路由表 ---" ip route show echo -e "\n--- DNS配置 ---" cat /etc/resolv.conf echo -e "\n--- 连接测试 ---" ping -c 3 8.8.8.8 if [ $? -ne 0 ]; then echo "错误: 无法连接到外部网络" else echo "外部网络连接正常" fi echo -e "\n--- DNS解析测试 ---" nslookup google.com if [ $? -ne 0 ]; then echo "错误: DNS解析失败" else echo "DNS解析正常" fi echo -e "\n--- 常用端口连通性测试 ---" ports=("80" "443" "22") for port in "${ports[@]}"; do nc -z -w 2 google.com $port if [ $? -eq 0 ]; then echo "端口 $port: 可连接" else echo "端口 $port: 不可连接" fi done4.3 脚本部署与定时执行
# 将脚本保存为system_health_check.sh chmod +x system_health_check.sh # 移动到系统路径 sudo mv system_health_check.sh /usr/local/bin/ # 设置定时任务(每小时执行一次) echo "0 * * * * /usr/local/bin/system_health_check.sh >> /var/log/system_health.log 2>&1" | crontab -⚠️风险提示:自动化脚本可能因系统配置差异导致误报或漏报,建议先在测试环境验证。
五、故障案例分析
技术难度:综合
5.1 案例一:文件系统只读故障
环境:Ubuntu 20.04 LTS,ext4文件系统
现象:系统突然变为只读模式,无法创建或修改文件。
排查过程:
- 检查系统日志:
journalctl -p err发现大量"I/O error" - 运行磁盘检查:
fsck /dev/sda1发现inode错误 - 检查磁盘健康:
smartctl -H /dev/sda显示磁盘即将故障
解决方案:
- 立即备份关键数据
- 使用
fsck -y /dev/sda1修复文件系统错误 - 更换故障硬盘并恢复数据
预防措施:
- 定期执行
smartctl检查磁盘健康状态 - 配置磁盘错误报警机制
- 实施定期数据备份策略
5.2 案例二:内存泄漏导致系统崩溃
环境:CentOS 7,Java应用服务器
现象:系统运行几天后变得缓慢,最终无响应。
排查过程:
- 查看历史监控数据,发现内存使用率持续增长
- 使用
top命令识别内存占用最高的进程 - 使用
jmap分析Java进程内存使用情况 - 发现应用存在内存泄漏问题
解决方案:
- 重启应用释放内存:
systemctl restart java-app - 升级应用到修复内存泄漏的版本
- 配置监控告警,当内存使用率达到85%时自动重启
验证步骤:
# 监控内存使用趋势 sar -r 5 12 # 检查Java堆内存使用 jstat -gcutil <pid> 1000 105.3 案例三:网络连接数耗尽
环境:Debian 10,Nginx Web服务器
现象:服务器无法建立新的网络连接,已有连接正常。
排查过程:
- 检查系统连接数:
ss -s发现TCP连接数达到上限 - 查看Nginx配置:
grep worker_connections /etc/nginx/nginx.conf - 检查系统限制:
ulimit -n发现文件描述符限制过低
解决方案:
- 临时调整文件描述符限制:
ulimit -n 65535 - 永久修改系统限制:
# 在/etc/security/limits.conf添加 * soft nofile 65535 * hard nofile 65535- 优化Nginx配置:
worker_connections 10240; keepalive_timeout 30;5.4 案例四:系统启动进入emergency模式
环境:Fedora 34
现象:系统启动后直接进入emergency shell,无法正常启动。
排查过程:
- 检查启动日志:
journalctl -b - 发现"/home分区挂载失败"错误
- 检查/etc/fstab文件,发现UUID错误
- 验证磁盘UUID:
blkid与fstab对比
解决方案:
- 使用正确的UUID更新/etc/fstab
- 重新生成initramfs:
dracut -f - 重启系统:
systemctl reboot
5.5 案例五:内核升级后无线网卡失效
环境:Ubuntu 22.04,Intel无线网卡
现象:内核升级后无线网卡无法识别。
排查过程:
- 检查内核版本:
uname -r - 查看网卡状态:
lspci | grep Network - 检查驱动加载:
lsmod | grep iwlwifi - 查看错误日志:
dmesg | grep iwlwifi
解决方案:
- 回滚到上一个稳定内核
- 下载并安装适合新内核的无线网卡驱动
- 禁用自动内核更新:
apt-mark hold linux-image-generic
六、排查思路决策树
技术难度:综合
七、附录
7.1 系统日志位置速查表
| 日志文件路径 | 用途 | 适用发行版 |
|---|---|---|
| /var/log/syslog | 系统综合日志 | Debian/Ubuntu |
| /var/log/messages | 系统综合日志 | RHEL/CentOS |
| /var/log/auth.log | 认证和授权日志 | 所有系统 |
| /var/log/kern.log | 内核日志 | 所有系统 |
| /var/log/boot.log | 系统启动日志 | 所有系统 |
| /var/log/dmesg | 内核环缓冲区日志 | 所有系统 |
| /var/log/audit/audit.log | 审计日志 | 所有系统(带auditd) |
| /var/log/apache2/ | Apache Web服务器日志 | Debian/Ubuntu |
| /var/log/httpd/ | Apache Web服务器日志 | RHEL/CentOS |
| /var/log/nginx/ | Nginx Web服务器日志 | 所有系统 |
7.2 常见错误代码解析
| 错误代码 | 含义 | 可能原因 | 解决方案 |
|---|---|---|---|
| EIO | I/O错误 | 磁盘故障或硬件问题 | 检查磁盘健康状态 |
| ENOSPC | 设备上没有空间 | 磁盘空间满 | 清理磁盘空间 |
| EACCES | 权限被拒绝 | 文件权限设置不当 | 调整文件权限 |
| ENOENT | 没有那个文件或目录 | 路径错误或文件被删除 | 检查路径是否正确 |
| ECONNREFUSED | 连接被拒绝 | 服务未启动或防火墙阻止 | 检查服务状态和防火墙规则 |
| ETIMEDOUT | 连接超时 | 网络问题或服务无响应 | 检查网络连接和服务状态 |
| ENOMEM | 无法分配内存 | 内存不足 | 释放内存或增加系统内存 |
| EINVAL | 无效的参数 | 命令参数错误 | 检查命令语法和参数 |
7.3 发行版特有命令差异
| 功能 | Debian/Ubuntu | RHEL/CentOS | Fedora |
|---|---|---|---|
| 包管理 | apt, dpkg | yum, rpm | dnf |
| 服务管理 | systemctl | systemctl | systemctl |
| 防火墙 | ufw | firewalld | firewalld |
| 网络配置 | netplan | nmcli | nmcli |
| 内核升级 | apt-get upgrade | yum update kernel | dnf upgrade kernel |
| 系统更新 | apt-get update && apt-get upgrade | yum update | dnf upgrade |
| 硬件信息 | lshw | lshw | lshw |
==重要提示==:执行系统级操作前,务必确认操作的影响范围并备份关键数据。不同Linux发行版可能存在命令差异,请根据实际环境调整命令。
【免费下载链接】Script-Reset-Windows-Update-ToolThis script reset the Windows Update Components.项目地址: https://gitcode.com/gh_mirrors/sc/Script-Reset-Windows-Update-Tool
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考