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

如何在Ansible中动态获取根分区对应的设备名(如sda/sdb)

获取根目录挂载设备名(Ansible 实现)

核心方案:利用ansible_mounts直接提取

Ansible自带的ansible_mounts事实变量存储了全系统挂载点的详细信息,直接过滤根目录/的条目即可拿到目标设备名:

- name: 提取根目录挂载设备名
  set_fact:
    root_device: "{{ ansible_mounts | selectattr('mount', 'equalto', '/') | map(attribute='device') | first }}"

- name: 验证设备名
  debug:
    msg: "根目录挂载设备:{{ root_device }}"

适配LVM场景的扩展方案

如果根目录基于LVM逻辑卷挂载,需要先关联到对应物理卷:

- name: 获取根目录对应的LVM逻辑卷
  set_fact:
    root_lv: "{{ ansible_mounts | selectattr('mount', 'equalto', '/') | map(attribute='device') | first }}"

- name: 提取逻辑卷关联的物理设备
  set_fact:
    root_pv: "{{ ansible_lvm.lvs[root_lv.split('/')[-1]].pv | first }}"

提取设备前缀(如sda/sdb)

如果只需要去掉分区号的设备前缀(比如从/dev/sda2得到sda),用正则处理:

- name: 提取根目录设备前缀
  set_fact:
    root_device_prefix: "{{ root_device | regex_replace('^/dev/(\\w+).*$', '\\1') }}"

- name: 验证设备前缀
  debug:
    msg: "根目录设备前缀:{{ root_device_prefix }}"

关键说明

  • ansible_mounts是Ansible自动收集的系统事实,无需额外任务主动获取
  • selectattr过滤根目录挂载点,map(attribute='device')提取设备字段,first取唯一匹配结果(根目录通常仅一个)
  • 正则表达式^/dev/(\w+).*$精准匹配/dev/后的设备主体部分,自动剔除分区号

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 16:16:09