如何在 Linux 上为许多用户启用增量文件同步如何在 Linux 上为许多用户启用增量文件同步如何在 Linux 上为许多用户启用增量文件同步如何在 Linux 上为许多用户启用增量文件同步
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Linux 上为许多用户启用增量文件同步

假设您作为软件开发人员出于测试目的设置了软件的日常构建。每天创建一个新版本,用户都必须重新下载更新的版本来对其进行评估。在这种情况下,您可能希望启用差异下载,以便用户只能下载两个版本之间的差异,从而节省服务器的带宽。用户也会很高兴,因为他们不必等待重新下载整个内容。当您想要设置允许用户增量同步的下载存档时,也会遇到类似的情况。

在这些情况下,如何为多个用户有效地分发增量更新的文件?事实上,有一些内置“增量同步”功能的开源存储解决方案,例如 ownCloud 或 Syncthing。这些具有内置 GUI 的成熟解决方案要求用户安装专用客户端,因此对于您正在寻找的简单文件分发来说可能有点过分了。

除非使用像这样的成熟的第三方软件,否则可能会想到 rsync,它可以进行带宽高效的文件同步。然而,rsync 的问题是所有繁重的计算都是在服务器端完成的。也就是说,当客户端请求文件同步时,服务器需要执行逐块校验和计算并搜索客户端上不可用的块。显然,如果服务器需要处理许多用户,则此过程会对服务器的资源造成很大的压力,因此不可扩展。

什么是 Zsync?

这时,名为 zsync 的命令行工具就派上用场了。虽然 zsync 使用与 rsync 相同的基于增量编码的同步算法,但它将繁重的计算从服务器转移到客户端。我这么说是什么意思?

那么,在 zsync 中,服务器为要分发的文件维护一个单独的 .zsync 元数据文件,其中包含文件各个块的“预先计算”校验和列表。当zsync客户端请求文件同步时,客户端首先下载.zsync元数据文件,并执行逐块校验和计算以自行查找丢失的块。然后,客户端使用 HTTP 范围请求来请求丢失的块。正如您所看到的,服务器完全脱离了同步算法的循环,只是通过 HTTP 提供请求的文件块,这使得它在许多用户需要增量文件同步时成为理想选择。

以下是 rsync 和 zsync 之间服务器端开销差异的快速概述。在下图中,当 200 个用户下载 tarball 文件时,我比较了 rsync 和 zsync 的服务器 CPU 使用情况,与之前版本的差异为 2.5%。为了公平比较,rsync 不使用 SSH。

使用zsync,由于所有校验和计算开销已从服务器转移到各个客户端,因此服务器开销显着降低。一个巧妙的小创意让 zsync 成为真正的赢家!

在本教程的其余部分中,我将展示如何在 Linux 环境下使用 zsync 增量分发文件。

zsync:客户端设置

在客户端,您需要安装 zsync 以启动从远程 Web 服务器的文件传输。 zsync 非常轻量级,并且包含在大多数 Linux 发行版中。以下是如何在各种发行版上安装 zsync。

对于 Debian、Ubuntu 或 Linux Mint:


$ sudo apt-get install zsync

对于费多拉:


$ sudo yum install zsync

对于 CentOS 或 RHEL:

首先,启用 Repoforge 存储库,然后运行:


$ sudo yum install zsync

对于 Arch Linux:


$ sudo pacman -S zsync

zsync:服务器端设置

在服务器端,您几乎只需要一个支持 HTTP/1.1 的 Web 服务器。任何商品网络服务器都可以。对于要使用 zsync 分发的每个文件,您需要准备一个 .zsync 元数据文件。

您可以使用 zsync 包附带的 zsyncmake 命令行工具创建 .zsync 文件。以下是创建 .zsync 元数据文件的步骤。在安装了 zsync 的任何 Linux 计算机上执行以下步骤。

假设您要分发已使用 gzip 压缩的文件 custom.tar.gz。

首先,解压缩 custom.tar.gz。如果文件未压缩,则可以跳过此步骤。


$ gunzip custom.tar.gz

接下来,使用 zsyncmake 和 -z 选项压缩文件。


$ zsyncmake -z custom.tar

它将以 gzip 格式 (custom.tar.gz) 压缩输入文件,并创建相应的 .zsync 元数据文件 (custom.tar.zsync)。

我们使用 zsyncmake 而不是使用 gzip 来压缩它的原因是 zsyncmake 压缩使得压缩文件可以增量更新。

最后,将 custom.tar.gz 和 custom.tar.zsync 上传到运行 Web 服务器的主机。确保将两个文件上传到同一目录。

使用 Zsync 增量下载文件

一旦服务器和客户端都准备就绪,您就可以继续在客户端上运行 zsync,如下所示。


$ zsync http://192.168.1.239/custom.tar.zsync

请注意,您应该指向 .zsync 元数据文件的 URL,而不是要下载的 tarball。

第一次下载将从服务器获取整个 tarball。

随着时间的推移,如果远程 tarball 更新,您可以使用相同的命令重新下载更新的文件。 zsync会自动检测变化,并执行增量下载。

显然,您需要在先前下载的 tarball 所在的同一目录中重新运行 zsync。旧的 tarball 将被重命名(使用 .zs-old 扩展名),并且新的 tarball 将在当前目录中构建。

如果之前下载的 tarball 在其他地方,您可以使用 -i 选项显式指定位置。


$ zsync -i /backup/custom.tar http://192.168.1.239/custom.tar.zsync

结论

在本教程中,我将展示如何使用 zsync 增量下载远程文件,同时给服务器带来很少的开销。有些地方已经使用了 zsync(例如 Ubuntu 每日 ISO 映像或 Debian live ISO 映像)。现在您知道看到 .zsync 文件时该怎么做。

©2015-2025 艾丽卡 support@alaica.com