Показать сообщение отдельно

  #2  
Старый 13.05.2009, 12:54
Cthulchu
Познавший АНТИЧАТ
Регистрация: 22.11.2007
Сообщений: 1,822
Провел на форуме:
4468361

Репутация: 1549


Отправить сообщение для Cthulchu с помощью ICQ
По умолчанию

5. Виды дефектов и причины их появления

Настало время разобраться, а отчего, собственно, возникает такая неприятность, как бэды? В UPGRADE #49 мы рассмотрели лишь внешние причины, способствующие их возникновению. А теперь пришло время взглянуть на проблему с другой точки зрения - со стороны самого винчестера. Для этого рассмотрим структуру сектора, в том виде, каким его видит электроника винта «изнутри»:

Рис. 1. Упрощенная структура сектора жесткого диска.

Как видно из рисунка 1, все намного сложнее, чем могло показаться на первый взгляд, даже с помощью дискового редактора. Сектор состоит из заголовка-идентификатора и области данных. Начало сектора помечается специальным байтом - адресным маркером (1). Он служит для сообщения контроллеру о том, что сектор находится под головкой. Затем следуют ячейки, в которых содержится уникальный адрес сектора в формате CHS (2) и его контрольная сумма - для проверки целостности записанного адреса (3). 512 байт данных пользователя помещаются в отдельном поле (4), к которому при записи добавляется несколько десятков байт избыточной информации, предназначенной для коррекции ошибок чтения с помощью ECC-кода (5). Рядом с данными размещается 4 байта циклической контрольной суммы (CRC) данных, которая служит для проверки целостности данных пользователя, и сообщения системе коррекции ошибок при ее нарушении (6). Для более надежной работы сектора при колебаниях скорости вращения имеются байты-пробелы (7). У некоторых винчестеров имеется дополнительный байт после AM - в нем сектор помечается как BAD.

Структура низкоуровневого формата сильно различается у разных моделей накопителей, и определяется типом используемого контроллера, его микропрограммой и изобретательностью разработчиков. Например, у новых винчестеров фирмы IBM используются секторы без служебных заголовков - NoID. Его устройство подробно описано на сайте IBM: http://www.storage.ibm.com/hdd/ipl/oem/tech/noid.htm.

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

Дефекты можно разделить на две большие группы: физические и логические. Рассмотрим каждый их вид подробно.

Физические дефекты

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

Серво-ошибки. У всех современных накопителей для перемещение головок используется система, получившая название «voice coil» (звуковая катушка), которая в отличие от шагового двигателя старых винтов, не имеет какой-либо дискретности перемещения. Для точного попадания головок на дорожки в винтах используется система с обратной связью, которая ориентируются по специальным магнитным сервометкам, нанесенным на диск. Сервометки имеются на каждой стороне каждого диска. Они расположены равномерно вдоль всех дорожек, и строго радиально, как спицы в колесе, образуя сервоформат. Он не относится к формату нижнего уровня и на рисунке не показан, но имеется абсолютно у всех современных винчестеров, и играет важнейшую роль. По сервометкам происходит стабилизация скорости вращения двигателя и удержание головки на заданном треке, независимо от внешних воздействий и тепловой деформации элементов.

Однако в процессе эксплуатации винта, некоторые сервометки могут оказаться разрушены. Если дохлых сервометок станет слишком много, в этом месте начнут происходить сбои при обращении к информационной дорожке: головка, вместо того, чтобы занять нужное ей положение и прочитать данные, начнет шарахаться из стороны в сторону. Это будет выглядеть как жирный и особо наглый BAD, или даже как группа BAD'ов. Их присутствие часто сопровождается стуком головок, зависанием накопителя и невозможностью исправить его обычными утилитами. Устранение таких дефектов возможно только специальными программами, путем отключения дефектных дорожек, а иногда и всей дисковой поверхности. Для этих целей в некоторых накопителях имеется серводефект-лист, хранящий информацию о плохих сервометках. В отличие от P- и G-листа, серводефект-лист используется не транслятором, а всей микропрограммой винта. К секторам, имеющим дефектные сервометки, блокируется доступ даже по физическим параметрам, что позволяет избежать стуков и срывов при обращении к ним. Самостоятельно винт восстановить сервоформат не может, это делается только на заводе.

