Как сохранить информацию о структуре mbr в линукс
Перейти к содержимому

Как сохранить информацию о структуре mbr в линукс

  • автор:

Linux — MBR vs GPT

Если это не загрузочный диск, то для работы с ним годятся оба типа, но вот если загрузочный диск на GPT, то тут нужен UEFI BIOS для нормальной загрузки ОС . Если с MBR, то режим загрузки в BIOS должен быть выставлен как Legacy . Но всё идёт к тому что скоро режим Legacy не будет использоваться вовсе (на новых устройствах).

MBR

mbr

Довольно уже старая таблица разделов со многими ограничениями и недостатками которая впервые появилась ещё в 1982 году. Таблица разделов указывает на то как диски будут разбиваться в системе с BIOS .

MBR, загрузочный сектор на жестком диске, который хранит информацию, обеспечивающую правильную загрузку ОС , занимает первые 512 байт жесткого диска и также хранит таблицу разделов (partition table). Также указывает на активный раздел (active partition), благодаря чему грузится именно ОС на активном разделе жесткого диска.

4 основных раздела на жестком диске

MBR поддерживает создание только 4 основных разделов на жестком диске. Основной значит имеет возможность загрузки ОС с него. Если вы хотите больше 4 дисков, то вы должны создать 3 основных раздела (primary partitions), а остальные уже будут логическими (logical partitions). В Linux максимальное количество разделов достигает значения 15.

Информация об основных и расширенных разделах содержится в 64-байтах, расположенных в MBR. Каждая запись в таблице разделов (partition table) имеет длину 16 байтов, поэтому доступно не более четырех записей, т.е. разделов диска.

При этом все логические разделы должны быть в расширенном разделе (extended partition). Т.е. вы должны создать 4 раздел расширенным и на всё оставшееся место на диске. И уже внутри этого раздела создавать логические разделы (logical partitions). Вы конечно можете создать расширенным разделом и третий раздел, но логический раздел будет всё равно начинаться с цифры 5.

mbr

Максимальный размер разделов в 2ТБ на диске

Также еще одно плохое ограничение — это максимальный размер разделов в 2ТБ на диске. Т.е. не один раздел, а все вместе общим объёмом не больше 2ТБ.

На диске MBR (основная загрузочная запись) места, где хранятся размеры разделов, имеют длину всего 4 байта. Поскольку это шестнадцатеричное число, наибольшее значение, которое мы можем ввести, — это все буквы F. Таким образом, максимальное значение будет 4 294 967 295 в десятичном виде (FF FF FF FFh = 4294967295d). Этот максимальный размер раздела не в байтах, а в количестве секторов. В свою очередь каждый сектор имеет размер 512 байт мы получаем следующее 4294967295 секторов * 512 байт / сектор = 2199023255040 байт или 2 ТБ.

Если вы всё еще не поняли откуда взялась цифра 4 294 967 295, то это моя последняя попытка. В шестнадцатеричном представлении числа записываются как цифры и буквы. При этом максимальное число 16, как не сложно догадаться. Но так как отсчёт идёт с 0 то максимальное число 15. При этом числа с 0 до 9 записываются также в цифровом представлении, а вот с 10 до 15 уже начиная с буквы A до F. и максимальное значение может быть FFFFFFFF.

Теперь переводим FFFFFFFF шестнадцатеричное в десятичное. Для этого каждое F которое обозначает число 15 умножается на 16 в степени с 0 до 7. И после всё это суммируется.

F1 — 15 × 16^0 = 15
F2 — 15 × 16^1 = 240
F3 — 15 × 16^2 = 3 840
F4 — 15 × 16^3 = 61 440
F5 — 15 × 16^4 = 983 040
F6 — 15 × 16^5 = 15 728 640
F7 — 15 × 16^6 = 251 658 240
F8 — 15 × 16^7 = 4 026 531 840
15 + 240 + 3 840 + 61 440 + 983 040 + 15 728 640 + 251 658 240 + 4 026 531 840 = 4 294 967 295

И еще один минус заключается в том, что MBR хранится без копии и если он вдруг испортиться, то вам придётся восстанавливать его. И вы уже не получите информацию о начале и конце ваших разделов и не загрузите ОС. Для Linux вы можете восстановить MBR с помощью test disk (но это не точно).

Master Boot Code

Master Boot Code выполняет следующие действия:

  1. Сканирует таблицу разделов на наличие активного раздела
  2. Находит начальный сектор активного раздела
  3. Загружает копию загрузочного сектора из активного раздела в память
  4. Передает управление исполняемому коду в загрузочном секторе

