Lba hdd что это

Обновлено: 07.07.2024

Привод, способный поддерживать режим LBA, сообщает об этом в информации идентификации привода [1] .

A drive which can support LBA mode indicates this in the Identify Drive Information.

Суть LBA состоит в том, что каждый блок, адресуемый на жёстком диске имеет свой номер, целое число, начиная с нуля и т. д. (то есть первый блок LBA=0, второй LBA=1, . )

LBA 0 = Цилиндр 0/Головка 0/Сектор 1

Еще одно преимущество метода адресования LBA — то, что ограничение размера диска обусловлено лишь разрядностью LBA. В настоящее время для задания номера блока используется 48 бит, что при использовании двоичной системы исчисления даёт возможность адресовать на приводе (2 48 ) 281 474 976 710 656 блоков (то есть, при блоке в 512 байт, 128 ПиБ).

LBA заменяет собой более ранние схемы (CHS и Large), в которых нужно было учитывать физические особенности устройства дисков.

Технический комитет X3T10 установил правила получения адреса блока в режиме LBA:

LBA = [(Cylinder \cdot no of heads + heads) \cdot sectors/track ] + (Sector-1)

[2]

  • LBA: Адрес блока по LBA
  • Cylinder: Номер цилиндра
  • noofheads: Количество головок
  • heads: Номер выбранной головки
  • sectors/track: Количество секторов на одной дорожке
  • Sector: Номер сектора

Преобразования между CHS и LBA

Кортежи CHS можно преобразовать в адреса LBA и обратно по следующим формулам:

LBA(c, h, s) = (c \cdot H + h) \cdot S + s - 1

s = (LBA \, \bmod \, S) + 1

h = \frac<LBA - (s - 1)></p>
<p>\, \bmod \, H

c = \frac<LBA - (s - 1) - h \cdot S></p>
<p>

Примечания

  1. ↑ Документ технического комитета X3T10 «WORKING X3T10 DRAFT 791D Revision 4c». Раздел 7 Logical interface.
  2. ↑ Документ технического комитета X3T10 «WORKING X3T10 DRAFT 791D Revision 4c». Раздел 7 Logical interface. Подраздел 7.1.2 Environment
  • Носители информации
  • Запоминающие устройства
  • ATA

Wikimedia Foundation . 2010 .

Полезное

Смотреть что такое "LBA" в других словарях:

LBA — Saltar a navegación, búsqueda LBA puede referirse a: Logical block addressing (localización lógica de bloques), método usado para especificar la localización de los bloques de datos en los sistemas de almacenamiento; Aeropuerto de Leeds Bradford … Wikipedia Español

LBA — es la sigla de logical block addressing, dirección lógica de bloques. Es un método usado para especificar la localización de los bloques de datos almacenados en los sistemas de almacenamiento del ordenador (generalmente almacenamiento secundario) … Enciclopedia Universal

LBA — (Logical Block Addressing) allocation of unique digital addresses (that allow access by input/output) to various sectors on the hard drive … English contemporary dictionary

LBA 2 — Little Big Adventure 2 Little Big Adventure 2 Twinsen s Odyssey Éditeur Electronic Arts Développeur … Wikipédia en Français

LBA — laser balloon angioplasty; left basal artery … Medical dictionary

LBA — • Linear/Logic Block Addressing • Leeds/Bradford, England, UK internationale Flughafen Kennung … Acronyms

Логическая адресация блоков ( LBA ) - это общая схема, используемая для определения местоположения блоков данных, хранящихся на компьютерных запоминающих устройствах, обычно вторичных системах хранения , таких как жесткие диски . LBA - это особенно простая схема линейной адресации ; блоки располагаются по целочисленному индексу, причем первый блок имеет значение LBA 0, второй LBA 1 и так далее.

СОДЕРЖАНИЕ

Обзор

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

