rsync远程同步
痛点
在一些场景中,需要把一些大文件(几 GB 到 几十 GB)传输到服务器上,理论可用的方法有 通过 http 上传、ssh(scp) 等方法;但 http 上传的逻辑中,需要将文件拷贝至磁盘中某个缓冲区,如此一来不仅需要等待拷贝,还可能面临磁盘空间不足等问题;如果是使用 ssh 等软件,比如 tabby,长时间只传输文件不操作终端可能会被服务器自动断开连接;同时如果传输过程中断开,需要从头开始,不能断点续传
一种解决方案
Rsync 是一个能够在 本地 与 本地或远程 之间同步文件与目录的软件;
Rsync 支持文件元数据同步,支持同步时排除某些文件,每次同步只传输修改的部分(即可断点续传);
Windows 下安装 Rsync
版本参考:
-
安装 git
git for windows: https://git-scm.com/download/win -
下载 zstd
zstd github release: https://github.com/facebook/zstd/releases -
在 msys2 仓库下载 libxxhash、rsync
msys2 repo: https://repo.msys2.org/msys/x86_64/
下载完后把这两个 .zst 文件放到 zstd 目录下,用 zstd.exe 解压
./zstd.exe -d 文件名
解压完得到 tar 包,继续解压,进入这两个包的目录,能看到 usr 文件夹,直接复制到 git 安装目录下
- 打开 git bash,键入 rsync,出现帮助则说明安装完成
版本参考
app | 版本 |
---|---|
git | 2.42.0 |
zstd | 1.5.5 |
libxxhash | 0.8.2 |
rsync | 3.2.7 |
Linux 安装
# Debian
apt install rsync
# CentOS
yum install rsync
使用
# 在需要传输的文件目录下,右键,git bash here
# -a 表示递归同步和同步文件元信息
# -v 表示显示更详细数据
# -e 表示 ssh 参数
# -P 表示显示传输进度
rsync -av -e 'ssh' {source} {destination} -P
# 例:将本地一个大文件传输至远程服务器
rsync -av -e 'ssh' ./TCS-time20230828200420-size30793922560Bytemd52f9089eca7e7a32e5e462e3cfb0c620a.
tar.gz appdeploy@10.207.8.247:/app/tmp/ -P