Если просто и в двух словах благодаря Master Boot Code у вас грузится ОС после BIOS .

GPT

mbr

Intel начал разрабатывать новый формат BIOS — UEFI , и благодаря этому появился новый формат таблицы разделов GPT.

Наличие бэкапа

Самое первое отличие — это то что таблица разделов дублируется в отличии от MBR, что даёт вам возможность продолжать работать если вы каким-то образом повредили запись, т.е. потеряли одну копию.

128 разделов на диск

Второй важный плюс — это то что тут вы уже можете создать столько разделов на диске сколько вам захочется в отличии от 4 в MBR. Но есть, но, некоторые ОС сами ограничивают количество разделов на диске, которые вы можете создавать. В Linux максимальное число 128, по крайней мере у RedHat.

Максимальный размер диска

Ну и еще тут нет этого дурацкого ограничения в 2ТБ, вы можете создать раздел размером около 9 млрд терабайт. Но опять-таки не все ОС вам дадут это сделать, например, Windows ограничивает размер в 256 терабайт, зависит от версии Windows.

Protective MBR

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

GUID Partition Entry Array

Массив записей раздела (GUID Partition Entry Array) описывает разделы, используя минимальный размер 128 байт для каждого блока. Первые 16 байтов каждой записи обозначают глобальный уникальный идентификатор (GUID) типа раздела. Например, GUID для системного раздела EFI — C12A7328-F81F-11D2-BA4B-00A0C93EC93B .

Вторые 16 байтов — это уникальный идентификатор GUID раздела. Затем следуют начальные и конечные 64-битные LBA , атрибуты раздела и максимум 36-символьное имя раздела .

Итог

Прочитав всё выше написанное можно констатировать:

  • MBR и GPT позволяют операционной системе получать точную информацию о структуре диска
  • Если вы повредите сектор с MBR, то вам придётся изрядно попотеть
  • Используйте только GPT
  • Можно использовать ПО для создания резервной копии MBR если уж вы его уже используете
  • Также вы можете использовать ПО для конвертации MBR в GPT (конечно сперва бэкап)
  • Конечно сперва бэкап — слоган любого вендора, даже если это СХД на 500ТБ

Поделиться: Twitter Facebook
Пожалуйста подпишитесь: Telegram Youtube

Ynwasg

О Ynwasg

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

Таблица MBR-разделов: установка и настройка, советы и рекомендации

Основная загрузочная запись — это традиционный способ хранения информации на жестком диске вместе с некоторым загрузочным кодом. То есть таблица содержится внутри MBR, которая хранится в секторе №1: цилиндр 0/головка 0/сектор 1 или, альтернативно, LBA 0.

Персональные компьютеры по-прежнему используют этот загрузочный стандарт диска с информацией о разделах на нем. Традиционные таблицы разделов MBR в современном мире технически устарели, потому что 32-разрядная структура полей LBA начинает «переполняться» при работе с 2 Тб дисками. Одной из возможных ее замен является GPT.

Характеристика разделов и секторов

Вам будет интересно: Выбор жесткого диска: описание, виды, характеристики, отзывы

Характеристика разделов и секторов

MBR — первый 512-байтный раздел физического сектора жесткого диска. Его аббревиатура от Master Boot Record — стандарт, который начал функционировать в 1983 году до сегодняшнего времени. Тем не менее он уже не соответствует новым технологическим требованиям. Одним из основных ограничений является максимальный размер, с которым он может работать — 2 Тб. Другое ограничение в том, что MBR может взаимодействовать только с 4 основными разделами.

В LBA они имеют абсолютное число, причем первый является нулевым номером. Например, таблица разделов MBR на диске MAXTOR объемом 80 Гб имеет 160 071 660 секторов: в режиме LBA они пронумерованы от 0 до 160 071 659.

Вам будет интересно: Роутер: принцип работы, виды, устройство, порядок подключения

MBR содержит 2 элемента, важных для запуска ПК:

  • программа загрузки, которую BIOS запустит после аппаратного теста;
  • главная таблица.

Он содержит 4 дескриптора, описывающих физическое положение на жестком диске. Физическая позиция указывается в таблице:

  • абсолютный номер сектора № 1 в LBA;
  • количество секторов и тип раздела.

Структура основной таблицы

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

Структура основной таблицы

Условия создания расширенного раздела:

Возможны две конфигурации с использованием 4 дескрипторов:

Вам будет интересно: HID-клавиатура: что это такое и что делать, если она не работает или не распознается компьютерной системой?

