记一次大文件同步到本地

Posted by 呆贝斯 on August 25, 2023

问题场景

公司线上过期业务数据需要删除,删除前需要备份到本地一份。

思考

如何让传输速度够快? 分块多进程或多线程传输。

如何保证传输中断后,任务可以重新执行? 任务需要设置保活,传输失败能重新执行任务。

如何防止传输中断后,不至于全部重传,而是从中断处重新传送? 工具需要支持源目录和目标目录比较,传输增量部分。

远程文件同步到本地有哪些方式,优缺点?

  1. scp
    • 优点 简单方便,安全可靠;支持限速参数
    • 缺点 不支持排除目录 + 用法 scp [参数] <源地址(用户名@IP地址或主机名)>:<文件路径> <目的地址(用户名 @IP 地址或主机名)>:<文件路径>

      scp就是secure copy,是用来进行远程文件拷贝的。数据传输使用 ssh,并且和ssh 使用相同的认证方式,提供相同的安全保证。

  2. rcp
    • 优点
    • 缺点
    • 用法 目标主机需要事先打开rcp功能,并设置好rcp的权限:把源主机加入到可信任主机列表中,否则无法在源主机上使用rcp远程复制文件到目标主机。
  3. wget
    • 优点 简单方便,支持排除目录,支持限速参数。
    • 缺点 只能从远程机器将文件或文件夹下载到本地,并且远程机器需要支持ftp服务(例如启动proftpd);参数较多,使用上比scp复杂。
    • 用法 wget [参数] ftp://<目标机器ip或主机名>/<文件的绝对路径> #proftpd格式

      wget是一个从网络上自动下载文件的自由工具,支持通过HTTP、HTTPS、FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理。

  4. rsync
    • 优点 功能强大,操作类似scp,支持排除目录,支持限速参数;还支持本地复制。
    • 缺点 暂无
    • 用法 rsync [参数] <源地址(用户名@IP地址或主机名)>:<文件路径> <目的地址(用户名 @IP 地址或主机名)>:<文件路径>

      rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。它的操作方式和scp和相似,但是比scp强大很多。使用双冒号分割主机名和文件路径时,是使用rsync服务器,这里不做介绍。

解决方案

  1. 编写保活逻辑
  2. 编写多任务
  3. 补偿