마스터 부트 레코드
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
마스터 부트 레코드(MBR)는 드라이브의 첫 번째 섹터에 위치하며, 부팅 정보를 담고 있는 중요한 구조이다. 1983년 IBM PC DOS 2.0과 함께 처음 도입되었으며, 파티션 테이블, 부트스트랩 코드, 디스크 서명 등으로 구성된다. MBR은 최대 2TB 크기의 디스크를 지원하며, 4개의 기본 파티션을 가질 수 있다. 윈도우 운영체제 보급과 함께 한국에서 오랫동안 사용되었으나, 최근 UEFI 기반 시스템과 대용량 저장 장치의 확산으로 GUID 파티션 테이블(GPT)로의 전환이 이루어지고 있다.
더 읽어볼만한 페이지
- 부팅 - 부팅 디스크
부팅 디스크는 운영 체제 설치, 데이터 복구 등을 위해 사용되는 보조 기억 장치이며, BIOS 설정에 따라 플로피 디스크, CD-ROM, USB 메모리 등 다양한 매체로 부팅하며, 운영 체제에 따라 필요한 파일이 다르다. - 부팅 - 바이너리 블롭
- 바이오스 - 아메리칸 메가트렌즈
아메리칸 메가트렌즈(AMI)는 1985년에 설립된 회사로, BIOS 펌웨어, 서버용 마더보드, 스토리지 컨트롤러 등을 공급하며, 현재는 AMIBIOS, Aptio, AMIDiag 등 다양한 제품을 제공한다. - 바이오스 - 부트 섹터
부트 섹터는 시스템 부팅 코드를 담은 저장 매체의 특정 영역으로, 볼륨 부트 레코드(VBR)와 마스터 부트 레코드(MBR)로 나뉘며, BIOS는 이를 실행하고 UEFI는 부트로더를 직접 로드하지만 바이러스 공격에 취약하다.
마스터 부트 레코드 | |
---|---|
개요 | |
종류 | 부트 섹터 |
위치 | 파티션된 디스크의 첫 번째 섹터 |
크기 | 512 바이트 |
포함 정보 | 부트스트랩 코드 디스크 파티션 테이블 디스크 서명 |
관련 표준 | IBM PC |
상세 정보 | |
역할 | 운영 체제 부팅 프로세스 시작 |
동작 방식 | BIOS가 MBR을 읽고 실행 |
파티션 테이블 | 최대 4개의 주 파티션 정보 저장 |
문제점 | 크기 제한 (512 바이트) 파티션 개수 제한 (4개) 2TiB 이상의 디스크 지원 불가 |
대체 기술 | GPT (GUID 파티션 테이블) |
구조 | |
부트스트랩 코드 영역 | 시스템 로더 호출 및 실행 코드 포함 |
디스크 파티션 테이블 영역 | 파티션의 위치, 크기, 부팅 가능 여부 등 정보 포함 |
매직 넘버 | 유효성 확인을 위한 특정 값 (0x55, 0xAA) |
기술적 세부 사항 | |
주소 지정 방식 | 실질 주소 모드 사용 |
파티션 테이블 엔트리 크기 | 16 바이트 |
지원 운영 체제 | DOS 윈도우 (3.1부터) 리눅스 기타 PC 호환 운영 체제 |
관련 용어 | |
VBR (볼륨 부트 레코드) | 파티션의 첫 번째 섹터, 파일 시스템 정보 및 부트스트랩 코드 포함 |
부트 섹터 | 시동에 필요한 코드를 포함한 섹터 |
액티브 파티션 | 부팅 가능한 파티션 |
확장 파티션 | 여러 개의 논리 드라이브를 포함할 수 있는 파티션 |
참고 사항 | |
MBR 손상 | 시스템 부팅 불가, 데이터 손실 가능성 존재 |
MBR 보호 | 백업 및 복구 도구 사용 권장 |
GPT와의 차이점 | GPT는 더 큰 디스크와 더 많은 파티션 지원 |
2. 역사
PC DOS 2.0이 1983년 3월에 처음 도입되면서 분할된 미디어와 마스터 부트 레코드(MBR)에 대한 지원이 시작되었다. 이는 IBM Personal Computer XT의 10MB 하드 디스크를 지원하기 위해 FAT12 파일 시스템을 사용한 것이다. MBR의 원본은 1982년 6월 IBM의 데이비드 리턴(David Litton)이 작성했다. 파티션 테이블은 최대 4개의 기본 파티션을 지원했으며, DOS 3.0에서 FAT16 파일 시스템이 도입되었을 때도 변경되지 않았다. DOS 3.2에서는 다른 파티션을 담는 컨테이너인 확장 파티션 지원이, DOS 3.30에서는 확장 파티션 내의 중첩된 논리 드라이브가 지원되었다.
MBR은 드라이브의 첫 번째 섹터(물리적 오프셋 0)에 위치하며, 512바이트 이상의 크기를 가진다. MBR은 다음과 같은 구성 요소를 포함할 수 있다.
1996년, 8GB보다 큰 디스크를 지원하기 위해 Windows 95B 및 MS-DOS 7.10에 논리 블록 주소 지정(LBA) 지원이 도입되었다. ''디스크 타임스탬프''도 함께 도입되었다. MBR 파티션 항목과 부트 코드는 32비트로 제한되어, 512바이트 섹터를 사용하는 디스크에서 지원하는 최대 디스크 크기는 2TiB로 제한되었다. 2010년 이후 더 큰 디스크가 널리 사용되면서 MBR 파티션 구성표는 GUID 파티션 테이블(GPT)로 대체되는 과정에 있다.
3. 구조
MBR 파티션 테이블 방식에는 정확히 4개의 기본 파티션 테이블 항목이 있는 것이 원칙이지만, 일부 운영 체제 및 시스템 도구에서는 이를 5개(PTS-DOS)[6], 8개(AST 및 NEC MS-DOS)[7][8] 또는 그 이상으로 확장하기도 한다.
MBR의 구조는 운영 체제 및 사용되는 도구에 따라 조금씩 다를 수 있지만, 일반적으로 다음과 같은 형태를 가진다.
주소 | 설명 | 크기 (바이트) | |
---|---|---|---|
0x0000 (0) | 부트스트랩 코드 영역 | 446 | |
0x01BE (446) | 파티션 항목 №1 | 파티션 테이블 (기본 파티션용) | 16 |
0x01CE (462) | 파티션 항목 №2 | 16 | |
0x01DE (478) | 파티션 항목 №3 | 16 | |
0x01EE (494) | 파티션 항목 №4 | 16 | |
0x01FE (510) | 0x55 | 부트 시그니처 | 2 |
0x01FF (511) | 0xAA | ||
총 크기: 446 + 4×16 + 2 | 512 |
주소 | 설명 | 크기 (바이트) | |
---|---|---|---|
0x0000 (0) | 부트스트랩 코드 영역 (파트 1) | 218 | |
0x00DA (218) | 0x0000 | 디스크 타임스탬프 (선택 사항, Windows 95B/98/98SE/ME (MS-DOS 7.1–8.0). 또는, OEM 로더 시그니처와 NEWLDR로 사용될 수 있음) | 2 |
0x00DC (220) | 원본 물리 드라이브 (0x80 –0xFF ) | 1 | |
0x00DD (221) | 초 (0–59) | 1 | |
0x00DE (222) | 분 (0–59) | 1 | |
0x00DF (223) | 시 (0–23) | 1 | |
0x00E0 (224) | 부트스트랩 코드 영역 (파트 2, 0x0000 에서 코드 항목) | 216 (또는 222) | |
0x01B8 (440) | 32비트 디스크 시그니처 | 디스크 시그니처 (선택 사항, UEFI, Linux, Windows NT 제품군 및 기타 OS) | 4 |
0x01BC (444) | 0x0000 (보호된 경우 0x5A5A ) | 2 | |
0x01BE (446) | 파티션 항목 №1 | 파티션 테이블 (기본 파티션용) | 16 |
0x01CE (462) | 파티션 항목 №2 | 16 | |
0x01DE (478) | 파티션 항목 №3 | 16 | |
0x01EE (494) | 파티션 항목 №4 | 16 | |
0x01FE (510) | 0x55 | 부트 시그니처 | 2 |
0x01FF (511) | 0xAA | ||
총 크기: 218 + 6 + 216 + 6 + 4×16 + 2 | 512 |
이 외에도 AAP MBR, NEWLDR MBR, AST/NEC MS-DOS 및 SpeedStor MBR 등 다양한 MBR 구조가 존재한다.
3. 1. 파티션 테이블
MBR 파티션 테이블 스키마(IBM PC 파티셔닝 스키마 규약)에 따라 파티션 작업을 한 저장 장치에는 MBR의 파티션 테이블 안에 기본(primary) 파티션 엔트리들이 있다.규약상 MBR 파티션 스키마에서는 4개의 기본 파티션 엔트리만 있어야 하지만, 일부 DOS 운영 체제에서는 엔트리를 5개(PTS-DOS)[6]) 또는 8개(AST 및 NEC DOS)[7][8]까지 확장하였다.
GUID 파티션 테이블 스키마로 파티션 작업을 한 기억 장치에도 MBR에 파티션 테이블이 있는데, 이 파티션 테이블은 MBR 파티션 테이블 스키마만 인식할 수 있는 프로그램이 (GUID 파티션 테이블 스키마로 파티션 작업이 된) 기억 장치를 마치 비어 있는 것처럼 인식하고 그 위에 파티션을 만드는 것을 막기 위해, GUID 파티션이 존재한다고 알려주는 것만을 목적으로 한다.
오프셋 | 설명 |
---|---|
0x00 | (1 바이트) 파티션 상태 (0x80 = 시동 가능, 0x00 = 부팅불가, 기타 = 비정상) |
0x01 | (3 바이트) 파티션의 첫 번째 섹터의 실린더-헤드-섹터 주소 |
0x04 | (1 바이트) 파티션 종류[5] |
0x05 | (3 바이트) 파티션의 마지막 실린더-헤드-섹터 주소 |
0x08 | (4 바이트) 파티션의 첫 번째 섹터의 LBA |
0x0C | (4 바이트) 파티션의 크기 (단위: 섹터) |
주소 | 설명 | 크기 (바이트) | |
---|---|---|---|
0x0000 (0) | 부트스트랩 코드 영역 | 446 | |
0x01BE (446) | 파티션 항목 №1 | 파티션 테이블 (기본 파티션용) | 16 |
0x01CE (462) | 파티션 항목 №2 | 16 | |
0x01DE (478) | 파티션 항목 №3 | 16 | |
0x01EE (494) | 파티션 항목 №4 | 16 | |
0x01FE (510) | 0x55 | 부트 시그니처 | 2 |
0x01FF (511) | 0xAA | ||
총 크기: 446 + 4×16 + 2 | 512 |
주소 | 설명 | 크기 (바이트) | |
---|---|---|---|
0x0000 (0) | 부트스트랩 코드 영역 (파트 1) | 218 | |
0x00DA (218) | 0x0000 | 디스크 타임스탬프 (선택 사항, Windows 95B/98/98SE/ME (MS-DOS 7.1–8.0). 또는, OEM 로더 시그니처와 NEWLDR로 사용될 수 있음) | 2 |
0x00DC (220) | 원본 물리 드라이브 (0x80 –0xFF ) | 1 | |
0x00DD (221) | 초 (0–59) | 1 | |
0x00DE (222) | 분 (0–59) | 1 | |
0x00DF (223) | 시 (0–23) | 1 | |
0x00E0 (224) | 부트스트랩 코드 영역 (파트 2, 0x0000 에서 코드 항목) | 216 (또는 222) | |
0x01B8 (440) | 32비트 디스크 시그니처 | 디스크 시그니처 (선택 사항, UEFI, Linux, Windows NT 제품군 및 기타 OS) | 4 |
0x01BC (444) | 0x0000 (보호된 경우 0x5A5A ) | 2 | |
0x01BE (446) | 파티션 항목 №1 | 파티션 테이블 (기본 파티션용) | 16 |
0x01CE (462) | 파티션 항목 №2 | 16 | |
0x01DE (478) | 파티션 항목 №3 | 16 | |
0x01EE (494) | 파티션 항목 №4 | 16 | |
0x01FE (510) | 0x55 | 부트 시그니처 | 2 |
0x01FF (511) | 0xAA | ||
총 크기: 218 + 6 + 216 + 6 + 4×16 + 2 | 512 |
주소 | 설명 | 크기 (바이트) | |
---|---|---|---|
0x0000 (0) | 부트스트랩 코드 영역 | 428 | |
0x01AC (428) | 0x78 | AAP 시그니처 (선택 사항) | 2 |
0x01AD (429) | 0x56 | ||
0x01AE (430) | AAP 물리 드라이브 (0x80 –0xFE , 0x00 : 사용 안 함, 0x01 –0x7F , 0xFF : 예약됨) | AAP 레코드 (선택 사항) (특수 의미를 가진 AAP 파티션 항목 #0) | 1 |
0x01AF (431) | AAP 파티션/이미지 파일 또는 VBR/EBR의 CHS (시작) 주소 | 3 | |
0x01B2 (434) | AAP 파티션 유형에 대해 예약됨 (사용하지 않으면 0x00 ) (선택 사항) | 1 | |
0x01B3 (435) | AAP의 CHS 종료 주소에 대해 예약됨 (선택 사항, 오프셋 0x01B5 의 바이트는 MBR 체크섬(PTS DE, BootWizard)에도 사용됨, 사용하지 않으면 0x000000 ) | 3 | |
0x01B6 (438) | AAP 이미지 파일 또는 VBR/EBR의 시작 LBA 또는 AAP 파티션의 상대 섹터 (DOS 3.31 BPB의 "숨겨진 섹터" 항목 위 로드된 섹터에서 오프셋 +01Chex 에 복사하여 EBR 부팅도 지원) | 4 | |
0x01BA (442) | AAP의 섹터에 대해 예약됨 (선택 사항, 사용하지 않으면 0x00000000 ) | 4 | |
0x01BE (446) | 파티션 항목 №1 | 파티션 테이블 (기본 파티션용) | 16 |
0x01CE (462) | 파티션 항목 №2 | 16 | |
0x01DE (478) | 파티션 항목 №3 | 16 | |
0x01EE (494) | 파티션 항목 №4 | 16 | |
0x01FE (510) | 0x55 | 부트 시그니처 | 2 |
0x01FF (511) | 0xAA | ||
총 크기: 428 + 2 + 16 + 4×16 + 2 | 512 |
주소 | 설명 | 크기 (바이트) | |
---|---|---|---|
0x0000 (0) | JMPS (EBhex ) / NEWLDR 레코드 크기 (종종 0x0A /0x16 /0x1C , 0x000C /0x0018 /0x001E 에서 코드 시작) | NEWLDR 레코드 (선택 사항) | 2 |
0x0002 (2) | "NEWLDR " 시그니처 | 6 | |
0x0008 (8) | 로더 물리 드라이브 및 부트 플래그 (0x80 –0xFE , 0x00 –0x7E , 0xFF , 0x7F ) (사용하지 않는 경우, 이 바이트와 다음 3바이트는 모두 0이어야 함) | 1 | |
0x0009 (9) | 로더 부트 섹터 또는 이미지 파일(예: IBMBIO.LDR)의 CHS 주소 (사용하지 않는 경우 0x000000 ) | 3 | |
0x000C (12) | 허용된 DL 최소값, 그렇지 않으면 파티션 테이블에서 가져옴 (0x80 : 기본값, 0x00 : 항상 DL 사용, 0xFF : 항상 테이블 항목 사용) | 1 | |
0x000D (13) | 예약됨 (기본값: 0x000000 ) | 3 | |
0x0010 (16) | 로더 부트 섹터 또는 이미지 파일의 LBA (선택 사항, 사용하지 않는 경우 0x00000000 ) | 4 | |
0x0014 (20) | VBR 부트 유닛의 패치 오프셋 (사용하지 않는 경우 기본값 0x0000 , 그렇지 않으면 0024hex 또는 01FDhex ) | 2 | |
0x0016 (22) | 체크섬 (사용하지 않는 경우 0x0000 ) | 2 | |
0x0018 (24) | OEM 로더 시그니처 ("MSWIN4 " for REAL/32, 오프셋도 참조, VBR의 오프셋 +003hex 에서 OEM 레이블에 해당 (선택 사항) | 6 | |
다름 | 부트스트랩 코드 영역 (0x0000 에서 코드 항목) | 다름 | |
0x01AC (428) | 0x78 | AAP 시그니처 (선택 사항) | 2 |
0x01AD (429) | 0x56 | ||
0x01AE (430) | 특수 의미를 가진 AAP 파티션 항목 №0 | AAP 레코드 (선택 사항) | 16 |
0x01BE (446) | 파티션 항목 №1 | 파티션 테이블 (기본 파티션용) | 16 |
0x01CE (462) | 파티션 항목 №2 | 16 | |
0x01DE (478) | 파티션 항목 №3 | 16 | |
0x01EE (494) | 파티션 항목 №4 | 16 | |
0x01FE (510) | 0x55 | 부트 시그니처 | 2 |
0x01FF (511) | 0xAA | ||
총 크기: 30 + 398 + 2 + 16 + 4×16 + 2 | 512 |
주소 | 설명 | 크기 (바이트) | |
---|---|---|---|
0x0000 (0) | 부트스트랩 코드 영역 | 380 | |
0x017C (380) | 0x5A | AST/NEC 시그니처 (선택 사항, SpeedStor에서는 아님) | 2 |
0x017D (381) | 0xA5 | ||
0x017E (382) | 파티션 항목 №8 | AST/NEC 확장 파티션 테이블 (선택 사항, SpeedStor에도 해당) | 16 |
0x018E (398) | 파티션 항목 №7 | 16 | |
0x019E (414) | 파티션 항목 №6 | 16 | |
0x01AE (430) | 파티션 항목 №5 | 16 | |
0x01BE (446) | 파티션 항목 №4 | 파티션 테이블 (기본 파티션용) | 16 |
0x01CE (462) | 파티션 항목 №3 | 16 | |
0x01DE (478) | 파티션 항목 №2 | 16 | |
0x01EE (494) | 파티션 항목 №1 | 16 | |
0x01FE (510) | 0x55 | 부트 시그니처 | 2 |
0x01FF (511) | 0xAA | ||
총 크기: 380 + 2 + 4×16 + 4×16 + 2 | 512 |
3. 2. 부트스트랩 로더 (부트 코드)
IA-32 IBM PC 호환 기종에서는 ROM 바이오스의 부트스트래핑 펌웨어가 MBR을 읽고 실행한다. i386 계열의 프로세서들은 리얼 모드로 시동되기 때문에 MBR의 코드는 리얼 모드 코드여야 한다. 일반적으로 MBR의 코드는 체인 로딩 방식으로 부트 파티션[9]의 볼륨 부트 레코드에게 시동 제어권을 넘기는데, 일부 시동 관리 프로그램들은 이러한 일반적인 방법이 아닌 독자적인 방법을 사용한다.MBR 코드는 파티션 테이블에서 액티브 플래그[9] 가 있는 1개의 파티션을 찾아서 해당 파티션의 볼륨 부트 레코드를 읽고 실행한다.
분할된 미디어와 MBR 지원은 1983년 3월 IBM PC DOS 2.0에서 IBM Personal Computer XT의 10MB 하드 디스크를 지원하기 위해 FAT12 파일 시스템과 함께 처음 도입되었다. MBR의 원본 버전은 1982년 6월 IBM의 David Litton에 의해 작성되었다. 파티션 테이블은 최대 4개의 ''기본 파티션''을 지원했다. 확장 파티션 지원은 DOS 3.2에서, 확장 파티션 내의 중첩된 ''논리 드라이브''는 DOS 3.30에서 제공되었다.
1996년에는 Windows 95B 및 MS-DOS 7.10에 논리 블록 주소 지정 (LBA) 지원이 도입되었다. ''디스크 타임스탬프''도 함께 도입되었다. MBR은 운영 체제 및 파일 시스템에 독립적으로 작동하도록 설계되었으나, 최근 Microsoft 구현에서는 FAT16B 및 FAT32 파티션 유형의 경우 CHS 액세스를 강제하고, LBA가 사용된다.
MBR 형식은 PC 호환 컴퓨터의 광범위한 보급으로 인해 사실상 업계 표준으로 채택되었다.
상용 운영 체제에서 사용되는 MBR 파티션 항목과 MBR 부트 코드는 32비트로 제한된다. 따라서 MBR 파티션 구성표가 512바이트 섹터를 사용하는 디스크에서 지원하는 최대 디스크 크기는 2TiB로 제한된다. 2010년 이후 더 큰 디스크가 널리 사용 가능해짐에 따라 MBR 파티션 구성표는 GUID 파티션 테이블 (GPT)로 대체되는 과정에 있다.
MBR은 드라이브의 첫 번째 디스크 섹터에 위치한 512바이트 이상의 바이트로 구성되며 다음을 포함할 수 있다.
- 파티션 테이블
- 부트스트랩 코드: 구성된 부팅 가능한 파티션을 식별한 다음 해당 볼륨 부트 레코드 (VBR)를 체인 로더로 로드하고 실행하는 명령.
- 선택적 32비트 ''디스크 타임스탬프''.
- 선택적 32비트 ''디스크 서명''.
IBM PC 호환 기종 컴퓨터에서, 부트스트래핑 펌웨어는 MBR을 로드하고 실행한다. 모든 x86 BIOS 아키텍처 시스템은 운영 모드에서 마이크로프로세서를 시작하며, 이를 리얼 모드라고 한다. BIOS는 MBR을 물리 메모리로 읽어 들인 다음, 부트 코드의 시작점으로 마이크로프로세서를 지시한다. MBR의 시작 부분은 리얼 모드 기계어를 포함할 것으로 예상된다.
BIOS는 물리 디스크에서 정확히 하나의 섹터를 로드하고 실행하기 때문에, 부트 코드가 있는 MBR에 파티션 테이블을 갖는 것은 MBR 프로그램의 설계를 단순화한다. MBR은 대상 파티션의 볼륨 부트 레코드 (VBR)를 로드하는 작은 프로그램을 포함하며, 제어가 이 코드로 전달되어 실제 운영 체제를 로드한다. 이 과정을 체인 로딩이라고 한다.
PC DOS 및 MS-DOS를 부팅하기 위해 널리 사용되는 MBR 코드 프로그램이 생성되었으며, 유사한 부트 코드는 광범위하게 사용되고 있다. 이러한 부트 섹터는 `FDISK` 파티션 테이블 체계를 사용하고 MBR의 내장 파티션 테이블에서 파티션 목록을 스캔하여 ''활성 플래그''로 표시된 항목을 찾는다. 그런 다음 활성 파티션의 볼륨 부트 레코드 (VBR)를 로드하고 실행한다.
다양한 방식으로 작동하는 부트 매니저에 의해 설치되는 대체 부트 코드 구현이 있다. 일부 MBR 코드는 디스크의 첫 번째 트랙에서 부트 매니저를 위한 추가 코드를 로드하여 실행한다. 다른 MBR 코드는 부트 매니저 코드의 나머지 부분을 로드하고 실행하기 위한 디스크 위치 목록을 포함한다.
x86 프로세서를 사용하지 않거나 비-BIOS 펌웨어를 사용하는 x86 머신에서는 이 설계가 적합하지 않으며, MBR은 시스템 부트스트랩의 일부로 사용되지 않는다. 확장 펌웨어 인터페이스 (EFI) 펌웨어는 GPT 파티션 체계와 파일 할당 테이블 (FAT) 파일 시스템 형식을 직접 이해할 수 있으며, EFI 시스템 파티션에 파일로 저장된 프로그램을 로드하고 실행한다.
일부 MBR 대체 코드는 EFI 펌웨어의 부트스트랩을 에뮬레이션하여 비-EFI 머신이 GPT 파티션 체계를 사용하여 디스크에서 부팅할 수 있게 한다.
표준을 준수하는 MBR은 메모리 위치에 로드된 VBR로 실행을 전달하며, 다음 레지스터를 유지하거나 특별히 설정한다.
- CS:IP = (상수)
- DL = 부팅 드라이브 장치
- DH 및 ES:DI의 내용은 MBR에서 보존되어야 하지만, 많은 MBR에서는 그렇지 않다.
MBR 코드는 많은 구현에서 VBR에 추가 정보를 전달한다.
- DS:SI = 활성화된 VBR에 해당하는 16바이트 MBR 파티션 테이블 항목을 가리킨다.
- DS:BP = 선택적으로 활성화된 VBR에 해당하는 16바이트 MBR 파티션 테이블 항목을 가리킨다.
DR-DOS 7.07에서 확장된 MBR 및 LOADER와 함께 확장된 인터페이스를 선택적으로 제공할 수 있다.
- AX = 이 NEWLDR 확장의 존재를 나타내는 매직 시그니처
- DL = 부팅 드라이브 장치
- DS:SI = 사용된 16바이트 MBR 파티션 테이블 항목을 가리킨다.
- ES:BX = 부트 섹터 또는 NEWLDR 섹터 이미지의 시작점
- CX = 예약됨
GPT와 함께 ''Enhanced Disk Drive Specification'' (EDD) 4 하이브리드 MBR 제안은 인터페이스에 대한 다른 확장을 권장한다.
- EAX = ("`!GPT`")
- DL = 부팅 드라이브 장치
- DS:SI = 하이브리드 MBR 핸드오버 구조를 가리킨다.
- ES:DI = "`$PnP`" 설치 확인 구조를 가리킵니다.
부트스트랩 로더는 마스터 부트 로더, 마스터 부트 코드, 초기 프로그램 로더(IPL) 등으로도 불린다. IBM PC에서,
# 자신을 메모리상으로 복사하여 기동한 뒤, 부트 가능 플래그가 설정된 파티션(이것을 "액티브 파티션"이라고 칭한다)을 찾는다.
# 해당 파티션 부트 섹터에 포함된 부트스트랩 로더를 로드하고, 그것으로 제어를 넘긴다.
이 프로그램 코드는 IBM과 마이크로소프트에 의해 개발되었지만, 어떤 운영 체제(OS)도 사실상의 표준으로 이용했다.
기동시에 메뉴 방식으로 선택할 수 있는 각종 프로그램이 자주 사용되게 되었다.
다음은 부팅 시퀀스 중 부트스트랩 로더가 담당하는 부분이다.
# 파티션 테이블의 4개 테이블 엔트리 시작 부분부터 검사하여, 부팅 플래그가 설정된 기본 영역 (액티브 파티션)이 있는지 찾는다.
# 부팅 플래그가 설정된 기본 영역이 발견되면 해당 영역의 시작 위치를 파티션 테이블에서 가져온다.
# BIOS에 해당 위치를 알려 메모리에 로드하도록 하고, IPL에 제어 권한을 넘긴다.
3. 3. 디스크 서명 (Disk Signature)

'''디스크 서명'''(Disk Signature)은 디스크 매체(디스크 장치와는 다름, 이동식 하드 디스크의 경우 두 개가 반드시 같을 필요는 없음)를 고유하게 식별하는 32비트 값이다.
디스크 서명은 Windows NT 버전 3.5에서 도입되었지만, 현재 리눅스 커널 버전 2.6 이상을 포함한 여러 운영 체제에서 사용된다. 리눅스 도구는 NT 디스크 서명을 사용하여 컴퓨터가 부팅된 디스크를 결정할 수 있다.
Windows NT(및 이후 Microsoft 운영 체제)는 디스크 서명을 해당 OS에서 컴퓨터에 연결된 모든 디스크의 모든 파티션에 대한 인덱스로 사용한다. 이러한 서명은 주로 디스크 파티션과 드라이브 문자의 영구 매핑을 저장하기 위해 Windows 레지스트리 키에 보관된다. 부팅 가능한 Windows NT(또는 이후) 파티션의 위치를 설명하기 위해 Windows NT BOOT.INI 파일에서도 사용될 수 있다(대부분은 그렇지 않음). Windows 2000/XP 레지스트리에 NT 디스크 서명이 나타나는 주요 키(여러 개 중 하나)는 다음과 같다.
`HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices\`
MBR에 저장된 디스크의 서명이 `A8 E1 B9 D2` (해당 순서)이고 첫 번째 파티션이 Windows에서 논리 드라이브 C:에 해당하면 '''`\DosDevices\C:`''' 키 값 아래의 `REG_BINARY` 데이터는 다음과 같다.
`A8 E1 B9 D2 00 7E 00 00 00 00 00 00`
처음 네 바이트는 해당 디스크 서명이다. (다른 키에서 이러한 바이트는 MBR 섹션에서 발견된 것과 반대 순서로 나타날 수 있다.) 그 뒤에 64비트 정수를 형성하는 8바이트가 더 있는데, 이는 이 파티션의 바이트 오프셋을 찾기 위해 리틀 엔디안 표기법으로 사용된다. 이 경우, `00 7E`는 16진수 값 `0x7E00` (32256)에 해당한다. 문제의 드라이브가 섹터 크기가 512바이트라고 가정하면, 이 바이트 오프셋을 512로 나누면 63이 되는데, 이는 파티션의 첫 번째 섹터를 포함하는 물리적 섹터 번호(또는 LBA)이다. (CHS 튜플의 섹터 값에 사용되는 "섹터 수"는 '''1'''부터 세는 것과 달리 절대 또는 LBA 섹터 값은 ''0''부터 시작하여 세기 시작한다.)
이 디스크에 디스크 서명 다음에 `00 F8 93 71 02` 값을 가진 다른 파티션이 있는 경우(예: `\DosDevices\D:` 키 값 아래), 바이트 오프셋 `0x00027193F800` (10495457280)에서 시작하며, 이는 물리적 섹터 20498940의 첫 번째 바이트이기도 하다.
윈도우 비스타부터 디스크 서명은 부팅 구성 데이터 (BCD) 저장소에도 저장되며 부팅 프로세스는 이에 의존한다. 디스크 서명이 변경되거나, 찾을 수 없거나, 충돌이 있는 경우 Windows가 부팅할 수 없다. Windows가 Advanced Active Partition 항목의 LBA 주소의 중복 부분을 가상 디스크 서명으로 사용하도록 강제하지 않는 한, Windows의 사용은 PTS-DOS 7 및 DR-DOS 7.07의 Advanced Active Partition 기능과 충돌하며, 특히 부트 코드가 디스크의 처음 8GB 외부에 있는 경우 LBA 주소를 사용해야 한다.
4. 파티션 유형 식별자
파티션 테이블의 각 항목에는 해당 파티션의 파일 시스템 유형을 나타내는 1바이트 식별자가 포함되어 있다.[5] 다음은 주요 파티션 유형 식별자(16진수)를 정리한 표이다.
저장 값 (16진 값) | 파일 시스템 이름 |
---|---|
0x00 | 빈 파티션 |
0x01 / 0x11 | FAT12 (후자는 숨김, 이하 0x01 - 0x0F에 대한 0x11 - 0x1F는 동일) |
0x04 / 0x14 | FAT16 (32MB 이하) |
0x05 / 0x15 | 확장 MS-DOS 영역 |
0x06 / 0x16 | FAT16 (32MB보다 큼) |
0x07 / 0x17 | HPFS / NTFS / exFAT |
0x0B / 0x1B | FAT32 |
0x0C / 0x1C | FAT32 (LBA 지원) |
0x0E / 0x1E | FAT16 (LBA 지원) |
0x0F / 0x1F | 확장 DOS 영역 (LBA 지원) |
0x13 | 초한자 파일 시스템 |
0x39 | Plan 9 파일 시스템 |
0x71 | EOTA의 SFS 파일 시스템 |
0x81 | MINIX 파일 시스템 / ext1 |
0x82 | 리눅스 스왑 파티션 / Solaris 10 이전 파일 시스템 |
0x83 | ext2 등 리눅스 파일 시스템 |
0x85 | 리눅스 확장 영역 |
0xA0 | 절전 영역 |
0xA5 | FreeBSD 유닉스 파일 시스템 (FFS/UFS1/UFS2) |
0xA6 | OpenBSD UFS |
0xA9 | NetBSD UFS |
0xBE | Solaris 부팅용 파티션 (미니 루트) |
0xBF | Solaris 파일 시스템 |
0xC1 | DR-DOS 파일 시스템 |
0xC4 | DR-DOS 파일 시스템 |
0xC6 | DR-DOS 파일 시스템 (32M보다 큼) |
0xEB | BeOS 파일 시스템 |
0xEE | GPT |
0xEF | EFI 시스템 파티션 (FAT12/FAT16/FAT32) |
5. 프로그래밍 고려 사항
MBR은 리틀 엔디안 방식으로 데이터를 저장한다. ROM 바이오스(BIOS)는 MBR을 물리 메모리의 : 주소에 로드하고, 이 주소로 점프하여 실행을 시작한다. 이때, CPU는 리얼 모드 상태이며, 다음 레지스터 값을 갖는다.
- CS:IP = : (고정)
- 일부 Compaq BIOS는 오류로 :을 대신 사용하기도 한다.
- DL = 부팅 드라이브 유닛 (고정 디스크/이동식 드라이브: = 첫 번째, 플로피 디스크/슈퍼플로피: = 첫 번째)
- 플러그 앤 플레이 BIOS 사양 및 BIOS 부팅 사양(BBS)은 다른 장치도 부팅 가능하게 한다.
- DH 비트 5 = 0: INT 13h를 통해 지원되는 장치 (일부 IBM BIOS에서 지원).
플러그 앤 플레이 BIOS 또는 BBS를 지원하는 시스템은 ES:DI 레지스터를 통해 PnP 데이터에 대한 포인터를 추가로 제공한다.
MBR 코드 자체는 446바이트 이하의 크기를 가져야 한다. 나머지 공간은 파티션 테이블 및 기타 정보(디스크 타임스탬프, 디스크 서명 등)를 저장하는 데 사용된다.
6. 한계 및 대체
MBR 파티션 테이블 스키마는 32비트 주소 지정을 사용하므로, 512바이트 섹터를 사용하는 디스크에서 지원하는 최대 디스크 크기는 2TiB로 제한된다. 이러한 한계를 극복하기 위해 2010년 이후 더 큰 디스크를 지원하는 새로운 파티션 구성표인 GUID 파티션 테이블(GPT)이 도입되어 대체되고 있다. GPT는 64비트 주소 지정을 사용하며, 더 많은 수의 파티션을 지원하고, UEFI 펌웨어와 함께 사용되는 경우가 많다.
보호 MBR은 데이터 무결성을 보장하는 역할을 하지만, GPT 체계를 지원하지 않는 운영 체제와의 하위 호환성은 제공하지 않는다. 반면, 하이브리드 MBR은 GPT와 MBR 파티션 구성표를 모두 지원하는 비표준 방식이다. 디스크의 첫 2TiB 내에 위치한 파티션을 두 파티션 구성표에서 동시에 유지하거나, 이전 운영 체제가 GPT 파티션에서 부팅할 수 있도록 지원하지만, 특정 상황에서 다양한 호환성 문제를 일으킬 수 있다.
7. MBR 복구 및 편집
윈도우 2000 및 윈도우 XP에서는 복구 콘솔의 `fixmbr` 명령을 사용하여 MBR을 복구할 수 있다.[9] 윈도우 비스타 및 윈도우 7에서는 복구 환경의 `BOOTREC /FIXMBR` 명령을 사용하여 MBR 복구를 수행할 수 있다.
MS-DOS와 윈도우 9x 계열 ((Windows 95, Windows 98/98SE, Windows Me)에서는 FD로 부팅하여 `fdisk /mbr` 명령을 실행하여 MBR을 복구할 수 있다.[9]
리눅스에서는 `sfdisk` ( SystemRescueCD에서 사용 가능)를 사용하여 기본 및 확장 파티션 테이블을 백업하고 복원할 수 있다. `sfdisk -d /dev/hda > hda.out` 명령으로 백업하고, `sfdisk /dev/hda < hda.out` 명령으로 복원한다. 또한 `dd`는 스토리지 장치의 MBR을 포함한 모든 위치를 읽고 쓰는 데 사용되는 POSIX 명령이다.
MBRWizard와 같은 타사 유틸리티를 사용하여 파티션 테이블을 직접 편집할 수도 있다. GRUB, LILO와 같은 부트 로더를 설치하여 MBR에 부트 코드를 설치할 수도 있다.
참조
[1]
웹사이트
MBR(マスターブートレコード)とは - 意味をわかりやすく - IT用語辞典 e-Words
https://e-words.jp/w[...]
[2]
웹사이트
Bootsector of the IBM PC - Syslinux Wiki
https://wiki.syslinu[...]
[3]
웹사이트
EOTAのハードディスクへのインストール
http://eodevtools.so[...]
2009-11-22
[4]
웹사이트
Solaris fdisk 識別子を変更する方法
http://docs.sun.com/[...]
2009-11-22
[5]
웹인용
List of partition identifiers for PCs
http://www.win.tue.n[...]
[6]
웹인용
Properties of partition tables
http://www.win.tue.n[...]
[7]
문서
Some OEM systems, such as AST DOS (type '''14'''h) and NEC DOS (type '''24'''h) had 8 instead of 4 partition entries in their MBR sectors.
[8]
웹인용
Notes on the Differences in one OEM version of the DOS 3.30 MBR
http://mirror.href.c[...]
2008-10-03
[9]
문서
파티션 상태값(16바이트 파티션 레코드 중 0x00)에서 0x80 값을 액티브 플래그(active flag)라고 부른다. 즉 액티브 플래그가 있는 파티션은 시동 파티션이다.
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com