Структура жесткого диска

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

Начальный сектор диска имеет главную корневую запись, которая грузится в память и выполняется. Последняя часть этого сектора имеет таблицу разделов — 4 элементную таблицу с 16-байтовыми элементами. Такой таблицей руководит программа FDISK. При загрузке ROM-BIOS загружает этот сектор с записью про таблицу. Это делается для того, что бы определить активный раздел. Затем считывается корректный корневой сектор в память и выполняется.
Таблица 1 — Структура главной корневой записи и таблицы разделов

Смещение Длина Содержимое
000h 446 Корневая запись — MSB
1BEh 16 Описатель раздела 1 (табл. 2)
1CEh 16 Описатель раздела 2
1DEh 16 Описатель раздела 3
1EEh 16 Описатель раздела 4
1FEh 2 Подпись таблицы разделов (значение = АА55h)

Таблица 2 — Структура описателя раздела

Смещение Длина Содержимое
00h 1 Признак активности раздела (0 — не активен, 80h — активен)
01h 1 Номер поверхности диска, где начинается раздела
02h 2 Номер цилиндра и номер сектора, с которых начинается раздел
04h 1 Код раздела (табл. 3)
05h 1 Номер поверхности диска, на которой заканчивается раздел
06h 2 Номер цилиндра и номер сектора, на которых заканчивается раздел
08h 4 Абсолютный (логический) номер начального сектора раздела
0Ch 4 Размер раздела (число секторов)

Код раздела предназначен для определения и положения на диске расширенного и основного разделов. После обнаружения раздела его размер и координаты можно прочитать из определенных полей. Если в поле кода раздела 0, то описатель можно считать пустым, и будет определенно, что на диске нет никакого раздела.
Таблица 3 — Коды разделов ОС Microsoft

Код Вид раздела Размер Тип FAT ОС
01h Основной 0-15 Мбайт FAT12 MS-DOS 2.0
04h Основной 16-32 Мбайт FAT16 MS-DOS 3.0
05h Расширенный 0-2 Гбайт MS-DOS 3.3
06h Основной 32 Мбайт — 2 Гбайт FAT16 MS-DOS 4.0
0Bh Основной 512 Мбайт — 2 Гбайт FAT32 OSR2
0Ch Расширенный 512 Мбайт — 2 Гбайт FAT32 OSR2
0Eh Основной 32 Мбайт — 2 Гбайт FAT16 Windows 95
0Fh Расширенный 0 — 2 Гбайт Windows 95

За ОС других фирм зарезервированы следующие коды:

  • 02h — раздел СР/М
  • 03h — раздел Xenis
  • 07h — раздел OS/2 (HPFS)

Номера цилиндра и сектора занимают 10 и 6 бит:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
c c c c c c c c c c s s s s s s

Они запакованы так, что, когда загружается СХ 16-битовым значением, оно готово для вызова прерывания INT 13h для чтения определенной порции диска. После чтения главной записи загрузки в область памяти sect_buf функция:

CMP byte ptr sect_buf [01BEh], 80h

проверит, активен ли первый раздел. А следующий алгоритм загрузит СХ для вызова INT 13h для чтения корневого сектора раздела №1.

MOV CX, sect_buf[01C0h]

Параметры относительного сектора по смещению 08h в каждом разделе равен головке, сектору и цилиндру начального адреса раздела. Относительный номер сектора прирастает сначала по каждому сектору на головке, затем по каждой головке и наконец по каждому цилиндру. Формула:

