我们使用 rsync 将主文件服务器的镜像更新为异地并置备份服务器。我们目前遇到的问题之一是我们的文件服务器有 > 1TB 的大多数较小的文件(在 10-100kb 范围内),当我们传输这么多数据时,我们经常会在几个小时内连接中断转移。Rsync 没有恢复/重试功能,可以简单地重新连接到服务器以从停止的地方开始——您需要通过文件比较过程,这最终会随着我们拥有的文件数量而变得非常长。
建议绕过的解决方案是将大型 rsync 传输拆分为一系列较小的传输。我认为最好的方法是通过顶级目录名称的第一个字母,这并没有给我们一个完美均匀的分布,但已经足够了。
我想确认我这样做的方法是否合理,或者是否有更简单的方法来实现目标。
为此,我遍历 AZ, az, 0-9 以选择一个字符$prefix。一开始我只是想跑步
rsync -av --delete --delete-excluded --exclude "*.mp3" "src/$prefix*" dest/
Run Code Online (Sandbox Code Playgroud)
(--exclude "*.mp3" 只是一个例子,因为我们有一个更长的排除列表来删除临时文件之类的东西)
这样做的问题是 dest/ 中不再存在于 src 上的任何顶级目录都不会被 --delete 选取。为了解决这个问题,我改为尝试以下方法:
rsync \
--filter 'S /$prefix*' \
--filter 'R /$prefix*' \
--filter 'H /*' \
--filter 'P /*' \
-av --delete --delete-excluded --exclude "*.mp3" src/ dest/
Run Code Online (Sandbox Code Playgroud)
我正在使用showand hideover includeand exclude,因为否则 --delete-excluded 将删除任何与 $prefix 不匹配的内容。
这是将 rsync 拆分为较小块的最有效方法吗?有没有更有效的工具,或者我错过的标志,可以让这更简单?
我正在尝试在我的 ReadyNAS 上设置 rsync 备份,但出现以下错误:
ERROR: The remote path must start with a module name not a /
Run Code Online (Sandbox Code Playgroud)
此错误伴随以下信息:
Job: 015
Protocol: rsync
Source: 192.168.140.25::/home/jason
Destination: [gob]/
Run Code Online (Sandbox Code Playgroud)
我认为这个错误是有道理的,因为看看当我尝试这个时会发生什么:
$ rsync -r 192.168.140.25::/home/jason dest/
ERROR: The remote path must start with a module name not a /
Run Code Online (Sandbox Code Playgroud)
命令失败。如果我只稍微改变它,它就会成功:
$ rsync -r 192.168.140.25:/home/jason dest/
Run Code Online (Sandbox Code Playgroud)
所以问题是:为什么 ReadyNAS 试图运行带有额外冒号的 rsync 命令?rsync 的工作方式有什么我不明白的吗?
我有一个名为 的大目录servers,其中包含许多由rsnapshot. 这意味着结构或多或少类似于:
./servers
./servers/daily.0
./servers/daily.0/file1
./servers/daily.0/file2
./servers/daily.0/file3
./servers/daily.1
./servers/daily.1/file1
./servers/daily.1/file2
./servers/daily.1/file3
...
Run Code Online (Sandbox Code Playgroud)
快照是以rsnapshot节省空间的方式创建的:如果/servers/daily.0/file1与 相同/servers/daily.1/file1,它们都使用硬链接指向同一个 inode,而不是每个周期都复制一个完整的快照。/servers/daily.0/file1/servers /daily.0/file1
我尝试使用硬链接结构复制它,以节省目标驱动器上的空间,使用:
nohup time rsync -avr --remove-source-files --hard-links servers /old_backups
Run Code Online (Sandbox Code Playgroud)
一段时间后,rsync 冻结 - 没有新行添加到nohup.out文件中,并且似乎没有文件从一个驱动器移动到另一个驱动器。删除nohup并没有解决问题。
知道出了什么问题吗?
亚当
我正在将文件从 Ubuntu 服务器移动到 Snow Leopard 服务器。Ubuntu 服务器有大约 6TB 的 NFS 共享,我想将其克隆到 Snow Leopard 服务器。
我在雪豹服务器上挂载了 nfs 共享,然后运行
rsync -av /Volumes/FromUbuntu /Volumes/LocalCopy
Run Code Online (Sandbox Code Playgroud)
在它复制大约 100GB 之后,它抱怨文件已经消失。我假设出于某种原因,NFS 链接会失效?什么可能导致这种情况?Ubuntu 服务器没有崩溃,也没有我知道的连接问题。我不介意在复制完成之前一遍又一遍地运行 rsync 命令,但仅 rsync 就需要大约 6 个小时才能使其成为文件列表。
有什么建议?仅通过 SSH 进行 rsync 会更快吗?谢谢!
(PS:我试过只使用 'cp -arv' 这似乎没有失败,但根据 Mac 上的网络流量监视器,在 rsync 构建其文件列表后,复制文件所需的时间似乎是 rsync 的两倍?)
更新:我正在尝试通过 ssh 从 mac 服务器到 ubuntu 服务器进行 rsync,它似乎运行得更快(创建文件列表并开始传输不到两个小时,就像从 nfs 挂载进行 rsync 一样大约六个小时只是为了构建初始文件列表。)看起来在 mac 上安装 NFS 共享肯定存在一些问题。有没有人遇到过这个问题?反过来,在 ubuntu 客户端的 mac 上安装 nfs 共享呢?我计划在 Mac 上为 Ubuntu 客户端托管 NFS 共享,但现在我很紧张。感谢您的输入!
我有一个脚本,它 rsync 是大约 10 个远程服务器的本地目录。它基本上有一个服务器列表,并通过它们中的每一个进行 rsync 循环。为了加快这个过程,我为每个 rsync 分叉,以便所有 10 个并行发生。问题是最后几台服务器返回“ssh_exchange_identification:连接被远程主机关闭”。单独或串行执行 rsync 时不会发生这种情况,并且在每个 rsync 之间放置半秒延迟可以解决问题(通常,有时列表中的最后一个服务器仍会返回错误)。
有谁知道为什么会发生这种情况?我认为这是 rysnc 的问题,而不是我的脚本,因为无论如何脚本只是对 rysnc 进行系统调用。
我已经阅读了几篇如何使用 Rsync 和公钥身份验证自动备份文件的文章。它们都非常相似。我刚刚完成了所有设置,一切正常,但是...我刚刚发现一篇文章说它不安全。我做了以下事情:
/var/sites/.ssh文件authorized_keys)。该目录归"user12"from="BACKUP.SERVERS.IP.ADDRESS",command="/root/validate_rsync"我创建了一个文件 /root/validate_rsync ,内容如下:
#!/bin/sh
echo $SSH_ORIGINAL_COMMAND >> /var/log/synchronize-log.log
case "$SSH_ORIGINAL_COMMAND" in
*\&*)
echo "Rejected"
;;
*\;*)
echo "Rejected"
;;
*\(*)
echo "Rejected"
;;
*\{*)
echo "Rejected"
;;
*\<*)
echo "Rejected"
;;
*\>*)
echo "Rejected"
;;
*\`*)
echo "Rejected"
;;
*\|*)
echo "Rejected"
;;
rsync\ --server*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo "Rejected"
;;
esac
Run Code Online (Sandbox Code Playgroud)我运行 rsync 命令:
rsync -avzp --del -e "ssh -p 2211" user12@ORIGINAL.SERVERS.IP:/var/sites/photos/ /var/sites/sync/photos
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:文件权限问题/root/validate_rsync。我将文件/root/validate_rsync …
我正在从服务器下载,使用 FileZilla 的下载速度最高为 1.3MiB/秒,但我可以开始并发下载,它们也将以 1.3MiB/秒的速度下载。那么为什么我不能以超过 1.3MB/s 的速度仅下载一个文件并接近饱和可用带宽(~6+MB/s)?
我知道我可以使用其他一些支持分段下载的 SFTP 客户端,例如 lftp,知道其他开源的好客户端吗?
但我仍然想知道是什么限制了一个文件的下载速度为 1.3MB/s,是 TCP 和缓冲区等的一些技术限制还是一些配置问题?我检查并确定根本没有为 FileZilla 启用流量限制。
我也试过 rsync,它比 FileZilla/SFTP 更糟糕。我也尝试过 WinSCP,无论使用哪种 SCP/SFTP 方法,它都是最慢的。因此,与其他传输方法相比,FileZilla 以 1.3MB/s 的恒定传输速度相当不错。
如果有人对为什么传输峰值为 1.3MB/s 有很好的解释,我真的很想知道,以及是否可以在不诉诸分段下载的情况下增加这一点。服务器正在运行 OpenSSH 6.7p1 (Debian) 客户端是 Windows 上的 FileZilla。
更新:为了响应 Martin 的信息(见下面他的回答),我补充说服务器和正在下载的客户端之间的 ping 是 180 毫秒到 190 毫秒。此外,cpu 使用率非常低,最多 2% 到 8%。我尝试了最新版本的 winscp 5.73 和 sftp 模式,我得到了 555kb/s 和大约 805kb/s 最大的 scp 模式。而如果我在 Filezilla 中启动辅助并发传输,我也会得到恒定的 1.3MiB/s。
那么,正如 Martin 和 Michael 所提到的,服务器的 180 毫秒延迟是否会成为数学上的限制因素?或者还有什么可以归咎于我可以提高吞吐量?如果没有,如果有人知道任何其他(如 lftp 但在 Windows 上运行良好)开源下载器,它是安全的并支持分段下载,我将不胜感激。
我将在两个网络服务器之间设置 rsync。我的目标是从我的主服务器上备份数据,以防主服务器崩溃。我的问题与在主服务器上为 rsync 目的设置用户帐户有关。
出于显而易见的原因,我不想在这里使用我的“root”用户帐户。因此,我的目标是设置另一个仅用于 rsync 目的的帐户。据我了解,该用户需要对我需要传输的所有文件(apache 配置、用户 linux 文件、www-data)具有读取权限。
如何最好地设置此类权限?我应该授予 rsync 用户 root 权限还是有任何更安全的方法来为此类备份创建用户?
我刚刚开始使用 GCS 作为我的网络服务器的备份。一台服务器有 120 万个 JPEG(3.5TB),并且所有这些都在 10 个小时左右的时间内完美同步。
另一个有 250 万个 JPEG(尽管只是缩略图/预览 - 总共 300GB)。我第一次这样做时,“构建同步状态”很快就完成了 250 万次。几分钟。虽然我的会话被中断了(wifi 掉线了),当我通过 SSH 尝试再次运行它时,“在源列表中”提示迅速咬住了 10000、20000、30000。然后几乎停止了。半小时后,才到了三十万。我知道它也必须确定目的地有哪些文件,但我认为这不会显着减慢“在源列表中...”的回声?
它是否表明我的文件系统有问题,如果是,我应该检查什么?
还是出于某种原因,这是预期的行为?
尝试将 gsutil rsync 与 200 万个文件一起使用到一个存储桶中是个坏主意吗?我找不到谷歌关于一个存储桶中可以放置多少文件的指南,所以我假设它是数十亿/无限的?
FWIW 文件都在嵌套的子目录中,任何一个目录中的文件都不超过 2000 个。
谢谢
编辑:我使用的确切命令是:
gsutil -m rsync -r /var/www/ gs://mybucketname/var/www
Run Code Online (Sandbox Code Playgroud)