博客

  • 排查 Linux 磁盘空间突然增长

    磁盘告警经常发生在最不方便的时间。直接删除大文件虽然能暂时止血,却可能破坏数据库或让问题很快复发。我的排查顺序通常从文件系统开始,再逐层缩小范围。

    确认是容量还是 inode

    df -hT
    df -ih

    df -h 显示容量,df -i 显示 inode。大量零碎缓存文件可能没有占满容量,却耗尽 inode,表现同样是无法创建新文件。

    寻找增长最快的目录

    du -xhd1 / 2>/dev/null | sort -h
    du -xhd1 /var 2>/dev/null | sort -h
    find /var/log -type f -size +100M -printf '%s %p\n' | sort -n

    -x 可以避免跨到其他挂载点。不要一开始就在根目录执行无限深度的扫描,这会带来明显 IO 压力。

    别漏掉“已删除但仍被占用”的文件

    lsof +L1

    进程仍持有已经删除的日志文件时,du 看不到它,df 却不会释放空间。此时应让对应服务重新打开日志,通常是安全地 reload 或 restart,而不是强行处理文件描述符。

    处理后建立限制

    确认来源后,再检查 logrotate、systemd journal、容器日志或应用缓存策略。可以用 journalctl --vacuum-time=14d 控制历史日志,但执行前应确认日志保留要求。一次好的磁盘排查,最后应该留下限制策略和监控阈值,而不只是腾出几 GB 空间。

  • Ubuntu 小型服务器的更新与回滚清单

    给一台长期运行的小型 Ubuntu 服务器做更新,真正重要的不是输入 apt upgrade,而是确保更新前知道它正在提供什么服务,更新后也能迅速确认业务是否恢复。下面是我现在使用的一份简化清单。

    更新前先记录现场

    先确认磁盘、内存和失败的服务,避免把旧问题误判成升级故障:

    df -hT
    free -h
    systemctl --failed
    ss -lntup
    journalctl -p warning -b --no-pager

    如果机器承担数据库或文件共享任务,还应做一份应用级备份。虚拟机快照很方便,但它不能替代可独立恢复的数据备份。

    分开执行下载和升级

    apt update
    apt list --upgradable
    apt upgrade

    先看待升级列表,尤其留意内核、数据库、SSH 和网络组件。生产环境中不建议顺手执行来源不明的一键脚本,也不要在没有控制台的情况下同时修改 SSH 和防火墙。

    更新后的四项检查

    • 关键 systemd 服务是否为 active;
    • 监听端口是否符合预期;
    • 从另一台机器进行一次真实连接;
    • 检查本次启动和最近十分钟的错误日志。
    systemctl --failed
    journalctl --since "-10 min" -p warning
    uname -r

    需要重启时先确认是否存在内核更新,再安排窗口。回滚方案至少要包含配置备份、数据备份以及可用的控制台入口。清单不复杂,但每次都照着做,比依赖记忆可靠得多。