MBR (Master Boot Record)
MBR은 저장매체의 첫 번째 섹터(LBA 0)에 위치하는 512 bytes 크기의 영역이다. 처음 446 bytes는 부트 코드(Boot Code) 영역, 64 bytes는 파티션 테이블(Partition Table), 마지막 2 bytes는 시그니처를 나타낸다.
운영체제가 부팅될 때 POST(Power On Self-Test) 과정을 마친 후 저장매체의 첫 번째 섹터를 호출하게 되는데 이때 MBR의 부트 코드가 수행된다. 부트 코드(Boot Code)는 파티션 테이블에서 부팅 가능한 파티션을 찾아 해당 파티션의 부트 섹터를 호출해 주는 역할을 한다. 만약, 부팅 가능한 파티션이 없을 경우에는 미리 정의된 에러 메시지를 출력한다.
다음 표는 MBR의 각 영역에 대한 세부적인 데이터구조를 나타낸다.
범위 (Byte Range) | 설명 (Description) | 크기 (Size) |
0x0000 - 0x01BD | Boot code | 446 bytes |
0X01BE - 0X01CD | Partition tabe entry #1 | 16 bytes |
0X01CE - 0X01DD | Partition tabe entry #2 | 16 bytes |
0X01DE - 0X01ED | Partition tabe entry #3 | 16 bytes |
0X01EE - 0X01FD | Partition tabe entry #4 | 16 bytes |
0X01FE - 0X01FF | Signature (0x55AA) | 2 bytes |
파티션 테이블은 각각 16 bytes씩 4개의 엔트리를 가지고 있다. 따라서 하나의 볼륨에서 부팅 가능한 주 파티션은 4개 밖에 생성할 수 없다.
파티션 테이블(Partition Table)
다음은 16bytes 파티션 테이블 엔트리의 세부적인 구조이다.
범위 (Byte Range) | 설명 (Description) | 크기 (Size) |
0x00 - 0x00 | Boot Indicator 00 = do not use for booting 80 = system partition |
1 bytes |
0x01 - 0x03 | Starting CHS address | 3 bytes |
0x04 - 0x04 | Partition type | 1 bytes |
0x05 - 0x07 | Ending CHS address | 3 bytes |
0x08 - 0x0B | Starting LBA address | 4 bytes |
0X0C - 0X0F | Total sectors | 4 bytes |
부트 식별자(Boot Indicator)는 해당 파티션이 부팅 가능한 파티션인지를 나타낸다. 0x80을 가질 경우 부팅 가능한 파티션을 나타내고, 0x00을 가질 경우 부팅이 가능하지 않은 파티션을 나타낸다.
그리고 CHS 주소 값이 나오는데 현재는 대부분 LBA 모드를 사용하므로 사용되지 않고 있다. 그다음으로 해당 파티션의 시작 위치를 가리키는 LBA 주소 값과 파티션 전체의 섹터 수가 나온다. CHS와 다르게 LBA 주소의 마지막을 표시하지 않는 이유는 시작 주소에 섹터의 크기를 더하면 마지막 주소를 알 수 있기 때문이다.
파티션 유형(partition type)은 파티션에 포함된 파일 시스템을 지정한다. System ID와 Partition Type으로 구분하는 경우도 있지만 여기서는 파티션 타입으로 모두 정의한다.