| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm: Общие вопросы > Надо прочитать soft-bad sector |
| Автор: Горо 22.6.2004, 10:49 |
| ПРоблема! На винте куча soft-bad-ов, и некоторое количество их на файловой таблице. Для того чтобы попытаться восстановить тома на винте, я хочу сначала слить образ диска один-в-один на здоровый винт, а уже там восстанавливать тома стандартным Acronis-ом или еще чем! Так проблема в том, что сливать не получается. Бэды не дают. Надумал я написать небольшую прогу, которая бы могла БЭДы абы как считать, пусть неправильно, пусть с ошибками, но чтобы перелилось это на другой девайс. Стандартные же проги на БЭДАх зависают пытаясь прочесть. Я бы прошелся по бэдам ремапером, но они именно в файловой таблице, которую ремапер исправлять не желает. Так можно ли считать сектор в любом случае, или содержимое сектора мне доступно только когда не произошло ошибок чтения? |
| Автор: Akina 22.6.2004, 12:38 |
| Ты, похоже, плохо понимаешь, что означают применяемые тобой термины. Soft-bad - это сектор (кластер, блок), помеченный в файловой системе как поврежденный, но не имеющий повреждений. Соответственно ошибка CRC или дефект поверхности - это НЕ soft-bad. Кстати, на ФАТ12/16/32 софт-бэд по определению не может быть в таблице ФАТ или (для ФАТ12/16) корневом каталоге. Впрочем, неважно. По сабжу. Хард-бэды прекрасно игнорирует например Norton Ghost. Просто копию надо делать даже по смыслу процедуры не логического раздела, а физической области на винте. Ну и сказать что вместо дефектных секторов надо писАть нули - см. настройки. Софт, читающий остатки данных из физически дефектных секторов винта, существует. Однако об этом забудь - рядовому (и не очень) юзеру он просто недоступен. |
| Автор: Guest 22.6.2004, 15:50 | ||||||||
Я ОЧЕНЬ ХОРОШО ПОНИМАЮ. ЕСТЬ HARD-BAD - это плохой сектор, который обусловлен повреждением поверхности. ЕСТЬ SOFT-BAD - это "плохой" сектор, который появляется в тех случаях, когда в время записи сектора, от головка теряет питание, и сектор не дописывается. В итоге начало сектора новое, окончание старое и соответственно контрольное число не соответствует сектору. Потеря питания головкой может быть: отвалились сигналы от контроллера (например иголки в винтах IBM), отвалилось питание вообще. А вот файловая система метит у себя сектора плохими, не взирая на то, hard это или soft. Почему называется HARD: это не лечится. Почему называется SOFT: это лечится. сектор просто форматируется на низком уровне, функциональностьюсамого контроллера.
В связи с вышеизложенным ты глубоко ошибаешься. Может. И никто ему не помешает. Кстати прочитай свое сообщение и поймешь, что сам себе противоречишь.
За это спасибо. Может быть поможет!
Ой! Ну не смешите ви мои тапочки! Если существует софт, то и Я могу его написать! Соответственно вернемся к моему сообщению: Как я могу в своей программе получить доступ к данным в поврежденном секторе? ВИ МЕНЯ ПОНЯТЬ |
| Автор: oleg1973 22.6.2004, 16:00 |
| через порты контролера читая всю дорожку вместе с межсекторными метками (raw data) |
| Автор: Akina 22.6.2004, 16:42 | ||
Так в чем проблема? Команда "считывание без контроля" класс 7 опкод 5. Выдает сырые данные без обработки, многократное чтение позволяет рассчитать область повреждения и слабые биты. Удачи! |
| Автор: oleg1973 22.6.2004, 18:56 |
| такимже макаром и записать можно совсем однако нестандартный формать будет |
| Автор: Ruterian 11.7.2004, 10:37 |
| Блин, вот усложнили-то!!! Есть 4 стандартных АТА-команды для чтения сектора/блока из HDD. 20h - чтение с повторами при ошибке 21h - чтение без повторов 22h - длинное чтение с повторами 23h - длинное чтение без повторов Команду 20h использует ОС и BIOS при стандартной работе с диском (ее генерирует соответствующая функция int13, или драйвер HDD). Команды длинного чтения в настоящее время устарели и поддерживаются не всеми дисками. Т.е. формально они поддерживаются (возвращают блок данных), но его содержимое ПРИ ОШИБКЕ (!!!) НЕ ОБЯЗАНО соответствовать содержимому сектора. Тут все зависит от модели винчестера. Например, на винчестерах IBM, некоторых моделях Quantum, оно работает, а на старых ноутбучных HITACHI - нет (выдает мусор). Для спасения информации с винта, у которого в секторах имеется нарушение CRC блока данных, нужно: 1) Узнать модель HDD и провести эксперимент - посмотреть, как винт будет читать блок, если его "испортить" - например, длинной записью (32h). 2) Если команда длинного чтения не работает на данном типе HDD - замещать БЭДы нулями или сигнатурой. 3) Если работает - писать софт, читающий трек обычным чтением (20h), а при обнаружении БЭДа - читать (только) его через 22h несколько раз и статистически обрабатывать. Процесс этот очень длительный (обычно от 0.5 до нескольких сек на ОДИН сектор). 4) Если винчестер зависает на бэд-блоках (не снимает бит BUSY) - посылать в контроллер софт-ресет (через порт 3х6 в соответствии со стандартом АТА), по таймауту, затем читать следующий блок. 5) Если возиться влом - отдать винт грамотному ремонтнику, у которого этот софт уже есть. |
| Автор: Jin X 27.7.2004, 19:54 | ||||
Он имеет в виду то, что если в FAT появится плохой сектор, то его негде будет отмечать как плохой, и никто никогда не узнает об этом (о том, что он плохой), пока ни попытается его прочитать |
| Автор: BAHO 5.8.2004, 14:04 |
| Мужики, помогите ламеру! т.е. мне. Киньте ссылочку или татейку про АТА команды и как общаться с большими дисками (~80Gb) через порты контроллера. Заранее спасибо |
| Автор: Jin X 6.8.2004, 17:19 |
| См. соседнюю тему. |