Принцип трансляции в жёстких дисках
В жёстком диске магнитные головки, дорожки и сектора на них образуют трёхмерную систему координат, но операционная система работает с диском, как с одномерным массивом секторов. Такой подход, с одной стороны, существенно упрощает жизнь авторам операционных систем, а с другой – значительно усложняет конструкцию самих носителей данных, как жёстких дисков, так и носителей информации на основе флэш памяти. Но раз уж преобразование координат находится на стороне устройства, то можно в него добавить дополнительные функции: скрытие дефектных областей и уменьшение плотности записи для участков магнитной поверхности плохого качества (например, магнитный слой получился толще, чем ожидалось, и труднее перемагничивается, следовательно, участки записи будут крупнее, чем для проектной толщины магнитного слоя). Для флэш носителей дополнительной функцией является контроль износа ячеек памяти. С появлением SMR жёстких дисков алгоритм трансляции нагрузили функцией кэша записи, но в данной статье этот крайне сложный процесс рассматриваться не будет.
Преобразование одномерной координаты сектора 512 байт от операционной системы, подаваемой через интерфейс SATA (PATA, SAS и т. д.), в трёхмерную координату положения головки, дорожки и сектора осуществляет программа трансляции. Для работы этой программы в служебной информации жёсткого диска имеется таблица, называемая «транслятор».
Если взять два современных диска одной и той же ёмкости с одинаковым количеством и расположением головок, то количество дорожек и секторов на каждой будет различаться. Иными словами, вероятность встретить два полностью одинаковых по распределению информации жёстких диска близко к нулю. Хотя, на заре персональных компьютеров количество головок, дорожек и секторов на них пытались стандартизировать, и в БИОСе был список типичных конфигураций, из которого можно было выбрать подходящую для установленного диска. А дефектные сектора были написаны от руки на этикетке жёсткого диска. На фото ниже представлен такой диск, хотя на наклейке указано, что диск уже со встроенной программой трансляции (галочка напротив «translated») и, скорее всего, у него в табличке от руки написано, что дефектов нет, потому что они скрыты на уровне трансляции.
Где-то в конце 80-х миниатюризация электроники позволила разместить на жёстком диске микропроцессор, который бы мог скрыть от операционной системы и пользователя физические головки, сектора и дорожки и не показывать найденные на заводе дефектные сектора. Так появилась сущность, под названием «транслятор», которая преобразует трёхмерные координаты: головка (head), дорожка (track), сектор (sector) в одномерную координату, именуемую «логический адрес блока» (Logical Block Address или LBA).
Для лучшего понимания принципа трансляции компанией R.LAB создана интерактивная презентация.
В первой её части излагаются основные понятия, как в виде пояснительного текста, так и в виде небольшой анимации.
Во второй части отображается схема процесса трансляции в упрощённом виде с помощью блоков и стрелочек.
Рядом с блоками, означающими какие-либо изменения номера LBA, находятся текстовые поля. В них будут появляться координаты, определённые на данном этапе процесса трансляции.
Помимо блоков схемы есть ещё такие блоки, как P-LIST, G-LIST, Zone Table, Head Map. При нажатии на них появляются диалоговые окна, где можно просматривать или задавать данные, используемые в трансляции.
В правой половине окна расположено схематическое изображение пластин жёсткого диска, разделённых на зоны и сектора. В правом верхнем углу расположен выбор текущей головы для отображения. На них будет обозначен найденный в результате трансляции физический сектор.
Функции транслятора в презентации выделены фоновыми связками:
- первая — это определение, попадает ли запрашиваемый операционной системой сектор в G-List или нет;
- вторая — наложение пропусков P-List;
- третья — определение физических координат запрашиваемого логического сектора: зоны, головки, трека и сектора на этом треке.
Перед тем, как пользоваться моделью, следует задать P-List, G-List, зонную таблицу и карту головок. Для удобства пользования все значения по запуску презентации заданы, но их можно поменять.
Теперь подробнее про все три этапа на примерах.
Шаг 1. Изучаем таблицу зонного распределения.
Откройте блок Zone Table (Таблица зонного распределения). Появится диалоговое окно с таблицей. В ней содержится информация о плотности секторов на девяти зонах, размеченных на пластинах жёсткого диска. Каждая строка таблицы — это отдельная зона.
Первый столбец показывает, с какого номера трека начинается зона, второй столбец — каким номером трека заканчивается. В каждой зоне этой модели по 100 треков для простоты, но в реальном диске количество треков в зоне уменьшается от внешнего диаметра диска к внутреннему.
Столбец SPT показывает плотность секторов на трек, характерных для всех треков данной зоны.
Так как трек — это окружность, то его длина уменьшается при уменьшении радиуса. Подробнее про таблицу зонного распределения можно прочитать в статье.
Да, было ещё понятие цилиндра (cyl), которое означало треки по всем головкам, но оно устарело из-за того, что сейчас количество секторов на трек по каждой головки разное в пределах одной зоны. Также распределение зон по разным головкам различается.
Шаг 2. Изучаем карту голов.
Теперь откройте диалог Карта голов, который появляется при нажатии на одноименный блок.
Программа управления жёсткого диска имеет конфигурацию в виде количества головок и их расположения. Это связано с тем, что производители стараются делать линейку различных ёмкостей, установив различное количество магнитных головок. Например, в одном диске установлено две головки (один диск) и у него ёмкость 500 ГБ, а в другом 4 головки (два диска) уже с ёмкостью 1ТБ. Казалось, достаточно просто указывать количество используемых головок и всё, но производители хотят продать не совсем получившиеся диски. Как это? К примеру, по результатам тестов диска на 1ТБ из 4-х установленных головок две плохо работают, но одна из них самая ближняя к мотору, а вторая тоже ближняя, но уже на другом диске (см. рисунок выше). Простым заданием числа головок такой диск не сделать вместо 1ТБ на 500ГБ, нужно явно позиции неисправных голов указывать.
В нашей упрощённой схеме максимальное количество, какое может быть, — 6, и нумеруются они от 0 до 5. Сейчас мы видим две подключенные головы. В третьем столбце таблицы напротив них стоят галочки. В таблице видна разница между физическим расположением головы и её логическим номером. У физических голов фиксированная нумерация, а логические номера присваиваются только подключенным головам. Мы видим на таблице, что у головы с физическим номером 2 логический номер 1, так как голова с физическим номером 1 отсутствует. Снимая или расставляя галочки, мы можем подключать/отключать головы. Попробуйте пощёлкать по флажкам в третьем столбце и посмотрите, как будут меняться логические номера голов. В конце концов, оставьте только одну последнюю галочку, чтобы на карте была только голова с номером 0.
Шаг 3. Расчёт максимального LBA.
Не закрывая карту голов, щёлкните по надписи LBA. Откроется диалоговое окно «Расчёт параметров LBA». Также откройте ещё и таблицу зонного распределения. Для понимания нам нужно видеть все три окна с настройками.
Посмотрите на запись «Max LBA». Рядом с ней в текстовом поле отображается максимально возможный LBA. Как он определяется?
У нас 9 зон, в каждой из которых по 100 треков. В таблице зонного распределения мы видим плотность секторов на трек для каждой зоны. Чтобы определить максимально возможный LBA мы умножаем значение SPT каждой зоны на количество треков в этой зоне, то есть 100, таким образом определяем, сколько секторов в каждой зоне. Затем складываем все полученные значения: 12000 + 11100 + 10300 + 9400 + 8500 + 7700 + 6800 + 6000 + 5100 = 76900. Так как нумерация LBA идет с 0, а не с 1, то последний номер сектора будет 76899.
Из этого числа нужно вычесть резервную зону. В этой модели задана резервная зона в 100 секторов, следовательно, максимальный номер LBA, доступный операционной системе, — это 76799!
Теперь поставьте галочку в карте голов около головы с физическим номером 1. Посмотрите, как поменяется значение Max LBA.
Так как для одной головы расчёт всех возможных секторов дал нам значение 76900, то для двух голов это будет 76900 * 2 = 153800. Если отнять резервную область и начать нумерацию от 0, то получится, что максимальный LBA равен 153699!
Если головы будут 3, то число будет уже 230599 и т. д.
Оставьте галочку только напротив головы с номером 0, закройте диалоговые окна «Карта голов» и «Таблица зонного распределения». Двигаемся дальше.
Шаг 4. Процесс трансляции.
На схеме жёсткого диска красной дугой обозначен нулевой сектор. Если красной пометки не видно, тогда в диалоговом окне «Расчёт параметров LBA» в поле ввода под надписью «Задать LBA» введите 0 и нажмите круглую кнопку в правом нижнем углу окна. Вы увидите, что в полях zone, track, head, sec отобразилось, соответственно, 1,0,0,0 и появилась красная дуга на диске.
Попробуйте теперь задать LBA = 1. И нажать на кнопку расчёта. Красная дуга-сектор переместилась на следующую позицию, а номер сектора поменялся на 1.
Теперь задайте LBA = 120 и посмотрите, что будет с физическими координатами сектора. Номер track`а теперь стал 1 и сектор = 0.
Так как в первой зоне плотность секторов на трек 120, значит, на нулевом треке лежат сектора от 0 по 119. А 120 логический сектор – это нулевой сектор трека 1. Чтобы попасть на нулевой сектор зоны 2, нам нужно задать LBA от 12000 и более. Задайте LBA = 12000 и посмотрите на результат.
Но у нас была подключена только одна голова. Подключите теперь голову с физическим адресом 2 из диалога «Карта голов». Посмотрим, как изменится физический адрес сектора, если подключены две головы. Снова нажмите кнопку расчета физических координат для LBA = 12000. Видим, что результат уже другой.
Дальше важно понять, что физические координаты секторов сдвигаются, если до них находятся дефектные сектора.
Шаг 5. Изучаем P-List.
Нажмите на блоке P-LIST, и откроется диалоговое окно «Таблица P-List». Она уже заполнена примерами дефектов, но вы их можете менять по своему усмотрению. В таблице перечислены 5 дефектных секторов с их физическими координатами — трек, логический номер головы и сектор.
Если вы хотите исключить какой-то дефект из таблицы, то достаточно снять галочку напротив него. Если включить — то, наоборот, галочку поставить.
Три первых дефекта для логической головы с номером 0, два последних для головы 1. У нас сейчас обе эти головы подключены.
Задайте LBA = 24050 и нажмите расчёт параметров. У вас должны отобразиться такие значения: зона — 2, трек — 100, голова — 0, сектор — 50.
Обратите внимание на всю схему. В поле RLBA отобразилось тоже число 24050. В поле PBA также 24050. Это означает, что данный сектор не найден ни в таблице в таблице G-List, ни в таблице в таблице P-List.
Теперь посмотрите в таблицу дефектов P-List. Первый дефект в ней находится на треке 100 головы 0 секторе 51. То есть это следующий сектор после 24050. Задайте LBA = 24051 — это номер LBA, которому соответствует физический сектор, занесённый в P-List.
Смотрим, что поменялось в схеме: RLBA = 24051, то есть в таблице G-List этот сектор не был найден. PBA = 24052 и в поле sec мы увидим не 51, а 52! Такая замена говорит о том, что сектор с LBA = 24051 сдвинут на один и «перепрыгивает» дефектный. Сдвинуты будут также и все остальные сектора, которые идут после 24051 до конца диска, а один сектор из резерва становится доступным операционной системе. Задайте, например, 24070 и вы увидите, что он сдвинут на 24071.
Теперь снимите галочки под номерами 1 и 2 в таблице P-List, задайте LBA = 50290. У вас должны отобразиться такие данные в результате трансляции: зона 3, трек 239, голова 0, сектор 73.
Снова поставим галочки на 1 и 2 дефекты в таблице. Обратите внимание на то, что физические координаты LBA = 50290 соответствуют второму дефектному сектору из таблицы P-List. Запустите снова расчёт параметров трансляции и посмотрите, что поменялось с включенными дефектами. RLBA = 50290, то есть в таблице G-List этот сектор не был найден. PBA = 50292 и в поле sec мы увидим не 73, а 75! То есть у нас уже этот сектор и все последующие после него будут сдвинуты на 2 позиции, так как перед ними 2 дефектных сектора.
Задайте LBA = 131290 и посмотрите, что он уже сдвинут на 5 позиций.
Очевидно, что такой способ пропуска дефектных секторов возможно реализовать только на этапе производства диска, ведь если подобным образом их скрывать во время использования, то нужно все сектора переносить от места дефекта до резерва. Однако существовали диски, где был реализован такой метод во время работы, но об этом поговорим после рассмотрения работы G-List.
Шаг 6. Изучаем G-List.
Таблица G-List отличается от P-List тем, что она формируется не на заводе-изготовителе, а в процессе работы жёсткого диска. Если какой-то сектор становится дефектным, то заносится в таблицу, и ему ставится в соответствие один из секторов резервной зоны.
Нажмите на блок G-LIST, и откроется диалоговое окно «Таблица G-List». В ней вы увидите 5 дефектных секторов, в которых определенному номеру LBA ставится номер RLBA из резервной области.
Если вы попеременно уберете галочки, а потом поставите их снова с 1 по 5 номер, то увидите, что номера RLBA ставятся там автоматически. В этой таблице вы тоже можете менять значения по своему усмотрению и включать/отключать дефектные сектора, нажимая на флажки.
Попробуем сделать расчёт параметров трансляции для первого в этой таблице дефектного сектора с LBA = 1135. Сначала снимите все 5 галочек с дефектов в таблице P-List, затем уберите первую галочку в таблице G-List. Впишите номер 1135 в поле «Задать LBA» диалогового окна «Расчёт параметров LBA» и нажмите кнопку расчета.
Должен получиться такой результат:
RLBA = 1135,
PBA = 1135,
zone 1,
track 9,
head 0,
sec 55.
Теперь поставьте первую галочку в таблице G-List, где LBA = 1135. RLBA в таблице должно быть 153700. Запустите снова расчёт параметров LBA. Результат уже будет отличаться от предыдущего. RLBA = 153700, рядом с блоком схемы «Is LBA in G-LIST» красной рамкой отметится «Yes», что означает, что дефект с таким номером в таблице G-List найден и заменен на резервный 153700, PBA = 153700, так как мы отключали все дефекты в таблице P-List и сдвига секторов нет,
zone 9,
track 898,
head 1,
sec 2.
Теперь поставьте все галочки в таблице P-List и запустите снова расчёт параметров LBA для номера 1135. Получим такой результат:
RLBA = 153700,
PBA = 153705 — так как до этого сектора есть 5 дефектных секторов в таблице P-List, то происходит сдвиг на 5 позиций,
zone 9,
track 898,
head 1,
sec 7.
Если подключены несколько голов, то можно включать отображение пластины жёсткого диска, связанной с этой головой. В правом верхнем углу программы есть кнопка «Выбрать голову». При её нажатии открывается список физических голов, на котором активны только подключенные головы.
Щёлкаем на нужной голове. Если сектор, который мы искали, находится на пластине, связанной с этой головой, то он отобразится как красная дуга. Если нет, то скроется.
Теперь вы знаете, как работает эта схема, и можете поставить эксперименты со своими числами и настройками.
В дисках IBM серии «DTLA» была реализована схема, когда резерв находится не в самом конце диска, а на каждой физической дорожке выделен один резервный сектор. Если дефект появлялся на дорожке, то он заменялся на резервный, и скорость работы в этом случае не падала. Когда появлялось два дефектных сектора, то диск один из секторов дорожки копировал в резервный сектор соседней дорожки. В конце концов, наступал момент, когда практически вся дорожка становилась дефектной. При обращении к ней диск начинал сильно трещать головами, собирая содержимое из примерно сотни соседних дорожек. Так что при малом количестве дефектов схема работала хорошо, но при большем всё сильно ухудшалось. Ещё такие диски были медленнее, чем аналогичные от других фирм, так как на каждой их дорожке было меньше на один постоянно используемый сектор.
Однако же, напоследок, нужно сказать, что эта презентация даётся только для общего и начального понимания сложных процессов, происходящих в жёстких дисках.
Презентация написана на Java Script, и те, кто знает этот язык, могут посмотреть логику её работы более детально. Ну и дописать какую-нибудь более сложную схему трансляции.
Автор статьи Сергей Яценко.
Перепечатка или цитирование разрешены при условии сохранения прямой ссылки на первоисточник: R.LAB, восстановление данных с жёсткого диска.
Отзывы о статье Принцип трансляции в жёстких дисках