Схема LBA заменяет более ранние схемы, которые открывали физические детали устройства хранения программному обеспечению операционной системы. Главной из них была схема сектора головки блока цилиндров (CHS), где адресация блоков осуществлялась посредством кортежа, определяющего цилиндр, головку и сектор, в котором они появлялись на жестком диске . CHS плохо соответствовал устройствам, отличным от жестких дисков (например, ленты и сетевое хранилище), и обычно не использовался для них. CHS использовался в ранних приводах MFM и RLL , и как он, так и его преемник, расширенный сектор головки блока цилиндров (ECHS), использовались в первых приводах ATA . Однако в современных дисковых накопителях используется зонная битовая запись , где количество секторов на дорожку зависит от номера дорожки. Несмотря на то, что дисковый накопитель будет сообщать некоторые значения CHS в виде секторов на дорожку (SPT) и головок на цилиндр (HPC), они имеют мало общего с истинной геометрией диска.

LBA была впервые представлена ​​в SCSI как абстракция. Хотя контроллер диска по-прежнему обращается к блокам данных по их адресу CHS, эта информация обычно не используется драйвером устройства SCSI, ОС, кодом файловой системы или любыми приложениями (такими как базы данных), которые обращаются к «необработанному» диску. Системные вызовы, требующие ввода-вывода на уровне блоков, передают определения LBA драйверу устройства хранения; в простых случаях (когда один том отображается на один физический диск) этот LBA затем передается непосредственно контроллеру диска.

В избыточном массиве независимых дисков (RAID), устройствах и сетях хранения данных (SAN) и где логические диски ( номера логических устройств , LUN) состоят из виртуализации и агрегации LUN, адресация LBA отдельного диска должна транслироваться на уровне программного обеспечения, чтобы обеспечить единая адресация LBA для всего устройства хранения.

Усовершенствованный BIOS

Однако реализация IBM BIOS, определенная в процедурах доступа к диску INT 13h , использовала совершенно другую 24-битную схему для адресации CHS: 10 бит для цилиндра, 8 бит для головки и 6 бит для сектора, или 1024 цилиндра, 256 головок, и 63 сектора. Эта реализация INT 13h предшествовала стандарту ATA, поскольку он был представлен, когда IBM PC имел только хранилище гибких дисков , а когда жесткие диски были представлены на IBM PC / XT , интерфейс INT 13h не мог быть практически переработан из-за проблемы обратной совместимости . При наложении сопоставления ATA CHS с сопоставлением BIOS CHS наименьший общий знаменатель составлял 10: 4: 6 бит, или 1024 цилиндра, 16 головок и 63 сектора, что давало практический предел 1024 × 16 × 63 секторов и 528 МБ (504 МБ. ), предполагая 512-байтовые сектора.

В нормальных или ни один метод возвращается к ранее 10: 4: 6 битный режим CHS , который не поддерживает адресации больше , чем 528 Мб.


Установка OEM-версии EZ Drive от Western Digital на 3,5-дюймовую дискету.

До выпуска стандарта ATA-2 в 1996 году было несколько больших жестких дисков, которые не поддерживали адресацию LBA, поэтому можно было использовать только большие или обычные методы. Однако использование большого метода также создавало проблемы переносимости, поскольку разные BIOS часто использовали разные и несовместимые методы преобразования, а жесткие диски, разделенные на разделы на компьютере с BIOS от определенного производителя, часто не могли быть прочитаны на компьютере с другой маркой BIOS. . Решение заключалось в использовании программного обеспечения преобразования, такого как OnTrack Disk Manager , Micro House EZ-Drive / EZ-BIOS и т. Д., Которое устанавливалось в загрузчик ОС на диске и заменяло процедуры INT 13h во время загрузки пользовательским кодом. Это программное обеспечение также может включать поддержку расширений LBA и INT 13h для старых компьютеров с несовместимыми с LBA BIOS.

LBA-перевод

Когда BIOS настроен на использование диска в режиме трансляции с помощью LBA, BIOS обращается к оборудованию в режиме LBA, но также представляет преобразованную геометрию CHS через интерфейс INT 13h. Количество цилиндров, головок и секторов в преобразованной геометрии зависит от общего размера диска, как показано в следующей таблице.

Размер диска Секторы / трек Головы Цилиндров
1 <X ≤ 504 МБ 63 16 Х ÷ (63 × 16 × 512)
504 МБ <X ≤ 1008 МБ 63 32 Х ÷ (63 × 32 × 512)
1008 МБ <X ≤ 2016 МБ 63 64 Х ÷ (63 × 64 × 512)
2016 МиБ <X ≤ 4032 МиБ 63 128 X ÷ (63 × 128 × 512)
4032 МБ <X ≤ 8032,5 МБ 63 255 X ÷ (63 × 255 × 512)

