Загрузочная запись тома

Загрузочный сектор неразмеченного носителя в IBM PC-совместимых системах

Загрузочная запись тома ( 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 в качестве временного блокнота. [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 ЦП .

  • CS : IP = 0000h: 7C00h(фиксированный)

Некоторые BIOS Compaq ошибочно используют вместо этого 07C0h:0000h. Хотя это разрешается в то же место в памяти реального режима, это нестандартно и его следует избегать, поскольку код VBR, предполагающий определенные значения регистров или не записанный как перемещаемый, может не работать в противном случае.

  • DL = загрузочный дисковод ( дискеты / супердискеты : 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.)
  • DH бит 5 = 0: устройство поддерживается через INT 13h ; иначе: не имеет значения (должен быть равен нулю). DH поддерживается некоторыми BIOS IBM. Некоторые коды MBR и VBR сохраняют значение DH.

Системы с поддержкой Plug-and-Play BIOS или BBS будут предоставлять указатель на данные PnP в дополнение к DL: [2] [4]

  • DL = загрузочный диск (см. выше)
  • ES : DI = указывает на " $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):

  • DS : SI = указывает на 16-байтовую запись таблицы разделов MBR (в перемещенной MBR), соответствующую активированному VBR. PC-MOS 5.1 использует это для загрузки, если ни один раздел в таблице разделов не помечен как загрузочный. В сочетании с LOADER, загрузочные секторы Multiuser DOS и REAL/32 используют это для определения загрузочного сектора активного раздела (или другого загрузчика, например IBMBIO.LDR, в фиксированном положении на диске), если загрузочный файл (LOADER.SYS) не найден. PTS-DOS 6.5 и S/DOS 1.0 используют это в сочетании со своей функцией Advanced Active Partition (AAP). Помимо поддержки LOADER и AAP, DR-DOS 7.07 может использовать это для определения необходимого метода доступа INT 13h при использовании своего двойного кода CHS/LBA VBR. Код MBR OS/2, MS-DOS (до 7.0), PC DOS (до 7.10) и Windows NT (до ок. 2007) также предоставляет этот же интерфейс, хотя эти системы его не используют. MBR, установленный Windows NT 6.0 (и выше), использует другие регистры и, следовательно, больше несовместим с этими расширениями. В то время как некоторые расширения зависят только от самой 16-байтовой записи таблицы разделов, другие расширения могут также потребовать наличия всей 4-байтовой (или 5-записной) таблицы разделов.

В DR-DOS 7.07 расширенный интерфейс может опционально использоваться MBR и совместно с LOADER:

  • AX = магическая сигнатура, указывающая на наличие этого расширения ( 0EDCh)
  • DL = загрузочный диск (см. выше)
  • DS:SI = указывает на используемую 16-байтовую запись таблицы разделов MBR (см. выше)
  • ES: BX = начало загрузочного сектора или специального NEWLDRобраза сектора " " (обычно 7C00h)
  • CX = зарезервировано

В сочетании с таблицами разделов GUID (GPT) предложение Enhanced Disk Drive Specification (EDD) 4 Hybrid MBR рекомендует еще одно расширение интерфейса MBR-VBR: [5]

  • ЕАХ = 54504721h(" !GPT")
  • DL = загрузочный диск (см. выше)
  • ES:DI = указывает на $PnPструктуру проверки установки " " (см. выше)
  • DS:SI = указывает на структуру передачи Hybrid MBR, состоящую из 16-байтовой фиктивной записи таблицы разделов MBR (со всеми установленными битами, за исключением флага загрузки по смещению +0hи типа раздела по смещению +4h), за которыми следуют дополнительные данные. Это частично совместимо со старым расширением DS:SI, обсуждавшимся выше, если только 16-байтовая запись раздела, а не вся таблица разделов требуется для этих старых расширений.

Смотрите также

Примечания

  1. ^ Сигнатура по смещению +1FEhв загрузочных секторах — 55h AAh, то есть 55hпо смещению +1FEhи AAhпо смещению +1FFh. Поскольку в контексте совместимых с IBM PC машин необходимо предполагать представление little-endian , в программах для процессоров x86 это можно записать как 16-битное слово (обратите внимание на поменянный порядок), тогда как в программах для других архитектур ЦП это должно быть записано как представление big-endian . Поскольку это много раз путалось в книгах и даже в оригинальных справочных документах Microsoft, в этой статье используется представление на основе смещения побайтово на диске, чтобы избежать любой возможной неверной интерпретации.AA55h55AAh

Ссылки

  1. ^ abcde Пол, Маттиас Р. (1997-10-02) [1997-09-29]. "Caldera OpenDOS 7.01/7.02 Update Alpha 3 IBMBIO.COM - README.TXT и BOOT.TXT - Краткое описание того, как загружается OpenDOS". Архивировано из оригинала 2003-10-04 . Получено 2009-03-29 .[1]
  2. ^ abcd Compaq Computer Corporation ; Phoenix Technologies Ltd. ; Intel Corporation (1996-01-11). BIOS Boot Specification 1.01 (PDF) . 1.01. Архивировано из оригинала (PDF) 2016-04-14.
  3. ^ ab Paul, Matthias R. (2017-08-14) [2017-08-07]. "Продолжение саги о Windows 3.1 в расширенном режиме на OmniBook 300". MoHPC - Музей калькуляторов HP . Архивировано из оригинала 2018-05-01 . Получено 2018-05-01 . […] SYS […] /O[:nnn] Переопределить IPL сообщенный загрузочный диск (n=0..126, 128..254). […] Подготовка целевого диска... Выбор загрузочного сектора FAT12 CHS (требуется IPL для сообщения загрузочного устройства). Обработка цели как дискеты или супергибкого диска (загрузочный диск 0). Запись нового загрузочного сектора... […]
  4. ^ ab Compaq Computer Corporation ; Phoenix Technologies Ltd. ; Intel Corporation (1994-05-05). Plug and Play BIOS Specification 1.0A (PDF) . 1.0A. Архивировано из оригинала (PDF) 2018-02-02.
  5. ^ Эллиотт, Роберт (2010-01-04). "EDD-4 Hybrid MBR boot code Annex" (PDF) . Hewlett-Packard , Технический комитет T13. e09127r3. Архивировано (PDF) из оригинала 2018-05-01 . Получено 2018-05-01 .

Дальнейшее чтение

  • "Загрузочные секторы тома". Руководство для ПК .
Retrieved from "https://en.wikipedia.org/w/index.php?title=Volume_boot_record&oldid=1154399572"