Определение структура МБР:

Определение структура МБР

Загрузочная программа Grub

MBR содержит таблицу, которая отличается от одного диска к другому, поскольку разделы не имеют одинакового размера с сектором. Чтобы дублировать загрузочную программу, например, для Grub, таблицы MBR разделов с диска 1 на 2, нельзя копировать его непосредственно во второй, так как при перезаписи потеряется все.

На жестком диске есть две таблицы:

Сохранение и изменение основных элементов

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

  • вирус, целью которого является уничтожение таблицы;
  • плохое обращение пользователем с MBR.

Сохранение и изменение основных элементов

Для резервного копирования существуют два решения: создать резервную копию дискеты (512 байт), где на выбранном разделе находится таблица MBR разделов и скопировать жизненно важную информацию для хранения в надежном месте.

Резервное копирование в файл может быть сделано с помощью утилиты dd под Linux, следующим образом:

dd if=/dev/hda of=secteur_mbr_disque_hda bs=512 count=1.

Затем создают файл: sector_mbr_disque_hda, который содержит 512 байт MBR.

Чтобы просмотреть его в шестнадцатеричном формате, используют mc под Linux: mc -v sector_mbr_disque_hda.

Алгоритм последующих действий, когда на диске находится таблица MBR разделов:

Резервное копирование

Во избежание дополнительных проблем с чтением резервной копии необходимо сохранять таблицу. Из всей информации, содержащейся в дескрипторах по 16 байт в MBR, только следующие 3 представляют интерес и позволят сохранить или восстановить основные разделы:

  • абсолютное число в LBA первого;
  • размер разбиения на сектора;
  • тип раздела (шестнадцатеричное число от 0x00 до 0xFF).

Вам будет интересно: Как работает флешка? Устройство и принцип работы флешки

Чтобы получить ее, используют программу fdisk под Linux. Например, чтобы просканировать диск, запускают: fdisk / dev / hdb. Входят в экспертное меню: команда «x». Просматривают таблицы: команда «p». Затем Fdisk отображает содержимое 4 дескрипторов MBR, начало и конец в режиме CHS, начало и размер в абсолютных секторах (режим LBA), последний столбец (ID).

Чтобы сохранить основную, необходимо указать тип, начало и размер каждого из 4 разделов. Например, для MAXTOR объемом 80 Гб используют следующую схему.

Резервное копирование

Hdb1 начинается в 63, а не в первом. Это означает, что с 1 по 62 сектор не используются на диске, что подтверждает команда fdisk v.

Таблица под Linux fdisk

В экспертном режиме отмеченная выше структура, имеет для единицы абсолютный сектор в доступе LBA. Но некоторые программы предоставляют fdisk в обычном режиме и предлагают в качестве единицы цилиндр (1 цилиндр = 16 065, секторов = приблизительно 8 Мо). Поэтому делают выбор: либо поднять таблицу перегородок и использовать сектор в качестве единицы, либо поднять цилиндры и применить цилиндрическую единицу. Цель состоит в том, чтобы избежать преобразования, например, для переключения из режима CHS в режим LBA, что в случае неправильного расчета может стать катастрофой для сохраненных данных.

Таблица под Linux fdisk

Хотя цилиндр кажется более подходящим для описания разделов на выбранном диске, где находится таблица MBR для больших жестких дисков, используют только сектор по двум причинам:

Освоение содержимого жесткого диска

Чтобы восстановить основную таблицу разделов, используют GRUB либо из командной строки при запуске ПК, либо загрузившись с дискеты, содержащей Grub, запустив его в оболочке Linux. Когда он представляет меню загрузочных систем (Linux, Windows), нажимают «С», чтобы перейти к командной строке.

Клавиша TAB показывает на экране все команды, которые можно использовать в Grub. Среди них есть функция partnew, которая создает новый раздел. На самом деле она ничего не делает, кроме записи (перезаписи) одного из 4 дескрипторов в MBR.

Освоение содержимого жесткого диска

Синтаксис partnew: partnew partition type début taille,

  • Partition — это раздел для восстановления в форме (hd0,0) или (hd0,1) или (hd1,0). Grub начинает нумерацию дисков с нуля. Например, (hd0,0) представляет hda1 для Linux. Аналогично, Linux hdb3 будет представлен, как (hd1,2).
  • Type — тип раздела в виде шестнадцатеричного числа (с префиксом 0x) на 1 байт.
  • Début — абсолютный номер LBA первого сектора.
  • Taille — представляет размер сектора.