LBA48

Преобразование CHS

Эквивалентность LBA и CHS с 16 головками на цилиндр
Значение LBA Кортеж CHS
0 0, 0, 1
1 0, 0, 2
2 0, 0, 3
62 0, 0, 63
63 0, 1, 1
945 0, 15, 1
1007 0, 15, 63
1008 1, 0, 1
1070 1, 0, 63
1071 1, 1, 1
1133 1, 1, 63
1134 1, 2, 1
2015 г. 1, 15, 63
2016 г. 2, 0, 1
16 127 15, 15, 63
16 128 16, 0, 1
32 255 31, 15, 63
32 256 32, 0, 1
16 450 559 16319, 15, 63
16 514 063 16382, 15, 63

В схеме адресации LBA секторы нумеруются как целочисленные индексы; при сопоставлении с кортежами CHS ( сектор головки блока цилиндров ) нумерация LBA начинается с первого цилиндра, первой головки и первого сектора дорожки. Как только гусеница исчерпана, нумерация продолжается до второй головки, оставаясь внутри первого цилиндра. Когда все головки внутри первого цилиндра исчерпаны, нумерация продолжается со второго цилиндра и т. Д. Таким образом, чем ниже значение LBA, тем ближе физический сектор к первому (то есть самому внешнему) цилиндру жесткого диска.

Кортежи CHS могут быть сопоставлены с адресом LBA по следующей формуле:

LBA = ( C × HPC + H ) × SPT + (S - 1)

Адреса LBA могут быть сопоставлены с кортежами CHS с помощью следующей формулы («mod» - это операция по модулю , то есть остаток , а «÷» - целочисленное деление , то есть частное деления, при котором отбрасывается любая дробная часть):

C = LBA ÷ ( HPC × SPT ) H = ( LBA ÷ SPT ) мод HPC S = ( LBA мод SPT ) + 1

Согласно спецификациям ATA, «Если содержание слов (61:60) больше или равно 16 514 064, то содержание слова 1 [количество логических цилиндров] должно быть равно 16 383». Следовательно, для LBA 16450559 диск ATA может фактически ответить кортежем CHS (16319, 15, 63), и количество цилиндров в этой схеме должно быть намного больше 1024, разрешенного INT 13h.

Зависимости от операционной системы

Операционные системы, которые чувствительны к геометрии диска, сообщаемой BIOS, включают семейства Solaris , DOS и Windows NT, где NTLDR ( NT , 2000 , XP , Server 2003 ) или WINLOAD ( Vista , Server 2008 , Windows 7 и Server 2008 R2 ) используют основную загрузку запись, которая обращается к диску, используя CHS; Версии Windows для x86-64 и Itanium могут разбивать диск с помощью таблицы разделов GUID, которая использует адресацию LBA.

Некоторые операционные системы не требуют перевода, потому что они не используют геометрию, сообщаемую BIOS, в их загрузчиках . Среди этих операционных систем - BSD , Linux , macOS , OS / 2 и ReactOS .

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

Способов разбиения дисков на разделы на сегодняшний день существует два. Первый способ — использовать MBR. Этот способ применялся еще чуть ли не с появления жестких дисков и работает с любыми операционными системами. Второй способ — использовать новую систему разметки — GPT. Этот способ поддерживается только современными операционными системами, поскольку он еще относительно молод.

Структура MBR

До недавнего времени структура MBR использовалась на всех персональных компьютерах для того, чтобы можно было разделить один большой физический жесткий диск (HDD) на несколько логических частей — разделы диска (partition). В настоящее время MBR активно вытесняется новой структурой разделения дисков на разделы — GPT (GUID Partition Table). Однако MBR используется еще довольно широко, так что посмотрим что она из себя представляет.

MBR всегда находится в первом секторе жесткого диска. При загрузке компьютера, BIOS считывает этот сектор с диска в память по адресу 0000:7C00h и передает ему управление.

Итак, первая секция структуры MBR — это секция с исполняемым кодом, который и будет руководить дальнейшей загрузкой. Размер этой секции может быть максимум 440 байт. Далее идут 4 байта, отведенные на идентификацию диска. В операционных системах, где идентификация не используется, это место может занимать исполняемый код. То же самое касается и последующих 2 байт.

