Ubuntu Server 常见故障排查指南
Ubuntu Server(以24.04 LTS Noble Numbat系列及后续版本为主)在生产环境中会遇到多种典型故障。这些问题大多源于配置漂移、资源耗尽、软件依赖冲突、云环境特性或安全事件。以下按发生频率与影响严重度排序,列出最常见的10类故障、典型症状、根本原因分析以及系统化排查/修复思路。
1. 磁盘空间耗尽(No space left on device)——最常见生产故障
典型症状:无法写入新文件、服务崩溃、apt update失败、日志停止写入 高概率原因:
- journald持久化日志无限增长(/var/log/journal)
- Docker/Podman镜像、容器、volume堆积(/var/lib/docker)
- apt缓存未清理 + snap旧版本残留
- /tmp或用户缓存爆炸
- Inode耗尽(小文件过多)
排查与修复思路:
- df -hT + df -i → 定位满的分区与inode使用
- sudo du -sh /* | sort -hr | head → 找大目录
- 重点检查:journalctl --disk-usage → vacuum-size=500M 或配置SystemMaxUse
- apt clean + autoremove;snap list --all清理disabled版本
- docker system prune -a --volumes(慎用)
- lsof / | grep deleted → 重启持有已删文件句柄的服务释放空间
2. 系统运行缓慢 / 高负载 / 响应卡顿
典型症状:SSH输入延迟、命令执行慢、Web/API超时、load average远超核数 高概率原因:
- CPU steal高(云超售)
- 内存压力 → swap thrashing
- IO等待高(日志/数据库写满)
- 单个进程吃光资源(内存泄漏、挖矿脚本)
排查思路:
- uptime / top / htop → load平均值、各核使用、iowait
- free -h + vmstat 1 5 → swap使用、si/so列
- mpstat 1 5 → %steal(>5–10%基本是云问题)
- iotop -o / pidstat -d → 找IO狂魔
- journalctl --disk-usage + du -sh /var/log/* → 日志爆炸
- ps aux --sort=-%cpu/-mem | head → 定位异常进程
快速缓解:kill -9 异常PID、重启服务、临时journal vacuum、启用zram
3. 网络/DNS/连接问题(无法apt update、ping外网失败)
典型症状:能ping IP但域名不通、apt 404/超时、SSH间歇断开 高概率原因:
- Netplan配置错误(YAML缩进、dhcp4未关)
- systemd-resolved异常(DNS缓存或stub-resolver冲突)
- 云元数据网络覆盖
- 防火墙/UFW误封
- 仓库服务器临时故障(2025年曾多次出现)
排查思路:
- ip addr / ip route → 接口IP、默认路由是否存在
- cat /etc/resolv.conf → nameserver是否正确(8.8.8.8等)
- ping 8.8.8.8 vs ping www.google.com → 区分链路 vs DNS
- systemd-resolve --status 或 resolvectl status → 检查resolved状态
- sudo netplan apply → 重新应用配置
- 临时:echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
4. 服务启动失败 / Failed to start xxx.service
典型症状:systemctl status 显示failed、journalctl -u 服务名报错 高概率原因:
- 配置语法错误(nginx.conf、my.cnf等)
- 端口冲突
- 权限问题(文件所有者/SELinux/AppArmor)
- 依赖服务未启动
- 资源限制过严(MemoryMax等)
排查思路:
- systemctl status 服务名 -l -n 50 → 最近日志
- journalctl -u 服务名 -xe → 详细错误
- systemctl cat 服务名 → 查看最终加载的配置(含override)
- ss -tuln | grep 端口 → 检查占用
- AppArmor:aa-status + aa-logprof 修复拒绝
5. 开机卡住 / 进入initramfs / emergency mode
典型症状:grub后黑屏、busybox提示、emergency shell 高概率原因:
- 根分区UUID变化(磁盘顺序变、LVM失败)
- initrd缺少驱动(新硬件、加密磁盘)
- 文件系统损坏(ext4 dirty)
- cloud-init卡住(云元数据不可达)
排查思路:
- 进入emergency shell后 mount -o remount,rw /
- journalctl -xb 或 dmesg → 查看内核错误
- fsck -f /dev/对应分区 → 修复文件系统
- update-initramfs -u -k all → 重建initrd
- blkid → 核对UUID与 /etc/fstab 匹配
6. SSH登录失败 / 连接超时 / Permission denied
典型症状:Connection refused、Permission denied (publickey)、超时 高概率原因:
- sshd未启动或端口被UFW封
- 密钥权限700/600不对
- PasswordAuthentication no 但无密钥
- 云安全组未放行22端口
- fail2ban/CrowdSec误封自己IP
排查思路:
- 云控制台登录检查 systemctl status ssh
- ufw status → 是否allow ssh
- journalctl -u ssh -n 100 → 认证失败记录
- chmod 700 ~/.ssh;chmod 600 ~/.ssh/authorized_keys
- fail2ban-client status sshd → 查看ban列表
7. apt update/upgrade失败(仓库不可达、签名错误)
典型症状:404 Not Found、Hash Sum mismatch、NO_PUBKEY 高概率原因:
- 镜像源网络问题或过期
- 仓库服务器临时故障(2025年多次发生)
- sources.list 被修改
- 时间不同步(证书验证失败)
排查思路:
- timedatectl → 时间/时区正确
- sudo apt update → 看具体报错
- 换源:sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/' /etc/apt/sources.list
- apt-key adv --refresh-keys 或 gpg --keyserver keyserver.ubuntu.com --recv-keys
8. 安全入侵/挖矿/异常进程
典型症状:CPU异常高、未知进程(kdevtmpfsi、kinsing等)、chattr +i 锁定文件 排查思路:
- top/htop → 排序CPU/内存
- ps auxf | grep 可疑
- netstat -tuln / ss -tuln → 异常监听端口
- last / w / who → 可疑登录
- find / -name "[0-9a-f]{32}" 或 strings 可疑二进制 → 特征匹配
- journalctl -u ssh + auth.log → 暴力破解记录
9. Snap/Docker相关问题
典型症状:snap refresh卡死、docker pull失败、容器启动慢 排查思路: snap:snap changes + snap refresh --hold docker:docker info → storage-driver、df -h /var/lib/docker
10. 云环境特有问题
- 元数据不可达 → cloud-init失败
- 磁盘未扩展 → growpart + resize2fs
- 高steal → 升级实例规格
通用排查框架
- 描述问题:症状、复现条件、最近变更
- 快速扫描:uptime、top/free/df/iostat/mpstat
- 日志优先:journalctl -b -p err、dmesg、/var/log/syslog/auth.log
- 分层定位:硬件→内核→initrd→systemd→服务→应用
- 验证修复:改动后重启服务/系统测试
掌握以上常见故障的症状与一分钟快速检查命令,能解决90%以上的Ubuntu Server日常问题。生产环境建议部署Netdata/Prometheus实时监控 + 告警,提前发现异常趋势。
