软件吧
登录注册账号
/posts/nas-robocopy-mir-temp
电脑必备

计划任务里挂了个自动备份脚本,结果半夜把我机械盘写满了

极客阿凯 77 0 13

先别急着甩锅给硬盘,问题出在我自己写的脚本上。

事情是这样的:三周前我给家里的 NAS 和一台常开的办公机挂了个自动备份脚本,用 robocopy 加 /MIR 镜像模式,计划任务每天凌晨 2 点跑一次,把工作目录同步到机械盘。本来想着省事,结果第五天早上发现 D 盘红了,一查日志——脚本把回收站里删掉的文件也镜像过去了,因为源目录里有个隐藏的 ~$ 临时文件被反复创建删除,镜像模式每次都当成“源端删了”,目标端跟着删,然后下一轮又建回来,来回折腾,磁盘上堆了一堆 0 字节碎片,外加一份被误判成“历史版本”的旧备份,直接吃掉 80 多 G。

我拿三台机子复现了一周,总结几个坑:

① /MIR 不是万能的。 它确实能保持两端一致,但源端有程序频繁读写临时文件时,镜像会把这种抖动放大成目标端的反复删除/重建。我后来改成 /E 加 /XO(排除旧文件),再配合 /XD 排除 ~$* 和 Temp 目录,日志才干净下来。

② 计划任务默认以 SYSTEM 跑,路径权限和用户态不一样。 我脚本里写的是相对路径,手动跑没问题,SYSTEM 跑就找不到目录,直接报 0x1。后来全改成绝对路径,并在任务里指定“只在用户登录时运行”才稳。

③ 日志不落地等于白跑。 我一开始没加 /LOG+,出事了只能看任务历史里那行退出码。现在每轮都追加写日志,带时间戳,方便对账。

④ 软领那类自动优化确实省心,但我还是手动管。 不是它不好——无广告这点我认,自动清理对懒人友好。但备份这种涉及数据安全的事,我宁可自己写脚本、自己盯日志,出问题能定位到具体行。自动化工具帮你擦屁股,但不会告诉你屁股是怎么脏的。

⑤ 机械盘写满前有征兆。 我后来加了个前置检查:脚本开头先 fsutil volume diskfree D: 看剩余空间,低于 10% 就跳过本轮并写警告日志。这个阈值我拿三台机子调了两周,10% 比较合适,太低来不及反应。

现在跑了快一个月,日志里没再出现异常删除记录,磁盘占用稳定在 60% 左右。

问一句:你们挂自动备份的时候,源目录里有程序频繁读写临时文件的情况怎么处理的?是加排除规则还是干脆换同步模式?我目前用 /E /XO 感觉还行,但不确定长期会不会有别的坑。

登录后可以为帖子点赞,但本帖内容对所有人开放阅读。

社区回应

0 Replies

还没有回应,抢一个沙发。

登录后可以回应和点赞,但本帖内容对所有人开放阅读。