Например, чтобы восстановить 4 раздела MAXTOR объемом 80 Гб, на данном диске находится таблица MBR разделов, поэтому набирают следующие 4 команды:

  • grub> partnew (hd1,0) 0x83 63 7180992;
  • grub> partnew (hd1,1) 0x82 7181055 1076355;
  • grub> partnew (hd1,2) 0xc 8257473 73674027;
  • grub> partnew (hd1,3) 0x83 81931563 78140097.

Чтобы воспроизвести таблицу, сохраненную в MBR, используют команду: grub> geometry (hd1).

Затем Grub возвращает тип каждого первичного раздела, а также общее количество секторов на диске в LBA, но не дает характеристики (начало и размер) каждого раздела, поэтому позволяет войти в таблицу.

По желанию Grub позволяет вводить информацию из места, где на данном разделе находится таблица MBR в дескрипторы. Это также «опустошает» один или несколько из 4 дескрипторов ОС Linux, DOS, Виндовс.

Настройка размера в реестре

Настройка размера в реестре

MFT — центральная структура NTFS и FAT. В разделе есть резервная копия (MFT Mirror) для защиты от возможной потери информации. В этой конструкции он занимает несколько тысяч кластеров. По умолчанию NTFS резервирует 12,5 % доступного пространства на разделе, данные не могут быть записаны в этой зарезервированной области, что позволяет избежать фрагментации.

В реестре определен размер MFT в зависимости от типа файла, который был использован для регистрации. Если пользователь записывает много маленьких файлов, то лучше иметь большой MFT. Можно увеличить его и это улучшит производительность, если на разделе достаточно свободного места. Недостатки метода: если есть немного свободного места на разделе, увеличение MFT может способствовать его фрагментации и появление обратного эффекта.

Существует определенное программное обеспечение, которое позволяет дефрагментировать MFT, выполняя ее при запуске компьютера. Для настройки размера MFT в реестре, сначала сохраняют его с помощью Erunt, а затем находят следующий ключ: HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Control FileSystem.

Нажимают правой кнопкой мыши значение NtfsMftZoneReservation и назначают значение от 1 до 4 в соответствии с требуемым пространством для MFT (12,5 %, 25 %, 37,5 %, 50 %). Затем выходят из реестра и перезагружают компьютер.

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

Камуфляж для операционной системы

Камуфляж для операционной системы

Такая операция выполняется для того, чтобы скрыть данные на жестком диске. Маскировка делает данные недоступными для ОС. Таким образом, даже системный администратор (root Linux) не сможет больше получить доступ к этим скрытым данным.

Камуфляж не сводится к простому сокрытию файла путем активации его назначения или прав доступа с помощью ограничений файловой системы Ext2 в Linux или NTFS в Windows. Сокрытие — это неиспользование легальных функций, которые всем известны, а применение возможностей (BIOS, MBR и структуры разделов). Операционная система будет полностью игнорировать это пространство.

Первое решение, которое является наименее оригинальным из всех, состоит в том, чтобы скрыть полный раздел с помощью Partition Magic. Таким образом, могут быть скрыты только отформатированные в файловых системах FAT (FAT16 или FAT32) или NTFS. Вот типы, которые нужно использовать для этих разделов.

Реорганизация дескрипторов

Вам будет интересно: Как работает Wi-Fi роутер: описание, назначение и принцип действия

Чтобы изменить тип раздела в одном из дескрипторов MBR без изменения других характеристик, можно использовать команду parttype из Grub. Например, чтобы скрыть hdb3 с 0xc в FAT32, вводят следующее в командной строке: grub> parttype (hd1,2) 0x1c.

Таким образом, место, занимаемое разделом, не будет пустым пространством, и он не будет виден из операционных систем Microsoft (MS-DOS, Win 9x, и Windows XP). Для Linux, независимо от того, имеется ли тип 0xc или 0x1c, FAT32 не будет создавать проблем в обоих случаях.

Для того чтобы вновь отобразить hdb3 в Windows, он даст ему параметр 0xc вместо 0x1c: grub> parttype (hd1,2) 0xc. Это решение использует только тип обычного раздела и скрывает данные только для систем DOS и Windows.

Восстановление процедуры загрузки

Под ОС Windows XP можно воссоздать процедуру загрузки MBR под DOS с помощью команды FIXMBR. Master Boot Record переписывают, что устраняет загрузочные вирусы, восстанавливает повреждения, когда ПК больше не загружается или удален загрузчик. Чтобы сохранить и восстановить MBR под Windows, нужно использовать программу отладки. В UNIX и Linux используется команда dd. Необходимо сохранять и восстанавливать только первый сектор, первые 512 байт диска.

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

