nic*_*tro 110 linux performance file-transfer
我需要在两个服务器 (Ubuntu) 之间传输大量 mp3。我所说的巨大是指大约一百万个平均为 300K 的文件。我尝试过,scp
但大约需要一周时间。(大约 500 KB/s)如果我通过 HTTP 传输单个文件,我得到 9-10 MB/s,但我不知道如何传输所有文件。
有没有办法快速转移所有这些?
Sco*_*ack 140
我会推荐焦油。当文件树已经相似时,rsync 表现得非常好。但是,由于 rsync 会对每个文件进行多次分析,然后复制更改,因此它比初始复制的 tar 慢得多。此命令可能会执行您想要的操作。它将在机器之间复制文件,并保留权限和用户/组所有权。
tar -c /path/to/dir | ssh remote_server 'tar -xvf - -C /absolute/path/to/remotedir'
Run Code Online (Sandbox Code Playgroud)
根据下面 Mackintosh 的评论,这是您将用于 rsync 的命令
rsync -avW -e ssh /path/to/dir/ remote_server:/path/to/remotedir
Run Code Online (Sandbox Code Playgroud)
Ada*_*dam 51
外置硬盘驱动器和当日快递。
Eva*_*son 17
我会使用 rsync。
如果您已经通过 HTTP 将它们导出并提供了目录列表,您也可以使用 wget 和 --mirror 参数。
您已经看到 HTTP 比 SCP 更快,因为 SCP 正在加密所有内容(因此成为 CPU 的瓶颈)。HTTP 和 rsync 将变得更快,因为它们没有加密。
以下是在 Ubuntu 上设置 rsync 的一些文档:https : //help.ubuntu.com/community/rsync
这些文档讨论了通过 SSH 隧道传输 rsync,但如果您只是在专用 LAN 上移动数据,则不需要 SSH。(我假设您在专用 LAN 上。如果您通过 Internet 获得 9-10MB/秒的速度,那么我想知道您有什么样的连接!)
以下是一些其他非常基本的文档,它们将允许您设置相对不安全的 rsync 服务器(不依赖于 SSH):http : //transamrit.net/docs/rsync/
Ica*_*pan 17
闲话少说,用netcat,网络瑞士刀。没有协议开销,您直接复制到网络套接字。例子
srv1$ tar cfv - *mp3 | nc -w1 remote.server.net 4321
srv2$ nc -l -p 4321 |tar xfv -
Run Code Online (Sandbox Code Playgroud)
如果您确实使用 rsync,有很多文件,我会尝试在两端都获得版本 3 或更高版本。原因是较小的版本将在开始传输之前枚举每个文件。新功能称为增量递归。
当 rsync 与另一个 3.x 版本通信时,现在使用新的增量递归算法。这会更快地启动传输(在找到所有文件之前),并且需要更少的内存。有关一些限制,请参阅联机帮助页中的 --recursive 选项。
昨天在移动 80 TB 数据(数百万个小文件)时,从 切换rsync
到tar
被证明要快得多,因为我们停止尝试
# slow
rsync -av --progress /mnt/backups/section01/ /mnt/destination01/section01
Run Code Online (Sandbox Code Playgroud)
并切换到tar
...
# fast
cd /mnt/backups/
tar -cf - section01 | tar -xf - -C /mnt/destination01/
Run Code Online (Sandbox Code Playgroud)
由于这些服务器位于同一个 LAN 上,因此目标在执行推送的源系统上安装了 NFS。不让它更快,我们决定不保留atime
文件:
mount -o remount,noatime /mnt/backups
mount -o remount,noatime /mnt/destination01
Run Code Online (Sandbox Code Playgroud)
下图描述了从 rsync 更改为 tar 的差异。这是我老板的主意,我的同事都执行了它,并在他的博客上写了一篇很棒的文章。我只是喜欢漂亮的图片。:)
rsync,就像其他人已经推荐的那样。如果加密的 CPU 开销是瓶颈,请使用另一种 CPU 密集程度较低的算法,例如河豚。例如类似的东西
rsync -ax -e 'ssh -c blowfish' /local/path user@host:/remote/path
小智 5
在复制大量文件时,我发现 tar 和 rsync 等工具的效率比它们需要的要低,因为打开和关闭许多文件的开销很大。我写了一个名为 fast-archiver 的开源工具,对于这些场景比 tar 更快:https : //github.com/replicon/fast-archiver;它通过执行多个并发文件操作来更快地工作。
这是在备份超过 200 万个文件时使用快速归档程序与 tar 的示例;fast-archiver 需要 27 分钟来存档,而 tar 需要 1 小时 23 分钟。
$ time fast-archiver -c -o /dev/null /db/data
skipping symbolic link /db/data/pg_xlog
1008.92user 663.00system 27:38.27elapsed 100%CPU (0avgtext+0avgdata 24352maxresident)k
0inputs+0outputs (0major+1732minor)pagefaults 0swaps
$ time tar -cf - /db/data | cat > /dev/null
tar: Removing leading `/' from member names
tar: /db/data/base/16408/12445.2: file changed as we read it
tar: /db/data/base/16408/12464: file changed as we read it
32.68user 375.19system 1:23:23elapsed 8%CPU (0avgtext+0avgdata 81744maxresident)k
0inputs+0outputs (0major+5163minor)pagefaults 0swaps
Run Code Online (Sandbox Code Playgroud)
要在服务器之间传输文件,您可以使用带有 ssh 的快速归档程序,如下所示:
ssh postgres@10.32.32.32 "cd /db; fast-archive -c data --exclude=data/\*.pid" | fast-archiver -x
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
196441 次 |
最近记录: |