Ваш сценарий сообщает, что имя не найдено, а затем сообщает, что имя существует. Это из-за вашего состояния , если [$? -ne 1]
. Знак "$?" представляет код возврата последнего выражения в скрипте. В данном случае это код возврата предыдущего блока if.
Чтобы получить желаемый результат, переместите команду grep между первым и вторым блоками if. Таким образом, второе if будет оценивать результаты grep. Если grep найдет результат, он напечатает этот результат, и его код возврата будет 0, и блок будет пропущен. Если grep не находит результата, он ничего не должен печатать, а его код возврата будет 1, что приведет к выполнению условия.
Для повторного использования того же диска в ZFS, если вы уверены, что диск не неисправен, хорошим началом будет выполнение DD первых 10 ГБ диска, но это нужно делать и в конце привод. А вот DD 10 Гб не надо, думаю первого и последнего МБ хватит.
Я решил это так:
dd bs=512 if=/dev/zero of=/dev/sdk count=2048 seek=$(($(blockdev --getsz /dev/sdk) - 2048))
dd bs=512 if=/dev/zero of=/dev/sdk count=2048
Затем просто добавьте «новый» диск обратно в пул ZFS. Не нужно очищать этикетки, стирать, протирать диск. ДД - это все, что вам нужно. Вы также не должны разбивать диск после DD. ZFS не примет ранее разбитый на разделы диск.
Тогда простоzpool replace <pool-name> <old-device> <new-device>
обычно это диск -с идентификатором -и устройство, указанное в lsblk
.