Я пытаюсь запустить 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
устранения проблемы в следующей версии.