Введение
Своевременная диагностика физических накопителей позволяет предотвратить аварийную потерю информации задолго до окончательного выхода диска из строя. В экосистеме Linux основным низкоуровневым инструментом для выявления сбойных участков (bad sectors) выступает утилита badblocks. Ниже подробно разобрана практическая работа с этой программой: от сборки безопасного виртуального стенда до выполнения неразрушающего стресс-тестирования, контроля прогресса и логирования выявленных ошибок.
1. Подготовка тестового окружения и первичный прогон в режиме чтения (-v)
Для работы с утилитой убедимся в наличии пакета e2fsprogs в системе, обновив списки репозиториев и установив необходимые компоненты с помощью команды sudo apt-get update -qq && sudo apt-get install -y e2fsprogs.

Чтобы исключить любые риски для реальных накопителей сервера, сформируем изолированный файл-образ размером 50 МБ через команду dd if=/dev/zero of=/tmp/disk_test.img bs=1M count=50 status=none.

Преобразуем полученный файл в виртуальное блочное устройство, привязав его к первому свободному loop-слоту: sudo losetup -f /tmp/disk_test.img.

Зафиксируем имя созданного устройства в переменной окружения и проверим корректность его инициализации командной связкой LOOP_DEV=$(losetup -j /tmp/disk_test.img | cut -d: -f1) && echo "테스트 디바이스: $LOOP_DEV".

Принцип действия badblocks заключается в последовательном обращении к каждому блоку накопителя с фиксацией аппаратных сбоев ввода-вывода.
По умолчанию утилита функционирует в безопасном режиме read-only, не модифицируя разметку и файлы. Флаг -v включает детализированный вывод информации о ходе проверки.
Если по завершении анализа список номеров сбойных секторов пуст, носитель полностью исправен.
⚙️ [Справочник ключевых параметров]
-v : транслирует подробные сведения о текущих шагах сканирования и итоговом статусе.-w : запускает деструктивную проверку записью паттернов данных (приводит к безвозвратному уничтожению всей существующей информации на накопителе).-n : включает неразрушающий цикл записи и чтения с обязательным предварительным бэкапом и последующим восстановлением каждого блока.-s : выводит динамический индикатор выполнения с процентами и количеством обработанных блоков.-b : явно задает размер одного блока в байтах (по умолчанию принимается 1024 байта).-o : перенаправляет список обнаруженных поврежденных блоков в указанный текстовый файл вместо консоли.-p : задает число повторных итераций сканирования для отлова плавающих аппаратных ошибок.

2. Отображение прогресса операции в реальном времени (-s, -v)
При работе с емкими носителями крайне важно видеть динамику процесса. Для одновременной активации наглядного счетчика и подробных логов выполним команду sudo badblocks -s -v $LOOP_DEV.
Ключ -s информирует администратора о проценте завершения и числе проверенных секторов в режиме реального времени, тогда как параметр -v гарантирует расширенное протоколирование фаз проверки.
Отсутствие номеров поврежденных блоков на выходе свидетельствует об абсолютной целостности тестируемого дискового пространства.

3. Выравнивание размера блока и протоколирование результатов (-b, -o)
Большинство актуальных файловых систем (например, ext4) оперируют кластерами по 4096 байт. Чтобы согласовать геометрию сканирования с реальной файловой системой и сохранить журнал дефектов на диск, воспользуемся командой LOOP_DEV=$(losetup -j /tmp/disk_test.img | cut -d: -f1) && sudo badblocks -b 4096 -v -o /tmp/badblocks_report.txt $LOOP_DEV.
Аргумент -b 4096 заменяет стандартный килобайтный шаг, существенно ускоряя анализ и оптимизируя его под современную структуру разметки.
Опция -o перенаправляет адреса всех найденных неисправных секторов в текстовый отчет, пригодный для передачи утилитам разметки (fsck, mke2fs) с целью изоляции битых зон.

Проинспектируем содержимое созданного лог-файла вызовом cat /tmp/badblocks_report.txt.
Если накопитель не содержит аппаратных дефектов, результирующий документ останется полностью пустым.

4. Неразрушающий стресс-тест записью и завершение работы стенда (-n)
Когда требуется более глубокая диагностика контроллера и магнитных/флеш-ячеек без потери существующих файлов, применяют комбинацию флагов -n и -v: LOOP_DEV=$(losetup -j /tmp/disk_test.img | cut -d: -f1) && sudo badblocks -n -v $LOOP_DEV.
Режим -n считывает блок в память, записывает поверх тестовую битовую последовательность, проверяет корректность считывания и возвращает исходные пользовательские данные обратно.
Чистый вывод без перечисления сбойных секторов подтверждает надежность диска под комбинированной нагрузкой ввода-вывода.

По завершении экспериментов корректно демонтируем тестовую инфраструктуру: отключим loop-устройство и удалим временные файлы командой LOOP_DEV=$(losetup -j /tmp/disk_test.img | cut -d: -f1) && sudo losetup -d $LOOP_DEV && rm -f /tmp/disk_test.img /tmp/badblocks_report.txt.

Мы изучили ключевые режимы работы badblocks в дистрибутивах Ubuntu, обеспечивающие как экспресс-проверку, так и всесторонний стресс-тест накопителей. Регулярный запуск подобной диагностики позволяет своевременно обнаружить деградацию диска и обезопасить критически важные данные от внезапной утраты.