Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Юрий Владимирович самый уважаемы человек =)экза...doc
Скачиваний:
3
Добавлен:
12.09.2019
Размер:
1.41 Mб
Скачать

51. Структура жёсткого диска

Сектора

Любой жёсткий диск можно представить как огромный «чистый лист», на который можно записывать данные и откуда потом их можно считать. Чтобы ориентироваться на диске, всё его пространство разбивают на небольшие «клеточки» — сектора. Сектор — это минимальная единица хранения данных на диске, обычно его размер составляет 512 байт. Все сектора на диске нумеруются: каждый из n секторов получает номер от 0 до n–1. Благодаря этому любая информация, записанная на диск, получает точный адрес — номера соответствующих секторов. Так что диск ещё можно представить как очень длинную строчку (ленточку) из секторов. Можете посчитать, сколько секторов на вашем диске размером в N гигабайт.

Разделы

Представлять жёсткий диск как единый «лист» не всегда бывает удобно: иногда полезно «разрезать» его на несколько независимых листов, на каждом из которых можно писать и стирать что угодно, не опасаясь повредить написанное на других листах. Логичнее всего записывать раздельно данные большей и меньшей важности или просто относящиеся к разным вещам.

Конечно, над жёстким диском следует производить не физическое, а логическое разрезание, для этого вводится понятие раздел (partition). Вся последовательность (очень длинная ленточка) секторов разрезается на несколько частей, каждая часть становится отдельным разделом. Фактически, нам не придётся ничего разрезать (да и вряд ли бы это удалось), достаточно объявить, после каких секторов на диске находятся границы разделов.

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

Технически разбиение диска на разделы организовано следующим образом: заранее определённая часть диска отводится под таблицу разделов, в которой и написано, как разбит диск. Стандартная таблица разделов для диска IBM-совместимого компьютера — HDPT (HardDisk Partition Table) — располагается в конце самого первого сектора диска, после предзагрузчика (Master Boot Record, MBR) и состоит из четырёх записей вида «тип начало конец», по одной на каждый раздел. Начало и конец — это номера тех секторов диска, где начинается и заканчивается раздел. С помощью такой таблицы диск можно поделить на четыре или меньше разделов: если раздела нет, тип устанавливается в 0.

Однако четырёх разделов редко когда бывает достаточно. Куда же помещать дополнительные поля таблицы разбиения? Создатели IBM PC предложили универсальный способ: один из четырёх основных разделов объявляется расширенным (extended partition); он, как правило, является последним и занимает всё оставшееся пространство диска.

Расширенный раздел можно разбить на подразделы тем же способом, что и весь диск: в самом начале — на этот раз не диска, а самого раздела — заводится таблица разделов, с записями для четырёх разделов, которые снова можно использовать, причём один из подразделов может быть, опять-таки, расширенным, со своими подразделами и т. д.

Разделы, упомянутые в таблице разделов диска, принято называть основными (primary partition), а все подразделы расширенных разделов — дополнительными (secondary partition). Так что основных разделов может быть не более четырёх, а дополнительных — сколько угодно.

Чтобы не усложнять эту схему, при разметке диска соблюдают два правила: во-первых, расширенных разделов в таблице разбиения диска может быть не более одного, а во-вторых, таблица разбиения расширенного раздела может содержать либо одну запись — описание дополнительного раздела, либо две — описание дополнительного раздела и описание вложенного расширенного раздела.

Тип раздела

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

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

Подробнее о файловых системах см. раздел Типы файловых систем.

Логические тома (LVM)

Работая с разделами, нужно учитывать, что производимые над ними действия связаны непосредственно с разметкой жёсткого диска. С одной стороны, разбиение на разделы — это наиболее традиционный для PC способ логической организации дискового пространства. Однако если в процессе работы появится потребность изменить логику разбиения диска или размеры областей (т. е. когда возникает задача масштабирования), работа с разделами не очень эффективна.

