Утилита badblocks продолжает сообщать о «недопустимом последнем блоке»

Утилита badblocks продолжает сообщать о «недопустимом последнем блоке»

Я пытаюсь запустить badblocksна диске с одним разделом. На диске находится файловая система FreeBSD.

Я загружаюсь с помощью Linux Live USB Drive. Диск размонтирован. Вывод fdisk -l:

   Device  Boot     Start          End    Id     System
/dev/sda1     *        63   976773167+    a5     FreeBSD

Итак, я бегу:

# badblocks -v /dev/sda1

И там говорится:

badblocks: invalid last block - /dev/sda1

Я не могу найти никакой полезной информации об этом. badblocksПравильно ли я использую утилиту? Или это признак того, что с диском что-то не так?

решение1

Нет, это не признак того, что с диском что-то не так. Вы получаете эту ошибку, потому что badblocks принимает /dev/sda1 как аргумент последнего блока вместо того, чтобы принять его как устройство.

Синтаксис в вашем вопросе мне кажется правильным. Попробуйте указать аргумент last-block после устройства:
badblocks -v /dev/sda1 976773167

Если это не сработает, попробуйте добавить к этому еще и первый блок:
badblocks -v /dev/sda1 976773167 63

Чтобы убедиться, что это не означает, что с вашим диском что-то не так, вот вывод, когда я добавляю недопустимый аргумент последнего блока «nope»:

sudo badblocks -v /dev/sdb1 нет
badblocks: неверный последний блок - нет


Вот пример из моей истории bash последнего использования badblocks (для доступа к этим дискам в моей системе требуется доступ sudo):
sudo badblocks -v /dev/sdb1

Выход:

Проверка блоков от 0 до 976751967
Проверка на наличие плохих блоков (тест только для чтения):

Если я отменю процесс через некоторое время с помощью Ctrl+C, то вывод будет следующим:

Прервано в блоке 7470720

Вот синтаксис для возобновления процесса (см. man badblocks):
badblocks -v устройство [ последний-блок ] [ первый-блок ]

«Last-block» — это последний блок, который будет прочитан на устройстве, а «first-block» — это место, с которого должно начаться чтение. Пример:
sudo badblocks -v /dev/sdb1 976751967 7470720

Выход:

Проверка блоков 7470720 по 976751967 Проверка на наличие плохих блоков (тест только для чтения):

решение2

Команда badblocks на современных дисковых устройствах вряд ли стоит усилий в наши дни. Это связано с тем, что плата контроллера дисковода внутренне определяет плохие блоки и заменяет их из изначально выделенных «запасных» блоков для автоматической замены. Если у вас закончились эти запасные блоки и у вас проблемы с плохими блоками, я НАСТОЯТЕЛЬНО рекомендую заменить диск, поскольку оборудование выходит из строя.

Если вы хотите узнать состояние диска, большинство современных дисков поддерживают интерфейс SMART для сообщения о состоянии диска. Существует множество утилит, которые определяют состояние и предоставляют эту информацию о состоянии диска. Попробуйте одну из них.

решение3

Вы скопировали команду с веб-страницы. Тире было заменено на какой-то другой символ тире в -v. (немного длиннее обычного тире) Введите команду или исправьте ее как-то.

решение4

Если вы получаете эту ошибку, несмотря на использование правильного синтаксиса, и используете большие диски (например, несколько ТБ) с небольшим размером блока (например, 512 байт), то вы можете столкнуться с badblocksограничением использования 32-битных номеров блоков.

В качестве обходного пути вы можете использовать больший блок. Чтобы найти минимальный размер блока, который badblocksможет работать, вы можете просто запустить badblocksс разными значениями для -bи без начального/конечного блока. Если вы получаете такую ​​ошибку

badblocks: Значение слишком велико для определенного типа данных, недопустимый конечный блок: должно быть 32-битное значение

затем попробуйте увеличить размер блока (например, -b 512до -b 1024или -b 2048), пока это не сработает. При этом вы используете некоторое разрешение, но это лучше, чем ничего.

Вы также можете использовать ddrescueна этом этапе или связаться с разработчиком для badblocksустранения проблемы в следующей версии.

Связанный контент