Начиная со смещения 01BEh находится сама таблица разделов жесткого диска. Таблица состоит из 4 записей (по одной на каждый возможный раздел диска) размером 16 байт.

Структура записи для одного раздела:

Первым байтом в этой структуре является признак активности раздела. Этот признак определяет с какого раздела следует продолжить загрузку. Может быть только один активный раздел, иначе загрузка продолжена не будет.

Следующие три байта — это так называемые CHS-координаты первого сектора раздела.

По смещению 04h находится код типа раздела. Именно по этому типу можно определить что находится в данном разделе, какая файловая система на нем и т.п. Список зарезервированных типов разделов можно посмотреть, например, в википедии по ссылке Типы разделов.

После типа раздела идут 3 байта, определяющие CHS-координаты последнего сектора раздела.

CHS-координаты сектора расшифровываются как Cylinder Head Sector и соответственно обозначают номер цилиндра (дорожки), номер головки (поверхности) и номер сектора. Цилиндры и головки нумеруются с нуля, сектор нумеруется с единицы. Таким образом CHS=0/0/1 означает первый сектор на нулевом цилиндре на нулевой головке. Именно здесь находится сектор MBR.

Все разделы диска, за исключением первого, обычно начинаются с нулевой головки и первого сектора какого-либо цилиндра. То есть их адрес будет N/0/1. Первый раздел диска начинается с головки 1, то есть по адресу 0/1/1. Это все из-за того, что на нулевой головке место уже занято сектором MBR. Таким образом, между сектором MBR и началом первого раздела всегда есть дополнителььные неиспользуемые 62 сектора. Некоторые загрузчики ОС используют их для своих нужд.

Интересен формат хранения номера цилиндра и сектора в структуре записи раздела. Номер цилиндра и номер сектора делят между собой два байта, но не поровну, а как 10:6. То есть на номер сектора приходится младшие 6 бит младшего байта, что позволяет задавать номера секторов от 1 до 63. А на номер цилиндра отведено 10 бит — 8 бит старшего байта и оставшиеся 2 бита от младшего байта: «CCCCCCCC CCSSSSSS», причем в младшем байте находятся старшие биты номера цилиндра.

Проблема с CHS-координатами состоит в том, что с помощью такой записи можно адресовать максимум 8 Гб диска. В эпоху DOS это было приемлемо, однако довольно скоро этого перестало хватать. Для решения этой проблемы была разработана система адресации LBA (Logical Block Addressing), которая использовала плоскую 32-битную нумерацию секторов диска. Это позволило адресовать диски размером до 2Тб. Позже разрядность LBA увеличили до 48 бит, однако MBR эти изменения не затронули. В нем по-прежнему осталась 32-битная адресация секторов.

Итак, в настоящее время повсеместно используется LBA-адресация для секторов на диске и в структуре записи раздела адрес его первого сектора прописывается по смещению 08h, а размер раздела — по смещению 0Ch.

Для дисков размером до 8Гб (когда адресация по CHS еще возможна) поля структуры с CHS-координатами и LBA-адресации должны соответствовать друг другу по значению (корректно конвертироваться из одного формата в другой). У дисков размером более 8Гб значения всех трех байт CHS-координат должны быть равны FFh (для головки допускается также значение FEh).

В конце структуры MBR всегда находится сигнатура AA55h. Она в какой-то степени позволяет проверить, что сектор MBR не поврежден и содержит необходимые данные.

Расширенные разделы

Разделы, отмеченные в таблице типом 05h и 0Fh, это так называемые расширенные разделы. С их помощью можно создавать больше разделов на диске, чем это позволяет MBR. На самом деле расширенных разделов несколько больше, например есть разделы с типами C5h, 15h, 1Fh, 91h, 9Bh, 85h. В основном все эти типы разделов использовались в свое время различными операционными системами (такими как например OS/2, DR-DOS, FreeDOS) с одной и той же целью — увеличить количество разделов на диске. Однако со временем различные форматы отпали и остались только разделы с типами 05h и 0Fh. Единственное исключение — это тип 85h. Он до сих пор может использоваться в Linux для формирования второй цепочки логических дисков, скрытых от других операционных систем. Разделы с типом 05h используются для дисков менее 8Гб (где еще возможна адресация через CHS), а тип 0Fh используется для дисков больше 8Гб (и используется LBA-адресация).

