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

如何通过Ansible动态获取分区编号与起始位置实现自动分区?

解决Ansible动态获取最大分区编号及起始位置的问题

核心思路

别依赖字典的无序性,直接把sda_info.partitions里的分区数据提取出来,按分区编号的数值大小排序,就能精准拿到最大编号的分区信息。

具体实现代码片段

- name: 提取并排序分区数据
  set_fact:
    max_part: "{{ sda_info.partitions | dict2items | map('combine', {'key': item.key | int}) | list | sort(attribute='key', reverse=true) | first }}"

- name: 计算新分区参数
  set_fact:
    new_part_number: "{{ max_part.key + 1 }}"
    new_part_start: "{{ max_part.value.end }}"

- name: 创建新分区
  parted:
    device: /dev/sda
    number: "{{ new_part_number }}"
    state: present
    start: "{{ new_part_start }}"
    end: 100%  # 可按需替换为具体大小,比如"+10GiB"

代码逻辑说明

  • dict2items:把sda_info.partitions的字典结构转成{key: 分区号, value: 分区详情}的列表格式
  • map('combine', {'key': item.key | int}):将分区号从字符串转为整数,避免字符串排序导致的错误(比如"10"排在"2"前面)
  • sort(attribute='key', reverse=true):按分区编号降序排序,最大的分区会排在列表第一位
  • first:直接取排序后的第一个元素,就是当前编号最大的分区

特殊场景处理

如果服务器存在分区编号不连续的情况(比如中间删除过分区),但需求是基于当前存在的最大编号+1创建新分区,上述方法依然适用。如果需要强制使用连续编号(跳过已删除的编号),可以从1开始遍历查找第一个未被使用的编号,但这种场景在批量运维中较少见。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 07:33:20