Выйдите из команды mkfs, если блочное устройство уже отформатировано - PullRequest
0 голосов
/ 10 июня 2019

Я пишу утилиту, которая должна запускать mkfs для форматирования блочного устройства.

Я использую пакет go exec для запуска правильной команды mkfs для каждого типа файловой системы, например, в случае ext2:

err := exec.CommandContext(ctx, "mkfs.ext2", "-F", path).Run()

К сожалению, если блочное устройство уже отформатировано, mkfs запросит подтверждение (и зависнет). Это означает, что я вынужден пропустить опасный флаг -F, чтобы пропустить эту проверку, теряя данные, если устройство уже было отформатировано.

Я не могу добавить тайм-аут в контекст, потому что форматирование может занять некоторое время по другим причинам, чем это подтверждение.

Я не могу найти флаг mkfs, который возвращает ошибку вместо проверки подтверждения, если блочное устройство уже отформатировано.

Я бы предпочел не полагаться на синтаксический анализ выходных данных команды mkfs, чтобы узнать, запрашивает ли она проверку подтверждения, так как это может привести к сбою при изменении вывода mkfs.

Есть ли способ прервать выполнение команды с правильным сообщением об ошибке, если блочное устройство уже отформатировано, а не зависает при этой проверке подтверждения?

1 Ответ

0 голосов
/ 11 июня 2019

Оказывается, что если мы запустим команду без терминала (tty), опция -F будет принята, и устройство будет отформатировано независимо от того, имеет ли целевое устройство файловую систему или нет.

это происходит с mkfs.ext2, mkfs.ext3 и mkfs.ext4

это на самом деле устаревшее поведение, как указано здесь

mkfs.xfs и mkfs.btrfs ведут себя правильнои ошибка, если блочное устройство уже отформатировано.

Я отправляю это как ответ, поскольку думаю, что это означает, что фактического решения не существует ... запуск mkfs.ext2 за пределами терминала всегда удаляет данные, если естьуже некоторые на устройстве.

...