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

SaltStack管理Ubuntu 20.04块设备的正确实现方式咨询

优化后的SaltStack块设备配置方案

以下是更简洁、可维护的实现,核心优化点包括参数化配置、减少冗余Shell判断、修复权限风险、逻辑更紧凑:

首先把通用参数抽离到状态文件顶部,后续修改或者批量部署多块盘时只需调整参数即可:

# 可配置参数
{% set disk_dev = '/dev/nvme2n1' %}
{% set part_label = 'mysql' %}
{% set mount_path = '/var/db/mysql' %}
{% set fs_type = 'ext4' %}

# 分区表创建
create_gpt_label:
  module.run:
    - name: partition.mklabel
    - device: {{ disk_dev }}
    - label_type: gpt
    - unless: "blkid {{ disk_dev }} | grep -q PTTYPE=\"gpt\""

# 单分区创建+命名合并处理
create_main_partition:
  module.run:
    - name: parted_partition.mkpart
    - device: {{ disk_dev }}
    - fs_type: {{ fs_type }}
    - part_type: primary
    - start: 0%
    - end: 100%
    - unless: "parted {{ disk_dev }} print 1 >/dev/null 2>&1"
    - require:
      - module: create_gpt_label
  module.run:
    - name: partition.name
    - device: {{ disk_dev }}
    - partition: 1
    - m_name: {{ part_label }}
    - unless: "parted {{ disk_dev }} print | grep -q {{ part_label }}"
    - require:
      - module: create_gpt_label

# 文件系统格式化
format_partition:
  module.run:
    - name: extfs.mkfs
    - device: {{ disk_dev }}p1
    - fs_type: {{ fs_type }}
    - label: {{ part_label }}
    - unless: "blkid --label {{ part_label }}"
    - require:
      - module: create_main_partition

# 挂载点创建+自动挂载配置
{{ mount_path }}:
  file.directory:
    - user: root
    - group: root
    - dir_mode: 755
    - makedirs: True
  mount.mounted:
    - name: {{ mount_path }}
    - device: LABEL={{ part_label }}
    - fstype: {{ fs_type }}
    - opts: defaults
    - persist: True
    - require:
      - module: format_partition
      - file: {{ mount_path }}

关键优化说明

  • 参数化配置:所有可变参数集中在顶部,无需修改后续逻辑即可适配不同设备、标签、挂载点的需求,批量部署多块盘时可以直接循环生成配置
  • 简化判断逻辑:替换原有的grep分区表逻辑为更可靠的blkid判断,避免输出格式变化导致的判断失效
  • 权限修复:原配置中目录权限为777存在安全风险,调整为更合理的755,若需要给业务用户授权可额外添加file.directory的用户组配置,或者在挂载后添加权限修改步骤
  • 挂载逻辑更可靠:直接使用mount.mounted原生状态,替代原有的mount.fstab_present,会自动完成fstab写入+实时挂载的操作,逻辑更统一
  • 避免硬编码设备名:挂载时直接使用LABEL标识,不受云服务器块设备名漂移影响,稳定性更高

如果需要进一步简化,还可以使用Salt社区封装的blockdev公式,不需要自己手动实现分区格式化的全流程逻辑,只需传入参数即可完成配置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:30:00