自动化存储与挂载配置

AnsibleBeginner
立即练习

介绍

挂载自动化应当是可重复且安全的。对于实验虚拟机而言,tmpfs 提供了一种无害的文件系统,既能练习挂载点管理,又能操作 /etc/fstab。

在本实验中,你将创建一个挂载点,使用 ansible.posix.mount 挂载 tmpfs,通过 findmnt 和 /etc/fstab 进行验证,并证明该 Playbook 具有幂等性。

创建挂载自动化项目

在此步骤中,你将创建一个用于自动化安全 tmpfs 挂载的项目。

cd /home/labex/project
mkdir -p rhce-ansible/{inventory,playbooks,reports}
cd rhce-ansible
cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
host_key_checking = False
retry_files_enabled = False
EOF
cat > inventory/hosts <<'EOF'
[managed]
host ansible_connection=local
EOF

挂载目标是一个真实的系统挂载点,但由于它使用了 tmpfs,因此无需进行磁盘分区。这既保证了实验的安全性,又能有效练习挂载和 /etc/fstab 的相关行为。

定义挂载变量

在此步骤中,你将定义挂载点、文件系统类型和选项。size=16m 选项可以将 tmpfs 的大小限制在较小范围内。 在执行本步骤的命令之前,请返回 Ansible 项目目录。这样即使 LabEx 分步运行,命令也能保持稳定。

cd /home/labex/project/rhce-ansible
mkdir -p inventory/group_vars
cat > inventory/group_vars/managed.yml <<'EOF'
mount_point: /mnt/rhce-ansible-data
mount_src: tmpfs
mount_fstype: tmpfs
mount_opts: size=16m,mode=0755
EOF

这些变量同时描述了实时挂载和持久化条目。tmpfs 是源和文件系统类型,而 size=16m,mode=0755 则控制内存文件系统的大小和挂载点权限。

cat inventory/group_vars/managed.yml

编写挂载 Playbook

在此步骤中,你将使用 ansible.posix.mount。state: mounted 设置不仅会立即挂载文件系统,还会确保 /etc/fstab 中存在相应的条目。 在执行本步骤的命令之前,请返回 Ansible 项目目录。

cd /home/labex/project/rhce-ansible
cat > playbooks/manage-mount.yml <<'EOF'
---
- name: Configure a safe tmpfs mount
  hosts: managed
  become: true
  gather_facts: false
  tasks:
    - name: Ensure mount point exists
      ansible.builtin.file:
        path: "{{ mount_point }}"
        state: directory
        mode: '0755'

    - name: Mount and persist tmpfs
      ansible.posix.mount:
        path: "{{ mount_point }}"
        src: "{{ mount_src }}"
        fstype: "{{ mount_fstype }}"
        opts: "{{ mount_opts }}"
        state: mounted

    - name: Write evidence inside mounted filesystem
      ansible.builtin.copy:
        dest: "{{ mount_point }}/mounted-by-ansible.txt"
        content: |
          mounted=true
        mode: '0644'
EOF

state: mounted 执行了两项操作:立即挂载文件系统,并确保 /etc/fstab 中存在用于未来启动的条目。最后的 copy 任务会在挂载的文件系统中写入一个小标记文件,以便你验证挂载是否可用。

ansible-playbook playbooks/manage-mount.yml --syntax-check

运行并检查挂载

在此步骤中,你将运行 Playbook 并检查实时挂载情况以及持久化的 fstab 条目。

cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/manage-mount.yml | tee reports/mount-first.txt

首次运行应会创建挂载点、挂载 tmpfs、更新 /etc/fstab 并写入标记文件。你将直接检查这些结果。

findmnt /mnt/rhce-ansible-data

findmnt 命令确认实时内核挂载表中已包含该挂载点。

grep -F /mnt/rhce-ansible-data /etc/fstab

/etc/fstab 中的行确认了持久化配置已存在。

cat /mnt/rhce-ansible-data/mounted-by-ansible.txt

读取标记文件证明了挂载的文件系统是可写的,并且已成功挂载在预期路径下。

确认挂载自动化的幂等性

在此步骤中,你将重新运行 Playbook。挂载点、fstab 条目和证据文件应已符合预期状态。

cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/manage-mount.yml | tee reports/mount-second.txt

第二次运行将检查 Ansible 是否能在不进行任何更改的情况下识别现有的挂载、fstab 条目和标记文件。

grep -E 'host.*changed=0' reports/mount-second.txt

总结

你使用 ansible.posix.mount 配置了一个安全的 tmpfs 挂载,验证了实时和持久化的挂载状态,并确认了 Playbook 的收敛性(幂等性)。