如何在Ansible Playbook中批量挂载服务器多块磁盘?
批量挂载多块磁盘的Ansible Playbook修改方案
核心思路是用变量列表统一管理所有待挂载的磁盘与对应挂载点,再通过Ansible的loop循环批量执行挂载流程,彻底告别逐个配置的重复工作。
修改后的完整Playbook示例
- name: 批量挂载多块服务器磁盘 hosts: your_target_hosts become: yes # 统一定义所有要挂载的磁盘和挂载点,后续加磁盘直接追加条目即可 vars: disk_mounts: - device: /dev/sdc mount_point: /mnt/disk1 - device: /dev/sdd mount_point: /mnt/disk2 - device: /dev/sde mount_point: /mnt/disk3 # 比如要加/dev/sdf,直接在这里加一行: # - device: /dev/sdf # mount_point: /mnt/disk4 tasks: # 先检查磁盘是否存在,避免路径错误导致后续任务失败 - name: 验证目标磁盘存在性 stat: path: "{{ item.device }}" register: disk_check loop: "{{ disk_mounts }}" failed_when: not disk_check.stat.exists # 创建挂载点目录 - name: 创建磁盘挂载点 file: path: "{{ item.mount_point }}" state: directory mode: '0755' loop: "{{ disk_mounts }}" # 格式化磁盘(仅当磁盘未被格式化时执行,防止误删数据) - name: 格式化目标磁盘 filesystem: fstype: ext4 # 可根据需求替换为xfs等其他文件系统 dev: "{{ item.device }}" force: no loop: "{{ disk_mounts }}" # 挂载磁盘并写入fstab实现永久生效 - name: 挂载磁盘并配置开机自动挂载 mount: path: "{{ item.mount_point }}" src: "{{ item.device }}" fstype: ext4 state: mounted # mounted会同时完成挂载+写入fstab loop: "{{ disk_mounts }}"
关键细节说明
- 极简扩展:后续要新增磁盘时,只需要在
disk_mounts变量列表里追加新的device和mount_point条目,完全不用修改任务代码。 - 安全防护:
- 新增的磁盘存在性检查,避免因磁盘路径写错导致任务报错;
filesystem模块的force: no参数,会跳过已格式化的磁盘,防止误删除已有数据。
- 规律场景简化:如果你的磁盘和挂载点命名有严格规律(比如
/dev/sdc对应/mnt/disk1,/dev/sdd对应/mnt/disk2),可以用loop结合序列生成来简化变量定义,示例如下:
- name: 批量挂载按规律命名的磁盘 hosts: your_target_hosts become: yes tasks: - name: 自动匹配磁盘与挂载点 mount: path: "/mnt/disk{{ item }}" src: "/dev/sd{{ ('c' | ord) + item | int -1 | chr }}" fstype: ext4 state: mounted loop: "{{ range(1,4) | list }}" # range(1,4)对应disk1-disk3,即sdc-sde
这种方式适合标准化部署的环境,但灵活性不如直接定义变量列表。
内容的提问来源于stack exchange,提问作者fanbondi
相关产品推荐
相关产品推荐

