使用rsync快速上传与另一个文件相似的文件

Sim*_*son 6 deployment rsync file-transfer

我正在整理一个部署脚本,它对我的​​代码目录进行 tar 处理,在当前日期和时间之后命名 tar 文件,将其推送到服务器,将其解压到同名目录中,然后交换“当前" 符号链接指向新目录。这意味着我的旧部署保留在带时间戳的目录中(至少在我删除它们之前)。

tar 文件大约 5MB,传输需要将近一分钟。我想加快速度。

我假设每个新的 tarball 在结构上都与以前的 tarball 非常相似(因为我经常只在两次部署之间更改几行源代码)。有没有办法利用这个事实来加速我使用 rsync 的上传?

理想情况下我想说“嘿rsync,将这个名为2009-10-28-222403.tar.gz的本地文件上传到我的服务器,但它与文件2009-10-27-101155.tar只有一点点不同.gz 已经在那里了,所以试着把差异发送出去”。这是可能的,还是我应该查看其他工具?

Zor*_*che 6

我正在整理一个部署脚本,它对我的​​代码目录进行 tar 处理,在当前日期和时间之后命名 tar 文件,将其推送到服务器,将其解压到同名目录中,然后交换“当前" 符号链接指向新目录。

就我个人而言,我认为您应该跳过使用 tar,转而使用rsync的 --link-dest 或 --copy-dest 功能。link-dest 函数非常酷,它会知道查看目录的先前同步,如果文件相同,它将把它们硬链接在一起,跳过每次重新传输文件的需要。

mkdir -p /srv/codebackup/2009-10-12 \
         /srv/codebackup/2009-10-13

# first backup on 10-12
rsync -a sourcehost:/sourcepath/ \
         /srv/codebackup/2009-10-12/

# second backup made on 10-13
rsync -a --link-dest=/srv/codebackup/2009-10-12/
         sourcehost:/sourcepath/ \
         /srv/codebackup/2009-10-13/
Run Code Online (Sandbox Code Playgroud)

您第二次运行 rsync 只会传输更改的文件。相同的文件将被硬链接在一起。您可以删除旧树,新备份仍将 100% 完成。您将节省大量存储空间,因为您不会保留相同文件的多个副本。

  • 我现在正在使用这个技巧,我部署到远程服务器的时间从 60+ 秒减少到大约 3 秒!非常感谢。 (2认同)
  • 对于想要尝试此操作的任何其他人,请确保在所有目录参数中包含尾部斜杠 - 它们很重要,如果您不使用它们,您最终会创建不同的目录结构。 (2认同)