Ubuntu 22.04 上用 rclone 1.65 把附件目录同步到 OSS,源目录四万多个文件,同步完成后远端少了三千多个,rclone check 报 3,412 differences found。
把日志和配置对完,能解释这个现象的基本就这几处。文件名里有特殊字符,OSS 对大小写和符号的处理和本地不同;用了 --size-only 判断相同,改名但大小一致的文件被跳过;过滤规则写反,本该上传的扩展名被 exclude 掉了;中断重跑时没加 --checksum,rclone 认为文件已经存在。
动手时先跑一次差异检查看具体文件
rclone check /data/upload oss:cdn-upload --size-only --differ 2>&1 | head -20
然后核对过滤规则命中数量
rclone ls /data/upload --include '*.jpg' | wc -l && rclone ls oss:cdn-upload --include '*.jpg' | wc -l
随后改成按校验和同步并加重试
rclone sync /data/upload oss:cdn-upload --checksum --transfers 8 --retries 3 --low-level-retries 10
补齐遗漏再核对数量
rclone copy /data/upload oss:cdn-upload --checksum --ignore-existing -v 2>&1 | tail -5
别只看报错消失,验证要多做一步。rclone check 的差异数归零,两边对象数量一致,抽查几个中文名文件能正常下载。
容易忽略的是,sync 会删掉目标端多余的对象,第一次跑先用 --dry-run 看清单;OSS 会对特殊字符做编码,中文名最好先统一规范再同步。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
