У меня проблема с частью скрипта, который пытается проверить, отформатирован ли прикрепленный том перед форматированием.
Команда grep, используемая в этой проверке, возвращает ноль, если том не отформатирован при использовании томов nvme. Это потому, что вывод 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 возвращает ноль, и сценарий предполагает, что диск уже отформатирован, потому что оператор if предполагает, что если счетчик равен нулю, он уже должен быть отформатирован.
Текущая проверка находится на выходе, равно ли оно нулю:
file -s /dev/nvme | grep -c ': data$'
Я хотел бы знать, могу ли я безопасно использовать blkid, но убедитесь, что он больше нуля, а не нуля, чтобы определить, отформатирован ли том:
blkid | grep -c /dev/nvme
Вы можете проверить детали конкретного устройства и действовать исходя из этого:
blkid --match-token TYPE=ext4 /dev/nvme123 || mkfs.ext4 -m0 /dev/nvme123
Что это значит:
blkid
проверяет, есть ли /dev/nvme123
является ext4
форматируется, и в противном случае возвращает ненулевой код возврата. ||
выполняет вторую команду (mkfs.ext4
) только в том случае, если первая вернула ненулевое значение. Если первый вернулся 0
он не запустит mkfs.Надеюсь, это поможет :)
Попробуйте что-то вроде ниже
# for type in ext4 ext3 ext2 iso9660;do [[ `blkid |grep /dev/vdc|awk '{print $NF}'` =~ TYPE=\"$type\" ]] && echo matched ;done
Вывод
matched
Перечислите ожидаемые типы файловых систем и проверьте, совпадают ли они, отметьте их и используйте для дальнейшей обработки.