“No space left on device”但df -h显示空间充足,八成是inode耗尽;需先用df -i确认备份分区IUse%是否达100%,再用du --inodes定位高消耗目录,检查lsof +L1排查已删未释文件,最后安全清理临时文件并配置inode预检与定期prune。

系统备份任务失败却提示“No space left on device”,而 df -h 显示磁盘空间充足——这八成是 inode 耗尽导致的。备份脚本(如 rsync、tar + cron、BorgBackup、Restic)常生成大量临时文件、校验文件、快照元数据或日志碎片,极易在短时间内吃光 inode。排查需直击源头,不靠猜测。
第一步:确认是不是 inode 问题
立刻执行:
df -i重点看备份目标分区(比如 /backup、/var 或根分区 /)的 IUse% 是否达到 100%。注意:
• 各挂载点 inode 池完全独立,不能只查 / 就放心;
• 如果备份写入的是 /backup,就专注查它;
• 若使用 NFS 或 LVM 逻辑卷,也要单独检查其挂载点。
第二步:定位备份相关目录的 inode 消耗
进入备份所在挂载点,用以下命令快速找出“产文件大户”:
du --inodes -s /backup/* 2>/dev/null | sort -nr | head -5常见高危路径包括:
• /backup/rsync/ 下残留的 .~tmp、.partial 文件
• /backup/borg/repo/ 中未 compact 的 chunks 或 stale archives
• /var/lib/backupninja/ 或 /etc/backup.d/ 下的临时锁或状态文件
• /tmp/backup_* 或 /var/tmp/ 中被遗忘的中间压缩包
若发现某子目录 inode 数异常高(例如几十万),再深入一层:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
第三步:检查已删未释和进程干扰
备份脚本中途失败或被 kill 时,常留下被进程打开但已 unlink 的文件,它们仍占 inode:
lsof +L1 | grep backup或全局查找:
lsof | grep deleted | grep -E "(rsync|borg|tar|backup)"典型场景:
• rsync 正在传输时被中断,目标端临时文件被删但句柄未关
• borg create 卡住后手动 kill,repo 的 lock.<pid></pid> 文件残留
• 备份脚本重定向日志到 /var/log/backup.log,而 rsyslog 正在轮转它
解决方式:
• 重启对应服务:systemctl restart rsyslog 或 systemctl restart backupninja
• 若为孤立进程,直接 kill -9 <PID>(谨慎操作)
第四步:安全清理与预防
清理前先确认文件无关业务:
- 删 rsync 临时文件:
find /backup -name ".*~" -o -name ".*.partial" -delete - 清空过期备份缓存:
find /var/tmp -name "backup-*" -mtime +7 -delete - Borg 用户运行:
borg prune --keep-daily=7 --keep-weekly=4,再borg compact
长期预防建议:
• 给备份目录所在分区格式化时加 -T smallfile(ext4)提升 inode 密度
• 在备份脚本开头加入 inode 预检:[ $(df -i /backup | awk 'NR==2 {print $5}' | sed 's/%//') -gt 90 ] && exit 1
• 禁用备份过程中的冗余日志,避免每条 rsync 变更都写一行到磁盘

