Например, при необходимости создать новый раздел или увеличить размер существующего, можно столкнуться с рядом трудностей, связанных с ограничением количества дополнительных разделов или перераспределением данных. Избежать их очень просто: нужно лишь отказаться от «привязки» данных к определённой области жёсткого диска. В Linux эта возможность реализуется при помощи менеджера логических томов (LVM — Logical Volume Manager). LVM организует дополнительный уровень абстракции между разделами с одной стороны и хранящимися на них данными с другой, выстраивая собственную иерархическую структуру.

Дисковые разделы (в терминологии LVM — физические тома) объединяются в группу томов, внутри которой создаются логические тома. Таким образом, группа томов выстраивает соответствие между физическим и логическим пространством диска.

Технологически это организуется следующим образом. Физические тома разбиваются на отдельные блоки — физические экстенты, которые объединяются в группу томов. Логические тома разбиваются на блоки такого же размера — логические экстенты. В разных группах томов размер экстента может быть различным.

Отношения между логическими и физическими томами представлены в виде отображения логических экстентов в физические. Возможны два способа отображения — линейное и расслоённое (striped). В первом случае логические экстенты располагаются последовательно соответственно физическим, во втором поочерёдно распределяются между несколькими физическими томами.

В свою очередь, между логическим томом и группой томов возникают отношения, аналогичные таковым между разделом и жёстким диском, с отличием в уровне абстракции и, соответственно, колоссальной разнице в гибкости манипуляции. Поскольку раздел — конкретная область физического диска между двумя определёнными секторами, а том — логическая категория, принимаемая для удобства использования дискового пространства, производить манипуляции со вторым значительно проще. Можно свободно перераспределять логические тома внутри группы, изменять их размер, увеличивать размер группы томов за счёт внесения в неё нового раздела (только при линейном отображении) и многое другое.

Дисковые массивы (RAID)

Иногда обычной производительности жёсткого диска может не хватать. В случаях, когда во главу угла ставится скорость работы с данными (скорость записи и чтения) или надёжность их хранения, используется технология RAID (Redundant array of independent disks — избыточный массив независимых дисков). Технология RAID позволяет объединять несколько физических дисковых устройств (жёстких дисков или разделов на них) в дисковый массив. Диски, входящие в массив, управляются централизованно и представлены в системе как одно логическое устройство, подходящее для организации на нём единой файловой системы.

Существует два способа реализации RAID: аппаратный и программный. Аппаратный дисковый массив состоит из нескольких жёстких дисков, управляемых при помощи специальной платы контроллера RAID-массива. Программный RAID в Linux-системах (Linux Software RAID) реализуется при помощи специального драйвера (Multiple Device driver — драйвер MD-устройства). В программный массив организуются дисковые разделы, которые могут занимать как весь диск, так и его часть, а управление осуществляется посредством специальных утилит (mdadm).

Программные RAID-массивы, как правило, менее надежды, чем аппаратные, но обеспечивают более высокую скорость работы с данными (производительность процессора и системной шины обычно намного выше, чем у любого дискового контроллера). Также их преимущество по сравнению с аппаратными массивами: независимость от форматов данных на диске и как следствие — большая совместимость с различными типами и размерами дисков и их разделов. Использование программного RAID также позволяет сэкономить на покупке дополнительного оборудования. Однако обратной стороной медали станет увеличение нагрузки на процессор и системную шину, это следует иметь в виду, принимая решение об использовании программного RAID.

Уровни RAID

Существует несколько разновидностей RAID-массивов, так называемых уровней. В Linux поддерживаются следующие уровни программных RAID-массивов.

RAID0

Для создания массива этого уровня понадобится как минимум два диска одинакового размера. Запись осуществляется по принципу чередования: данные делятся на чанки (chunk) — порции данных одинакового размера, и поочерёдно распределяются по всем дискам, входящим в массив. Поскольку запись ведётся на все диски, при отказе одного из них будут утрачены все хранившиеся на массиве данные. Это цена выбора в пользу увеличения скорости работы с данными: запись и чтение на разных дисках происходит параллельно и, соответственно, быстрее.

RAID1

