使用 blkid 检查附加的 EBS 卷是否已格式化

使用 blkid 检查附加的 EBS 卷是否已格式化

我对脚本的一部分存在问题,该脚本试图在格式化之前检查附加卷是否已被格式化。

如果使用 nvme 卷,则此检查中使用的 grep 如果卷未格式化,则返回零。这是因为 file -s 的输出似乎是一串长字符:

Xs\333d8\374R\352if\253w}$\014\246E\034_I\275\304\2505!\3536U\336\252\274\252\323K\345\334\225;\356\0075T\350ru\003Kwp\353v:\326\263a\251\307\/\001Db\216

因此,grep count 返回零,并且脚本假定磁盘已被格式化,因为 if 语句假定如果计数为零,则它一定已经被格式化。

当前检查的是输出是否为零:

file -s /dev/nvme | grep -c ': data$'

我想知道是否可以安全地使用 blkid,但请检查以确保它大于零而不是零,以确定卷是否已格式化:

blkid | grep -c /dev/nvme

答案1

您可以检查特定设备的详细信息并据此采取行动:

blkid --match-token TYPE=ext4 /dev/nvme123 || mkfs.ext4 -m0 /dev/nvme123

这样做的目的是:

  1. blkid检查是否/dev/nvme123格式化ext4,如果没有,则返回非零返回码。
  2. 双管道仅当第一个命令返回非零时才||运行第二个命令 ( )。如果第一个命令返回,则不会运行 mkfs。mkfs.ext40

希望有帮助:)

答案2

尝试下面的方法

# for type in ext4 ext3 ext2 iso9660;do [[ `blkid |grep /dev/vdc|awk '{print $NF}'`  =~ TYPE=\"$type\" ]] && echo matched ;done

输出

matched

列出预期的文件系统类型并检查是否匹配,标记它并用于进一步处理。

相关内容