Передовые виртуальные и выделенные серверы для проектов любой сложности и структуры.
 Подписывайтесь на Telegram канал!

Проверка диска на наличие плохих секторов возникает нежданно и лучше знать как это сделать имея под рукой всё необходимое. Вариантов проверки дисков множество. Расскажу о проверке средствами консоли Linux. Просто и ничего лишнего.

Причины для проверки диска

Основная причина проверки это как правило медленная работа системы или зависание при определенных действиях. Вывести диск из строя могут разные факторы. Вот некоторые из них:

  • Время жизни диска не вечна;
  • Некорректные выключения системы при пропадании питания;
  • Физические удары;
  • Запуск холодного диска зимой.

Самое лучшее это периодически проверять диск просто так. На ранней стадии обнаружения гораздо больше шансов сохранить важные данные.

Храните важные данные в двух совершенно разных физически местах. Только такой подход гарантирует вам полную сохранность данных.

Определение диска для проверки

Для того чтобы понять какой диск проверять нам достаточно ввести команду в консоли которая выдаст нам список всех имеющихся дисков в системе.

fdisk -l
= вывод части команды =
Диск /dev/sda: 232.9 GiB, 250059350016 байт, 488397168 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x42ef42ef

Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип
/dev/sda1 * 2048 184322047 184320000    87.9G 7 HPFS/NTFS/exFAT
/dev/sda2 184322048 488394751 304072704 145G  7 HPFS/NTFS/exFAT

Мы видим в выводе диск который нам надо проверить. Диск имеет 2 раздела с данными.

Проверка диска на битые секторы

Перед проверкой разделы необходимо отмонтировать. Как правило я загружаю операционную систему на базе Linux c Live образа или использую подготовленный PXE сервер на котором присутствуют и другие программы для проверки жестких дисков.

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

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

Создание файла для записи плохих секторов

Создадим файл указав для удобства имя проверяемого раздела.

touch "/root/bad-sda1.list"

Проверка диска утилитой badblocks

Запустим проверку с информацией о ходе процесса с подробным выводом. Чем больше диск тем дольше проверка!

badblocks -sv /dev/sda1 > /root/bad-sda1.list
= Информация о ходе процесса = 
badblocks -sv /dev/sda1 > /root/bad-sda1.list Checking blocks 0 to 976761542 Checking for bad blocks (read-only test): 0.91% done, 1:43 elapsed. (0/0/0 errors)
= Подробный вывод результата =
badblocks -sv /dev/sda1 > /root/bad-sda1.list Checking blocks 0 to 156289862 Checking for bad blocks (read-only test): done             Pass completed, 8 bad blocks found. (8/0/0 errors)

В нашем случае диск с 8 плохими секторами.

Пометка плохих секторов диска

Запустим утилиту e2fsck, указав ей список битых секторов. Программа пометит плохие сектора  и попытается восстановить данные.

Указывать формат файловой системы нет надобности. Утилита сделает всё сама.

e2fsck -l /root/bad-sda1.list /dev/sda1
= Вывод команды =
e2fsck -l /root/bad-sda1.list /dev/sda1e2fsck 1.43.3 (04-Sep-2016)
Bad block 44661688 out of range; ignored.
Bad block 44661689 out of range; ignored.
Bad block 44661690 out of range; ignored.
Bad block 44911919 out of range; ignored.
Bad block 44958212 out of range; ignored.
Bad block 44958213 out of range; ignored.
Bad block 44958214 out of range; ignored.
Bad block 44958215 out of range; ignored.
/dev/sda1: Updating bad block inode.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sda1: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sda1: 11/9773056 files (0.0% non-contiguous), 891013/39072465 blocks

Подготовка диска для проверки

Бывают случаи когда таблица разделов повреждена на диске и нет возможности посмотреть какие есть разделы с данными. Возможно вам не надо никаких данных на диске и вы хотите диск отформатировать и затем проверить. Случаи бывают разные и надо подходить исходя из ситуации.

С помощью команды с ключом -z вы сможете создать заново таблицу разделов и создать необходимые вам разделы.

cfdisk -z /dev/sda

Как работать с утилитой cfdisk я не буду объяснять, так как это выходит за рамки данной статьи.

Предположим что вы создали из всего диска лишь один раздел /dev/sda1. Для форматирования его в ext4 достаточно выполнить команду:

mkfs.ext4 /dev/sda1
= Вывод команды =
mke2fs 1.43.3 (04-Sep-2016)Creating filesystem with 244190385 4k blocks and 61054976 inodesFilesystem UUID: c4a1eeed-960a-4aea-a5ff-02ce93bf0a2eSuperblock backups stored on blocks:  32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,  4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,  102400000, 214990848
Allocating group tables: done                            
Writing inode tables: done                           
Creating journal (262144 blocks): doneWriting superblocks and filesystem accounting information: done

Вывод

Проще и понятней механизма проверки диска на битые сектора как в системе Linux я не встречал. Ничего лишнего только суть. Выбор варианта как проверять и когда всегда за вами. После того как я один раз потерял важные данные храню всё важное в 3 разных местах.

Понравилась статья? Поделитесь ей с друзьями!
Пожалуйста, оставляйте свои комментарии

Читая их я получаю информацию которая позволяет мне улучшить качество написания статей. Кроме того, оставляя комментарии вы помогаете сайту получить более высокий рейтинг у поисковых систем. Давайте общаться.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *