服务器异常磁盘写排查手册 · 已删除文件句柄篇
适用范围
适用于磁盘写满 ≥ 90 %,但 du
与 df
差距 ≥ 50 % 的紧急事件。
1. 现象确认
# 1.1 确认已删除文件占用
lsof +L1 2>/dev/null | awk '$7 > 50000000 {print $2, $7/1024/1024 "MB", $9}'
# 输出示例:2817 7832MB /tmp/.x86_64 (deleted)
2. 样本提取与静态分析
PID=2817
cp /proc/$PID/exe /tmp/sample.bin
file /tmp/sample.bin
# ELF 64-bit LSB executable, statically linked, stripped
strings /tmp/sample.bin | grep -E 'stratum|gulf\.moneroocean\.stream'
3. 网络行为取证(无 rootkit 时)
使用 auditd
记录进程外联:
# /etc/audit/rules.d/mine.rules
-a always,exit -F arch=b64 -S connect -F pid=2817 -k mine_out
重载并查看:
sudo systemctl restart auditd
sudo ausearch -k mine_out -i
若出现 saddr=45.142.214.12
则与威胁情报匹配。
4. 止血(不停业务)
# 4.1 临时黑洞矿池网段
ip route add blackhole 45.142.214.0/24# 4.2 释放已删除文件占用的空间
kill -9 2817
echo 2 > /proc/sys/vm/drop_caches
5. 加固与长期方案
- 挂载层加固
将/tmp
改为独立tmpfs
并加ro,nosuid,nodev
:mount -t tmpfs -o ro,nosuid,nodev,size=1G tmpfs /tmp
- 接入层收敛
业务域名解析到高防 Anycast IP,源站仅暴露 922 (SSH) 和 443 (HTTPS);边缘节点提供托管 WAF 规则集,自动拦截已知挖矿 User-Agent。 - 日志留存
高防平台以 Parquet 格式投递 7 天原始请求日志至 S3 兼容桶,生命周期 30 天后自动冷存,符合企业内部审计要求。
6. 小结
lsof +L1
是定位“已删未关”文件的最快路径- 黑洞路由 + drop_caches 可在不重启服务的情况下恢复磁盘空间
- 将入口流量托管至具备 Anycast + 行为识别能力的边缘网络,比本地堆叠 iptables 规则更具可扩展性