Логика хранения данных

Логическая структура — то, с чем работает операционная система компьютера. Это всегда иерархия: диск ^ раздел ^ каталог ^ файл. Со стороны интерфейса любой накопитель представляется последовательностью логических блоков. При чтении компьютер запрашивает у накопителя блок с определенным порядковым номером и получает в ответ содержимое этого блока в виде последовательности байтов. При записи, наоборот, последовательность байтов посылается в указанный блок. Границей между аппаратным и логическим уровнями можно считать интер­фейсный кабель.

С самого начала условились, что стандартная длина блока составляет 512 бай­тов. Как раз таков был размер физических секторов на дискетах и первых винче­стерах — отсюда и принято говорить о секторах. Хотя впоследствии производители компьютерного «железа» и разработчики файловых систем стали оперировать бо­лее крупными порциями данных (кластерами, блоками), в основе все равно лежит сектор размером 512 байтов.

Примечание

В действительности на винчестере полный объем физического сектора равен 571 бай­ту. Из них 512 байтов предназначены для записи данных (data), а оставшиеся 59 бай­тов — служебные сведения о внутреннем номере сектора, контрольные суммы и т. д. Часть этой информации записывается в ходе низкоуровневой разметки диска еще на заводе, частью «заведует» микропрограмма. Через стандартный интерфейс скрытые 59 байтов недоступны. Так что «видимая» длина сектора — всегда 512 байтов.


 

Разделы

Верхний уровень логической структуры диска — разделы (partitions). Идея раз­делов применима к жестким дискам: диск разбивается на несколько частей, каждая из которых несет свою файловую систему и далее представляется ОС вполне само­стоятельным носителем.

Флеш-диски и оптические диски обычно «пропускают» этот уровень. В сущно­сти такой носитель весь является одним разделом и несет только файловую сис­тему.

Главная загрузочная запись и таблица разделов

Начальный сектор диска содержит главную загрузочную запись (англ. master boot record, MBR). Синоним — основная загрузочная запись. MBR состоит из про­граммного кода загрузчика, таблицы разделов (partition table) и заканчивается сиг­натурой (подписью). Все вместе это занимает 512 байтов. Структура главной загру­зочной записи приведена в табл.

Смещение от начала диска Длина, байт Содержание
Код программы-загрузчика
01BE Таблица разделов: Раздел 1
01CE Таблица разделов: Раздел 2
01DE Таблица разделов: Раздел 3
01EE Таблица разделов: Раздел 4
01FE Сигнатура MBR (всегда AA55)

 

Первые 446 байтов отводятся под код загрузчика (Boot Record). При загрузке с диска эту короткую программу считывает и выполняет BIOS компьютера. Код загрузчика зависит от того, какой программой создавалась главная загрузочная запись. Например, если вы форматировали (точнее, инициализировали) диск стан­дартными средствами Windows, код загрузчика один, если с помощью Partition Magic — другой, если с помощью программ семейства Acronis — третий. Стан­дартным считается загрузчик, записываемый утилитой fdisk или установщиком Windows.

В адреса 01B8-01BB программа, которой форматировался диск, может записать сигнатуру диска. Например, ОС семейства Windows NT по этим значениям «запо­минают» диск, который однажды подключался к системе, и «узнают» его, даже ес­ли потом он будет переставлен на другой канал IDE или SATA.

Следующие четыре группы по 16 байтов служат для записи сведений о разделах диска. Вместе они образуют таблицу разделов (Partition Table). Пока на диске не создавались разделы, все эти группы содержат нули. На диске можно создать мак­симум 4 основных (basic) раздела — больше структурой MBR не предусмотрено. Каждая группа состоит из 10 полей (табл).

Таблица Структура поля таблицы разделов

