这是我的 Ansible 任务 -
在 EC2 实例中挂载一个带有外部 ebs 卷的目录,以使Amazon EBS 卷可用。
- name: Create Data directory #1
file:
path: "{{ data_directory }}/"
state: directory
- name: Get the EBS volume/block #2
shell: lsblk -x SIZE | grep disk | tail -1 | awk '{print $1}'
register: ebs_nvme_block
check_mode: false
- name: Printout the block #3
debug:
var: ebs_nvme_block.stdout_lines[0]
- name: Create a xfs filesystem on EBS volume #4
filesystem:
fstype: xfs
dev: "/dev/{{ ebs_nvme_block.stdout_lines[0] }}"
ignore_errors: "{{ ansible_check_mode }}"
- name: Get UUID of ebs volume #5
shell: lsblk -o +UUID | grep "{{ ebs_nvme_block.stdout_lines[0] }}" | awk '{print $NF}'
register: uuid
check_mode: false
- name: Print UUID #6
debug:
var: uuid.stdout
- name: Mount the ebs volume with /data directory #6
mount:
backup: yes
path: "{{ data_directory }}"
src: "/dev/{{ ebs_nvme_block.stdout_lines[0] }}" # or use UUID={{ uuid.stdout }}
state: mounted
opts: defaults,nofail
dump: 0
passno: 2
fstype: xfs
ignore_errors: "{{ ansible_check_mode }}"
现在这个#6代码块安装并创建备份/etc/fstab
和更新如下
LABEL=cloudimg-rootfs / ext4 defaults,discard 0 0
/dev/nvme1n1 /data xfs defaults,nofail 0 2
如果我使用UUID
挂载,则将其/etc/fstab
修改为
LABEL=cloudimg-rootfs / ext4 defaults,discard 0 0
UUID=XXXXXXXXXXXXXXXX /data xfs defaults,nofail 0 0
#7 块代码更新/etc/fstab
as
LABEL=cloudimg-rootfs / ext4 defaults,discard 0 0
UUID={{ uuid.stdout }} {{ data_directory }} xfs defaults,nofail 0 2
一切正常。我在安装时没有收到任何错误,但无论 EC2 实例收到状态检查错误 [ 1/2 checks passed
] 的原因是什么。
- 第一个问题是 - 是否有任何格式的
/etc/fstab
文件。值之间是否有单空格或双空格? - 从这里如何 fstab 工作并使Amazon EBS 卷可用于 Linux,我得到的是
- 字段之间有 2 个空格。当 Ansible 修改
fstab
文件时,它不会创建任何额外的空间。
UUID=aebf131c-6957-451e-8d34-ec978d9581ae /data xfs defaults,nofail 0 2
UUID=aebf131c-6957-451e-8d34-ec978d9581ae /data xfs defaults,nofail 0 2
[Ansible 修改]
- 它对状态检查有任何影响吗?
- Ansible 将回溯文件创建为
fstab.DATETIME~
. 同样的问题,这个备份文件是否有任何状态检查错误的影响。