31

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

Загрузочный сектор почти всегда просто адрес 0 в этом массиве байтов? Я полагаю, это зависит от файловой системы, используемой на этом диске?

Извините, я действительно не осведомлен об этих вещах низкого уровня, и я хочу учиться!

4 ответа4

45

Для начала нам нужно указать используемую схему разбиения. Классическим для ПК является MBR, который разделяет имя с самым первым блоком диска (адрес логического блока # 0) в этой схеме разделения: Master Boot Record. Итак, ответ на заголовок вопроса для разбиения MBR - да.

Основная загрузочная запись содержит максимум 446 байт загрузочного кода, таблицу разделов для основных разделов (всего 16 байт на раздел) и загрузочную подпись (2 байта). Из каждой 16-байтовой записи раздела только 4 байта фактически используются для указания первого блока раздела на современных дисках, и только 4 байта для указания количества блоков в разделе. В результате начальная точка раздела MBR должна находиться в пределах (2 ^ 32 - 1) блоков от начала диска, а размер раздела MBR должен составлять (2 ^ 32 - 1) блоков или меньше. На практике это ограничивает полезность разбиения MBR на диски объемом 2 ТБ или меньше.

Традиционно загрузочный код MBR просто идентифицирует активный первичный раздел, загружает первый блок этого раздела (иногда называемый загрузочной записью раздела или PBR) и выполняет его. PBR тогда будет содержать специфическую для операционной системы загрузочную программу. Но современные загрузчики, такие как GRUB для Linux или некоторые решения для шифрования полного диска, могут захотеть сделать более сложные вещи и поэтому не поместятся в один блок.

На старом диске, когда значения геометрии Цилиндр / Головка / Сектор действительно имели какое-то действительное значение, вся первая дорожка первой головки диска была зарезервирована только для блока MBR: условием было запускать каждый раздел в начале дорожки, так как дорожка # 0 имела первый блок, занятый MBR, вся дорожка была пропущена, и первый раздел вместо этого начинался с дорожки # 1. В результате секторы на дорожке № 0 после блока MBR были доступны для использования более продвинутыми загрузчиками. На MBR-разделенном диске загрузчик GRUB обычно встраивает туда, по крайней мере, некоторые его части.

На современных дисках, где LBA-адресация является нормой, было установлено новое соглашение: первый раздел обычно начинается с адреса логического блока # 2048, или ровно 1 МБ от начала диска. Это гарантирует, что даже если диск будет внутренне обрабатывать блоки в группах некоторой степени двойки, начало первого раздела будет по-прежнему совпадать с началом такой группы блоков. В RAID-массивах и других более крупных системах хранения такое выравнивание данных может быть важной частью обеспечения максимальной производительности хранилища. Как побочный эффект, это новое соглашение могло вызвать еще больше "потраченного впустую" пространства между блоком MBR и началом первого раздела.


В 2011 году, когда была выпущена микроархитектура Intel Sandy Bridge, новая прошивка UEFI была представлена широким массам, чтобы в конечном итоге заменить традиционный BIOS. Наряду с этим появилась новая схема разбиения: GUID Partition Table или GPT для краткости. Поскольку MBR имел довольно фундаментальный максимальный предел размера в 2 терабайта (при условии, что стандартный размер блока составляет 512 байт), потребовалась новая схема.

Схема разбиения GPT на самом деле содержит "защитную MBR": самый первый блок (LBA # 0) диска с разделением GPT содержит действительный блок MBR, который по существу говорит: «Этот диск полностью выделен для типа раздела, который вы не делаете знать, не трогать "системы, которые понимают только разбиение в стиле MBR. Начиная с LBA # 1, затем отображаются фактические данные таблицы разделов GPT. Это позволяет размерам разделов расти в диапазоне зетабайтов - этого должно быть достаточно в обозримом будущем.

Схема разбиения GPT устраняет ограничения MBR:

  • С GPT больше нет ограничения в 4 основных раздела на диск.
  • Разделение основного / расширенного / логического разделов в стиле MBR больше не существует: в этом смысле все разделы равны.

Микропрограмма UEFI также определяет новую схему загрузчика. Загрузчик больше не имеет фиксированного расположения на диске. Вместо этого встроенное ПО будет иметь встроенную возможность чтения файлов из файловой системы типа FAT32, а загрузчик будет просто обычным файлом в разделе FAT32, помеченном определенным типом GUID раздела. Такой раздел называется ESP, или системным разделом EFI. (Стандарт прошивки UEFI был разработан на основе прошивки EFI, которая существовала главным образом в системах Intel Itanium, и оттуда унаследовано имя и структура раздела загрузчика.)

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

14

Да, загрузочный сектор всегда находится в секторе 0 для MBR. Жесткий диск разделен на сектора, которые традиционно имеют размер 512 байт, но накопители объемом 4 ТБ + начинают использовать 4096 байт.

Вы должны прочитать или написать целый сектор.

Сегодня LBA, Logical Block Allocation, имеет стандартную последовательность секторов от 0 до емкости накопителя.

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

Файловая система не запускается в секторе 0, вместо этого в таблице разделов указано начало раздела, поэтому файловые системы в этом не участвуют.

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

GPT покончил со многими сложностями и обновил и упростил вещи.

Вот больше подробностей.

https://en.wikipedia.org/wiki/GUID_Partition_Table

3

Я полагаю, это зависит от файловой системы, используемой на этом диске?

Нет. По крайней мере на ПК-совместимом компьютере это не может зависеть от используемой файловой системы.

Зачем?

BIOS отвечает за загрузку загрузочного сектора с жесткого диска. Поскольку он не знает об используемой файловой системе, он всегда будет делать то же самое. А это значит: загрузка сектора № 0.

В не совместимых с ПК системах загрузочный сектор может находиться в другом месте.

На системах с UEFI загрузка также работает иначе.

Кстати:

При загрузке с CD-ROM BIOS ищет специальный сектор, который может находиться где-то после сектора № 16 (не уверен на 100%). Этот сектор будет содержать информацию о местоположении фактического загрузочного сектора. BIOS должен понимать эту информацию, чтобы иметь возможность загружать загрузочный сектор с компакт-диска.

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

3

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

В традиционном ПК BIOS сектор 0 диска был / известен как основная загрузочная запись и содержит как исходный загрузочный код, так и таблицу разделов. Отдельные разделы также имели сектор 0 в качестве загрузочного сектора. Традиционно в DOS / Windows код в MBR идентифицирует активный раздел и передает код в загрузочный сектор активного раздела.

Системы Linux, работающие на традиционных компьютерах, обычно ведут себя немного иначе. Обычно в MBR устанавливается grub "stage 1". Это загружает «этап 1.5» из пустого пространства между MBR и первым разделом. Этап 1.5 обладает достаточными возможностями для понимания файловых систем и загрузки "этапа 2" из файловой системы на одном из разделов. Этап 2 затем переходит к представлению меню загрузки и загрузки ядра.

UEFI и его тип таблицы разделов GPT работают по-разному. Сектор 0 теперь содержит "защитную MBR", которая, мы надеемся, снижает риск того, что неосведомленные инструменты случайно разрушат структуру разделов GPT. Сама таблица разделов GPT хранится начиная с сектора 1. Микропрограмма поддерживает файловую систему и загружает загрузчик из раздела.

Системы без ПК могут снова отличаться. Системы постановки на охрану, в частности, могут быть повсюду на карте с точки зрения процессов их загрузки. IIRC загружает imx6 с жесткого диска, считывая загрузочный код из сектора 1, оставляя сектор 0 свободным для таблицы разделов. Raspberry pi, с другой стороны, ожидает найти таблицу разделов в стиле MBR с разделом FAT, содержащим его загрузочный код.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .