Плохой сектор (сектор - это старый термин, в настоящее время чаще используется «блок») на жестком диске означает, что один или несколько поврежденных блоков не соответствуют спецификации на магнитной поверхности диска. Единственный способ найти эти блоки - попытаться прочитать каждый блок на жестком диске. Жесткие диски работают медленно, поэтому это займет много времени.
Например, современный жесткий диск имеет реальную пропускную способность чтения около 130 МБ / с, поэтому современному диску 4 ТБ потребуется около 4000000 МБ / 130 МБ / с = 8,5 часов, чтобы даже прочитать весь диск один раз без проблемных блоков. Накопитель с одним или несколькими поврежденными блоками заставит диск неоднократно пытаться перечитать эти блоки, поэтому пропускная способность сильно пострадает. Это позволит вам найти плохие блоки, которые вызывают ошибки чтения. Чтобы заставить любой современный жесткий диск переназначить плохой блок, нужно что-то записать в этот плохой блок.
Единственный способ действительно проверить, работает ли блок поверхности жесткого диска, - это прочитать этот блок, затем записать его обратно и посмотреть, все ли в порядке с диска все в порядке для этого блока. Раньше блоки имели длину 512 байт, но современные накопители используют блоки по 4 КБ. Современный накопитель на 4 ТБ требует тестирования около миллиарда (1e9) блоков по 4 КБ. И я упоминал, что жесткие диски работают медленно?
Если у вас плохие блоки и какие-либо данные, вам действительно нужен fsck.ext4 -cc
. И это займет около дня или двух как минимум. Выполнение fsck.ext4 -c
позволит ext4 избежать плохих блоков, но не сможет починить диск. Опция -c
в fsck.ext4
позволяет попробовать прочитать каждый блок раздела. Опция -cc
заставит его попробовать прочитать каждый блок и записать одно и то же содержимое обратно на диск и проверить на наличие ошибок. И даже диски с -cc
иногда можно починить ... Тем не менее, нет волшебной пули, чтобы найти плохие блоки. Единственный способ - просканировать весь диск, и он будет медленным с огромными дисками.
Поскольку вам не нужны никакие данные, выполнение команды sudo dd if=/dev/zero of=/dev/sdX bs=4M
позволит пропустить часть "чтение данных" и перейти непосредственно к части "исправить блоки". И это все еще займет где-то между 8-20 часами, чтобы закончить.
Обратите внимание, что микропрограмма привода исправит неисправный блок автоматически после перезаписи неисправного блока. Это действительно не имеет значения, какую операционную систему или инструмент вы используете, чтобы перезаписать поврежденный блок на жестком диске. И данные тоже не имеют значения. Если диск не может исправить какой-либо неисправный блок, этот диск готов. Это связано с тем, что современные жесткие диски имеют в запасе несколько дополнительных физических блоков, которые используются для заполнения поврежденных блоков в логическом адресном пространстве. Если плохой блок не может быть исправлен, это только потому, что все блоки в резервном пространстве уже были использованы! В этом случае привод уже давно вышел из строя.
Обратите внимание, что вы должны использовать правильный размер блока, чтобы исправить блок. Например, если ваш накопитель использует физические блоки 4 КБ и по-прежнему допускает логические блоки 512 Б, вы не можете перезаписать поврежденный блок логической записью 512 Б, потому что технически диск попытается прочитать реальный блок 4 КБ, измените записанный вами 512 Б и -записать блок 4KB обратно на магнитную платформу. Очевидно, что "прочитать реальные 4 КБ" не удастся, если физический блок 4 КБ будет плохим. Чтобы избежать этого, нужно записать весь блок размером 4 КБ в одну команду жесткого диска, чтобы с физического диска ничего не читалось. В конце вы должны написать правильно выровненный блок 4 КБ, чтобы исправить данный плохой блок. Команда dd
выше всегда будет записывать блоки 4 Мб, которые будут правильно выровнены при использовании всего устройства в качестве мишени (вы можете использовать любое кратное 4 Кбайт для записи, приведенный выше пример использует 4 МБ для повышения производительности). Если вы используете один раздел в качестве целевого и этот раздел не выровнен правильно, эта команда все равно может не исправить поврежденные блоки, если логические и физические размеры блоков не совпадают с диском. Насколько я знаю, это верно для большинства современных жестких дисков. Выполнение of
даст информацию об устройстве smartctl -x /dev/sdX
.
Как всегда, сделайте man fsck.ext4
, man dd
и man smartctl
перед тем, как возиться с этим.