В первом секторе расширенного раздела находится структура EBR (Extended Boot Record). Она во многом схожа со структурой MBR, но имеет следующие отличия:

  • В EBR нет исполняемого кода. Некоторые загрузчики могут его туда записывать, но обычно это место заполнено нулями
  • Сигнатуры диска и два неиспользуемых байта должны быть заполнены нулями
  • В таблице разделов могут быть заполнены только две первых записи. Остальные две записи должны быть заполнены нулями

В отличие от MBR, где позволяется создавать не более четырёх разделов, структура EBR позволяет организовать список логических разделов, ограниченный лишь размером раздела-контейнера (того самого, который с типом 05h или 0Fh). Для организации такого списка используется следующий формат записей: первая запись в таблице разделов EBR указывает на логический раздел, связанный с данным EBR, а вторая запись указывает на следующий в списке раздел EBR. Если данный логический раздел является последним в списке, то вторая запись в таблице разделов EBR должна быть заполнена нулями.

Формат записей разделов в EBR аналогичен формату записи в структуре MBR, однако логически немного отличается.

Признак активности раздела для разделов структуры EBR всегда будет 0, так как загрузка осуществлялась только с основных разделов диска. Координаты CHS, с которых начинается раздел используются, если не задействована LBA-адресация, также как и в структуре MBR.

А вот поля, где в режиме LBA-адресации должны находиться номер начального сектора и количество секторов раздела, в структуре EBR используются несколько иначе.

Для первой записи таблицы разделов EBR в поле начального сектора раздела (смещение 08h) записывается расстояние в секторах между текущим сектором EBR и началом логического раздела, на который ссылается запись. В поле количества секторов раздела (смещение 0Ch) в этом случае пишется размер этого логического раздела в секторах.

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

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

Структура GPT

В современных компьютерах на смену BIOS пришла новая спецификация UEFI, а вместе с ней и новое устройство разделов на жестком диске — GUID Partition Table (GPT). В этой структуре были учтены все недостатки и ограничения, накладываемые MBR, и разработана она была с большим запасом на будущее.

Кроме того, в отличие от MBR, структура GPT хранит на диске две своих копии, одну в начале диска, а другую в конце. Таким образом, в случае повреждения основной структуры, будет возможность восстановить ее из сохраненной копии.

Рассмотрим теперь устройство структуры GPT подробнее. Вся структура GPT на жестком диске состоит из 6 частей:

LBA-адрес Размер (секторов) Назначение
LBA 0 1 Защитный MBR-сектор
LBA 1 1 Первичный GPT-заголовок
LBA 2 32 Таблица разделов диска
LBA 34 NN Содержимое разделов диска
LBA -34 32 Копия таблицы разделов диска
LBA -2 1 Копия GPT-заголовка

Защитный MBR-сектор

Первый сектор на диске (с адресом LBA 0) — это все тот же MBR-сектор. Он оставлен для совместимости со старым программным обеспечением и предназначен для защиты GPT-структуры от случайных повреждений при работе программ, которым про GPT ничего не известно. Для таких программ структура разделов будет выглядеть как один раздел, занимающий все место на жестком диске.

Структура этого сектора ничем не отличается от обычного сектора MBR. В его таблице разделов дожна быть создана единственная запись с типом раздела 0xEE. Раздел должен начинаться с адреса LBA 1 и иметь размер 0xFFFFFFFF. В полях для CHS-адресации раздел соответственно должен начинаться с адреса 0/0/2 (сектор 1 занят под саму MBR) и иметь конечный CHS-адрес FF/FF/FF. Признак активного раздела должен иметь значение 0 (неактивный).

При работе компьютера с UEFI, данный MBR-сектор просто игнорируется и никакой код в нем также не выполняется.

Первичный GPT-заголовок

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

Структура GPT-заголовка:

