Алгоритм - Учебный центр
Заполните форму ниже! Мы вам перезвоним!

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


Устранение случайных сбоев записью информации в сбойные секторы HDD.

Устранение случайных сбоев записью информации в сбойные секторы HDD.

Получив адреса сбойных физических секторов, можно провести уточняющую диагностику при помощи полноэкранного отладчика «AFD». В составе отладчика нет подпрограмм для чтения физических секторов, но есть режим ассемблирования, который позволяет создавать такие программы на ассемблере. Подготовим оперативную память для набора (на ассемблере) программы чтения физического сектора. Для этого выполним подпрограмму записи байтов данных, содержащих 90h (код команды процессора NOP), начиная с адреса 100 в область объемом 512 байтов (200 в шестнадцатеричной системе) по команде:

F 100, 200, 90

Это создаст удобство при наборе программы на ассемблере.

Вызовем режим ассемблирования командой: А 100

Выполним набор текста программы на ассемблере. Эта программа позволит нам прочитать физические секторы, которые были определены как сбойные, и записывать содержимое их блоков данных начиная с адреса 1000 в текущем сегменте оперативной памяти (например 2 сектор, головка 1, цилиндр 0:

MOVAH,00 ; выбрать функцию сброса дисковой подсистемы

MOV DL,81 ; выбрать дисковод номер 1 (жесткий диск 81)

INT 13 ; выполнить сброс дисковой подсистемы

MOV AH,02 ; выбрать функцию чтения сектора

MOV AL,01 ; выбрать один сектор

MOV BX,1000 ; выбрать буфер оперативной памяти с адреса 1000

MOV DL,81 ; выбрать дисковод номер 1 (жесткий диск 81)

MOV CH,00 ; выбрать цилиндр 0

MOV DH,01 ; выбрать головку 1

MOV CL,02 ; выбрать сектор 2

INT 13 ; выполнить чтение сектора в буфер адреса 1000

JMP 100 ; перейти на начало программы для нового цикла чтения

Для последующего применения этой программы сохраним ее в виде файла, присвоив ей имя HDD1.COM. Для выполнения этой процедуры выполним команду отладчика:

W HDD1.COM, 100, 200 ; записать 512 байтов (200 в шестнадцатеричной системе)

с адреса 100 текущего сегмента оперативной памяти в

файл с именем HDD1.COM.

Имя файла будет помещено в текущий каталог, из которого была произведена загрузка отладчика «AFD». Для наблюдения за буфером оперативной памяти, указанным в программе чтения физического сектора, выполним команду отладчика:

M 2 1000 ; показать память в «окне» отладчика с номером 2,

начиная с адреса текущего сегмента памяти со смещением 1000.

Для удобства наблюдения за изменениями данных в буфере произведем запись с адреса 1000, например, 80 байтов (50 в шестнадцатеричной системе) кодов 55, используя подпрограмму записи данных:

F 1000, 50, 55

Затем выполним подготовленную программу по шагам, используя нажатие функциональной кнопки клавиатуры F2. После выполнения команды INT 13 наблюдаем значение флага переноса (СF) в регистре флагов процессора (в правой верхней части экрана монитора). После выполнения первой команды INT 13 флаг CF = 0. После выполнения второй команды INT 13 флаг CF = 1, что означает наличие сбоя при выполнении программы, который был зафиксирован при чтении второго сектора первой поверхности нулевого цилиндра контролируемого диска. Код состояния/ошибки диска отображен в левом верхнем углу экрана монитора в регистре AX в его младшем байте AH. Значение кодов состояния/ошибки диска приведено ниже.

Значения кодов состояния/ошибки диска:

00 успешное завершение

01 недопустимая функция в AH или недопустимый параметр

02 не найден адресный маркер

03 диск с защитой от записи (гибкий диск)

04 не найден сектор

06 произошла смена диска (гибкий диск)

05 отказ сброса (жесткий диск)

07 отказ активизации параметра дисковода (жесткий диск)

08 выход за границы ПДП

09 попытка ПДП через границу 64К

0A обнаружен дефектный сектор (жесткий диск)

0B обнаружена дефектная дорожка (жесткий диск)

0C неподдерживаемая дорожка или недопустимый носитель

0D неправильное число секторов при форматировании (жесткий диск)

0E обнаружен адресный маркер контрольных данных (жесткий диск)

0F уровень арбитража ПДП вышел за границы (жесткий диск)

10 ошибка CRC или ECC при чтении

11 исправлена ошибка ECC данных (жесткий диск)

20 отказ контроллера

40 отказ позиционирования

80 тайм – аут (не готов)

AA дисковод не готов (жесткий диск)

BB неизвестная ошибка (жесткий диск)

CC отказ записи (жесткий диск)

E0 ошибка регистра состояния (жесткий диск)

FF отказ операции обнаружения сигнала (жесткий диск)

В нашем случае AH = 10, что означает ошибка контрольной суммы (ECC) поля данных. В «окне» с номером 2 отладчика видим, что произошла запись в буфер начинающийся с адреса 1000 (замена байтов с кодом 55 произошла). Это означает, что сектор был прочитан, хотя и с ошибками контрольной суммы.

Заменив в нашей программе одну команду MOV AH,02 на команду MOV AH,03 мы превращаем ее в программу записи в сектор. С помощью программы записи в сектор можно попробовать сделать запись в сбойный сектор. Значение байтов в буфере можно предварительно заменить, например, на FF командой :

F 1000, 200, FF

Выполнив после этого программу записи 512 байтов кода FF из буфера в сбойный сектор, наблюдаем значение флага CF. Значение флага CF равно нулю, что говорит об отсутствии сбоя при выполнении записи в сектор.

Прочитаем теперь этот сектор, «старой» программой чтения сектора, заполнив предварительно буфер памяти кодом 00 (для удобства наблюдения). Повторное чтение этого сектора показало, что чтение записанных в сектор кодов FF прошло без ошибок.

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

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

 


Лицензия