我正在使用 rsync 将一个目录移动到另一个目录。有什么方法可以让 rsync 在将文件复制到接收者后从发送者中增量删除文件?
我使用 rsync 备份服务器,但这些备份非常大,我想压缩它们。有没有办法在 rsync 周围使用某种包装器来压缩备份中的文件,rsync 实时文件中的更改,然后在复制后立即重新 gzip 文件?
即如果 live 上的源文件是foo、bar和baz,则备份有foo.gz、bar.gz和baz.gz。
重申:我想要一端是压缩文件,另一端是未压缩文件。我不想在 rsyncing 之前进行压缩,因为即使使用 --rsyncable,它也会降低 rsync 的效率。我知道 rsync 的 -z 选项。我在备份机器上没有空间来存储所有未压缩的文件。
有没有办法告诉 rsync 在同步正在进行时跳过其当前文件,也许是通过向它发送特定信号?
我已经知道基于模式的忽略,但这有时对我来说很方便。
我正在尝试设置备份服务器。我想将每个用户(客户端)chroot到其主目录,并且只允许它使用sftp和rsync。
我很快发现我并不是唯一一个尝试做这样的事情的人,我找到了这个指南并遵循了它。所以现在我只有 sftp 的 chroot 用户。
然后我发现 rsync 需要 ssh 才能在另一台机器上生成自己,而 sftp 是不够的。给每个用户一个 ssh 登录是我首先想避免的。
谁能想到一些可能的解决方案?
谢谢,
标记
我们设置了一个 Linux(它在 Amazon AWS 上,一个类似 CentOS 的系统,尽管我们不确定在它上面完成的自定义)系统具有 4TB 存储作为 LVM 上的 XFS 卷(最终用于通过 NFS4 提供服务,但它是尚未使用),并且我们正在使用 rsync 将文件从我们的生产 NFS 服务器同步到 XFS 卷(即我们从 NFS 上的源 rsync 到本地安装的基于 XFS 的 LVM 卷)。但是我们观察到中间的某个时候rsync开始变得越来越迟钝(吞吐量急剧下降),并且平均负载和内存消耗都有很大程度的上升(CPU在iowait中的比例非常大)。最终我重新启动了 XFS 系统,系统显然恢复了正常,至少在过去的 24 小时内,rsync 性能更加正常。
我们检查了 munin 监控图并没有注意到任何明显的东西,但我们发现“inode table size”和“open inode”指标(检查了指向从 /proc/sys/ 读取的值的 munin 插件实现) fs/inode-nr)随着时间的推移不断减少。在我们观察到 rsync 卡住之前不久,我们观察到这两个指标都从几十万下降到了几千(我们的非 XFS 服务器大部分时间保持在大约 500k,并且在很长一段时间内没有表现出任何单调下降的趋势) ),我们从内核中观察到日志如下:
ip-XX-XXX-XXX-XXX 登录:[395850.680006] hrtimer:中断耗时 20000573 ns 9 月 18 日 17:19:58 ip-XX-XXX-XXX-XXX 内核:[395850.680006] hrtimer:中断耗时 20000573 ns [400921.660046] 信息:任务 rsync:7919 被阻止超过 120 秒。 [400921.660066]“echo 0 > /proc/sys/kernel/hung_task_timeout_secs”禁用此消息。 [400921.660077] rsync D ffff880002fe4240 …
我通过 rsync 收到此消息:
symlink has no referent: "/a/path"
Run Code Online (Sandbox Code Playgroud)
嗯,rsync 是对的:在源文件系统中,(符号)链接指向一个不存在的位置。这是有意的。链接的目标仅存在于目标文件系统中。我希望 rsync 忽略这个事实并在目标中创建符号链接。
如何强制 rsync 这样做?
我杀死了一个本地“rsync -ah”进程。
它在目标目录中留下了像“.abc.vmdk.zxivMN”这样的垃圾文件。
垃圾文件不会在连续的“rsync -ah”运行中被删除。
详细信息:
我在同步的两个文件夹上运行 diff 并报告:“仅在 /mnt/archive1/documents/general: .abc.vmdk.zxivMN”
清理临时 rsync 文件的最佳方法是什么?
我很困惑为什么 rsync 需要 --rsync-path 标志,即使远程 rsync 在路径中。
考虑:
$ rsync -avze 'ssh -p 22' --delete public/ pmatos@domain.com:~/public_html
bash: /usr/local/bin/rsync: No such file or directory
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: remote command not found (code 127) at io.c(601) [sender=3.0.7]
Run Code Online (Sandbox Code Playgroud)
然后我尝试添加 --rsync-path
$ rsync -avze 'ssh -p 22' --rsync-path=/usr/bin/rsync --delete public/ pmatos@domain.com:~/public_html
sending incremental file list
...
Run Code Online (Sandbox Code Playgroud)
因此,第一个 rsync 没有成功,因为它正在 /usr/local/bin 中搜索 rsync,但是一旦我使用 --rsync-path 传递了 rsync 的明显路径,它就会起作用。
为什么是这样?(此命令行是 octopress 中 rake deploy 发出的命令行)
在我的一台服务器上,我运行了一个 rsync,将一个巨大的目录(大小大于 300 Gb)备份到安装在同一台机器上的不同磁盘上。被 rsync 的目录包含数千个目录和文件。我使用“nohup”发出了一个 rsync 命令,然后使用“&”命令将其推送到后台。在远程 bash shell(使用 putty)上给出的完整命令是:
nohup rsync -avh /some/local/dir /backup/ >> /opt/rsync.dec22.log &
Run Code Online (Sandbox Code Playgroud)
然后只是为了检查复制数据的速度,我使用了“iotop”命令,发现有 3 个 rsync 使用相同的参数运行。在搜索时,我发现上面的链接说这是正常的。
但是在执行 iotop 以仅监视系统上运行的那些和唯一的 rsync 进程时,我看到一个进程正在读取文件,一个正在写入文件,但一个进程处于空闲状态。行为似乎很好,因为一个进程一次只做一件事,但是第三个进程在做什么(如下图中间的一个)?
我使用的 iotop 命令是:
iotop -p22250 -p22251 -p22252
Run Code Online (Sandbox Code Playgroud)
这是 iotop 命令输出的屏幕截图:

我问这个是因为我经常使用 rsync,并想了解它的行为以获得长期利益。我什至阅读了手册,但它没有提到分叉。
我正在使用 rsync 将一些数据从一台服务器备份到另一台服务器。一切正常,但可能需要更长的时间才能完成,具体取决于要传输的数据量。
是否有任何保证方法可以确保 rsync 命令在上一个使用 cronjob 完成之前不会启动?
例如,我每小时运行 rsync 命令,但传输可能需要 1 个多小时才能完成,因此下一个将在前一个完成之前开始。