软连接导致的 Ubuntu 系统盘爆满事件纪录
软连接导致的 Ubuntu 系统盘爆满事件纪录
事件时间:2025-11-26 至 2025-12-10
系统:Ubuntu 22.04 LTS(桌面版)
现象:SSH 逐渐卡顿 → 彻底卡死 → 系统盘仅剩 497 MB →/var/log/syslog单文件 20 GB
起因:图方便,创了一个跨磁盘软连接
-
我一开始分配的系统盘太小(仅 48 GB)
-
而项目文件在外置磁盘
/mnt/data/Projects
→ 每次cd麻烦,于是创建软链:ln -s /mnt/data/Projects ~/Projects ln -s /mnt/data/miniconda3 ~/miniconda3 -
继续开发,一周无异常。
初现症状: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 MBls -lh /var/log/syslog→ 20 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 syslog10 秒无 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 索引器默认跟随 + 无日志限速”
这边建议:
- 小系统盘 + 大软链: 先加黑名单
- 默认服务: 看完参数再上线
- 日志无限速: 迟早爆满
浙公网安备 33010602011771号