Аппаратные BAD'ы. Возникают из-за неисправности механики или электроники накопителя. К таким неполадкам относятся: обрыв головок, смещение дисков или погнутый вал в результате удара, запыление гермозоны, а также различные глюки в работе электроники. Ошибки такого типа обычно имеют катастрофический характер и не подлежат исправлению программным путем.

Логические дефекты

Эти ошибки возникают не из-за повреждения поверхности, а из-за нарушений логики работы сектора. Их можно разделить на исправимые и неисправимые. Логические дефекты имеют такие же внешние проявления, как и физические, и отличить их можно только косвенно, по результатам различных тестов.

Исправимые логические дефекты (софт-бэды): появляются, если контрольная сумма сектора не совпадает с контрольной суммой записанных в него данных. Например из-за помех или отключения питания во время записи, когда винт уже записал в сектор данные, а контрольную сумму записать не успел (рис 1). При последующем чтении такого «недописанного» сектора произойдет сбой: винт сначала прочитает поле данных, потом вычислит их контрольную сумму и сравнит полученное с записанным. Если они не совпадут, контроллер накопителя решит, что произошла ошибка и сделает несколько попыток перечитать сектор. Если и это не поможет (а оно не поможет, так как контрольная сумма заведомо неверна), то он, используя избыточность кода, попытается скорректировать ошибку, и если это не получится - винт выдаст ошибку внешнему устройству. Со стороны операционной системы это будет выглядеть как BAD. Некоторые винты имели повышенную склонность к образованию софт-бэдов из-за ошибок в микропрограмме - при определенных условиях контрольные суммы вычислялись неправильно; у других это происходило из-за дефектов механики. Например, у IBM DTLA периодически нарушался контакт между платой и гермоблоком, что приводило к пропаданию питания гермоблока в самое неподходящее время, в том числе и при записи.

Операционная система или BIOS не могут исправить логический дефект самостоятельно, так как прежде чем писать в сектор, они проверяют его на целостность, нарываются на ошибку и отказываются писать. При этом контроллер винта эту ошибку скорректировать тоже не может: он тщетно пытается прочитать этот сектор со второй, с третьей попытки, и когда это не получается - он всеми силами пытается себе помочь, на ходу подстраивая канал чтения и сервосистему. При этом и раздается тот самый душераздирающий скрежет, так хорошо знакомый владельцам бэдастых «дятлов». Этот скрип производят не «головки по поверхности», как многие привыкли думать, а всего лишь катушка позиционера, из-за специфической формы тока, протекающего через нее, и он абсолютно безопасен. Адрес непрочитанного сектора попадает во временный дефект-лист, изменяя значение атрибута Current Pending Sector в SMART, и сохраняется в нем. Ремапа при чтении не происходит.

И только принудительная низкоуровневая перезапись этого сектора специальной программой в обход BIOS приводит к автоматическому перерасчету и перезаписи контрольной суммы, т.е. бэд бесследно исчезает. Переписать его можно дисковым редактором, способным работать с винтом непосредственно через порты, но обычно «переписывают» весь диск, заполняя его секторы нулями. Утилиты, делающие это, свободно распространяются производителями хардов, и часто неправильно называются «программами для низкоуровневого форматирования». На самом деле это - простые «обнулители», что нисколько не мешает им избавлять винт от бэдов: при удачной записи софт-бэды исчезают, а при неудачной - бэд считается физическим, и происходит авторемап.

Неисправимые логические ошибки. Это ошибки внутреннего формата винчестера, приводящие к такому же эффекту, как и дефекты поверхности. Возникают при разрушении заголовков секторов, например из-за действия на винт сильного магнитного поля. Но в отличие от физических дефектов, они поддаются исправлению программным путем. А неисправимыми они названы только потому, что для их исправления необходимо сделать «правильное» низкоуровневое форматирование, что обычным пользователям затруднительно из-за отсутствия специализированных утилит. Поэтому в быту такой сектор отключается так же, как и физический - с помощью ремапа. В настоящее время все большее количество винтов выпускается по технологии ID-less (сектора без заголовков), поэтому скоро этот вид ошибок станет неактуальным.