Смещение от начала группы Длина, байт Описание
Флаг активности раздела (80 — активный, 0 — не активный)
Начало раздела — головка H
Начало раздела — сектор S (биты 0-5), цилиндр C (биты 6,7)
Начало раздела — цилиндр C (старшие биты 8,9 хранятся в предыдущем байте)
Код типа раздела
Конец раздела — головка H
Конец раздела — сектор S (биты 0-5), цилиндр C (биты 6,7)
Конец раздела — цилиндр C (старшие биты 8,9 хранятся в предыдущем байте)
Смещение первого сектора раздела в координатах LBA
000C Количество секторов раздела
     

Нулевой байт — флаг активности раздела. Из всех разделов диска активным может быть только один (или ни одного). При загрузке компьютера BIOS, прочитав и выполнив код загрузчика MBR, будет искать «продолжение», т. е. загрузчик опе­рационной системы, в активном разделе. Больше этот флаг ни на что не влияет.

Следующие 3 байта содержат координаты начала раздела, а байты с пятого по седьмой — координаты его конца. Координаты выражены через значения CHS.

Относительно головок, секторов и цилиндров придется сделать отступление. Исторически сначала появилась «трехмерная» адресация секторов на жестких дис­ках, или система адресации CHS. В ней каждый сектор обозначался тремя числами: C (номером цилиндра, т. е. дорожек, лежащих одна под другой), H (номером голов­ки, т. е. пластины) и S (номером сектора на дорожке). Это отражало реальную «геометрию» винчестеров того времени (рис. 2.8).

Рис Геометрия винчестера: дорожки, головки и секторы

 

Тогда же сложилась спецификация таблицы разделов, которая действует и до сих пор. В ней под номер цилиндра C отведено 10 битов, и цилиндров может быть не более 210 = 1024. Под номер сектора S отдано 6 битов, и секторов может быть не более 26 - 1 = 63 (нумерация секторов начинается с единицы). Соответственно, го­ловок может быть не более 28 = 256. Итого, адресуемый объем диска теоретически не может превышать 1024 • 63 • 256 • 512 = 8 455 716 864 байта, чуть больше 7,8 Гбайт.

В дальнейшем, когда емкость винчестеров превысила 7 Гбайт, была принята «линейная» адресация LBA (Logical Block Addressing, адресация логических бло­ков). В ней все секторы «выстроены в ряд», и у сектора есть только порядковый номер. При таком типе адресации данные считываются логическими блоками, со­стоящими из нескольких секторов.

Адресация LBA преобразуется в CHS и наоборот. Примерно так же на строевом смотре воинское подразделение из «коробки» в несколько шеренг развертывается в колонну или шеренгу по одному, а затем вновь выстраивается в «коробку». За ну­левой принимается блок, который начинается в первом секторе нулевой головки нулевого цилиндра. Блоки (секторы) LBA нумеруются с нуля, а не с единицы, как секторы CHS.

Если начало раздела лежит за пределами адресации CHS, то в соответствующие поля таблицы разделов записываются максимально возможные значения: C = 1023 (3FFh), H = 255 (FFh), S = 63 (3Fh), а для обращения к разделу система будет при­менять адресацию LBA.

Если в MBR под запись каждого адреса LBA отводится 4 байта (32 бита), то че­рез LBA теоретически можно адресовать до 232 • 512 = 2 199 023 255 552 байта (около 2 Тбайт).

 

Четвертый байт — код (идентификатор) типа раздела. Если значение этого байта равно 00, считается, что такого раздела не существует, и его содержимое игнориру­ется. Любое другое значение указывает на раздел определенного типа. Некоторые идентификаторы приведены в табл.

Таблица Коды типа раздела

Код Тип раздела
Раздел отсутствует
FAT12, CHS
FAT16 (от 32 680 до 65 535 секторов или 16-33 Мбайт), CHS
Расширенный раздел (extended partition), CHS
Код Тип раздела
FAT16 (до 32 680 секторов или до 16 Мбайт), CHS
NTFS или exFAT
0B FAT32, CHS
0C FAT32, LBA
0E FAT16, LBA
0F Расширенный раздел (extended partition), LBA
Динамический диск Windows NT, LBA
Linux swap
Linux native
NTFS массива RAID0
B7 NTFS master-раздела массива RAID1
C7 NTFS slave-раздела массива RAID1

