Команда badblocks

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

Предупреждение: не используйте рассматриваемую команду, если не до конца уверены в правильности своих действий или не понимаете сути происходящих процессов, ведь в результате даже незначительной ошибки вы можете лишиться всех хранящихся на диске данных. Кроме того, не пытайтесь использовать эту команду по отношению к смонтированному разделу или к диску с со смонтирнованными разделами, ведь в этом случае последствия будут непредсказуемыми.

Перед использованием badblocks необходимо определиться с жестким диском или его разделом, на котором нужно искать поврежденные сектора. Для этого может использоваться команда lsblk:

# lsblk -o NAME,FSTYPE,LABEL,MOUNTPOINT,MODEL
NAME    FSTYPE  LABEL     MOUNTPOINT               MODEL
...

В данном случае в столбце NAME будут выводиться имена файлов устройств накопителей и их разделов (для обозначения разделов используется дополнительная нумерация), в столбце FSTYPE - названия созданных в разделах файловых систем, в столбце LABEL - метки разделов, в столбце MOUNTPOINT - пути к точкам монтирования файловых систем, а в столбце MODEL - информация о моделях устройств.

Базовый синтаксис команды:

# badblocks -v /dev/<имя файла раздела или устройства>

Параметр -v используется для вывода информации о ходе процесса проверки жесткого диска.

Если вам по какой-либо причине понадобится запретить использование поврежденных секторов на уровне файловой системы вы всегда можете сохранить список этих секторов и передать его утилите e2fsck. Это делается следующим образом:

# badblocks -v /dev/<имя файла раздела или устройства> > /tmp/badblocks.txt
# e2fsck -l /tmp/bad-blocks.txt /dev/<имя файла раздела или устройства>
# rm /tmp/badblocks.txt

Однако, в большинстве случаев будет достаточно однокртного посектороного чтения данных из раздела или со всего устройства.

Примеры использования

1. Выбор раздела жесткого диска для проверки

# lsblk -o NAME,FSTYPE,LABEL,MOUNTPOINT,MODEL
NAME    FSTYPE  LABEL     MOUNTPOINT               MODEL
sdb                                                MAXTOR STM316081
├─sdb4  ext4    home      /home                    
├─sdb2  ext4    Debian                             
└─sdb1  swap                                       
...

Выберем раздел с корневой файловой сситемой дистрибутива Debian (с соотвествующей меткой), который в данный момент не смонтирован. Ему соответствует файл устройства sdb2.

2. Проверка выбранного раздела на наличие поврежденных секторов

# badblocks -v /dev/sdb2
Checking blocks 0 to 12697599
Checking for bad blocks (read-only test):  done
                                                 
Pass completed, 0 bad blocks found. (0/0/0 errors)

Очевидно, что в ходе проверки раздела поврежденных секторов не было обнаружено.