Смещение (байт) Размер поля (байт) Пример заполнения Название и описание поля
0x00 8 байт 45 46 49 20 50 41 52 54 Сигнатура заголовка. Используется для идентификации всех EFI-совместимых GPT-заголовков. Должно содержать значение 45 46 49 20 50 41 52 54, что в виде текста расшифровывается как "EFI PART".
0x08 4 байта 00 00 01 00 Версия формата заголовка (не спецификации UEFI). Сейчас используется версия заголовка 1.0
0x0C 4 байта 5C 00 00 00 Размер заголовка GPT в байтах. Имеет значение 0x5C (92 байта)
0x10 4 байта 27 6D 9F C9 Контрольная сумма GPT-заголовка (по адресам от 0x00 до 0x5C). Алгоритм контрольной суммы — CRC32. При подсчёте контрольной суммы начальное значение этого поля принимается равным нулю.
0x14 4 байта 00 00 00 00 Зарезервировано. Должно иметь значение 0
0x18 8 байт 01 00 00 00 00 00 00 00 Адрес сектора, содержащего первичный GPT-заголовок. Всегда имеет значение LBA 1.
0x20 8 байт 37 C8 11 01 00 00 00 00 Адрес сектора, содержащего копию GPT-заголовка. Всегда имеет значение адреса последнего сектора на диске.
0x28 8 байт 22 00 00 00 00 00 00 00 Адрес сектора с которого начинаются разделы на диске. Иными словами — адрес первого раздела диска
0x30 8 байт 17 C8 11 01 00 00 00 00 Адрес последнего сектора диска, отведенного под разделы
0x38 16 байт 00 A2 DA 98 9F 79 C0 01 A1 F4 04 62 2F D5 EC 6D GUID диска. Содержит уникальный идентификатор, выданный диску и GPT-заголовку при разметке
0x48 8 байт 02 00 00 00 00 00 00 00 Адрес начала таблицы разделов
0x50 4 байта 80 00 00 00 Максимальное число разделов, которое может содержать таблица
0x54 4 байта 80 00 00 00 Размер записи для раздела
0x58 4 байта 27 C3 F3 85 Контрольная сумма таблицы разделов. Алгоритм контрольной суммы — CRC32
0x5C 420 байт 0 Зарезервировано. Должно быть заполнено нулями

Система UEFI проверяет корректность GPT-заголовка, используя контрольный суммы, вычисляемые по алгоритму CRC32. Если первичный заголовок поврежден, то проверяется контрольная сумма копии заголовка. Если контрольная сумма копии заголовка правильная, то эта копия используется для восстановления информации в первичном заголовке. Восстановление также происходит и в обратную сторону — если первичный заголовок корректный, а копия неверна, то копия восстанавливается по данным из первичного заголовка. Если же обе копии заголовка повреждены, то диск становится недоступным для работы.

У таблицы разделов дополнительно существует своя контрольная сумма, которая записывается в заголовке по смещению 0x58. При изменении данных в таблице разделов, эта сумма рассчитывается заново и обновляется в первичном заголовке и в его копии, а затем рассчитывается и обновляется контрольная сумма самих GPT-заголовков.

Таблица разделов диска

Следующей частью структуры GPT является собственно таблица разделов. В настоящее время операционные системы Windows и Linux используют одинаковый формат таблицы разделов — максимум 128 разделов, на каждую запись раздела выделяется по 128 байт, соответственно вся таблица разделов займет 128*128=16384 байт, или 32 сектора диска.


Если SMART показывает проблемы, чаще всего это означает одно: диск вот-вот начнет сыпаться, и повлиять может даже лишняя загрузка ОС. Следующее, что нужно понять, — это софтверные на нем «бэды» или хардварные. Если хардварных не так много, то диск еще можно попытаться вернуть к жизни.

Думаю, ты слышал о таких продуктах, как MHDD и Victoria. Они незаменимы для низкоуровневой работы с жестким диском и помогут тебе совершить великие подвиги в восстановлении и диагностике. О Victoria «Хакер» уже писал пару выпусков назад, теперь настало время разобраться со второй — архаичной, но по-прежнему мегаполезной утилитой.

MHDD — это небольшая, но мощная бесплатная программа, которая предназначена для работы с накопителями на самом низком уровне (насколько это возможно). Первая версия была выпущена Дмитрием Постриганем в 2000 году. Она могла сканировать поверхность накопителя с интерфейсом IDE в режиме CHS. Сейчас MHDD — это значительно больше, чем диагностика. С MHDD ты можешь делать все что угодно: диагностировать накопители, выполнять чтение и запись произвольных секторов, управлять системой SMART, парольной системой, системой управления шумовыми характеристиками, а также изменять размер накопителя.

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

