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
相关产品推荐
相关产品推荐