отн_сек = (#Цил * сек_на_цил * головок) + (#Гол * сек_на_цил) + (#Сек -1)

Разделы стартуют с четного номера цилиндра, за исключением первого раздела.

Структура корневого сектора

Формат корневого сектора дискеты или раздела жесткого диска показан на рис.1.

Формат корневого сектора

Таблица параметров жесткого диска

Такая 16-байтовая структура располагается по адресу вектора прерывания INT 41h (4-байтовый адрес в 0:0104). Характеристики для второго жесткого диска (если он существует) располагаются по адрес вектора INT 46h.
Таблица 5 — Формат таблицы жесткого диска

Смещение Длина Содержимое
00h 2 Число цилиндров
02h 1 Число головок
03h 2 Не используется (всегда 0)
05h 2 Номер начального цилиндра предкомпенсации
07h 1 Максимальная длина блока коррекции ошибок ECC
08h 1 айт контроля:
биты 0-2 — не используются (всегда 0);
бит 3 — установлен, если число головок больше 8;
бит 4 — не используется (всегда 0);
бит 5 — установлен, если изготовитель разместил карту дефектов на цилиндре с номером «максимальный рабочий цилиндр + 1»;
бит 6 — запрет повторного контроля ECC;
бит 7 — запрет контроля ECC
09h 1 Не используется (всегда 0)
0Ah 1 Не используется (всегда 0)
0Bh 1 Не используется (всегда 0)
0Ch 2 Номер цилиндра зоны парковки
0Eh 1 Число секторов на дорожке
0Fh 1 Резерв

Таблица распределения файлов (FAT)

Размер файла может меняться со временем. Если предположить хранения файла только в смежных секторах, то при увеличении размера файла ОС должна полностью переписать его в другое место диска. Для упрощения задачи, в современных ОС реализованы таблицы распределения файлов (File Allocation Table — FAT), которые разрешают хранить файл в виде нескольких раздельных участков.

В FAT область данных логического диска поделена на участки одинакового размера — кластеры. Число секторов в кластере кратное 2 N и может принимать значения от 1 до 64. В каталоге файлов для каждого файла имеется номер начального элемента в таблице FAT, равен первому кластеру в цепочке файла. Пример показан на рис.2. Из рисунка видно:

  • MYFILE.TXT занимает 10 кластеров. Первый кластер это — 08, а последний 1Вh. Цепочка кластеров — 08h, 09h, 0Ah, 0Bh, 15h, 16h, 17h, 19h, 1Ah, 1Bh. Каждый компонент цепочки указывает на следующий компонент цепочки, это показано в табл.6.
  • Кластер 18h помечен как дефектный, и не входит в цепочку
  • Кластеры 06h, 07h, 0Ch-14h и 1Ch-1Fh пусты и доступны для других цепочек

Таблица 6 — Значение элементов FAT

Значение FAT12 FAT16 FAT32
Свободный кластер 0 0 0
Зарезервированный кластер FF0h-FF6h FFF0h-FFF6h FFFFFF0h-FFFFFF6h
Дефектный кластер FF7h FFF7h FFFFFF7h
Конец цепочки распределения FF8h-FFFh FFF8h-FFFFh FFFFFF8h-FFFFFFFh
Номер кластера следующего элемента в цепочке 002h-FEFh 0002h-FFEFh 0000002h-FFFFFEFh

FAT начинается с логичного сектора 1 в разделе DOS. Впринципи нужно прочитать корневой сектор DX=0, и взять смещение 0Eh. Там уже узнаем количество корневых и резервных секторов которые стоят перед FAT. Чтобы прочитать любой компонент FAT по цепочке, нужно прочитать всю FAT и получить из оглавления начальный номер кластера, и в случае FAT12:

  • умножить номер кластера на 3
  • разделить результат на 2
  • прочитать из FAT 16-разрядное слово, используя в качестве адреса результат предыдущего круга
  • Если номер элемента четный, но нужно выполнить AND над словом и маской 0FFFh. Если же нечетный, то сдвинуть значение вправо на 4 бита.


Исправляем ошибку «Структура диска повреждена. Чтение невозможно».

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

Ошибка «Структура диска повреждена. Чтение невозможно». Как исправить?

Содержание:

  1. Как исправить ошибку «Структура диска повреждена…»?
  2. Переподключение и проверка исправности носителей.
  3. Как обойти ошибку «Структура диска повреждена…»?
  4. Переустановка драйверов устройства
  5. Проверка диска встроенными средствами Windows.
  6. Что делать, если ошибка возникает на системном диске?
  7. Как восстановить утерянные данные и файлы?

Существует множество возможных причин, которые вызывают ошибку «Структура диска повреждена. Чтение невозможно». Это может быть как банальное повреждение кабелей питания, так и более серьезные проблемы, вызванные разрушением поверхности жесткого диска или исчерпанием носителем собственных ресурсов. Такая ошибка может возникать в процессе подключения жесткого диска, флешки и SSD или в любой момент при работе с жестким диском.

Важно! Если такая ошибка начала возникать с регулярной постоянностью, следует немедленно сделать резервную копию важных файлов и перенести их на другой носитель. В случае физической поломки HDD или любого другого накопителя существует большая вероятность безвозвратной утери всей информации с диска.

Как исправить ошибку «Структура диска повреждена…»?

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

Переподключение и проверка исправности носителей

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

Если ошибка возникла с флешкой или портативным жестким диском, необходимо:

  • Проверить целостность соединительных кабелей и разъемов.
  • Вставить устройство в различные USB-порты на компьютере.
  • Проверить работоспособность устройства на другом ПК.

Если проблема была обнаружена на жестком диске компьютера, следует:

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

Выполнение вышеуказанных действий поможет исключить множество возможных факторов, что позволит быстро найти и по возможности решить ошибку.

Как обойти ошибку «Структура диска повреждена…»?

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

Чтобы сделать это, следует:

Шаг 1. Нажать ПКМ по кнопке «Пуск» и выбрать пункт «Управление дисками».

Шаг 2. В открывшемся окне нажимаем ПКМ по проблемному носителю и выбираем пункт «Изменить букву диска или путь к диску».

Шаг 3. В открывшемся окне нужно выбрать пункт «Удалить».

Данные действия позволят обойти ошибку и восстановить важную информацию перед дальнейшими манипуляциями.

Переустановка драйверов устройства

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

Важно! Не выполняйте переустановку дайверов жесткого диска, на котором установлена текущая операционная система.

Для переустановки драйверов следует проследовать шагам:

Шаг 1. Кликаем правой кнопкой мыши по «Пуск» и выбираем пункт «Диспетчер устройств».

Шаг 2. В открывшемся окне выбираем вкладку «Дисковые устройства» и находим там проблемный носитель. После этого следует нажать по нему ПКМ и выбрать пункт «Удалить».

Шаг 3. После завершения удаления переходим в пункт «Действие» и выбираем «Обновить конфигурацию оборудования».

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

Проверка диска встроенными средствами Windows

Если после переустановки драйверов ошибка «Структура диска повреждена…» не исчезла, следует проверить носитель при помощи встроенной утилиты CHKDSK. Данная программа имеет широкий функционал и позволяет исправлять логические ошибки, а также выявлять битые сектора устройства.

Шаг 1. Заходим в папку «Мой компьютер» и нажимаем ПКМ по проблемному устройству. В открывшемся списке следует выбрать пункт «Свойства».

Шаг 2. Переходим на вкладку «Сервис» и нажимаем по кнопке «Проверить».

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

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

Что делать, если ошибка возникает на системном диске?

Если ошибка чтения диска случается на носителе с системой, компьютер не сможет запускать ОС, и восстановлением устройства придется заниматься при помощи командной строки в среде восстановления Windows.

Средства восстановления диска станут доступны после трех неудачных загрузок системы или при использовании установочного диска.

Чтобы восстановить системный диск в среде восстановления, необходимо:

Шаг 1. Выбрать пункт «Поиск и устранение неисправностей».

Шаг 2. На следующем экране выбираем «Дополнительные параметры».

Шаг 3. Открываем пункт «Командная строка».

Теперь в командной строке следует применить утилиту CHCKDS к проблемному устройству.

Для этого следует ввести команду CHKDSK/D (в нашем случае проблемный накопитель имеет имя «D»).

Как восстановить утерянные данные и файлы?

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

Если Вы заметили пропажу фотографий, видеозаписей, медиафайлов, документов или другой информации, следует воспользоваться удобной утилитой для восстановления данных RS Partition Recovery. Данная программа сможет быстро вернуть удаленные вирусами, случайно удаленные и отформатированные или просто поврежденные данные. RS Partition Recovery обладает широким функционалом и позволяет проводить глубокую проверку диска для нахождения утерянной информации, которую удалили до нескольких месяцев назад. С возможностями, деталями и другими особенностями RS Partition Recovery можно ознакомиться на официальной странице программы.

Часто задаваемые вопросы

Это сильно зависит от емкости вашего жесткого диска и производительности вашего компьютера. В основном, большинство операций восстановления жесткого диска можно выполнить примерно за 3-12 часов для жесткого диска объемом 1 ТБ в обычных условиях.

Если файл не открывается, это означает, что файл был поврежден или испорчен до восстановления.

Используйте функцию «Предварительного просмотра» для оценки качества восстанавливаемого файла.

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

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

Сохранить их можно после регистрации программы – повторное сканирование для этого не потребуется.


Ошибка «Структура диска повреждена. Чтение невозможно», что делать?

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

Ошибка «Структура диска повреждена. Чтение невозможно», что делать?

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

Зачастую такие ошибки появляются на таких съемных медиа носителях как карты памяти и USB флешки, однако вы можете столкнуться с этой ошибкой на магнитном жестком или SSD диске. Давайте рассмотрим, что делать для преодоления проблемы и восстановления данных с недоступного устройства.

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

Отключите и подключите устройство повторно

Как исправить флешку: не видит компьютер, неправильный размер, система RAW, вставьте диск 🛠️👨‍💻🤔

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

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

Важно. Операции подключения или отключения диска необходимо выполнять при полностью отключенном питании компьютера. В случае с ноутбуком необходимо также извлечь батарею.

Переустановите драйвер устройства

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

Для обновления драйвера удалите устройство из «Диспетчер устройств», для этого кликните правой кнопкой мышки по кнопке Пуск и запустите приложение.

Пуск / Управление дисками

Разверните раздел дисков, затем щелкните правой кнопкой мыши на проблемный диск и нажмите «Удалить».

«Диспетчер устройств»

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

«Диспетчер устройств»: Обновить конфигурацию оборудования

Система обнаружит новое устройство предложит установить драйвер. Используйте драйвер производителя диска, если в работе драйвера, установленного Windows возникли ошибки.

Запустите CHKDSK (проверку диска)

Как проверить жесткий диск на ошибки и исправить ошибки в Windows 10, 8, 7 🔎🛠️🗄️

ОС Windows предлагает инструмент для проверки диска и исправления логических ошибок и битых секторов на нем. Этот инструмент называется Проверка диска или CHKDSK. Для запуска кликните правой кнопкой мышки по проблемному диску и выберите Свойства. Затем перейдите на вкладку Сервис и нажмите кнопку Проверить.

Cвойства Локального диска С

Запускать проверку нужно от пользователя с правами администратора. В зависимости от размера и типа диска проверка может занять несколько часов.

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

Инструкция по использованию Victoria для проверки и лечения жесткого диска на русском 👨‍💻🛠️💻

Проверка диска если Windows не загружается

Если ошибки в работе системного диска препятствуют загрузке Windows 10 вы можете запустить проверку использую среду восстановления. После 3 неудачных попыток загрузить систему компьютер запустит среду восстановления автоматически. Также вы можете воспользоваться диском для запуска инструментов восстановления. Смотрите все способы входа в среду восстановления в нашем видео:

Автоматическое восстановление Windows из консоли, вход в среду восстановления 🛠️👨‍💻⚕️

После загрузки запустите командную строку, которая находится в параметрах восстановления и введите команду:

CHKDSK / r [ЗДЕСЬ БУКВА ПРОБЛЕМНОГО ДИСКА]:

Дождитесь выполнения операции и перезагрузите компьютер.

Проверка с использованием Менеджера дисков

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

Для этого кликните правой кнопкой на Пуск и выберите Управление дисками. То же самое вы можете сделать запустив команду DiskMgmt.msc в окне выполнить.

Пуск: Управление дисками

Выберите проблемный раздел правой кнопкой и выберите «Изменить буквы и пути к диску…», затем нажмите «Удалить» и подтвердите. Это скроет диск от программы Проводник и позволит вам нормально обращаться к вашей системе. Остерегайтесь удалять букву с системного раздела, это не сработает.

Восстановление данных с поврежденного диска

Если не один из перечисленных способов не помог восстановить работоспособность диска, вы можете вернуть данные с помощью Hetman Partition Recovery. Запустите программу и укажите в качестве объекта сканирования физическое устройство. Утилита проанализирует диск выдаст список фалов доступных для восстановления.

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

Hetman Partition Recovery: Настройка анализа физического диска

Для создания образа выделите проблемный диск в программе и нажмите кнопку Сохранить диск расположенную на главной панели. Укажите путь для хранения файла образа и дождитесь завершения операции.

Hetman Partition Recovery: Открыть Локальный диск С

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


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

Сектора

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

Разделы

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

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

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

Технически разбиение диска на разделы организовано следующим образом: заранее определённая часть диска отводится под таблицу разделов, в которой и написано, как разбит диск. Стандартная таблица разделов для диска IBM-совместимого компьютера — HDPT (Hard Disk 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-устройств при загрузке системы.

Более подробная информация о RAID

Более подробную информацию можно найти в документации и статьях, посвящённых RAID:


Изучаем структуры MBR и GPT

Для работы с жестким диском его для начала необходимо как-то разметить, чтобы операционная система могла понять в какие области диска можно записывать информацию. Поскольку жесткие диски имеют большой объем, их пространство обычно разбивают на несколько частей — разделов диска. Каждому такому разделу может быть присвоена своя буква логического диска (для систем семейства 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 нет исполняемого кода. Некоторые загрузчики могут его туда записывать, но обычно это место заполнено нулями
  • Сигнатуры диска и два неиспользуемых байта должны быть заполнены нулями
  • В таблице разделов могут быть заполнены только две первых записи. Остальные две записи должны быть заполнены нулями

В конце структуры EBR, также как и в MBR, должно находиться «магическое» значение AA55h.

В отличие от 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, и разработана она была с большим запасом на будущее.

В структуре GPT используется теперь только LBA-адресация, никаких CHS больше нет и никаких проблем с их конвертацией тоже. Причем под LBA-адреса отведено по 64 бита, что позволяет работать с ними без всяких ухищрений, как с 64-битными целыми числами, а также (если до этого дойдет) даст в будущем возможность без проблем расширить 48-битную LBA-адресацию до 64-битной.

Кроме того, в отличие от 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 сектора диска.

Adblock
detector