标签: rsync

分块大型 rsync 传输?

我们使用 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 拆分为较小块的最有效方法吗?有没有更有效的工具,或者我错过的标志,可以让这更简单?

backup rsync file-transfer

7
推荐指数
1
解决办法
5635
查看次数

ReadyNAS 上格式错误的 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 的工作方式有什么我不明白的吗?

backup network-attached-storage rsync readynas

7
推荐指数
1
解决办法
9073
查看次数

设置 scp 的最大速度

有没有办法限制scp(或rsync)的速度?我在手册页和互联网上都找不到任何信息。

linux rsync

7
推荐指数
2
解决办法
3万
查看次数

rsync 与 --hard-links 冻结

我有一个名为 的大目录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并没有解决问题。

知道出了什么问题吗?

亚当

rsync hardlink rsnapshot

7
推荐指数
2
解决办法
4678
查看次数

将 rsync 与 nfs 挂载一起使用时,如何防止消失错误?

我正在将文件从 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 共享,但现在我很紧张。感谢您的输入!

ubuntu nfs rsync xserve

7
推荐指数
2
解决办法
3万
查看次数

Rsync 和“ssh_exchange_identification:连接被远程主机关闭”

我有一个脚本,它 rsync 是大约 10 个远程服务器的本地目录。它基本上有一个服务器列表,并通过它们中的每一个进行 rsync 循环。为了加快这个过程,我为每个 rsync 分叉,以便所有 10 个并行发生。问题是最后几台服务器返回“ssh_exchange_identification:连接被远程主机关闭”。单独或串行执行 rsync 时不会发生这种情况,并且在每个 rsync 之间放置半秒延迟可以解决问题(通常,有时列表中的最后一个服务器仍会返回错误)。

有谁知道为什么会发生这种情况?我认为这是 rysnc 的问题,而不是我的脚本,因为无论如何脚本只是对 rysnc 进行系统调用。

ssh rsync fork

7
推荐指数
1
解决办法
5210
查看次数

rsync + 公钥认证安全

我已经阅读了几篇如何使用 Rsync 和公钥身份验证自动备份文件的文章。它们都非常相似。我刚刚完成了所有设置,一切正常,但是...我刚刚发现一篇文章说它不安全。我做了以下事情:

  1. 在备份服务器上,我生成了公钥和私钥。
  2. 我将公钥复制到远程(原始)服务器目录:(/var/sites/.ssh文件authorized_keys)。该目录归"user12"
  3. 我在authorized_keys文件中添加了以下内容: from="BACKUP.SERVERS.IP.ADDRESS",command="/root/validate_rsync"
  4. 我创建了一个文件 /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 …

rsync ssh-keys

6
推荐指数
1
解决办法
3419
查看次数

为什么 FileZilla SFTP 文件传输最大上限为 1.3MiB/秒,而不是使可用带宽饱和?rsync 和 WinSCP 甚至更慢

我正在从服务器下载,使用 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 上运行良好)开源下载器,它是安全的并支持分段下载,我将不胜感激。

ssh rsync sftp scp winscp

6
推荐指数
1
解决办法
2万
查看次数

Rsync - 设置 rsync 用户及其权限

我将在两个网络服务器之间设置 rsync。我的目标是从我的主服务器上备份数据,以防主服务器崩溃。我的问题与在主服务器上为 rsync 目的设置用户帐户有关。

出于显而易见的原因,我不想在这里使用我的“root”用户帐户。因此,我的目标是设置另一个仅用于 rsync 目的的帐户。据我了解,该用户需要对我需要传输的所有文件(apache 配置、用户 linux 文件、www-data)具有读取权限。

如何最好地设置此类权限?我应该授予 rsync 用户 root 权限还是有任何更安全的方法来为此类备份创建用户?

security rsync user-permissions

6
推荐指数
1
解决办法
1万
查看次数

gsutil rsync 上的同步阶段很慢?

我刚刚开始使用 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)

rsync google-cloud-storage google-cloud-platform gsutil

6
推荐指数
1
解决办法
2701
查看次数