You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible fetch模块拉取远程大文件耗时过长,求原因及替代方案

Ansible Fetch模块拉取大文件失败问题排查与替代方案

问题原因分析

针对你用Fetch模块拉取500MB的volumes.zip始终无法完成的情况,核心原因集中在大文件传输的特性限制上:

  • SSH连接超时:默认SSH会话的超时阈值较短,大文件传输耗时超出限制后会导致连接中断,任务失败。
  • Fetch模块自身局限:Fetch模块底层依赖SFTP/SCP传输,没有断点续传机制,一旦传输中断需重新开始;同时它的传输效率远低于原生的rsync或直接scp命令。
  • Ansible参数限制:默认的ansible_ssh_timeout(通常为10秒)、传输缓冲区大小等参数不足以支撑大文件的长时间传输。

替代方案

1. 直接调用scp命令

利用原生scp的传输性能,通过delegate_to将任务切换到本地执行:

- name: Copy volumes.zip to local via scp
  delegate_to: localhost
  command: scp {{ ansible_user }}@{{ inventory_hostname }}:/tmp/volumes.zip /home/user/volumes/

注意:需确保本地主机已配置与目标主机的免密SSH登录,避免手动输入密码。

2. 使用rsync(推荐)

rsync支持增量传输和断点续传,是大文件传输的最优选择,可直接用命令或Ansible的rsync模块:

方式一:调用rsync命令

- name: Sync volumes.zip to local via rsync
  delegate_to: localhost
  command: rsync -avz --partial {{ ansible_user }}@{{ inventory_hostname }}:/tmp/volumes.zip /home/user/volumes/

--partial参数确保传输中断后下次可续传,无需重新开始。

方式二:Ansible rsync模块

- name: Sync volumes.zip using rsync module
  rsync:
    src: "{{ ansible_user }}@{{ inventory_hostname }}:/tmp/volumes.zip"
    dest: "/home/user/volumes/"
    mode: pull
    rsync_opts:
      - "--compress"
      - "--partial"

需确保本地和目标主机都安装了rsync工具。

3. 优化参数继续使用Fetch模块

如果坚持使用Fetch模块,可通过调整参数解决超时问题:

  • 在inventory文件或剧本中添加SSH超时配置:
    vars:
      ansible_ssh_timeout: 300  # 延长超时到5分钟
      ansible_pipelining: true  # 提升传输效率
    
  • 在本地~/.ssh/config中添加SSH保活配置:
    Host *
      ServerAliveInterval 60
      ServerAliveCountMax 10
    
    避免SSH会话因长时间无交互被断开。

内容的提问来源于stack exchange,提问作者Héctor Valls

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 18:33:28