HDD. Linux. Проверка HDD на бэдблоки (badblocks checking)
Вариант 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