奇怪的 rsync 问题 - 复制和解压文件

奇怪的 rsync 问题 - 复制和解压文件

我有两台服务器:我们的生产 Web 服务器 (freebsd) 和一台备份服务器 (centos)。生产服务器每 3 小时转储一次 mysql 数据库,并使用 bzip2 压缩转储文件。因此我们在 /backups/dumps/ 有一个文件夹,文件类似于 database_dump-20120119_152100.bz2。

在我们的备份服务器上,我们有一个 /BackupRaid/webserver/ 文件夹。在此服务器上,每 3 小时运行一次 rsync 脚本,将生产服务器上的 /backups/dumps 文件夹同步到备份服务器上的 /BackupRaid/webserver 文件夹。其中一个备份文件大约有 500MB。如果解压,则有 3.2GB。

多年来,这一流程一直运行良好。但最近我检查了备份服务器,发现在过去一周,每 3 小时的时间段内都会有一个 500MB 的 bz2 文件,正如预期的那样,但每个文件都有一个 3.2GB 的未压缩版本。所以现在文件数量翻倍了,每个时间段一个未压缩,一个压缩。

我会找出下一次同步的时间,然后坐下来监控它。在备份服务器上,我看到一个“.database_dump-201201119_182100.tlv1d4”文件,这意味着 rsync 正在进行中。我观察着这个文件,它的大小越来越大,超过了它应该有的 500MB。它继续下载一个 3.2GB 的解压转储文件。我登录到 Web 服务器并检查它正在同步的文件夹,文件夹中只有 500MB 的 bz2 文件。一旦它完成了 3.2GB 的文件,它就会继续下载 500MB 的 bz2 文件。

那么它从哪里得到这个 3.2GB 未压缩的转储文件呢?它的行为就好像远程服务器在传输之前解压文件,将 3.2GB 的转储文件传输到备份服务器,然后备份服务器再次将其压缩回 500MB 大小。

我使用 lsof,grepped 查找文件名,找到 rsync 进程的 PID。检查 PID,ps aux果然它来自我的脚本。我的脚本是一个非常简单的命令:

#Rsync files, timeout set to 5 seconds
until rsync -avv --progress --partial --timeout=5 "${SOURCE_USER}"@"${SOURCE_SERVER}":"${SOURCE_PATH}" "${TARGET_PATH}";
do echo "Didn't quite get the whole file before an error/timeout occurred. Restarting where it left off..." >&2;
sleep 1;
done

到底是怎么回事??

答案1

看起来您正在使用-a带有 rsync 的开关,它等同于-rlptgoD,其中包括递归、链接、文件时间等。

最重要的是,从您发布的命令来看,您似乎正在调用源端的路径。

因此,当使用路径时,使用-a-r开关,rsync 将同步路径中的所有文件。我假设大文件也存在于源路径中,因此它也被复制。

答案2

听起来好像开始bzip2之前还没完成rsync。顺便问一下 - 您是否删除过两边的转储?

相关内容