Добавление к коду типа раздела шестнадцатеричного числа 10 делает раздел «скрытым» (hidden). Например, если идентификатор 0C указывает на раздел FAT32, то идентификатор 0C + 10 = 1C соответствует скрытому разделу FAT32.

Скрытые разделы недоступны большинству ОС — для них это «раздел неиз­вестного типа», следовательно, он не должен содержать файловую систему. Однако в скрытых разделах часто располагают средства восстановления системы. Напри­мер, Зона безопасности Acronis является скрытым разделом FAT32, а на ноутбуках Acer скрытый раздел несет утилиту e -Recovery (специализированная ОС на базе Linux) и образ системного диска. В таком случае программа, создающая скрытый раздел, заменяет стандартный загрузчик MBR своим, модифицированным. Такой «хитрый» загрузчик предлагает в процессе загрузки нажать какое-либо сочетание клавиш, чтобы загрузить компьютер со скрытого раздела.

Если на диске нужно создать больше четырех разделов, применяется специаль­ный тип раздела с кодом 05 — расширенный раздел (Extended Partition). В термино­логии Windows отформатированные расширенные разделы называются логически­ми дисками.

Расширенный раздел отличается от всех других типов разделов. Он описывает не сам раздел, а область пространства накопителя, в которой начинается описание логических дисков. Сектор, который указан в таблице разделов MBR как началь­ный сектор расширенного раздела, фактически содержит еще одну загрузочную запись — Extended Boot Record (EBR). Загрузочного кода в ней нет, есть только таблица разделов из двух записей и сигнатура.

Записи EBR устроены точно так же, как записи таблицы разделов в MBR. Если логический диск, на который ссылается указатель, занимает не все пространство, то в EBR заполняется второй элемент — указатель на следующий расширенный раздел. Он вновь описывает оставшееся пространство как Extended Partition и указывает на следующую расширенную загрузочную запись (EBR). В секторе, на который ссылается эта запись, точно так же описывается один раздел (логический диск) и, если осталось место, делается очередная запись об Extended Partition. Так продолжается до тех пор, пока пространство не будет разделено.

Схема на рис. поясняет соотношение между основными и расширенными разделами. В качестве примера левый диск разбит на 3 основных раздела. На пра­вом создано два основных раздела и расширенный, в котором размещены 3 логиче­ских диска.

Все записи о расширенных разделах образуют цепь (Extended Partition Chain), в которой от дискового пространства последовательно отрезаются фрагменты (ло­гические диски). Ошибка в любом элементе этой цепи приводит к ее обрыву. Все разделы, которые описаны после обрыва цепи, операционная система найти не сможет. Занимаемое этими расширенными разделами пространство она будет счи­тать незанятым.

Рис. Основные и расширенные разделы

 

 


GPT — таблица разделов GUID

Как уже сказано, диски объемом более 2 Тбайт на наших глазах становятся ре­альностью. Что же нужно, чтобы компьютер смог работать с такими винчестерами?

□ Контроллер дисков и BIOS материнской платы должны, как минимум, поддер­живать 48-битную адресацию LBA. Когда под номер сектора отводится 48 би­тов, можно адресовать на диске до 248 ~ 2,8 • 1014 байтов, т. е. почти 300 тера­байт. Эта поддержка появляется в «железе», выпущенном после 2008 г. В идеале материнская плата должна соответствовать спецификации Extensible Firmware Interface (EFI), но пока это «экзотика».

□ На диске должна быть создана таблица разделов нового типа — GPT (англ. GUID Partition Table, таблица разделов GUID).