«Адаптивные» бэды. Несмотря на то, что винты является очень точными устройствами, при их массовом производстве неизбежно возникает разброс параметров механики, радиодеталей, магнитных покрытий и головок. Старым накопителям это не мешало, но у современных винтов с их огромной плотностью записи, малейшие отклонения в размерах деталей или в амплитудах сигналов, могут привести к ухудшению свойств изделия, появлению ошибок, вплоть до полной потери его работоспособности. Поэтому все современные винты при изготовлении проходят индивидуальную настройку, в процессе которой подбираются такие параметры электрических сигналов, при которых устройству работается лучше. Эта настройка осуществляется программой ПЗУ при технологическом сканировании поверхности. При этом генерируются так называемые адаптивы - переменные, в которых содержится информация об особенностях конкретного гермоблока. Адаптивы сохраняются на блинах в служебной зоне, а иногда во Flash-памяти на плате контроллера.

Если в процессе эксплуатации винта адаптивы окажутся разрушены (это может случиться в результате ошибок в самом винте, статического электричества или из-за некачественного питания), то последствия могут быть непредсказуемы: от банальной кучи бэдов до полной неработоспособности девайса, с отказом выходить на готовность по интерфейсу. «Адаптивные>» бэды отличаются от обычных тем, что они «плавающие»: сегодня они есть, а завтра могут исчезнуть и появиться совсем в другом месте. Ремапить такой винт бесполезно - дефекты-призраки будут появляться снова и снова. И при этом дисковая поверхность может быть в безупречном состоянии! Лечатся адаптивные бэды прогоном selfscan'а - внутренней программы тестирования, аналогичной той, что применяется на заводе при изготовлении винтов. При этом создаются новые адаптивы, и винт возвращается к нормальному состоянию. Это делается в условиях фирменных сервис-центров.

Намечающиеся дефекты

Это участки поверхности, на которых еще не сформировался явно выраженный дефект, но уже заметны проблемы со скоростью чтения. Это происходит от того, что сектор не читается контроллером с первого раза, и винт вынужден делать несколько оборотов диска, пытаясь прочитать его без ошибок. Если прочитать данные все-таки удается, то винт ничего не сообщит операционной системе, и ошибка останется незамеченной до тех пор, пока на этом месте не возникнет настоящий BAD-блок. Как правило, тут же выясняется, что именно на этом месте хранился очень важный файл, в единственном экземпляре, и спасти его уже нельзя. Поэтому диски нужно периодически тестировать. Это можно делать программой Scandisk или Norton Disk Doctor в режиме тестирования поверхности, но лучше - специальной утилитой, работающей независимо от файловой системы и умеющей выявлять намечающиеся BAD'ы, замеряя время чтения каждого сектора.

[конец авторской первой части, символика]

6. Практика

Каждая фирма, выпускающая винчестеры, обычно разрабатывает специальный софт для диагностики и обслуживания своих накопителей, размещая его в Сети для свободного использования. Иногда эти утилиты уже содержат в своем составе операционную систему (обычно это одна из разновидностей DOS), как например Sea Tool от Seagate или Drive Fitness Test от IBM. А иногда это просто исполняемый файл, который нужно самому запустить из DOS, как например у Maxtor или Fujitsu. Такой софт позволяет протестировать накопитель на наличие ошибок и при возможности исправить их. Среди методов исправления часто можно встретить функции очистки диска (заполнение его нулями с уничтожением всей информации), а также скрытия дефектов методом ремапа. Но мы не будем рассматривать фирменные утилиты - ведь о них не раз было написано, например в UPGRADE # 15(53). Тем более, как мы узнали, эти программы делают вполне стандартные вещи: запись нулей и проверку поверхности. Поэтому обратим внимание на несколько очень неплохих альтернативных программ, а из фирменных утилит рассмотрим только самую совершенную - IBM DFT.

Итак, мы имеем такую забавную вещицу, какой является бэдастый хард. Или хотим застраховать себя от "сюрпризов" и проверить его, пока он исправен. Для этого, прежде всего, скачиваем программу MHDD. Для обслуживания винтов IBM понадобится утилита Drive Fitness Test. Всем, у кого имеются харды объемом до 8.4 Гб, особенно старые Western Digital, рекомендуется иметь в хозяйстве программу HDD Utility для DOS. Полезно будет запастись и программой HddSpeed для DOS v2.4 - она поддерживает винты больших объемов.

