HDD. Linux. Проверка HDD на бэдблоки (badblocks checking)

Материал из Wiki
Перейти к навигации Перейти к поиску


Вариант 1

Установка smartctl

yum install smartmontools

Посмотреть данные SMART

smartctl -iHA

Прогнать самотестирование (результаты смотреть через ндцать часов smartctl -a)

smartctl -t long

Проверить/исправить/очистить диск в режиме READ-ONLY

badblocks -svb4096 /dev/sdb

!!! READ-WRITE РЕЖИМ - ГАРАНТИРОВАННАЯ ПОТЕРЯ ДАННЫХ !!!

badblocks -w -svb4096 /dev/sdb

   badblocks [параметры] устройство
         устройство        - имя устройства для проверки
         параметры         - необязательные параметры проверки, например
         -b   установка размера блока в байтах
                 Этот параметр желательно определять всегда. Размер используемого блока зависит от типа создаваемой файловой системы и её размера.
         -о   определение имени файла, куда программа размещает номера сбойных блоков.
                 Затем этот файл может быть передан программе, проверяющей/создающей файловую систему, для исключения отмеченных блоков.
         -i   установка имени файла, в котором находятся номера сбойных блоков
                 Использование параметра позволяет исключить повторное обращение к этим блокам при сканировании.
         -p   установка количества проходов проверки
         -n   установка для проверки режима "только для чтения", параметр по умолчанию
         -s   отображение номеров проверяемых блоков        -v   отображение подробной информации во время работы программы
         -w   установка использования при проверке режима записи - Гарантированная потеря данных!

А если бэды уже есть - то нужен GNU ddrescue (не путать с dd_rescue) и второй диск.

Вариант 2

Поблочное чтение диска, ничего плохого не случится

dd if=/dev/ada0 of=/dev/null bs=512 status=progress

При встрече первого бэд блока программа завершится с ошибкой:

dd: /dev/ada0: Input/output error MiB) transferred 395.000s, 8111 kB/s
 6266577+0 records in
 6266577+0 records out
 3208487424 bytes transferred in 404.157958 secs (7938697 bytes/sec)

Чтобы продолжать сканирование при встрече бэдблока (таким образом выясним сколько всего бэдблоков на диске):

Вывод ошибок в терминал

dd if=/dev/ada0 of=/dev/null bs=8M status=progress conv=noerror

Вывести ошибки в терминал и записать вывод с ошибками в файл

dd if=/dev/ada0 of=/dev/null bs=8M conv=noerror | & tee /tmp/log.txt