Ansible的mount模块专用于统一管理挂载点的运行状态和持久配置,支持mounted(立即挂载并写入fstab)、unmounted(仅卸载)、present(仅写入fstab)、absent(卸载并清理fstab)四种state操作,兼顾即时生效与开机自动挂载。

Ansible 的 mount 模块专用于统一管理挂载点的**运行状态**和**持久配置**,既能立即挂载/卸载设备,也能写入或清理 /etc/fstab,实现“一次定义、多次生效”。关键在于区分 state 参数的含义,避免误操作导致重启后失效或挂载冲突。
明确挂载状态与 fstab 配置的关系
mount 模块不是单纯执行 mount 命令,而是协调“当前是否挂载”和“开机是否自动挂载”两件事。不同 state 值行为如下:
-
mounted:确保设备已挂载,且
/etc/fstab中有对应条目(若无则添加);挂载点目录不存在会自动创建 -
unmounted:仅卸载设备,
/etc/fstab条目保留不变 -
present:只写入
/etc/fstab,不触发实际挂载(适合预配置,后续由系统启动时加载) -
absent:从
/etc/fstab删除条目,并卸载设备、删除挂载点目录(慎用)
挂载本地磁盘或分区
适用于新增数据盘、扩容存储等场景。需提前格式化设备(如 ext4),再用 mount 模块配置:
- 指定
src(设备路径,如/dev/sdb1)、path(挂载目录,如/data)、fstype(文件系统类型) -
opts可设挂载选项,例如defaults,noatime;dump和passno对应 fstab 第五、六列(通常保持默认值0) - 示例任务:
- name: 挂载 /dev/sdb1 到 /data<br> mount:<br> src: /dev/sdb1<br> path: /data<br> fstype: ext4<br> opts: defaults,noatime<br> state: mounted
挂载 NFS 或 CIFS 网络共享
网络挂载需确保客户端已安装对应工具(如 nfs-utils 或 cifs-utils),并在 src 中填写服务端地址:
- NFS 示例:
src: 192.168.1.10:/share,fstype: nfs,opts: rw,hard,intr,timeo=30 - CIFS 示例:
src: //192.168.1.20/share,fstype: cifs,opts: username=user,password=pass,iocharset=utf8(敏感信息建议用 vault 加密) - 务必在 playbook 中前置安装依赖包,否则 mount 任务会失败
安全与幂等性实践
Ansible 默认保证幂等——重复运行同一任务不会改变系统状态。但要注意:
- 使用
backup: yes让模块自动备份原始/etc/fstab,防止配置错误导致无法启动 - 避免在生产环境直接用
absent删除根目录或关键挂载点条目 - 对 NFS 等网络存储,建议加
state: mounted并配合健康检查(如stat模块验证挂载点是否存在文件) - 测试阶段可用
ansible-playbook --check模拟运行,确认变更范围