Ох уж эти интерфейсы

Не каждый интерфейс может корректно распознаваться программой.

Интерфейс SATA. Есть вероятность, что диск не определится в MHDD. Причина может заключаться в режиме работы SATA-контроллера (IDE и AHCI) в BIOS. MHDD, увы, не поддерживает режим AHCI. Необходимо менять настройки BIOS. Хуже всего то, что нынче не все матплаты поддерживают этот режим. Выходом может стать только использование машины с подходящей материнкой или отказ от MHDD.

Интерфейс SCSI. Может не определиться драйвер SCSI-контроллера.

Интерфейс USB. Подключить диск через USB теоретически возможно с помощью дополнительного драйвера и настройки программы. Драйвер эмулирует режим работы через SCSI. Также необходимо отключить все лишние USB-накопители. Целевой диск должен быть подключен до загрузки MHDD. В config.sys потребуется прописать: device=X:\USBASPI.SYS /w /v , где X:\ — путь к диску.

Итак, я беру с полки один из сломанных дисков (я обычно клею на них этикетку broken) и сейчас попробую воскресить его, чтобы показать тебе, как это работает на практике. У меня на руках оказался винт WDC WD7500BPVX-60JC3T0 с винегретом вместо системы и всех файлов на нем.

SMART подопытного диска

SMART подопытного диска

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

Готовимся

Первоначально диск должен инициализироваться программой, что вполне логично. После этого производится сканирование поверхности, которое дает понимание текущего положения дел: MHDD покажет состояние поверхности харда. Затем нужно будет отформатировать диск и провести проверку еще раз. Обычно на этом этапе софт-бэды пропадают, и остаются только хардварные. Далее можно будет выполнить процедуру REMAP, чтобы бэд-блоки переназначить в служебную область.

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

Не убий

Угробить диск значительно проще, чем восстановить его. К примеру, каждому известно (или должно быть известно), что к печальным последствиям ведет отсоединение шлейфа во время работы. Также крайне не рекомендуем бездумно переключать флаги и выполнять команды в MHDD. Внимательно читай документацию и не начинай что-то делать, если до конца не понимаешь, к чему это может привести.

Что ж, можно приступать к делу! Для начала создаем загрузочную флешку. Для этого я рекомендую USB Tools — полная инструкция и сам DOS есть вот здесь. Когда носитель готов, остается только бросить в его корень MHDD, чтобы лишний раз не лазить по директориям из командной строки.

Чтобы диск, подключенный на первый канал, точно отображался, нужно подредактировать конфиг mhdd.cfg, который лежит в папке CFG.

Как я уже говорил, сканирование любого устройства возможно, только если оно определяется командами ID или EID (или нажатием F2).

Определяем наш жесткий диск

Определяем наш жесткий диск

Сканируем

Чтобы выполнить сканирование, набираем SCAN и жмем ENTER или используем F4. Появится меню, из которого можно изменить часть настроек. По умолчанию начальный сектор равен нулю (стартовый сектор). Конечный сектор равен максимально возможному (конец диска). Все деструктивные по отношению к пользовательским данным функции (Remap, Erase Delays) по умолчанию выключены.

Начинаем сканирование

Начинаем сканирование

Давай пройдемся по параметрам сканирования.

  • Start LBA — начальный сектор для сканирования, по дефолту 0, то есть начало диска.
  • End LBA — сектор завершения сканирования, по дефолту конец диска. Иногда удобнее сканировать не всю поверхность (особенно когда объем диска переваливает за несколько терабайт), а только рабочую область, где лежит ОС. К примеру, диск С равен 50 Гбайт, тогда конечная область будет равна 2 * 50 * 1024 * 1024 = 104 857 600-й сектор . Можно посчитать проще: (объем * 2) * 1 000 000 , итого 100 000 000.
  • Remap помечает сектор как сбойный в специальной служебной области, после чего диск к нему не обращается.
  • Timeout — время задержки на чтение сектора, после которого проверка переходит к следующему сектору.
  • Spindown after scan — остановить жесткий диск после сканирования.
  • Loop test/repair — проводить сканирование или проверку циклично.
  • Erase Delays — стирать сектора, в которых обнаружены задержки чтения.