Прежде всего, нужно подготовить диагностический софт и создать загрузочный диск с MS-DOS. Можно пожертвовать загрузочной дискетой Windows 9x, удалив с нее все файлы кроме io.sys, msdos.sys и command.com. На освободившееся место записываем исполняемый файл программы MHDD: mhdd2743.exe и файл конфигурации mhdd.cfg. Так как свободного места на дискете еще много, записываем на нее SMART-монитор smartudm.exe , и какой-нибудь файл-менеджер, например Volkov Commander для ДОС. Он понадобится для просмотра содержимого отчетов работы программ. Для удобства все файлы размещаем в корневом каталоге дискеты. Как вариант - дискету можно вообще не создавать или использовать ее только для загрузки ДОС, а все программы запускать прямо с основного винчестера, подключив проверяемый винт на другой IDE канал. Записывать программы на CD, чтобы запускать их оттуда, не нужно - диск обязательно должен быть открыт для записи, так как программы будут создавать на нем логи работы, и потерпев при этом неудачу, попросту сглючат. После внимательного знакомства с описанием MHDD и SMARTUDM можно приступить к экзекуции. Для начала посмотрим Smart-информацию нашего накопителя (в дальнейшем это придется делать не раз).

Загружаемся с нашей дискеты, и если исследуемый винт висит на первичном IDE-канале, набираем в командной строке: a:\smartudm, а если на вторичном - a:\smartudm 1. Если в системе больше 2-х винтов, то цифра может быть больше 1. Перед нами появится таблица, характеризующая состояние накопителя (рис 2)

Рис.2 График SMART-статуса жесткого диска для быстрой оценки его состояния.

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

Надпись "T.E.C. not detected" означает то, что текущее состояние винта в полном порядке. Если это не так, то будет выдано предупреждение, выделенное красным цветом. Посмотрев на цветную диаграмму, можно быстро оценить, какой именно SMART-атрибут вызвал такое недовольство программы. В случае большого количества бэдов им наверняка будет самый верхний (Raw Read Error Rate). Но эта информация приблизительная, а нам нужны абсолютные значения атрибутов, поэтому нажимаем ENTER и видим примерно такую картинку (Рис. 3):

Рис.3 Расширенный SMART-статус жесткого диска (точные значения атрибутов).

Вот этот режим SMART монитора и является основным, и по нему мы будем контролировать состояние накопителя при любых дальнейших действиях. Например, посмотрев значение атрибута 5 (Reallocated Sector Count), мы увидим содержимое пользовательского дефект-листа и сможем судить о том, удалось ли скрытие дефектов. При нажатии клавиши «R» текущий SMART-лог сохраняется в файл. Нажав клавишу «ESC» можно выйти из программы в DOS. Некоторые атрибуты контроллер обновляет «на лету», несколько раз в минуту, поэтому для получения наиболее достоверного результата, винт нужно протестировать, чем мы сейчас и займемся.

Выходим из SMART-монитора, и запускаем программу MHDD, введя в командной строке имя ее исполняемого файла (mhdd2743.exe заранее можно переименовать во что-нибудь попроще). После загрузки следует сразу нажать комбинацию клавиш «Shift+F3» - программа просканирует шину и покажет список подключенных к системе накопителей. Выберите тот, который нужно проверить, введя в консоль нужную цифру от 1 до 10 (Рис. 4). Затем следует нажать F2 для инициализации выбранного винта.

Рис.4 Инициализация винта по команде F2.
После этих действий накопитель выдаст информацию о своем объеме, максимально поддерживаемом режиме DMA и многом другом. Программа MHDD видит винты целиком, совершенно не интересуясь их разбиением на разделы и типом файловых систем. Она увидит все IDE-винты, независимо от того, определены ли они в BIOS или нет. Даже если мать не поддерживает накопители больших объемов, программа все равно их увидит на полную емкость, лишь бы винты были исправны. Если это произошло, можно приступать к проверке поверхности. Для этого нажимаем F4, и в вехней строчке появившегося меню ставим параметр «Scan in: LBA» (по умолчанию там стоит CHS). Переключение между режимами CHS и LBA осуществляется с помощью клавиши «пробел». Затем нажимаем F4 второй раз. По экрану побегут серые прямоугольники. Это займет 10-30 минут, и абсолютно безопасно для хранящейся на винте информации, так как при этом происходит только чтение секторов. Вот что про этот режим написал автор программы в документации к ней:

