使用同时/并发文件传输加速rsync?

BT6*_*643 42 bash shell rsync simultaneous ubuntu-12.04

我们需要尽快将15TB数据从一台服务器传输到另一台服务器.我们目前正在使用,但当我们的网络能够(经过测试)时,我们rsync只能获得速度.我已经完成了对磁盘,网络等的测试,并认为只是rsync一次只传输一个文件,导致速度减慢.150Mb/s900+Mb/siperf

我找到了一个脚本来为目录树中的每个文件夹运行不同的rsync(允许你限制为x号),但我无法使它工作,它仍然只是一次运行一个rsync.

我找到了script 这里(复制如下).

我们的目录树是这样的:

/main
   - /files
      - /1
         - 343
            - 123.wav
            - 76.wav
         - 772
            - 122.wav
         - 55
            - 555.wav
            - 324.wav
            - 1209.wav
         - 43
            - 999.wav
            - 111.wav
            - 222.wav
      - /2
         - 346
            - 9993.wav
         - 4242
            - 827.wav
      - /3
         - 2545
            - 76.wav
            - 199.wav
            - 183.wav
         - 23
            - 33.wav
            - 876.wav
         - 4256
            - 998.wav
            - 1665.wav
            - 332.wav
            - 112.wav
            - 5584.wav
Run Code Online (Sandbox Code Playgroud)

所以我想要发生的是为/ main/files中的每个目录创建一个rsync,一次最多为5个目录.所以在这种情况下,3个rsyncs将运行,为/main/files/1,/main/files/2/main/files/3.

我试着这样,但它只是为/main/files/2文件夹一次运行1个rsync :

#!/bin/bash

# Define source, target, maxdepth and cd to source
source="/main/files"
target="/main/filesTest"
depth=1
cd "${source}"

# Set the maximum number of concurrent rsync threads
maxthreads=5
# How long to wait before checking the number of rsync threads again
sleeptime=5

# Find all folders in the source directory within the maxdepth level
find . -maxdepth ${depth} -type d | while read dir
do
    # Make sure to ignore the parent folder
    if [ `echo "${dir}" | awk -F'/' '{print NF}'` -gt ${depth} ]
    then
        # Strip leading dot slash
        subfolder=$(echo "${dir}" | sed 's@^\./@@g')
        if [ ! -d "${target}/${subfolder}" ]
        then
            # Create destination folder and set ownership and permissions to match source
            mkdir -p "${target}/${subfolder}"
            chown --reference="${source}/${subfolder}" "${target}/${subfolder}"
            chmod --reference="${source}/${subfolder}" "${target}/${subfolder}"
        fi
        # Make sure the number of rsync threads running is below the threshold
        while [ `ps -ef | grep -c [r]sync` -gt ${maxthreads} ]
        do
            echo "Sleeping ${sleeptime} seconds"
            sleep ${sleeptime}
        done
        # Run rsync in background for the current subfolder and move one to the next one
        nohup rsync -a "${source}/${subfolder}/" "${target}/${subfolder}/" </dev/null >/dev/null 2>&1 &
    fi
done

# Find all files above the maxdepth level and rsync them as well
find . -maxdepth ${depth} -type f -print0 | rsync -a --files-from=- --from0 ./ "${target}/"
Run Code Online (Sandbox Code Playgroud)

Man*_*anu 36

这似乎更简单:

ls /srv/mail | parallel -v -j8 rsync -raz --progress {} myserver.com:/srv/mail/{}
Run Code Online (Sandbox Code Playgroud)

  • 注意,如果通过各种方式自定义`ls`输出,例如`LISTFLAGS`变量或`DIR_COLORS`文件,你可能需要使用`ls --indicator-style = none`来阻止`ls`附加符号到路径名(例如`*`表示可执行文件). (5认同)
  • 如果我使用cd/sourcedir,我发现这样做效果更好; parallel -j8 -i rsync -aqH {}/destdir/{} - * (3认同)
  • 这个答案非常有帮助!我建议在“rsync”之前添加“--sshdelay 0.2”,以确保不会使远程服务器上的 sshd 过载。 (3认同)
  • 这不是一个有效的解决方案,如下所示:https://unix.stackexchange.com/questions/189878/parallelise-rsync-using-gnu-parallel 该解决方案将为列表中的每个文件创建一个 rsync 调用 (2认同)

