Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
en:docs:boot:mbr [2014/05/10 17:05] – external edit 127.0.0.1 | en:docs:boot:mbr [2023/11/16 08:04] (current) – prokushev | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== Описание | + | ====== Description of the MBR bootloader ====== |
- | | + | **This is machine-translated text** |
- | | + | |
- | | + | |
- | | + | |
- | * Данный | + | |
- | * Перед таблицей разделов, | + | |
- | * Перед | + | |
- | * Таблица | + | |
- | * Заканчивается | + | |
- | * Данный | + | |
- | * Первое общение | + | |
- | * а именно, | + | |
- | * Сообщение | + | |
- | - Не найден | + | |
- | - Не найден расширенный раздел и байт | + | |
- | - Просматривая | + | |
- | - Не найден описатель нужного раздела в EBR (должен | + | |
- | - Описатель в MBR primary-раздела состоит из нулей и не описывает никакого раздела. | + | |
- | * Загрузчик | + | |
- | * Пространство | + | |
- | * Данный загрузчик, | + | |
- | * " | + | |
- | * Также в соответствующие поля BPB бутсектора MBR-загрузчик заносит номер физического диска | + | |
- | * Эти манипуляции выполняются | + | |
- | * До данного момента существовало | + | |
- | - OS/2 bootmanager | + | |
- | - бутменеджер VPart от Veit' | + | |
- | - AirBoot от Martin' | + | |
- | Теперь | + | This bootloader must be located in sector zero of the first hard disk (MBR) and is designed to load the boot sector of the active partition or a partition with a given number on the specified hard disk. The MBR, having booted from the first hard drive, can choose which hard drive to continue booting from next. On the selected hard drive, the boot sector of the active partition, or a partition with a specific number, is loaded. The number of the next hard drive and the partition number on it are written in two bytes inside the MBR sector on the first hard drive. The active partition is determined by the first byte of the partition descriptor in the Partition table (PT). If this field is equal to 80h, then the section is considered active, but if it is equal to 00h, then the section is inactive. |
+ | |||
+ | To boot from a primary or logical partition with a given number, the BootPart field in the MBR sector is intended, having a size of byte and located in the MBR at offset 0x1bb from the beginning of the sector. This field is written to the MBR when installing the bootloader. If this field is zero, this means that the bootloader must determine the active primary partition of the hard disk and load the boot sector from it, transferring control to it. If the BootPart field is non-zero, this is an indication to the bootloader to force the selection of a boot partition, logical or primary, without checking the activity byte in the partition table. In this case, the value of the BootPart byte is checked. If BootPart has a value from 1 to 4, then this number is interpreted as the number of the primary partition. If its value is 5 or more, then BootPart - 4 is the number of the logical disk inside the Extended partition. | ||
+ | |||
+ | Thus, since the maximum value of the BootPart byte is 255, the number of logical disks can be from 0 to 255 - 4 = 251. That is, there can be a maximum of 3 primary partitions plus 1 extended and 251 logical disks inside extended. | ||
+ | |||
+ | This bootloader uses LBA to load sectors from the hard drive into memory if LBA is supported. Otherwise, the BIOS feature is used to read sectors using CHS. | ||
+ | |||
+ | Before the partition table, at offset 0x1bd, there is the ForceLBA byte. If this byte is not zero, then the LBA is forced. | ||
+ | |||
+ | Before ForceLBA and after BootPart, at offset 0x1bc, there is the BootDev byte. It determines the physical device on which to look for the boot partition with the boot sector. The value of this byte is equal to the hard disk number in the format int 13h. For example, the first hard drive has the number 80h, the second 81h, etc. By default, this byte is 80h, that is, it boots from the first hard drive in the system. | ||
+ | |||
+ | The partition table is located starting from the byte next to ForceLBA, at offset 0x1be, and, according to the standard, consists of 4 partition descriptors, | ||
+ | |||
+ | The sector ends with an MBR signature of 0x55aa. These two bytes are intended to monitor the integrity of the MBR, as well as for convenience when searching for MBRs and bootsectors when restoring data on a crashed hard drive. | ||
+ | |||
+ | This bootloader displays two messages in emergency situations. | ||
+ | |||
+ | The first message – “R” (the first letter of the phrase “Read error”) is displayed when there are disk read errors, namely, if neither the LBA nor the CHS gave a successful status when reading a sector from the disk. | ||
+ | |||
+ | The message “P” means “Partition not found” and is displayed when: | ||
+ | * No active partition found in partition table | ||
+ | * Extended partition not found and BootPart byte > 4 | ||
+ | * Looking through the EBR (Extended boot records) chain, (!!! Fix it) the bootloader did not find a link to the next EBR and the current EBR, according to the value of the BootPart byte, is not the last one. | ||
+ | * The descriptor for the required section in the EBR was not found (should be marked with activity byte 80h). | ||
+ | * The descriptor in the MBR of the primary partition consists of zeros and does not describe any partition. | ||
+ | |||
+ | The boot loader at startup (BIOS int 19h loads it at address 0x7c0:0x0) moves itself to address 0x60:0x0 and transfers control to the new address. The previous bootloader location (from 0x7c0:0x0 to 0x7e0:0x0 of sector size) is used as a buffer for loading sectors. The MBR of the first hard drive, the MBR of the next hard drive, the 1st EBR, the 2nd EBR, ..., the nth EBR and, finally, the boot partition boot sector are alternately loaded into this location. After this, control is transferred to the bootsector. | ||
+ | |||
+ | The space from 0x7e0:0 to 0x800:0 is used by the MBR bootloader, as well as the boot sector, to store some variables. The stack used by both the MBR loader and the bootsector is as follows: ss = 0, the bottom of the stack is initialized to 0x7bff. | ||
+ | |||
+ | This bootloader, after loading the bootsector, ' | ||
+ | |||
+ | The MBR bootloader also enters the physical disk number and the number corresponding to the logical disk letter in the corresponding BPB fields of the bootsector. | ||
+ | |||
+ | These manipulations are performed to make it possible to boot OS /2 from logical drives in the Extended partition. Similar operations are performed by the OS /2 boot manager when loading OS /2 from logical drives. The fact is that for logical disks the hiddensectors value is 63, and for primary partitions it is equal to the disk offset from the beginning of the physical disk. Therefore, normal booting is usually only possible from primary disks. To ensure that OS /2 can boot from a logical disk and that (if a pre-LVM version of OS /2 is used) the correct boot drive letter is assigned, help is needed from the boot manager. | ||
+ | |||
+ | Until now, there were three boot managers that could boot OS /2 from a logical disk: | ||
+ | |||
+ | * OS /2 bootmanager | ||
+ | * bootmanager of VPart from Veit Kannegieser | ||
+ | * AirBoot by Martin Kiewitz. | ||
+ | |||
+ | Now the list can be supplemented with our MBR bootloader, which acts as a mini-boot manager. But our MBR bootloader, unlike a real bootmanager, | ||
(c) osFree project, 2006, Oct 10. | (c) osFree project, 2006, Oct 10. | ||