В Windows Vista для восстановления используется команда bootrec / FixMbr. Это доступно из консоли восстановления. Следует отметить, что если первоначальная MBR указывала на загрузчик Linux (GRUB, LILO), она становится недоступной после этого сбоя. Затем он должен загрузиться с компакт-диска Linux (установка / восстановление) и, таким образом, восстановить его.

Система безопасности компьютера

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

Система безопасности компьютера

Сравнение стандартов

Сравнение стандартов

Несмотря, что MBR еще полностью функционален, ему на замену выпущен новый стандарт GPT для GUID, связанный с новыми системами UEFI. Он не имеет ограничений, кроме установленных и самими ОС, как по размеру, так и по количеству, например, Windows имеет ограничение в 128 разделов. Надежность GPT-дисков намного выше, чем у MBR. В случае утери, повреждения или перезаписи, GPT создает несколько избыточных копий по всему диску, так что в случае сбоя, проблемы или ошибки таблица автоматически извлекается из любой из этих копий.

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

Что касается ОС «Виндовс», можно загружаться только с GPT в 64 версиях, начиная с Vista. Современные версии Linux также совместимы с этим типом диска и даже Apple начала использовать GPT в качестве таблицы по умолчанию вместо APT (Apple Partition Table).

Есть несколько способов узнать, использует ли диск ту или иную таблицу разделов MBR. Для этого можно открыть диспетчер дисков Windows, любой инструмент разметки, включенный в MS-DOS.

Открывают окно CMD с правами администратора и вводят в нем diskpart. Как только инструмент загружен, он выполняет свою работу, а пользователю остается ознакомиться с результатом.

Копирование разделов жёсткого диска средствами GNU/Linux: как обойтись загрузочной флешкой там, где раньше нужен был Акронис

С тех пор как до меня дошла благая весть о существовании операционной системы под названием GNU/Linux, которую используют все настоящие программисты, я несколько раз пытался заменить ей детище Билла Гейтса и несколько раз потерпел неудачу.

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

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

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

В большинстве случаев это было не фатально. Вместо привычного foobar всегда можно послушать музыку на Rhythmbox. Вместо Microsoft Office есть OpenOffice. Да, его совместимость с продуктом корпорации зла порой оставляет желать лучшего, но им вполне можно пользоваться для решения повседневных задач среднестатистического пользователя. Обо всяких Файрфоксах, Операх и Хромах я вообще молчу.

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

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

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

Гугл создавал чёткое впечатление, что как клонировать диски средствами опенсорсных ОС, знает каждая собака. Увы, чёткие инструкции по осуществлению общеизвестных и элементарных вещей найти как правило сложнее всего. Какие-то мануалы в результате упорных поисков в конце концов обнаружились, но всё равно с ними пришлось туговато, ибо их явно писали грамотные люди, которые возятся с темой не первый и даже не второй день, и просто не помнят, что знаниями, почитаемыми ими за необходимый минимум, владеют далеко не все.

Теперь, когда ужасы гугления позади, я понимаю, что всё действительно достаточно просто и хочу оформить результаты своих изысканий в виде краткого руководства по работе с образами дисков в GNU/Linux, обращённого в первую очередь к тем, кто привык к Акронису или другой подобной ему программе. Мне в свое время такой документ бы очень сильно помог, надеюсь, что он поможет и кому-то ещё.

Acronis

В Акронисе всё было просто и понятно: оконный интерфейс, подсказки и предшествующий опыт работы с образами компакт дисков делали процесс несложным. Снял образ, вставил новый винт, развернул образ на него — даже и рассказывать то не о чем. В случае с Линуксом процесс захлебнулся на этапе снятия образа — как это сделать было абсолютно неясно. Специальной программки с подсказками не нашлось, программки, которая добавляла в список устройств виртуальный DVD — наподобие Daemon Tools тоже. Да и сам список устройств оказался достаточно проблематичен, поэтому начать можно прямо с него.

Просмотр перечня накопителей

Для каждого подключенного накопителя (винчестера, флешки) в директории /dev можно найти соотвествующий ему файл. Его название состоит из букв sd и буквы, обозначающей номер устройства. То есть винчестеру, подключенному к первому каналу, будет соответствовать файл sda, второму sdb и так далее. Соответственно самый простой способ посмотреть список устройств — ls -1 /dev/sd[a-z]. Эта команда покажет список накопителей, но не даст нам никакой информации о них. А нам нужно хотя бы увидеть список разделов.