Stu*_*aie 28

rsync尽可能快地通过网络传输文件.例如,尝试使用它来复制目标上根本不存在的一个大文件.该速度是rsync可以传输数据的最大速度.将其与scp(例如)的速度进行比较.rsync当目标文件存在时,原始传输速度甚至更慢,因为双方必须进行双向聊天,以了解文件的哪些部分已更改,但通过识别不需要传输的数据来收回成本.

一种更简单的rsync并行运行方式就是使用parallel.下面的命令将rsync并行运行最多5 秒,每个复制一个目录.请注意,瓶颈可能不是您的网络,但CPU和磁盘的速度以及并行运行只会使它们变慢,而不是更快.

run_rsync() {
    # e.g. copies /main/files/blah to /main/filesTest/blah
    rsync -av "$1" "/main/filesTest/${1#/main/files/}"
}
export -f run_rsync
parallel -j5 run_rsync ::: /main/files/*
Run Code Online (Sandbox Code Playgroud)

  • @ BT643:使用`apt-get install moreutils`来安装`parallel` (4认同)
  • 虽然是复制单个文件"尽可能快",但是很多次在单个管道上似乎存在某种上限,其中同时传输似乎没有阻塞彼此的带宽,因此意味着并行传输效率更高,比单次转账快. (4认同)

Nic*_*lay 15

您可以使用xargs哪种支持一次运行多个进程.对于您的情况,它将是:

ls -1 /main/files | xargs -I {} -P 5 -n 1 rsync -avh /main/files/{} /main/filesTest/
Run Code Online (Sandbox Code Playgroud)


F. *_*uri 14

3 - 4 个加速 rsync 的技巧。

\n

1. 从/到本地网络复制:不要使用ssh

\n

如果您将一台服务器本地复制到另一台服务器,则无需在传输过程中加密数据!

\n

默认情况下,rsync 用于ssh通过网络传输数据。为了避免这种情况,您必须创建一个rsync server目标主机。您可以通过以下方式准时运行守护进程:

\n
rsync --daemon --no-detach --config filename.conf\n
Run Code Online (Sandbox Code Playgroud)\n

其中最小配置文件可能如下所示:(请参阅man rsyncd.conf

\n
\n

filename.conf

\n
port = 12345\n[data]\n       path = /some/path\n       use chroot = false\n
Run Code Online (Sandbox Code Playgroud)\n
\n

然后

\n
rsync -ax rsync://remotehost:12345/data/. /path/to/target/.\nrsync -ax /path/to/source/. rsync://remotehost:12345/data/.\n
Run Code Online (Sandbox Code Playgroud)\n

1.1. rsyncd.conf限制连接的最小值。

\n

关于jeremyjjbrown 关于安全性的评论,这里是使用专用网络接口的最小配置示例:

\n

Rsync专用网络

\n

主要公共服务器:

\n
eth0:  1.2.3.4/0          Public address Main\neth1:  192.168.123.45/30  Backup network\n
Run Code Online (Sandbox Code Playgroud)\n

30 位网络只能容纳两台主机。

\n
\n
\xe2\x94\x8f\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\xaf\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\xaf\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\xaf\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\xaf\xe2\x94\x81\xe2\x94\x81\xe2\x94\x93\n\xe2\x94\x83 Netw. base \xe2\x94\x82192.168.123.44 \xe2\x94\x82     #0\xe2\x94\x8211000000 10101000 01111011 001011\xe2\x94\x8200\xe2\x94\x83\n\xe2\x94\x83 Mask       \xe2\x94\x82255.255.255.252\xe2\x94\x82/30    \xe2\x94\x8211111111 11111111 11111111 111111\xe2\x94\x8200\xe2\x94\x83\n\xe2\x94\x83 Broadcast  \xe2\x94\x82192.168.123.47 \xe2\x94\x82     #3\xe2\x94\x8211000000 10101000 01111011 001011\xe2\x94\x8211\xe2\x94\x83\n\xe2\x94\x83 Host/net   \xe2\x94\x822              \xe2\x94\x82Class C\xe2\x94\x82                                 \xe2\x94\x82  \xe2\x94\x83\n\xe2\x94\xa0\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa8\n\xe2\x94\x83\xe2\x96\xb8First host \xe2\x94\x82192.168.123.45 \xe2\x94\x82     #1\xe2\x94\x8211000000 10101000 01111011 001011\xe2\x94\x8201\xe2\x94\x83\n\xe2\x94\x83 Last host  \xe2\x94\x82192.168.123.46 \xe2\x94\x82     #2\xe2\x94\x8211000000 10101000 01111011 001011\xe2\x94\x8210\xe2\x94\x83\n\xe2\x94\x97\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\xb7\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\xb7\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\xb7\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\x81\xe2\x94\xb7\xe2\x94\x81\xe2\x94\x81\xe2\x94\x9b\n
Run Code Online (Sandbox Code Playgroud)\n
\n

备份服务器:

\n
eth0:  1.2.3.5/0          Public address Backup\neth1:  192.168.123.46/30  Backup network\n\ncat >/etc/rsyncd.conf <<eof\naddress 192.168.123.46\n[main]\n    path    = /srv/backup/backup0\n    comment = Backups\n    read only       = false\n    uid     = 0\n    gid     = 0\neof\n
Run Code Online (Sandbox Code Playgroud)\n

因此,rsync 将仅侦听进入192.168.123.46第二个网络接口的连接。

\n

然后rsync从主服务器运行

\n
rsync -zaSD --zc zstd --delete --numeric-ids /mnt/. rsync://192.168.123.46/main/.\n
Run Code Online (Sandbox Code Playgroud)\n

当然,在防火墙中添加一些规则可能并非完全无用。

\n
iptables -I INPUT -i eth0 -p tcp --dport 873 -j DROP\n
Run Code Online (Sandbox Code Playgroud)\n

2.使用zstandard zstd进行高速压缩

\n

Zstandard速度比普通. 因此,使用这种更新的压缩算法将显着改善您的传输! gzip

\n
rsync -axz --zc=zstd rsync://remotehost:12345/data/. /path/to/target/.\nrsync -axz --zc=zstd /path/to/source/. rsync://remotehost:12345/data/.\n
Run Code Online (Sandbox Code Playgroud)\n

也许有一些--exclude指令(参见这个答案的底部!)。

\n

3. 多路复用rsync以减少由于 浏览时间而导致的不活动

\n

两个重要的注释:

\n

因为这种优化是关于磁盘访问和文件系统结构的。CPU数量没有什么可看的!因此,即使您的主机使用单核 CPU,这也可以改善传输。如果您计划使用任何并行器工具,则必须告诉他不要考虑物理 CPU 的数量。

\n

由于目标是确保最大数据使用带宽,而其他任务浏览文件系统,因此最合适的并发进程数量取决于存在的小文件数量。

\n

3.1 脚本使用wait -n -p PID

\n

最近的 bash 添加了一个内置-p PID功能wait。此类工作的必备条件:

\n
#!/bin/bash\n\nmaxProc=3\nsource=\'\'\ndestination=\'rsync://remotehost:12345/data/\'\n\ndeclare -ai start elap results order\nwait4oneTask() {\n    local _i\n    wait -np epid\n    results[epid]=$?\n    elap[epid]=" ${EPOCHREALTIME/.} - ${start[epid]} "\n    unset "running[$epid]"\n    while [ -v elap[${order[0]}] ];do\n        _i=${order[0]}\n        printf " - %(%a %d %T)T.%06.0f %-36s %4d %12d\\n" "${start[_i]:0:-6}" \\\n               "${start[_i]: -6}" "${paths[_i]}" "${results[_i]}" "${elap[_i]}"\n        order=(${order[@]:1})\n    done\n}\nprintf "   %-22s %-36s %4s %12s\\n" Started Path Rslt \'microseconds\'\nfor path; do\n    rsync -axz --zc zstd "$source$path/." "$destination$path/." &\n    lpid=$!\n    paths[lpid]="$path" \n    start[lpid]=${EPOCHREALTIME/.}\n    running[lpid]=\'\'\n    order+=($lpid)\n    ((${#running[@]}>=maxProc)) && wait4oneTask\ndone\nwhile ((${#running[@]})); do\n    wait4oneTask\ndone\n
Run Code Online (Sandbox Code Playgroud)\n

输出可能如下所示:

\n
myRsyncP.sh files/*/*\n   Started                Path                                 Rslt microseconds\n - Fri 03 09:20:44.673637 files/1/343                             0      1186903\n - Fri 03 09:20:44.673914 files/1/43                              0      2276767\n - Fri 03 09:20:44.674147 files/1/55                              0      2172830\n - Fri 03 09:20:45.861041 files/1/772                             0      1279463\n - Fri 03 09:20:46.847241 files/2/346                             0      2363101\n - Fri 03 09:20:46.951192 files/2/4242                            0      2180573\n - Fri 03 09:20:47.140953 files/3/23                              0      1789049\n - Fri 03 09:20:48.930306 files/3/2545                            0      3259273\n - Fri 03 09:20:49.132076 files/3/4256                            0      2263019\n
Run Code Online (Sandbox Code Playgroud)\n

