Ansible 没有名为“lbg”的内置模块;LVM 管理仅依赖三个官方模块:lvol(逻辑卷)、pvol(物理卷)、vgs(卷组),配合分层策略、状态驱动和安全闭环实现批量扩容。

Ansible 本身没有叫 lbg块 的内置组件。这是个常见误解——可能混淆了缩写、拼写错误,或误将自定义角色名(如 lvm_group 或 lv_batch)简称为“lbg”;也可能是把 LVM 相关术语(LV / VG / PV)和 Ansible 模块名记混了。
先确认:Ansible 原生支持 LVM 管理的模块只有三个
它们是官方维护、稳定可用、适配主流发行版(RHEL/CentOS/Alma/Rocky/Ubuntu/Debian)的核心模块:
-
lvol:用于创建、删除、调整逻辑卷(LV)大小,支持
size、resizefs(自动调用resize2fs或xfs_growfs)等关键参数 -
pvol:管理物理卷(PV),可初始化设备(
state: present)、移除(absent),但不支持在线扩容后的pvresize—— 这部分需用command模块补充 -
vgs:管理卷组(VG),支持创建、扩展(
vgextend)、修改属性(如pesize)
成百上千节点的 LVM 批量扩容,靠的是“分层策略”,不是单个模块
真正支撑大规模落地的,是一套结构化设计,而非某个“神奇组件”:
-
统一拓扑建模:用 host_vars 或 group_vars 定义每类节点的 LVM 需求,例如:
lvm_vg_name: "data-vg"
lvm_lv_name: "app-data"
lvm_target_size_gb: "{{ 200 if 'prod' in group_names else 50 }}" -
状态驱动执行:所有 play 基于“目标状态”而非“执行步骤”。比如
lvol模块设size: "{{ lvm_target_size_gb }}g",Ansible 自动判断是否需要扩容、是否需同步文件系统 -
安全扩缩容闭环:一个完整 playbook 必须包含前置检查与后置验证:
✓command: df -h | grep '/data'获取当前使用率
✓vgs -o vg_name,vg_free --noheadings校验 VG 空闲空间
✓lvol执行扩容(含resizefs: yes)
✓assert模块验证df -B1 /data | awk 'NR==2 {print $4}'是否达标 -
云环境适配层:针对 ECS/EC2/Azure VM 等,先调用云平台模块(如
community.aws.ec2_vol或alicloud.alicloud.ebs_volume)完成云盘扩容,再用shell: partprobe && pvresize刷新底层,最后进 LVM 流程
一个生产级扩容任务的实际结构示意
不依赖虚构组件,而是用标准模块组合出可靠流水线:
-
roles/lvm_resize/tasks/main.yml
- name: Check current LV size and FS usage
command: "df -B1 {{ lvm_mount_point }}"
- name: Extend VG if new disk attached
vgs:
name: "{{ lvm_vg_name }}"
state: present
physical_volumes: "{{ lvm_new_pvs | default([]) }}"
- name: Resize LV and filesystem online
lvol:
vg: "{{ lvm_vg_name }}"
lv: "{{ lvm_lv_name }}"
size: "{{ lvm_target_size_gb }}g"
resizefs: yes
- name: Assert final size meets target
assert:
that:
- "(ansible_facts['mounts'] | selectattr('mount', 'equalto', lvm_mount_point) | first | default({}) | dict2items | selectattr('key', 'equalto', 'size_total') | first | default({}) | dict2items | selectattr('key', 'equalto', 'value') | first | default({}) | dict2items | first | last) | int >= (lvm_target_size_gb | int * 1024 * 1024 * 1024)"

















