最稳省内存的百gb异地备份方式是tar流式输出+gzip压缩+ssh传输,全程不写临时文件;必须用tar -cf - | gzip -1 | ssh ...三段式管道,禁用tar -czf以免本地占盘;需加--one-file-system、--warning=no-file-ignored等健壮性控制,并用pv监控、sha256sum校验及跳板机中转保障可靠性。

直接用 tar 流式输出 + gzip 压缩 + 网络传输,是百GB级数据异地备份最稳、最省内存、最不占本地磁盘的方式。核心在于全程不写临时文件,所有数据在内存中“边打包、边压缩、边发走”。
关键命令结构:三段式管道不可拆
必须用以下结构,缺一不可:
-
tar -cf -:用
-表示输出到 stdout(不是文件),-c创建归档,-f -是强制约定 - gzip -1 或 -6:接在管道后压缩;-1 最快,适合大文件和定时任务;-6 平衡,日常首选;别用 -9(耗时翻倍,收益极小)
- ssh user@backup-host "cat > /backup/full-$(date +%Y%m%d).tar.gz":远程接收并落盘,避免本地存任何中间数据
完整示例:
tar -cf - /var/log /etc/nginx | gzip -1 | ssh backup@10.20.30.40 "cat > /backup/prod-$(date +%Y%m%d).tar.gz"为什么不能用 tar -czf?
tar -czf 看似简洁,但它会把整个归档+压缩结果先写到本地磁盘再传输——对百GB数据意味着:临时占用同等大小空间、IO压力大、失败后残留垃圾文件、无法实时监控进度。
而流式管道天然规避这些问题:只要网络通、远端磁盘有空、权限正常,数据就持续流动;中断时本地零残留,重试成本低。
生产环境必须加的健壮性控制
- 加 --warning=no-file-ignored 防静默跳过:某些文件因权限不足被 tar 跳过却不报错,加这个参数让问题暴露
- 加 --one-file-system 防跨挂载点误入:避免 tar 递归进 /proc /sys /mnt/nfs 等非目标路径,导致卡死或传输异常数据
-
用 pv 命令看实时速率:在管道中插入
pv -b -t -r,例如:
tar -cf - /data | pv -b -t -r | gzip -1 | ssh ... -
远程校验用 sha256sum:传输完立刻在远端执行
sha256sum *.tar.gz,本地也对原始目录做快照哈希比对(可用find /data -type f -print0 | xargs -0 sha256sum | sha256sum)
异地容灾链路建议补两层保险
-
首层:走内网跳板机中转:若源机不能直连异地备份服务器,用
ssh -J jump@192.168.1.100 backup@10.20.30.40,避免暴露业务机 SSH 端口 - 次层:启用 rsync --partial --append-verify:首次失败后,后续可断点续传(注意:仅适用于已传一半的 .tar.gz 文件,需远端保留不删)
-
最后加个标记文件:传输成功后,追加一行
echo "OK $(date)" | ssh backup@... "cat >> /backup/.last-success",方便脚本判断状态