□ Операционная система должна «уметь» работать с таблицей разделов GPT. Та­ковы Windows 7, 64-битные предыдущие версии Windows и некоторые сборки Linux.

GUID (Globally Unique Identifier, глобально уникальный идентификатор)- это концепция, согласно которой каждой цифровой «железке» и программному компоненту в мире желательно присвоить статистически уникаль­ный 128-битный идентификатор. Активное участие в ее разработке и продвижении принимают корпорация Microsoft и другие гиганты индустрии.

Одно отражение идея GUID нашла в сетевом протоколе IPv6. В результате у ка­ждого компьютера на Земле появляется уникальный IP-адрес, адресация в цифро­вых сетях становится довольно простой и прозрачной, а многие проблемы отпада­ют сами собой.

Другое воплощение идеи — архитектура EFI (Extensible Firmware Interface, рас­ширяемый интерфейс микропрограмм). Эта архитектура призвана заменить BIOS при загрузке компьютеров и взаимодействии аппаратных компонентов.

Попросту говоря, BIOS обращается к диску, подключенному к указанному пор­ту, потом загрузчик MBR передает загрузку загрузочному сектору того раздела, который помечен как активный, последний отправляет к загрузочным файлам ОС и т. д. Материнская плата с EFI сразу же обратится к тому разделу, уникальный идентификатор (GUID) которого прописан в ее настройках. Для этого на диске и нужна структура GPT.

В нулевом секторе диска с GPT все равно находится MBR. Эта запись делается лишь из соображений совместимости и безопасности. Поэтому ее называют на­следственной или защитной (Protective MBR). ОС и утилиты, поддерживающие GPT, эту запись игнорируют.

В Protective MBR описан всего один раздел, занимающий весь диск. Разделу присвоен тип 00EE. Благодаря этому старые ОС и программы, не поддерживающие GPT, «видят» через MBR один раздел неизвестного им типа и не пытаются что- либо писать на диск.

Следующие 33 сектора занимает структура GPT. Общая схема диска с GPT при­ведена на рис.

 

В первом секторе расположен первичный заголовок GPT. Он как раз и содержит GUID диска, сведения о собственном размере и ссылку на расположение вторично­го (запасного) оглавления и запасной таблицы разделов, которые всегда находятся в последних секторах диска.

Кроме того, в заголовке хранятся две контрольные суммы (CRC32): самого заго­ловка и таблицы разделов. При загрузке компьютера микропрограмма EFI проверя­ет по этим контрольным суммам целостность GPT.

Секторы со второго по тридцать третий занимает таблица разделов. Она со­стоит из записей длиной по 128 байтов. Всего таких записей и, соответственно, разделов на диске может быть не более 128.

Первые 16 байтов записи содержат GUID типа раздела. Это напоминает код типа раздела в MBR. Например, GUID системного раздела EFI имеет вид C12A7328-

F81F-11D2-BA4B-00A0C93EC93B. Следующие 16 байтов — уникальный иденти­фикатор (GUID) конкретного раздела. Фактически, это его «серийный номер». Да­лее могут быть записаны данные о начале и конце раздела в 64-битных координа­тах LBA (не обязательно). Затем следуют метка (имя) и атрибуты раздела.

В конце диска расположена резервная копия GPT — вторичный заголовок (Secondary GPT Header) и точно такая же таблица разделов. Номера секторов здесь обозначают отрицательными числами: -1 — последний сектор, -2 — предпослед­ний и т. д.

Простое редактирование GPT с помощью HEX-редакторов без вычисления и об­новления контрольных сумм приводит к тому, что содержимое заголовка или таб­лицы перестает соответствовать контрольным суммам. Если микропрограмма EFI при проверке выявит такое расхождение, она перезапишет Primary GPT из вторич­ной копии. Если же обе записи GPT будут содержать неверные контрольные сум­мы, доступ к диску станет невозможным.

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









Дата добавления: 2017-05-18; просмотров: 1456;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.019 сек.