首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么用Ansible复制目录的速度这么慢?

为什么用Ansible复制目录的速度这么慢?
EN

Stack Overflow用户
提问于 2015-01-16 13:45:23
回答 5查看 39.7K关注 0票数 79

我使用Ansible将目录(900个文件,136 136MBytes)从一个主机复制到另一个主机:

代码语言:javascript
复制
---
- name: copy a directory
      copy: src={{some_directory}} dest={{remote_directory}}

这个操作花费了惊人的17分钟,而一个简单的scp -r <src> <dest>只需要7秒。

我尝试了加速模式,根据非标文档的说法,但没有结果。

可以比启用ControlPersist的SSH快2-6倍,比paramiko快10倍。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-01-17 01:52:43

使用synchronize而不是copy

下面是我使用的copy命令:

代码语言:javascript
复制
- copy: src=testdata dest=/tmp/testdata/

我猜想,同步操作是缓慢的。文件模块文档也暗示了这一点:

“复制”模块递归复制功能不会扩展到大量(>数百)文件。有关其他选项,请参见同步模块,它是rsync的包装器。

深入了解源代码显示的是每个文件都用SHA1处理。。那是使用hashlib.sha1实现。本地测试意味着900个文件只需10秒(刚好占用400 of的空间)。

所以下一条路。该副本由移动法处理。我不确定加速模式是否有帮助(这是一个主要是不推荐的特性),但我尝试了流水线,将它放在本地ansible.cfg

代码语言:javascript
复制
[ssh_connection]
pipelining=True

这似乎没什么用,我的样本花了24分钟才运行。显然有一个循环来检查一个文件,上传它,修复权限,然后开始下一个文件。这是很多命令,即使ssh连接仍然处于打开状态。读行之间有一点意义--我认为“文件传输”不能用流水线来完成。

因此,按照使用synchronize命令的提示:

代码语言:javascript
复制
- synchronize: src=testdata dest=/tmp/testdata/

这花了18秒,即使是pipeline=False也是如此。显然,在这种情况下,使用synchronize命令是可行的。

请记住,synchronize使用rsync,它默认为mod时间和文件大小。如果您需要或需要校验和,请将checksum=True添加到命令中。即使启用了校验和,时间也没有真正改变--仍然是15-18秒。我通过运行带有ansible-playbook-vvvv验证了校验和选项,如下所示:

代码语言:javascript
复制
ok: [testhost] => {"changed": false, "cmd": "rsync --delay-updates -FF --compress --checksum --archive --rsh 'ssh  -o StrictHostKeyChecking=no' --out-format='<<CHANGED>>%i %n%L' \"testdata\" \"user@testhost:/tmp/testdata/\"", "msg": "", "rc": 0, "stdout_lines": []}
票数 109
EN

Stack Overflow用户

发布于 2017-06-19 15:36:09

在带有synchronize的环境中,配置可以是。对于一次性部署,您可以将源目录存档并使用unarchive模块复制它:

代码语言:javascript
复制
- name: copy a directory
  unarchive:
    src: some_directory.tar.gz
    dest: {{remote_directory}}
    creates: {{remote_directory}}/indicator_file
票数 15
EN

Stack Overflow用户

发布于 2018-04-24 13:00:48

我找到的最佳解决方案是直接压缩文件夹并使用unarchive模块。

450 MB文件夹在1分钟内完成。

代码语言:javascript
复制
unarchive:
   src: /home/user/folder1.tar.gz
   dest: /opt
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27985334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档