«При выполнении проверки поверхности справа появится окно. В первой строке этого окна будет отображаться текущая скорость работы с поверхностью. В последней - два значения в процентах. Первое значение показывает процент выполнения текущего теста в заданном промежутке, а второе отображает, насколько далеко головки ушли от 0 цилиндра и пришли к последнему. В процессе тестирования поверхности один квадратик равен 255 секторам (при тестировании в режиме LBA), либо числу секторов в строке параметров HDD (обычно, 63 - при тестировании в режиме CHS). Чем "мутнее" квадратик - тем больше накопителю потребовалось времени для чтения этого блока секторов. Если пошли цветные квадратики - значит, накопитель не вписался в отведенный ему для работы промежуток времени. Цветными квадратиками отображается ненормальное состояние поверхности (но еще без BAD'ов). Чем ниже по меню цвет - тем больше накопителю понадобилось времени для чтения этого трудночитаемого участка. Красный цвет - признак того, что на этом месте уже почти сформировался BAD block. Вопросительный знак появляется при превышении максимального времени ожидания готовности. То есть, при появлении [?] можно считать, что накопитель «подвис» на этом месте и здесь явно присутствует либо серьёзный дефект поверхности, либо неисправен блок магнитных головок (БМГ). Всё, что ниже вопросительного знака - это ошибки (BAD block). Если они появляются в процессе тестирования, значит, на поверхности есть физические дефекты»

При наличии бэд-блоков, вместо квадратиков обычно появляются значки [x], очевидно символизирующие кресты. Если поверхность в порядке и без цветных квадратиков, а все SMART-атрибуты находятся в зеленой зоне, можно вздохнуть свободно: винт пока исправен.

Если же MHDD показал, что на поверхности имеются дефекты, а винт при этом «зависает» или издает скребущие звуки, значит проблемы есть. Но не будем думать сразу о плохом: ведь бэды могут быть логическими (софт-бэды), поэтому для начала устроим накопителю «прочистку мозгов» - выполним низкоуровневую запись нулей во все секторы. (Внимание! При этом вся информация на винте будет уничтожена, поэтому копируем важные данные на другой диск). Программа MHDD имеет две команды для обнуления дисков: "erase" и "aerase". Мы будем использовать ERASE, так как она работает быстрей.

Инициализируем винт, нажав клавишу F2 (эту процедуру желательно делать перед любыми действиями), и вводим команду ERASE в консоль. Будьте очень внимательны при выборе накопителя, иначе по ошибке можно загубить свой рабочий винт: данные при этом теряются безвозвратно, и даже в ФСБ их уже не восстановят! Процедура очистки идет довольно медленно, занимая несколько десятков минут. Но в дальнейшем, немного разобравшись с программой, вы сможете стирать диск выборочно, введя начальный и конечный номер сектора перед запуском процедуры. Это очень удобно, если бэды находятся ближе к концу диска, а его начало безупречно.

Выполнив очистку, снова запускаем тест поверхности (нажав F4 два раза или консольной командой SCAN). При этом контроллер винта должен пересчитать жизненно важные SMART-атрибуты, что сделает его smart-статус более достоверным. Если бэдов больше нет, винт можно считать отремонтированным. Выходим из MHDD, запускаем наш SMART-монитор и смотрим на значение атрибута Reallocated Sector Count. Если оно после очистки не увеличилось, а дефекты исчезли - значит они были логическими. Если увеличилось - они были физическими, и контроллер произвел успешный ремап этих секторов. Если же наоборот, бэды остались, а значение атрибута Raw Read Error Rate катастрофически упало - все намного сложнее, и винт имеет серьезные повреждения. Будем пытаться лечить его дальше - делать ремап.

Возможно, вы уже успели заметить, что при однократном нажатии клавиши F4 в MHDD появляется менюшка, содержащая дополнительные параметры сканирования (рис. 5)
Рис.5 Настройки параметров сканирования и ремапа.

Последний раз редактировалось Cthulchu; 13.05.2009 в 13:26..
 
Ответить с цитированием