badblocks в Ubuntu: руководство по поиску бэд-секторов

Введение

Своевременная диагностика физических накопителей позволяет предотвратить аварийную потерю информации задолго до окончательного выхода диска из строя. В экосистеме Linux основным низкоуровневым инструментом для выявления сбойных участков (bad sectors) выступает утилита badblocks. Ниже подробно разобрана практическая работа с этой программой: от сборки безопасного виртуального стенда до выполнения неразрушающего стресс-тестирования, контроля прогресса и логирования выявленных ошибок.

1. Подготовка тестового окружения и первичный прогон в режиме чтения (-v)

Для работы с утилитой убедимся в наличии пакета e2fsprogs в системе, обновив списки репозиториев и установив необходимые компоненты с помощью команды sudo apt-get update -qq && sudo apt-get install -y e2fsprogs.

Обновление пакетов и установка e2fsprogs

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

Создание виртуального образа диска через dd

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

Подключение виртуального диска к loop-устройству

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

Определение активного loop-устройства

Принцип действия 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) с целью изоляции битых зон.

Сканирование с размером блока 4096 байт и записью отчета

Проинспектируем содержимое созданного лог-файла вызовом 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.

Демонтаж loop-устройства и удаление временных файлов

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