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

如何用Ansible通过网络直接备份Raw/KVM LVM卷设备

实现LVM卷的流式跨主机备份(Ansible方案)

要实现类似dd bs=16M if=/dev/h-vg/vm-dev | ssh root@serverB "dd bs=16M of=/path/to/backup.img"的流式传输且符合Ansible规范,核心思路是利用系统级工具实现节点间直接数据流,同时尽量规避shell模块的安全风险,以下是可行方案:

方案1:用command模块+rsync(推荐)

rsync支持直接传输块设备,且具备稀疏文件支持、断点续传等优势,比dd更高效可靠;同时command模块无需调用shell解析,规避了shell注入风险,更符合Ansible规范。

前提条件

  • Hypervisor节点已配置到备份服务器(serverB)的免密SSH登录(可提前用ansible.builtin.authorized_key模块配置)。
  • Hypervisor和serverB都安装了rsync。

Playbook示例

- name: 流式备份LVM快照到serverB
  hosts: hypervisor_nodes
  vars:
    lvm_snapshot: /dev/h-vg/vm-dev
    backup_server: serverB
    backup_file_path: /path/to/backup.img
  tasks:
    - name: 确保rsync已安装
      ansible.builtin.package:
        name: rsync
        state: present
      become: true

    - name: 用rsync流式传输LVM卷
      ansible.builtin.command:
        cmd: rsync --sparse --devices --block-size=16M {{ lvm_snapshot | quote }} {{ backup_server | quote }}:{{ backup_file_path | quote }}
        creates: "{{ backup_file_path }}"  # 备份文件已存在则跳过
      become: true

关键说明

  • --sparse:保留LVM卷中的空块,避免备份文件占用不必要的空间。
  • --devices:允许rsync传输块设备文件。
  • {{ var | quote }}:对变量进行转义,防止非法字符引发的命令执行风险,符合Ansible安全规范。
  • creates参数:避免重复执行备份操作,优化效率。

方案2:安全使用shell模块(备选)

如果必须沿用dd+ssh的方式,可通过规范的变量处理降低shell模块的风险:

Playbook示例

- name: 用dd+ssh流式备份LVM快照
  hosts: hypervisor_nodes
  vars:
    lvm_snapshot: /dev/h-vg/vm-dev
    backup_server: serverB
    backup_file_path: /path/to/backup.img
  tasks:
    - name: 流式传输LVM数据到备份服务器
      ansible.builtin.shell:
        cmd: 'dd bs=16M if={{ lvm_snapshot | quote }} | ssh -o StrictHostKeyChecking=no {{ backup_server | quote }} "dd bs=16M of={{ backup_file_path | quote }}"'
        creates: "{{ backup_file_path }}"
      become: true

关键注意点

  • 必须配置Hypervisor到serverB的免密SSH登录,避免交互式输入密码。
  • 所有变量均通过quote过滤器转义,杜绝shell注入风险。
  • StrictHostKeyChecking=no:首次连接时自动接受serverB的主机密钥(若需更安全,可提前用known_hosts模块配置主机密钥)。

关于Ansible原生流式传输的说明

Ansible核心模块并未提供直接的节点间流式数据传输功能,其设计架构以控制节点为中间层,大多数模块聚焦于控制节点与目标节点的交互。因此,实现节点间直接流式备份必须依赖系统级工具(如rsync、ssh+dd),但通过选择command模块、规范变量处理,可最大程度符合Ansible的安全与规范要求。

内容的提问来源于stack exchange,提问作者philipp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:35:29