Просмотр перечня разделов на накопителе

Каждому разделу в директории dev тоже соотвествует файл. Его название строится из названия файла, соотвествующего накопителю и номера раздела. То есть для накопителя sda, на котором есть 2 раздела, в директории /dev будет создано 2 файла — sda1 и sda2. Посмотреть перечень разделов на накопителе sda можно командой ls -1 /dev/sda[0-9] полный перечень разделов на всех устройствах получается на выводе команды ls -1 /dev/sd[a-z][0-9], а если есть необходимость включить в перечень и сами устройства, то можно просто написать ls -1 /dev/sd*, что значительно менее осмысленно, зато коротко и главное работает. Или, как подсказывают в комментариях, есть ещё вариант cat /proc/partitions

Часто владелец может опознать диск просто по такому перечню (это когда дисков у него не 452), но если этого недостаточно, то можно воспользоваться программой hdparm.

Конкретно hdparm -I /dev/sda выведет подробную информацию об устройстве /dev/sda.

Эту же информацию, но в рассеянном по разным файлам виде, можно найти в директории /sys/block/sda. Например модель диска находится в файле /dev/block/sda/device/model.

Если и этого недостаточно, то остается только по очереди монтировать устройства и смотреть что на них записано. Но это уже совсем другая история.

Снятие образа

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

Общие рекомендации

Образом диска мы обычно называем копию диска на уровне разделов или всего устройства. И если пользователь Windows в ответ на вопрос, как эту копию сделать, обычно слышит рекомендацию воспользоваться специализированным софтом, то в Линуксе всё не так.

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

Так оно и есть. Пусть нам надо снять образ раздела /dev/sda2 (на нём Windows 7 обычно держит диск С:) и сохранить его в файл с названием win_c.img.

Для этого достаточно написать cp /dev/sda2 win_c.img. Или cat /dev/sda2 >win_c.img. Короче можно воспользоваться любой программой или комбинацией программ, которая осуществляет копирование файлов.

Правильный способ

Как вы наверное уже догадываетесь, добиться желаемого можно не одним и даже не двумя, остроумными и не очень способами, но правильнее и проще всего на мой взгляд, использовать утилиту ddrescue. Что существенно важно — имеется в виду GNU ddrescue, а не давно уже устаревший оригинал.

Она, также как и cp, занимается копированием файлов, но в случае нахождения ошибок, ddrescue не прервёт работу с радостным сообщением о том, что пациент скорее мёртв, чем жив, а запомнит место с ошибкой, чтобы вернуться к нему позже и попробовать прочитать заново. Теперь уже медленно и нежно.

Используется ddrescue следующим образом:
ddrescue

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

Команда, которая выполнит операцию, аналогичную описанной выше, будет выглядеть так:

ddrescue /dev/sda2 win_c.img win_c.img.log

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

Неправильный способ

Часто можно встретить рекомендации использовать для копирования файла устройства или раздела программу под названием dd. Как правило, для снятия образа предлагается сделать что-то вот такое:

dd if=/dev/sda2 of=win_c.img

Не делайте так! Хотя семантически подход верен (произойдёт копирование одного файла в другой), последствия могут быть очень печальны. Да, dd превосходит cp в том отношении, что при обнаружении ошибки cp прекратит работу, а dd не прекратит, но если на диске есть битые или просто плохо читаемые сектора, то dd будет продолжать попытки считать их содержимое пока из винчестера не повалит дым.

Да, у dd есть аргумент noerror, но при его использовании копирование может быть выполнено с ошибками, попыток восстановления которых предпринято не будет. ddrescue в аналогичной ситуации после первого прохода вернётся к пропущенным местам и попробует прочитать их маленькими кусочками. И оставит лог файл, с помощью которого можно будет продолжать попытки вычитать сбойные места в будущем.

Короче, используйте ddrescue. А если кроме dd ничего нет, не забывайте про аргумент noerror.

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

Просмотр содержимого образа раздела (логического диска)

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

Итак, у нас уже есть образ, снятый с диска C: операционной системы Windows 7. Мы назвали образ win_c.img и хотим увидеть его содержимое в заранее созданной директории /mnt/win_c. Для этого надо ввести команду mount -o loop win_c.img /mnt/win_c.

Вот так можно убедиться, что образ, который вы собираетесь накатить на винчестер очередного розового ноутбука, является образом именного того диска C: который ожидается увидеть на данной конкретной машине. Ну, или можно просто скопировать с него файлы без которых никак нельзя обойтись и отправить этот образ во внешнюю тьму. А на ноутбук поставить последнюю Убунту или Федору.

