当新磁盘“正在使用”时,Ansible parted 命令失败

问题描述

使用 Ansible v2.10.4 在 Azure IaaS 上配置 RHEL 8 VM,并尝试使用 parted 指令对新数据磁盘进行分区:

- name: Partition the data disk for app use.
  parted:
    device: /dev/sdc
    number: 1
    state: present
    align: optimal
    label: msdos
    part_start: 0%
    part_end: 100%
    part_type: primary

这通常在大约一半的时间内有效;如果没有,它会失败并显示以下消息:

Failed! => {"changed": false,"err": "Error: Partition(s) on /dev/sdc are being used.\n","msg": "Error while running parted script: /sbin/parted -s -m -a optimal /dev/sdc -- unit KiB mklabel msdos mkpart primary 0% 100%","out": "","rc": 1}

虽然我不确定为什么新创建的未分区/未格式化的磁盘会“使用”,但我在其上方添加了此指令以删除任何分区:

- name: First ensure the data disk is "de-partitioned" (so next call to parted doesn't fail).
  parted:
    device: /dev/sdc
    number: 1
    state: absent

有时这有效,但有时,它也会失败,并显示略有不同(但实际上相同)的消息:

Failed! => {"changed": false,"err": "Warning: Partition /dev/sdc1 is being used. Are you sure you want to continue?\n","msg": "Error while running parted script: /sbin/parted -s -m -a optimal /dev/sdc -- rm 1","rc": 1}

在尝试对磁盘执行任何操作之前,Ansible 是否有任何方法可以测试它是否“正在使用”?

解决方法

发现当 RHEL 系统启动时,不能保证第二个磁盘是 /dev/sdc 设备;发现当它失败时,它被分配为 /dev/sdb)。所以必须在我需要访问它时确定设备名称。