Массивы этого уровня построены по принципу зеркалирования, при котором все данные, записанные на одном диске, дублируются на другом. Для создания такого массива потребуется два или более дисков одинакового размера. Избыточность обеспечивает отказоустойчивость массива: в случае выхода из строя одного из дисков, данные на другом остаются неповреждёнными. Расплата за надёжность — фактическое сокращение дискового пространства вдвое. Скорость чтения и записи остаются на уровне обычного жёсткого диска.

RAID4

В массивах RAID4 реализован принцип чётности, объединяющий технологии чередования и зеркалирования. Один из трёх (или из большего числа) дисков задействуется для хранения информации о чётности в виде суперблоков с контрольными суммами блоков данных, последовательно распределённых на остальных дисках (как в RAID0). Достоинства этого уровня — отказоустойчивость уровня RAID1 при меньшей избыточности (из скольких бы дисков не состоял массив, под контрольную информацию задействуется лишь один из них). При отказе одного из дисков утраченные данные можно будет восстановить из контрольных суперблоков, причём, если в составе массива есть резервный диск, реконструкция данных начнётся автоматически. Очевидным недостатком, однако, является снижение скорости записи, поскольку информацию о чётности приходится высчитывать при каждой новой записи на диск.

RAID5

Этот уровень аналогичен RAID4, за тем исключением, что суперблоки с информацией о чётности располагаются не на отдельном диске, а равномерно распределяются по всем дискам массива вместе с блоками данных. Как результат — повышение скорости работы с данными и высокая отказоустойчивость.

Массивы всех уровней помимо блоков данных и суперблоков с контрольными суммами могут также содержать специальный суперблок (persistent superblock), который располагается в начале всех дисков массива и содержит информацию о конфигурации MD-устройства. Наличие отдельного суперблока позволяет ядру операционной системы получать информацию о конфигурации устройства RAID прямо с дисков, а не из конфигурационного файла, что может быть полезным, если файл по каким-то причинам перестанет быть доступным. Кроме того, наличие отдельного суперблока — необходимое условие автоопределения RAID-устройств при загрузке системы.

52. Главная загрузочная запись (англ. master boot record, MBR) — код и данные, необходимые для последующей загрузки операционной системы и расположенные в первых физических секторах (чаще всего в самом первом) на жёстком диске или другом устройстве хранения информации.

MBR содержит небольшой фрагмент исполняемого кода, таблицу разделов (partition table) и специальную сигнатуру.

Функция MBR — «переход» в тот раздел жёсткого диска, с которого следует исполнять «дальнейший код» (обычно — загружать ОС). На «стадии MBR» происходит выбор раздела диска, загрузка кода ОС происходит на более поздних этапах алгоритма.

В процессе запуска компьютера, после окончания начального теста (Power-on self-test — POST), Базовая система ввода-вывода (BIOS) загружает «код MBR» в оперативную память (в IBM PC обычно с адреса 0000:7c00) и передаёт управление находящемуся в MBR загрузочному коду.

Структура главной загрузочной записи (MBR)

Адрес

Содержимое

0x0000

Код загрузчика

0x01B8

4-байтная сигнатура диска (только в Windows 2000, XP [1], но не в Windows 95/98 [2])

0x01BE

Четыре 16-байтных записи таблицы основных разделов (только схема таблицы основных разделов MBR)

0x01FE

2-байтная сигнатура MBR (55AA16)

Алгоритм работы кода MBR от Microsoft

BIOS (до MBR)

BIOS проводит начальную инициализацию оборудования («железа»)

BIOS определяет, с какого устройства производить дальнейшую загрузку: дискета, флеш-накопитель, жёсткий диск и т. д. (выбор устройства зависит от версии и от настроек BIOS)

[в данном описании рассматривается только случай загрузки с жесткого диска]

BIOS считывает один сектор (512 байт), который находится по адресу: «цилиндр 0, головка 0, сектор 1», и помещает его в область памяти по адресу 0000:7c00

BIOS проверяет, что этот сектор оканчивается сигнатурой 55ААh

[если это не так, то управление возвращается обратно в BIOS]

BIOS передаёт управление по адресу 0000:7c00 (то есть сектору MBR)

53. Boot

