7-Zip 命令行比 GUI 更值钱
备份脚本里别调图形界面,直接调 7z.exe。参数说明:-m0=lzma2 选算法、-mx=9 最高压缩、-md=32m 字典、-ms=on 打开固实模式(大量小文件压缩率提升明显,代价是改单个文件要重解整个包)。-mhe=on 加密文件名,没有密码连目录列表都看不到,比只加密内容安全得多;密码用 -p 交互输入,别写死在脚本里。
7z a -t7z -m0=lzma2 -mx=9 -md=32m -ms=on backup.7z D:work
-xr!node_modules -xr!*.log -p
7z a -v100m -sfx split.exe big.iso # 按 100MB 分卷并做成自解压
7z t backup.7z # 校验完整性
7z x -oD:
estore backup.7z # 解到指定目录,-o 后不要空格
7z l backup.7z # 列内容
格式取舍:发给别人用 zip(通用、不用装软件),自己归档用 7z(压缩率高、支持加密文件名和固实),Linux 之间传用 tar.zst(zstd 快、可流式)。别对已经压缩过的 jpg、mp4、pdf 再上 -mx=9,纯粹白费 CPU,体积几乎不变。
rclone 做远端同步
winget install --id Rclone.Rclone -e
rclone config # 交互式新建 remote,支持 S3 / OSS / OneDrive / WebDAV
rclone lsd oss: # 列桶
rclone copy ./backup oss:mybucket/daily --transfers 4 --checksum
rclone sync ./site oss:mybucket/site --dry-run # 一定先空跑
rclone sync ./site oss:mybucket/site --transfers 4 --bwlimit 10M
rclone check ./backup oss:mybucket/daily --one-way
rclone mount oss:mybucket /mnt/oss --daemon # 挂成本地盘,Windows 需 WinFsp
copy 只增不删,sync 会让目标与源完全一致,目标端多出来的文件会被删掉。上线前永远先加 --dry-run 看一遍将要删什么,这一步能救回整桶数据。大文件用 --transfers 提并发,限速用 --bwlimit,跨对象存储按内容比对加 --checksum 而不是只看大小和时间。要端到端加密就再包一层 crypt remote,在 rclone config 里选 crypt 类型指向已有 remote 的子路径,密码丢了数据就真没了,务必离线保管。
组合成定时备份
典型流程是先用 7z 按日期打包,再 rclone copy 上传,最后按保留策略清理本地旧包。Windows 用任务计划程序、Linux 用 cron 触发下面这个脚本。踩坑:remote 路径写法是 remote:bucket/prefix,别写成 https 开头;sync 误删前面强调过,最危险;中文文件名在某些 WebDAV 服务端会乱码,先小批量试;OAuth 类 remote 的 token 会过期,用 rclone config reconnect 刷新;WebDAV 不支持服务端校验和,--checksum 会退化成比大小和时间,别误以为做了内容校验。
@echo off
set DAY=%date:~0,4%%date:~5,2%%date:~8,2%
7z a -t7z -mx=5 "D:ak%DAY%.7z" D:work -xr!node_modules
rclone copy "D:ak%DAY%.7z" oss:mybucket/daily --checksum
forfiles /p "D:ak" /m *.7z /d -30 /c "cmd /c del @path"
最后别忘了做一次恢复演练:备份脚本天天跑、真出事却发现压缩包损坏或密码忘了,等于没备。每季度挑一个包执行 7z t 再解到临时目录核对文件数,比多写十个脚本都有用。