But we can go deeper.

Просмотр содержимого образа физического диска

А вот с монтированием образа диска целиком всё не так просто. Ужасная правда состоит в том, что монтировать файлы из произвольного места файловой системы ядро не умеет и аргумент -o loop, команды mount, сигнализирует о том, что сначала надо связать образ с файлом виртуального устройства в директории /dev, и потом уже присоединить содержимое этого устройства к файловой системе.

Файлы виртуальных устройств создаются заранее (на этапе загрузки системы) и имеют названия loop0, loop1, loop2 и так далее по нарастающей.

Связать образ раздела с одним из этих файлов можно командой losetup. Команда mount из предыдущего раздела на самом деле эквивалентна следующим двум командам.

losetup /dev/loop0 win_c.img
mount /dev/loop0 /mnt/win_c

Но вот для того, чтобы посмотреть содержимое образа в котором есть несколько разделов, этого недостаточно. Дело в том, что если выполнить команду losetup для такого файла, то с устройством /dev/loop0 будет связан весь образ целиком. То есть это устройство будет эквивалентом /dev/sda, а нам нужны эквиваленты /dev/sda1 и /dev/sda2.

Обладатели свежих версий программы losetup (читай гентушники и арчеводы) могут выполнить losetup c аргументом —partscan, что приведёт к автоматическому созданию в директории /dev файлов, соответствующих разделам образа. То есть /dev/loop0p1, /dev/loop0p2 и так далее до самого горизонта. И вот уже эти файлы можно отдавать команде mount.

losetup —partscan /dev/loop0 drive.img
mount /dev/loop0p2 /mnt/win_c

Те же, кому не так повезло с дистрибутивом, могут воспользоваться программой kpartx, которая сделает то же самое, но положит файлы соотвествующие разделaм не в директорию /dev, а в директорию /dev/mapper, откуда их можно монтировать и просматривать.

kpartx -a /dev/loop0 drive.img
mount /dev/mapper/loop0p2 /mnt/win_c

But we can go even deeper than that…

Автоматическое создание файлов разделов при выполнении команды losetup

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

Включается она если параметр модуля loop max_part не равен нулю. Задать этот параметр можно только при загрузке модуля, поэтому если система уже запущена, модуль надо выгрузить из памяти и загрузить снова с уже заданным параметром. Для этого нужно выполнить следующие две команды.

modprobe -r loop
modprobe loop max_part=63

Однако в некоторых дистрибутивах (напривер в Убунте) модуль loop вкомпилирован в ядро намертво и поэтому для установки параметра придётся вписать loop.max_part=63 в командную строку ядра и перезагрузить систему.

Развёртывание образа на физический носитель

А теперь о том, как собственно накатить образ на другой диск. Как и раньше надо руководствоваться тем, что диски и разделы представлены в виде файлов. И если для снятия образа нужно было создать копию файла устройства или раздела, то для того, чтобы закатать этот образ обратно надо провести операцию копирования в обратную сторону. То есть вместо cp /dev/sda2 win_c.img написать cp win_c.img /dev/sda2. Ну и лучше помнить о советах, изложенных в руководстве по снятию образа. А именно пользоваться ddrescue и не пользоваться dd.

ddrescue —force win_c.img /dev/sda2 win_c_restore.img.log
Конечно следует помнить, что раздел в который мы восстанавливаем образ (в данном случае /dev/sda2) должен быть не меньше файла с образом. Eсли же раздел окажется больше этого файла, то проблем при восстановлении не будет, но в разделе останется неразмеченное пространство. И придётся либо смириться с этим фактом, либо увеличить размер файловой системы до размера раздела каким-нибудь специализированным софтом (увеличивать, впрочем, обычно гораздо проще и быстрее, чем уменьшать).

Сжатие образа раздела (логического диска)

Особенно приятной чертой Акрониса является способность не писать в файл образа куски диска или раздела, которые не содержат файлов. Это позволяет ужать образ до реального объёма данных в разделе или на диске.

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

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

Sparse файлы

Sparse файл это файл, в котором куски, содержащие нули, на диск не пишутся. То есть, если половина файла заполнена данными, а другая половина нулями — на диск будет записана только половина этого файла и ещё дополнительная информация об областях файла, заполненных нулями. Если область с нулями непрерывна и начинается в середине, то реально на диске файл будет заменять половину от своего теоретического объёма.