Используется загрузчиком NTLDR при загрузке Windows NT.

Имеет формат, типичный для .ini-файлов.

Секция [boot loader]

timeout= — время ожидания, пока пользователь выберет вариант загрузки (задаётся в секундах).

default= — ОС по умолчанию. То есть та ОС, которая будет выбрана по истечении времени «timeout», если пользователь не сделает никакого выбора.

redirect= — имя порта.

redirectbaudrate= — скорость порта.

Секция [operating systems]

Информация об установленных ОС и откуда и как их загружать. (multi(*) или scsi(*) или signature(*)).

multi(0) — порядковый номер адаптера, с которого осуществляется загрузка.

scsi(x) — указывается при использовании контроллера SCSI с отключённым BIOS, где x — номер адаптера, с которого будет производиться загрузка.

signature(x) — третий вид синтаксиса. Он указывает Windows найти диск с сигнатурой, соответствующей первому значению в скобках, независимо от номера контроллера.

disk(0) — обычно равен 0 (в случае использования multi(*)).

rdisk(n) — порядковый номер жёсткого диска, с которого осуществляется загрузка. От 0 до 3.

partition(n) — порядковый номер раздела жёсткого диска, с которого загружается ОС. Нумерация начинается с 1.

Другие секции

Не исключено, что возможны ещё две секции: [multiboot] и [flexboot]. Во всяком случае, они заявлены в файле C:\NTLDR. Но про них мало что известно.

54. LBA (англ. Logical block addressing) — механизм адресации и доступа к блоку данных на жёстком диске, при котором системному контроллеру нет необходимости учитывать геометрию самого жесткого диска (количество цилиндров, сторон, секторов на цилиндре). Контроллеры современных IDE-дисков в качестве основного режима трансляции адреса используют LBA.

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

Оригинальный текст  (англ.)  [показать]

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

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

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

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

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

[2]

LBA: Адрес блока по LBA

Cylinder: Номер цилиндра

noofheads: Количество головок

heads: Номер выбранной головки

sectors/track: Количество секторов в одном треке

Sector: Номер сектора

[править]Преобразования между CHS и LBA

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

где   — число головок,   — число цилиндров,   — число секторов на дорожке,   — операция взятия остатка от деления.

55. CHS

CHS (от англ. Cylinder, Head, Sector) — система адресации сектора (как минимальной единицы в операции чтения(записи)) дисковых накопителей (жёстких магнитных дисков,накопителей на гибких магнитных дисках и т. п.) основанная на использовании физических адресов геометрии диска.

Сектор на жёстком диске адресуется кортежем из трёх чисел: цилиндр-головка-сектор, именно так, как этот блок физически расположен на диске.

Под цилиндром (Cylinder) понимается совокупность дорожек одинакового радиуса на всех магнитных дисках (блинах) одного жёсткого диска. Контроллер жёсткого диска интерпретирует значение в радиус, на который передвигается магнитная головка чтения (Head). С каждой магнитной поверхности магнитного диска чтение производит только одна головка, следовательно, указывая головку, мы также указываем ту поверхность, с которой следует считывать информацию. Сектор диска, как понятно из геометричекого определения, интерпретируется как диапазон градуса поворота диска

Очевидно, что такая схема плохо подходит к недисковым устройствам хранения (ленты, сетевые хранилища), потому и не используется для них. Схема CHS и её расширенная версия ECHS использовались на ранних приводах ATA использующих интерфейс ESDI.

В жёстких дисках объёмом более 524 Мб со встроенными контроллерами эти координаты уже не соответствуют физическому положению сектора на диске и являются «логическими координатами», что обусловило введение новых режимов адресования, сперва Large и в современных — LBA.

Преобразование в адресацию LBA

: Адрес блока по LBA (Logical block addressing)

: Номер цилиндра

: Количество головок

: Номер выбранной головки

: Количество секторов в одном треке

: Номер сектора

56. FAT (англ. File Allocation Table — «таблица размещения файлов») — классическая архитектура файловой системы, которая из-за своей простоты всё ещё широко используется для флеш-дисков и карт памяти. В недавнем прошлом использовалась в дискетах, на жёстких дисках и других носителях информации.

Разработана Биллом Гейтсом и Марком МакДональдом (англ.) в 1976—1977 годах.[1][2] Использовалась в качестве основной файловой системы в операционных системах семейств DOS и Windows (до версии Windows 2000).

Структура FAT следует стандарту ECMA-107 и подробно определяется официальной спецификацией от Microsoft, известной под названием FATGEN[5].

Структура системы FAT

В файловой системе FAT смежные секторы диска объединяются в единицы, называемые кластерами. Количество секторов в кластере равно степени двойки (см. далее). Для хранения данных файла отводится целое число кластеров (минимум один), так что, например, если размер файла составляет 40 байт, а размер кластера 4 кбайт, реально занят информацией файла будет лишь 1% отведенного для него места. Для избежания подобных ситуаций целесообразно уменьшать размер кластеров, а для сокращения объема адресной информации и повышения скорости файловых операций – наоборот. На практике выбирают некоторый компромисс. Так как емкость диска вполне может и не выражаться целым числом кластеров, обычно в конце тома присутствуют т.н. surplus sectors – «остаток» размером менее кластера, который не может отводиться ОС для хранения информации.

Пространство тома FAT32 логически разделено на три смежные области:

Зарезервированная область. Содержит служебные структуры, которые принадлежат загрузочной записи раздела (Partition Boot Record – PBR, для отличия от Master Boot Record – главной загрузочной записи диска; также PBR часто некорректно называется загрузочным сектором) и используются при инициализации тома;

Область таблицы FAT, содержащая массив индексных указателей ("ячеек"), соответствующих кластерам области данных. Обычно на диске представлено две копии таблицы FAT в целях надежности;

Область данных, где записано собственно содержимое файлов – т.е. текст текстовых файлов, кодированное изображение для файлов рисунков, оцифрованный звук для аудиофайлов и т.д. – а также т.н. метаданные – информация относительно имен файлов и папок, их атрибутов, времени создания и изменения, размеров и размещения на диске.

В FAT12 и FAT16 также специально выделяется область корневого каталога. Она имеет фиксированное положение (непосредственно после последнего элемента таблицы FAT) и фиксированный размер в секторах.

Если кластер принадлежит файлу, то соответствующая ему ячейка содержит номер следующего кластера этого же файла. Если ячейка соответствует последнему кластеру файла, то она содержит специальное значение (FFFF16 для FAT16). Таким образом выстраивается цепочка кластеров файла. Неиспользуемым кластерам в таблице соответствуют нули. «Плохим» кластерам (которые исключаются из обработки, например, по причине нечитаемости соответствующей области устройства) также соответствует специальный код.

При удалении файла первый знак имени заменяется специальным кодом E516 и цепочка кластеров файла в таблице размещения обнуляется. Поскольку информация о размере файла (которая располагается в каталоге рядом с именем файла) при этом остаётся нетронутой, в случае, если кластеры файла располагались на диске последовательно и они не были перезаписаны новой информацией, возможно восстановление удалённого файла.

Предназначение FAT не изменилось. Она по-прежнему используется как таблица, связывающая отдельные кластеры файла. Элементы каталожной записи, указывающие на первый кластер файла, теперь состоят из четырех байтов, а содержимое этих байтов является номером (адресом) следующего кластера и элемента таблицы FAT, который содержит (указывает) номер следующего кластера файла, а также является номером элемента таблицы FAT и т. д. до последнего кластера файла. Элементы таблицы FAT теперь в 2 раза длиннее (по 4 байта), так как на FАТ32-диске может быть гораздо больше кластеров, чем на FАТ16-диске. В 16-разрядной FAT максимальное число кластеров на диске равно 65 525 (2 - за вычетом 10 зарезервированных), а в 32-разрядной FAT старшие 4 бита каждого 32-битного значения зарезервированы и не участвуют в формировании номера кластера, поэтому максимальное число кластеров в 32-разрядной FAT равно 268 435 445. (228 за вычетом 10 зарезервированных).