Снова нажимаем F4 для запуска сканирования. MHDD сканирует накопители блоками. Для накопителей IDE/SATA один блок равен 255 секторам (130 560 байт).

Процесс сканирования

Процесс сканирования

Вот как работает сканирование:

  1. MHDD посылает команду VERIFY SECTORS с номером LBA (номер сектора) и номером секторов в качестве параметров.
  2. Накопитель поднимает флаг BUSY.
  3. MHDD запускает таймер.
  4. После того как накопитель выполнил команду, он опускает флаг BUSY.
  5. MHDD вычисляет затраченное накопителем время и выводит соответствующий блок на экран. Если встретилась ошибка (bad block), программа выводит букву, которая описывает ошибку.

MHDD повторяет шаги 1–5 до конечного сектора. Если нужен протокол сканирования, его всегда можно найти в файле log/mhdd.log. Во время сканирования ты можешь увидеть много прямоугольников разного цвета. Чтобы ты не сильно пугался, привожу выдержку из справки:


Наличие красных (>500 ms) блоков на полностью здоровом накопителе недопустимо. Если они есть, необходимо произвести стирание (erase) всей поверхности диска и, если это не помогло, избавиться от задержек, можно делать выводы, что данный накопитель перестал быть достаточно надежным. Буквенно-символьные блоки, например x , S и т.п., недопустимы: они говорят о наличии bad-блоков на поверхности.

Первое, что должно быть сделано, — это полная очистка поверхности командой erase. Если это не помогло, то scan с включенной опцией EraseWaits. Если bad-блоки так и не исчезли, следует запустить scan с включенной опцией Remap.

Восстанавливаем

Если сканирование выявило ошибки, первое, что необходимо сделать, — скопировать все данные с накопителя (если они, конечно, тебе нужны). В моем случае это было неактуально. Затем нужно полностью очистить поверхность при помощи команды ERASE , которая стирает каждый сектор на накопителе.

Выполнение команды ERASE

Выполнение команды ERASE

Накопитель пересчитает поля ECC для каждого сектора. Это помогает избавиться от так называемых soft-bad-блоков. Если стирание не помогло, запускаем сканирование с включенной опцией REMAP.

Процесс ремапа

Процесс ремапа

Если видишь, что каждый блок содержит ошибку, не пытайся стирать накопитель или сканировать с включенной опцией REMAP. Скорее всего, у накопителя повреждена служебная область, и это не может быть исправлено стандартными командами MHDD.

Внимательный читатель, посмотрев на картинки сканирования диска, вероятно, присвистнул и сокрушенно покачал головой. Да, мой диск, пока я писал статью, умер окончательно. Количество хардварных бэдов превысило все допустимые пределы, и к набиванию последних строк статьи он уже хрустел, как трактор «Беларусь». Это к слову о том, что если диск начинает сыпаться, то доверять ему нельзя, особенно если появляются хардварные бэды. Ремап сможет помочь тогда, когда диск еще не начал активно сыпаться, но на поверхности возникли дефекты. В любом случае, даже если починить удалось, используй такой диск только для некритичных данных и ни в коем случае не как основной.

О чем сигнализируют индикаторы

  • BUSY — накопитель занят и на команды не реагирует;
  • WRFT — ошибка записи;
  • DREQ — накопитель жаждет обменяться данными с внешним миром;
  • ERR — возникла ошибка в результате какой-либо операции.

Когда загорается ERR, смотри в правую верхнюю часть экрана: там будет отображен тип последней ошибки:

  • AMNF — Address Mark Not Found — обращение к какому-то конкретному сектору не удалось. Скорее всего, означает, что сектор поврежден. Однако сразу после включения накопителя как раз наоборот — свидетельствует об отсутствии проблем и сообщает об успешном выполнении внутренней диагностики;
  • T0NF — Track 0 Not Found — не найден нулевой трек;
  • ABRT — Abort, команда отвергнута;
  • IDNF — Sector ID Not found;
  • UNCR — Uncorrectable Error, ошибка, не скорректированная кодом ECC. Скорее всего, в этом месте логический бэд-блок.

Вверху могут появляться еще два индикатора: PWD сигнализирует об установленном аппаратном пароле, HPА появляется в том случае, если размер накопителя был изменен с помощью команды HPA (обычно используется для скрытия бэд-блоков в конце диска).

Читайте также: