软连接导致的 Ubuntu 系统盘爆满事件纪录

软连接导致的 Ubuntu 系统盘爆满事件纪录

事件时间:2025-11-26 至 2025-12-10
系统:Ubuntu 22.04 LTS(桌面版)
现象:SSH 逐渐卡顿 → 彻底卡死 → 系统盘仅剩 497 MB → /var/log/syslog 单文件 20 GB

起因:图方便,创了一个跨磁盘软连接

  1. 我一开始分配的系统盘太小(仅 48 GB)

  2. 项目文件在外置磁盘 /mnt/data/Projects
    → 每次 cd 麻烦,于是创建软链:

    ln -s /mnt/data/Projects ~/Projects
    ln -s /mnt/data/miniconda3 ~/miniconda3
    
    
  3. 继续开发,一周无异常。

初现症状:VS Code SSH 逐渐卡顿

  • 终端 SSH 正常,仅 VS Code Remote SSH 出现:
    • 输入密码后无 bash 提示符
    • 偶尔能进,但几秒后卡死
  • 误判:我以为是 VS Code 服务器扩展 .vscode-server 缓存过大(当时这个文件瞬间增长 5个G)
    → 把缓存搬到外置盘,继续 coding。

SSH 彻底卡死,系统盘爆满

2025-12-10 清晨:

  • 任何 SSH 连接均卡在 shell request 阶段
  • df -h 显示 / 使用率 99%,剩余 497 MB
  • ls -lh /var/log/syslog20 GB 单文件
(base) our0boros@our0boros-ML-Machine:~/Projects$ df -h
df: /tmp/fuse: Transport endpoint is not connected
Filesystem                 Size  Used Avail Use% Mounted on
tmpfs                      3.1G  5.1M  3.1G   1% /run
/dev/nvme0n1p6              48G   45G  497M  99% /
tmpfs                       16G  184K   16G   1% /dev/shm
tmpfs                      5.0M  4.0K  5.0M   1% /run/lock
efivarfs                   128K   60K   64K  49% /sys/firmware/efi/efivars
/dev/nvme0n1p3             438G  137G  302G  32% /mnt/windows
/dev/nvme0n1p4             467G  407G   60G  88% /mnt/data
/dev/nvme0n1p1             196M   37M  160M  19% /boot/efi
//192.168.3.5/136xxxx0867  3.6T  2.2T  1.5T  60% /mnt/samba_share
tmpfs                      3.1G  308K  3.1G   1% /run/user/1000
tmpfs                      3.1G   84K  3.1G   1% /run/user/128

紧急排查 20 GB 日志

# TOP 写入进程
sudo tail -n 500000 /var/log/syslog | awk '{print $5}' | sort | uniq -c | sort -nr | head
# 结果:systemd[1258] 118192 条/小时

继续深挖:

journalctl --user -eu tracker-miner-fs-3.service -n 20

结果排查发现:

  • GNOME 文件索引器 tracker-miner-fs-3 默认跟随软链
  • 遇到外置盘 /mnt/data/Projects 导致 遍历卡死
  • 每秒崩溃一次 → systemd 用户级无限重启 → 每秒 30+ 条日志10 GB/日

先让 SSH 能进

停用 miner

systemctl --user stop    tracker-miner-fs-3.service
systemctl --user disable tracker-miner-fs-3.service
systemctl --user mask    tracker-miner-fs-3.service
pkill -f tracker-miner-fs-3

清理巨型日志

sudo truncate -s 0 /var/log/syslog
sudo logrotate -f /etc/logrotate.d/rsyslog

结果

  • SSH 正常了,系统盘可用 立即回到 22 GB
  • tail -f syslog 10 秒无 tracker 日志

根治防止以后再涨 20 GB

# 1. 禁止索引器跟随软链接
mkdir -p ~/.config/tracker3
cat > ~/.config/tracker3/tracker-miner-fs-3.cfg <<'EOF'
[General]
FollowSymlinks=false
EOF

# 2. 把外置盘目录加入黑名单
gsettings set org.freedesktop.Tracker3.Miner.Files ignored-directories "['Projects', 'miniconda3']"

# 3. rsyslog 加限速(防止任何进程意外刷屏)
echo '$SystemLogRateLimitInterval 1
$SystemLogRateLimitBurst 200' | sudo tee /etc/rsyslog.d/99-rate-limit.conf
sudo systemctl restart rsyslog

预防脚本

#!/usr/bin/env bash
# save as: prevent-tracker-bloat.sh
set -e
echo "=== 禁止 tracker 跟随软链接 ==="
mkdir -p ~/.config/tracker3
cat > ~/.config/tracker3/tracker-miner-fs-3.cfg <<'EOF'
[General]
FollowSymlinks=false
EOF

echo "=== 黑名单大目录 ==="
gsettings set org.freedesktop.Tracker3.Miner.Files ignored-directories "['Projects', 'miniconda3', 'vm', 'node_modules']"

echo "=== rsyslog 限速 ==="
echo '$SystemLogRateLimitInterval 1
$SystemLogRateLimitBurst 200' | sudo tee /etc/rsyslog.d/99-rate-limit.conf
sudo systemctl restart rsyslog

echo "=== 完成,今后不会再被 tracker 灌爆 syslog ==="
chmod +x prevent-tracker-bloat.sh
./prevent-tracker-bloat.sh

复盘

“软链指向外置盘 + GNOME 索引器默认跟随 + 无日志限速”

这边建议:

  • 小系统盘 + 大软链: 先加黑名单
  • 默认服务: 看完参数再上线
  • 日志无限速: 迟早爆满

posted on 2025-12-10 14:02  乌洛斯如是说  阅读(0)  评论(0)    收藏  举报