Вход на сайт
Проблема с внешним винтом, ошибки чтения, нужен совет!!
244 просмотров
Перейти к просмотру всей ветки
в ответ project33 26.01.12 04:23
Зуб не дам, но по-моему это не абсолютно верно, а ближе к правде так:
Ремэп производится автоматически только при ошибках записи.
При ошибках чтения контроллер ремап не делает, чтобы сохранить потенциальную возможность прочесть сбойный сектор при помощи программ восстановления данных. Вдруг там ключ от квартиры, где деньги лежат... (Если он его ремапнет - его содержимое уж точно не достать без заводских программ, которые умеют читать таблицы ремапа и служебные области.)
Если сектор действительно плохой (физический дефект) - ему не поможешь, однако бывают "soft-bad" сектора, где физически все ок, просто данные не совпадают с CRC. Такой сектор может образоваться например если во время его записи отключилось питание.
При попытке прочесть такой сектор контроллер обнаруживает несовпадение данных и CRC, помечает сектор как "ожидающий ремапинга", увеличивает на единицу 197 атрибут SMART "Current pending sector count", выдает операционной системе сообщение Read failed, та пробует еще несколько раз и потом помечает в своей файловой системе этот сектор как сбойный. Ремапинг не делается, т.к. это было чтение, а не запись.
При попытках записи файла, содержащего такой "soft-bad" сектор OS прежде чем писать проверяет статус сектора и если он помечен сбойным - она даже не пытается его перезаписать, просто оставляет его помеченным как BAD в файловой системе. А раз не было попыток записи сектора - контроллер его опять не ремапит.
Лечатся такие сектора тупой записью в обход файловой системы. Тогда если сектор успешно пишется без ошибки (это был soft bad) - он просто перезапишется и вернется в строй. Если же это был physical bad - при записи возникнет ошибка записи и контроллер его ремапнет.
Такую "тупую запись" проще всего организовать под Linux например dd if=/dev/zero of=/dev/sda bs=32768, а под Windows (DOS) есть программы типа MHDD, iHDD.
Возвращаясь к теме дискуссии - IMHO надо смотреть SMART на предмет количества секторов уже перемещенный (атрибут 05, "Reallocated sectors count") и если там большое число - значит диск правда умирает, а если нет - значит симулирует болезнь :)
Ремэп производится автоматически только при ошибках записи.
При ошибках чтения контроллер ремап не делает, чтобы сохранить потенциальную возможность прочесть сбойный сектор при помощи программ восстановления данных. Вдруг там ключ от квартиры, где деньги лежат... (Если он его ремапнет - его содержимое уж точно не достать без заводских программ, которые умеют читать таблицы ремапа и служебные области.)
Если сектор действительно плохой (физический дефект) - ему не поможешь, однако бывают "soft-bad" сектора, где физически все ок, просто данные не совпадают с CRC. Такой сектор может образоваться например если во время его записи отключилось питание.
При попытке прочесть такой сектор контроллер обнаруживает несовпадение данных и CRC, помечает сектор как "ожидающий ремапинга", увеличивает на единицу 197 атрибут SMART "Current pending sector count", выдает операционной системе сообщение Read failed, та пробует еще несколько раз и потом помечает в своей файловой системе этот сектор как сбойный. Ремапинг не делается, т.к. это было чтение, а не запись.
При попытках записи файла, содержащего такой "soft-bad" сектор OS прежде чем писать проверяет статус сектора и если он помечен сбойным - она даже не пытается его перезаписать, просто оставляет его помеченным как BAD в файловой системе. А раз не было попыток записи сектора - контроллер его опять не ремапит.
Лечатся такие сектора тупой записью в обход файловой системы. Тогда если сектор успешно пишется без ошибки (это был soft bad) - он просто перезапишется и вернется в строй. Если же это был physical bad - при записи возникнет ошибка записи и контроллер его ремапнет.
Такую "тупую запись" проще всего организовать под Linux например dd if=/dev/zero of=/dev/sda bs=32768, а под Windows (DOS) есть программы типа MHDD, iHDD.
Возвращаясь к теме дискуссии - IMHO надо смотреть SMART на предмет количества секторов уже перемещенный (атрибут 05, "Reallocated sectors count") и если там большое число - значит диск правда умирает, а если нет - значит симулирует болезнь :)