快速检查:

\n
printf "%\'d\\n" $(( 49132076 + 2263019 - 44673637)) \\\n    $((1186903+2276767+2172830+1279463+2363101+2180573+1789049+3259273+2263019))\n6\xe2\x80\x99721\xe2\x80\x99458\n18\xe2\x80\x99770\xe2\x80\x99978\n
Run Code Online (Sandbox Code Playgroud)\n

在最多三个子进程下处理 18,77 秒需要 6,72 秒。

\n

注意:您可以使用musec2str来改进输出,方法是将第一行长printf行替换为:

\n
        musec2str -v elapsed "${elap[i]}"\n        printf " - %(%a %d %T)T.%06.0f %-36s %4d %12s\\n" "${start[i]:0:-6}" \\\n               "${start[i]: -6}" "${paths[i]}" "${results[i]}" "$elapsed"\n
Run Code Online (Sandbox Code Playgroud)\n
rsync --daemon --no-detach --config filename.conf\n
Run Code Online (Sandbox Code Playgroud)\n

更多:您可以通过在此脚本中进行一些编辑来添加总体统计行:

\n
port = 12345\n[data]\n       path = /some/path\n       use chroot = false\n
Run Code Online (Sandbox Code Playgroud)\n

可以产生:

\n
rsync -ax rsync://remotehost:12345/data/. /path/to/target/.\nrsync -ax /path/to/source/. rsync://remotehost:12345/data/.\n
Run Code Online (Sandbox Code Playgroud)\n

rsync测试此脚本时为假

\n

注意:为了测试这一点,我使用了一个假的 rsync

\n
## Fake rsync wait 1.0 - 2.99 seconds and return 0-255 ~ 1x/10\nrsync() { sleep $((RANDOM%2+1)).$RANDOM;exit $(( RANDOM%10==3?RANDOM%128:0));}\nexport -f rsync\n
Run Code Online (Sandbox Code Playgroud)\n

4. 加速rsync过程的重要一步:避免减慢他的速度!

\n

您可能需要花一些时间来充分配置避免同步无用数据的方式!

\n

在手册页中搜索exclude和/或include

\n
\n
  --cvs-exclude, -C        auto-ignore files in the same way CVS does\n  --exclude=PATTERN        exclude files matching PATTERN\n  --exclude-from=FILE      read exclude patterns from FILE\n  --include=PATTERN        don\'t exclude files matching PATTERN\n  --include-from=FILE      read include patterns from FILE\n
Run Code Online (Sandbox Code Playgroud)\n
\n

为了保存用户目录,我经常使用:

\n
rsync -axz --delete --zc zstd --exclude .cache --exclude cache  source/. target/.\n
Run Code Online (Sandbox Code Playgroud)\n

仔细阅读FILTER RULES手册页中的部分:

\n
man -P\'less +/^FILTER\\ RULES\' rsync\n
Run Code Online (Sandbox Code Playgroud)\n

结论:

\n

安静地阅读手册页!man rsync man rsyncd.conf!!

\n

  • “如果您将一台服务器本地复制到另一台服务器,则无需在传输过程中加密数据!” 这是一种完全过时的态度。 (2认同)

dan*_*rba 13

您是否尝试过使用rclone.org

有了rclone你可以做类似

rclone copy "${source}/${subfolder}/" "${target}/${subfolder}/" --progress --multi-thread-streams=N
Run Code Online (Sandbox Code Playgroud)

其中--multi-thread-streams=N表示您希望生成的线程数。

  • 最好的选择。只需使用 32 个流运行,其速度几乎比使用 finder 或 rsync 进行复制快 50 倍。 (17认同)
  • @StepanYakovenko我已经测试了该标志,它在版本1.55.1中工作:`rclone copy Killmouseaccel Killmouseaccel2 --multi-thread-streams=4 --progress 2021/06/01 13:50:30 注意:找不到配置文件- 使用默认值传输:0 / 0 字节,-,0 字节/秒,预计到达时间 - 传输:1 / 1,100% 经过时间:0.0s` (3认同)
  • @soulmachine,第一个基于下载块生成线程,而传输是指 rclone 可以执行的最大同时下载数量。使用多线程流,您可以下载一个文件,并将其拆分为同时下载的块。但如果您只下载一个文件,则 --transfers 选项不会产生任何影响。 (2认同)
  • 今天我了解了“rclone” - 非常感谢你,我认为这将满足我的需要。我需要复制大量像 2MB 这样的小文件,但要并行地将它们分块,因为我可爱的互联网连接使用多个上传套接字而不是一个上传套接字效果更好。谢谢! (2认同)

Bry*_*n P 9

网上列出了许多替代工具和方法.例如:

  • NCSA博客有使用说明xargsfind无需安装的大多数*nix系统任何新的软件并行化的rsync.

  • 而且,parsync为并行rsync提供了一个功能丰富的Perl包装器.

  • 请不要只是发布一些工具或库作为答案.至少在答案本身中演示[它如何解决问题](http://meta.stackoverflow.com/a/251605). (9认同)
  • 与其他人的说法相反,提出仅是工具的解决方案确实对我们某些人有所帮助。“顺应还是走开!” 人群显然并不只是想帮助别人。因此,感谢您代表所有刚刚从您的帖子中发现了这两个软件包的人以及那些意识到xarg和find(没有这些软件包)也可以解决问题的人。发布并让选民尽其所能,而忽略那些似乎时不时在这里“执行”的痛苦的“下车”。 (6认同)
  • 由于我们中的许多实际阅读这篇文章的人已经知道我们在寻找什么,并且由于 OP 提供了一个详细的问题,因此在这里提出一个高级用例是合适的。我不需要一些关于如何使用这些工具的通用示例(因为无论如何我都不应该为我的应用程序复制和粘贴它);我将阅读文档并自己解决。信任但要验证。 (3认同)
  • @i_m_mahii Stack Exchange 应自动保留链接页面的副本。 (2认同)

sba*_*sba 6

我发现的最简单的方法是在 shell 中使用后台作业:

for d in /main/files/*; do
    rsync -a "$d" remote:/main/files/ &
done
Run Code Online (Sandbox Code Playgroud)

请注意,它不会限制工作数量!如果您受到网络限制,这并不是真正的问题,但如果您正在等待旋转生锈,这将导致磁盘崩溃。

你可以添加

while [ $(jobs | wc -l | xargs) -gt 10 ]; do sleep 1; done
Run Code Online (Sandbox Code Playgroud)

在循环内进行作业控制的原始形式。


max*_*max 5

我开发了一个名为:parallel_sync 的 python 包

https://pythonhosted.org/parallel_sync/pages/examples.html

这是一个如何使用它的示例代码:

from parallel_sync import rsync
creds = {'user': 'myusername', 'key':'~/.ssh/id_rsa', 'host':'192.168.16.31'}
rsync.upload('/tmp/local_dir', '/tmp/remote_dir', creds=creds)
Run Code Online (Sandbox Code Playgroud)

默认并行度为 10;你可以增加它:

from parallel_sync import rsync
creds = {'user': 'myusername', 'key':'~/.ssh/id_rsa', 'host':'192.168.16.31'}
rsync.upload('/tmp/local_dir', '/tmp/remote_dir', creds=creds, parallelism=20)
Run Code Online (Sandbox Code Playgroud)

但是请注意,ssh 通常默认将 MaxSessions 设置为 10,因此要将其增加到 10 以上,您必须修改 ssh 设置。