Подготовка раздела или устройства к сжатию

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

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

Так как файл безразмерен, копирование будет продолжаться до тех пор, пока копия не заполнит всё доступное ей пространство, то есть все свободное место в разделе, что нам собственно и требовалось.

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

Для создания файла с бинарными нулями можно выполнить команду cp /dev/zero zerofile или cat /dev/zero > zerofile.

Создание sparse файла образа устройства или раздела

Большинство утилит для работы с файлами знают о существовании sparse файлов и умеют их создавать. Упомянутой ранее ddrescue, для того, чтобы образ оказался sparse файлом нужно передать ключ —sparse. Теперь результирующий файл будет занимать столько места, сколько ему необходимо, и не больше.

Как быть в случае сжатия образа повреждённого диска

Как известно, многие диски и в руки то брать страшно, какой уж может быть разговор о записывании туда многогигабайтных файлов. Если вам в руки попался именно такой диск, следует сначала снять образ, а потом уже сделать из него sparse файл. Для этого нужно смонтировать полученный образ, потом заполнить свободное место нулями и сделать с образа копию, которая уже будет полноценным sparse файлом. Исходный образ после этого можно удалить.

С копированием файла прекрасно справится cp, которая умеет делать sparse файлы не хуже ddrescue. cp —sparse win_c.img win_c_sparse.img

Конечно, для проведения этих операций потребуется много свободного пространства, но так всё-таки значительно лучше, чем вообще никак.

Заключение

А теперь в сжатом виде о том, что можно почерпнуть из данного руководства.

  1. В Линуксе каждому накопителю и каждому разделу на накопителе соответствует файл.
  2. Так как образ является побайтовой копией содержимого диска или раздела, для его создания достаточно сделать копию соответствующего файла любой программой, умеющей делать копии.
  3. Лучше всего для снятия копии файла, соотвествующего разделу или накопителю, подходит программа GNU ddrescue.
  4. Для восстановления образа достаточно скопировать его обратно.
  5. Для просмотра содержимого образа достаточно смонтировать его в директорию по выбору, также, как система монтирует устройства при загрузке.
  6. Образы разделов и образы накопителей целиком монтируются по разному и не совсем так, как монтируются реальные накопители и разделы.
  7. Для получения сжатого образа раздела нужно особым образом скопировать заранее подготовленный раздел в файловую систему, поддерживающую sparse файлы.
  1. Существует специализированный программный комплекс под названием Clonezilla, а также основанный на нём дистрибутив, предназначенный для резервного копирования и восстановления разделов жёсткого диска.
  2. Существуют утилиты ntfsclone и partclone которые владеют знаниями об устройстве файловых систем и используют эти знания например для того, чтобы не писать в бэкап пустое пространство.
  • Настройка Linux
  • Резервное копирование

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

В отличие от 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 сектора диска.

Формат записи раздела:

Смещение (байт) Размер поля (байт) Пример заполнения Название и описание поля
0x00 16 байт 28 73 2A C1 1F F8 D2 11 BA 4B 00 A0 C9 3E C9 3B GUID типа раздела. В примере приведен тип раздела «EFI System partition». Список всех типов можно посмотреть здесь
0x10 16 байт C0 94 77 FC 43 86 C0 01 92 E0 3C 77 2E 43 AC 40 Уникальный GUID раздела. Генерируется при создании раздела
0x20 8 байт 3F 00 00 00 00 00 00 00 Начальный LBA-адрес раздела
0x28 8 байт CC 2F 03 00 00 00 00 00 Последний LBA-адрес раздела
0x30 8 байт 00 00 00 00 00 00 00 00 Атрибуты раздела в виде битовой маски
0x38 72 байта EFI system partition Название раздела. Unicode-строка длиной 36-символов

Атрибуты раздела, записываемые по смещению 0x30 могут иметь следующие значения битов:

Указывает необходимость раздела для функционирования системы. OEM-разработчики могут таким образом защищать свои разделы от перезаписи дисковыми утилитами
Помечает раздел как доступный только для чтения. Используется только для «Microsoft Basic Data Partition» с типом
Помечает раздел как скрытый. Используется только для «Microsoft Basic Data Partition» с типом
Предотвращает автоматическое назначение буквы диска данному разделу. Используется только для «Microsoft Basic Data Partition» с типом

С оставшимися частями разметки все понятно и без подробного описания. Содержимое разделов — говорит само за себя. Копия таблицы разделов — тоже понятно, хранит копию таблицы разделов. Ну и последний сектор диска — это копия GPT-заголовка.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *