Загрузочная запись тома ( VBR ) (также известная как загрузочный сектор тома , загрузочная запись раздела или загрузочный сектор раздела ) — тип загрузочного сектора, представленный персональным компьютером IBM . Он может быть найден на разделенном устройстве хранения данных , таком как жесткий диск , или на неразделенном устройстве, таком как гибкий диск , и содержит машинный код для начальной загрузки программ (обычно, но не обязательно, операционных систем ), хранящихся в других частях устройства. На неразделенных устройствах хранения это первый сектор устройства. На разделенных устройствах это первый сектор отдельного раздела на устройстве, при этом первый сектор всего устройства является главной загрузочной записью (MBR), содержащей таблицу разделов .
Код в загрузочных записях тома вызывается либо напрямую прошивкой машины, либо косвенно кодом в главной загрузочной записи или менеджере загрузки . Код в MBR и VBR по сути загружается одинаково .
Вызов VBR через менеджер загрузки называется цепной загрузкой . Некоторые системы с двойной загрузкой , такие как NTLDR ( загрузчик для всех выпусков операционных систем Microsoft, производных от Windows NT, вплоть до Windows XP и Windows Server 2003 ), берут копии кода начальной загрузки, которые отдельные операционные системы устанавливают в VBR одного раздела, и сохраняют их в файлах на диске, загружая соответствующее содержимое VBR из файла после того, как загрузчик спросит пользователя, какую операционную систему следует загрузить. В Windows Vista , Windows Server 2008 и более новых версиях NTLDR был заменен; вместо этого функциональность загрузчика обеспечивается двумя новыми компонентами: WINLOAD.EXE и диспетчером загрузки Windows .
В файловых системах, таких как FAT12 (за исключением DOS 1.x), FAT16 , FAT32 , HPFS и NTFS , VBR также содержит блок параметров BIOS (BPB), который определяет расположение и структуру основных структур данных на диске для файловой системы. (Подробное обсуждение структуры секторов FAT VBR, различных версий FAT BPB и их записей можно найти в статье FAT .)
Наличие загрузчика, совместимого с IBM PC, для процессоров x86 в загрузочном секторе по соглашению обозначается двухбайтовой шестнадцатеричной последовательностью, называемой сигнатурой загрузочного сектора ( 55h при фиксированном смещении +1FEh и AAh при +1FFh ) для размеров сектора 512 байт и более. [nb 1] Для секторов размером 512 байт сигнатура загрузочного сектора также отмечает конец сектора. VBR на меньших и больших секторах также могут показывать сигнатуры в конце фактического размера сектора, однако семантика, описанная здесь, применима только к 16-битной сигнатуре при +1FEh .
Эта сигнатура указывает на наличие по крайней мере фиктивного загрузчика, который можно безопасно запустить, даже если он не сможет загрузить операционную систему. Она не указывает на наличие (или даже конкретной) файловой системы или операционной системы, хотя некоторые старые версии DOS до 3.3 полагались на нее в своем процессе обнаружения носителей в формате FAT (более новые версии этого не делают). Загрузочный код для других платформ или процессоров не должен использовать эту сигнатуру, поскольку это может привести к сбою, когда BIOS передаст выполнение в загрузочный сектор, предполагая, что он содержит допустимый исполняемый код. Это подразумевает, что носители FAT12 / FAT16, которые также будут использоваться очень старыми версиями DOS, должны поддерживать сигнатуру, даже если они не содержат операционной системы или предназначены для загрузки только на других платформах; следовательно, они должны также содержать по крайней мере совместимый с x86 (фиктивный) загрузчик (для сравнения см. примеры FAT на Atari ST и с MSX-DOS ). Тем не менее, некоторые носители для других платформ ошибочно содержат подпись даже без совместимого с x86 фиктивного загрузчика, что делает проверку на практике не на 100% надежной.
Подпись проверяется большинством системных BIOS, начиная с (по крайней мере) IBM PC/AT (но не оригинальным IBM PC и некоторыми другими машинами). Более того, она также проверяется большинством загрузчиков MBR перед передачей управления загрузочному сектору. Некоторые BIOS (например, IBM PC/AT) выполняют проверку только для фиксированных дисков / съемных накопителей, в то время как для дискет и супердискет достаточно начать с байта, большего или равного 06h , и первые девять слов не должны содержать того же значения, прежде чем загрузочный сектор будет принят как действительный, тем самым избегая явного теста на 55h , AAh на дискетах. Поскольку старые загрузочные секторы (то есть очень старые носители CP/M-86 и DOS) иногда не содержат эту подпись, несмотря на то, что они могут быть успешно загружены, проверку можно отключить в некоторых средах. Это также отражает тот факт, что дискеты можно отформатировать для использования меньших размеров сектора, чем 512 байт.
Если код BIOS или MBR не обнаруживает допустимый загрузочный сектор и, следовательно, не может передать выполнение коду загрузочного сектора, он попробует следующее загрузочное устройство в строке. Если все они терпят неудачу, он обычно отображает сообщение об ошибке и вызывает INT 18h . [1] Это либо запустит дополнительное резидентное программное обеспечение в ПЗУ ( ROM BASIC ), либо попытается выполнить удаленную загрузку по сети, перезагрузит систему через INT 19h после подтверждения пользователя, либо заставит систему остановить процесс загрузки до следующего включения питания. [1]
В десятичном смещении от 72 до 79 NTFS PBR содержит серийный номер идентификатора тома UUID раздела.
Загрузочный код в VBR может предполагать, что BIOS настроил свои структуры данных и прерывания и инициализировал оборудование. Код не должен предполагать наличие более 32 КБ памяти для отказоустойчивой работы; [1] если ему требуется больше памяти, он должен запросить ее в INT 12h, поскольку другой предзагрузочный код (например, оверлеи расширения BIOS, системы шифрования или удаленные загрузчики ) может также присутствовать в другом месте памяти (и обычно скрывает себя от загрузочного сектора, уменьшая сообщаемую память INT 12h соответствующим образом, чтобы они не были перезаписаны действиями MBR и VBR). Спецификация загрузки BIOS допускает 64 КБ памяти и явно рекомендует 0000h:7C00h по 0000h:FFFFh в качестве пространства памяти для MBR и/или VBR. [2] [1] Загрузочный код не должен предполагать лучшие ЦП, чем оригинальные Intel 8088 или 8086 (используемые в оригинальном ПК) и не делать никаких предположений относительно точного состояния оборудования, системы прерываний (прерывания могут быть включены или отключены) или расположения и размера стека. Хотя оригинальный IBM BIOS инициализирует регистры ЦП DS, ES и SS в сегменте 0000h и поддерживает начальный стек в SS :SP = 0000h:0400h , это не является условием, на которое можно положиться, поскольку не все BIOS и коды MBR следуют этому соглашению. Регистры, не упомянутые ниже, должны рассматриваться как неинициализированные. Прямой доступ к оборудованию обычно не допускается. Хотя таблица параметров диска (DPT/FDPB) обычно уже установлена в памяти по адресу 0000h:0078h , VBR должен переместить (и, возможно, исправить) DPT, на который указывает вектор INT 1Eh, в это место (INT 1Eh — не прерывание, а дальний указатель на DPT).
Некоторые условия могут быть смягчены в контролируемых средах, например, некоторые современные загрузчики предполагают наличие до 128 КБ памяти для работы в обычном режиме (без запроса большего объема), а некоторые загрузчики, использующие доступ LBA, предполагают наличие как минимум процессора Intel 80188 или 80186 .
VBR загружается в ячейку памяти 0000h
: 7C00h
[1] и со следующими регистрами ЦП, установленными, когда предыдущий загрузчик (обычно BIOS или MBR, но возможно и другой загрузчик) передает ему выполнение, переходя к 0000h
: в реальном режиме7C00h
ЦП .
0000h
: 7C00h
(фиксированный)Некоторые BIOS Compaq ошибочно используют вместо этого 07C0h:0000h. Хотя это разрешается в то же место в памяти реального режима, это нестандартно и его следует избегать, поскольку код VBR, предполагающий определенные значения регистров или не записанный как перемещаемый, может не работать в противном случае.
00h
= первый, 01h
= второй, ..., 7Eh
; фиксированные диски / съемные накопители : 80h
= первый, 81h
= второй, ..., FEh
; значения 7Fh
и FFh
зарезервированы для ПЗУ / удаленных накопителей и не должны использоваться на диске). [3] DL поддерживается BIOS IBM, а также большинством других BIOS. Известно, что BIOS Toshiba T1000 не поддерживает это должным образом, и некоторые старые BIOS Wyse 286 используют значения DL, большие или равные 2, для жестких дисков. USB-накопители, сконфигурированные как супердискеты, обычно получают назначение DL = 00h
или 01h
, однако некоторые редкие BIOS ошибочно представляют USB-накопители, сконфигурированные как съемные накопители 01h
, как DL = вместо использования DL = 80h
. Традиционно во время загрузки BIOS передавала только значения 00h
и , и многие загрузочные секторы в любом случае были жестко запрограммированы для работы с фиксированными значениями. 80h
Спецификация Plug and Play BIOS и спецификация загрузки BIOS (BBS) позволяют также сделать другие устройства загрузочными. [2] [4] Последняя также рекомендует, чтобы коды MBR и VBR использовали DL, а не внутренние жестко запрограммированные значения по умолчанию. [2] (Примечание. VBR-записей MS-DOS / PC DOS и OS/2 игнорируют предоставленное значение DL и вместо этого извлекают значение, хранящееся по смещению +19h
в расширенном блоке параметров BIOS (EBPB) или по смещению сектора +1FDh
в версиях DOS с 3.2 по 3.31. Некоторые версии DR-DOS используют DL, начиная с 7.02. VBR-записей DR-DOS 7.07 по умолчанию используют DL и игнорируют значение BPB, но их SYS /O[:nnn]
можно использовать для повторного вызова старого поведения использования значения BPB или даже принудительного хранения определенного загрузочного диска nnn
. [3] На томах FAT32 FreeDOS также использует значение DL, тогда как на томах FAT12 / FAT16 она делает это только, если значение BPB установлено равным FFh
.)Системы с поддержкой Plug-and-Play BIOS или BBS будут предоставлять указатель на данные PnP в дополнение к DL: [2] [4]
$PnP
" структуру проверки установкиЭта информация позволяет загрузчику (в MBR или VBR) активно взаимодействовать с BIOS или резидентным оверлеем PnP / BBS в памяти для настройки порядка загрузки и т. д., однако эта информация игнорируется большинством стандартных MBR и VBR. В идеале передается ES:DI, но операционные системы с поддержкой PnP обычно также имеют резервные методы для получения точки входа PnP BIOS позже, так что большинство операционных систем не полагаются на это. Информацию в ES:DI можно использовать в качестве подсказки - согласно спецификации PnP BIOS, структура проверки установки "$PnP" может быть найдена путем поиска сигнатуры ASCII-строки $PnP в системной памяти, начиная с F0000h до FFFFFh на каждой 16-байтовой границе.
При использовании разделенных носителей, когда VBR запускается MBR (или другим загрузчиком), а не BIOS, многие реализации передают в VBR дополнительную информацию, помимо DL (а иногда также DH и ES:DI):
В DR-DOS 7.07 расширенный интерфейс может опционально использоваться MBR и совместно с LOADER:
0EDCh
)NEWLDR
образа сектора " " (обычно 7C00h)В сочетании с таблицами разделов GUID (GPT) предложение Enhanced Disk Drive Specification (EDD) 4 Hybrid MBR рекомендует еще одно расширение интерфейса MBR-VBR: [5]
54504721h
(" !GPT
")$PnP
структуру проверки установки " " (см. выше)+0h
и типа раздела по смещению +4h
), за которыми следуют дополнительные данные. Это частично совместимо со старым расширением DS:SI, обсуждавшимся выше, если только 16-байтовая запись раздела, а не вся таблица разделов требуется для этих старых расширений.+1FEh
в загрузочных секторах — 55h AAh
, то есть 55h
по смещению +1FEh
и AAh
по смещению +1FFh
. Поскольку в контексте совместимых с IBM PC машин необходимо предполагать представление little-endian , в программах для процессоров x86 это можно записать как 16-битное слово (обратите внимание на поменянный порядок), тогда как в программах для других архитектур ЦП это должно быть записано как представление big-endian . Поскольку это много раз путалось в книгах и даже в оригинальных справочных документах Microsoft, в этой статье используется представление на основе смещения побайтово на диске, чтобы избежать любой возможной неверной интерпретации.AA55h
55AAh
[…] SYS […] /O[:nnn] Переопределить IPL сообщенный загрузочный диск (n=0..126, 128..254). […] Подготовка целевого диска... Выбор загрузочного сектора FAT12 CHS (требуется IPL для сообщения загрузочного устройства). Обработка цели как дискеты или супергибкого диска (загрузочный диск 0). Запись нового загрузочного сектора... […]