마스터 부트 레코드

Master boot record

MBR(Master Boot Record)은 IBM PC 호환 시스템 및 그 이후에서 사용하기 위한 고정 디스크 또는 이동식 드라이브와 같은 분할컴퓨터 대용량 저장 장치의 맨 앞에 있는 특수한 유형의 부팅 섹터입니다.MBR의 개념은 1983년 PC DOS 2.0과 함께 공개적으로 도입되었습니다.

MBR은 파일 시스템을 포함하는 논리 파티션이 해당 미디어에서 어떻게 구성되었는지에 대한 정보를 보유합니다.MBR에는 설치된 운영 체제의 로더로 기능하는 실행 가능한 코드도 포함되어 있습니다.일반적으로 로더의 2단계에 제어를 넘기거나 각 파티션의 볼륨 부트 레코드(VBR)와 함께 사용합니다.이 MBR 코드는 보통 [1]부트로더라고 불립니다.

MBR 내의 파티션테이블 구성은 파티션된 디스크의 주소 지정 가능한 최대 스토리지 공간을 2TiB(2×512바이트)[2]32 제한합니다.32비트 산술 또는 4096바이트 섹터는 공식적으로 지원되지 않습니다.이는 기존 부트 로더 및 대부분의 MBR 준거 운영체제 및 시스템 도구와의 호환성이 손상되기 때문입니다.또, 좁은 제어 시스템 환경 이외에서 사용하면, 심각한 데이터 파손이 발생할 가능성이 있기 때문입니다.따라서 MBR 기반 파티션 구성표는 새 시스템에서 GPT(GUID 파티션 테이블) 구성표로 대체되는 중입니다.GPT는 MBR과 공존할 수 있기 때문에 오래된 시스템에 한정된 형식의 하위 호환성을 제공할 수 있습니다.

MBR은 플로피, 슈퍼플로피 또는 이와 같이 동작하도록 구성된 기타 스토리지 디바이스와 같은 파티셔닝되지 않은 미디어에는 존재하지 않습니다.

개요

파티션 미디어와 그에 따른 마스터 부트 레코드(MBR)에 대한 지원은 1983년 3월 당시 새로운 IBM 개인용 컴퓨터 XT의 10MB 하드 디스크를 지원하기 위해 IBM PC DOS 2.0과 함께 도입되었으며, 여전히 FAT12 파일 시스템을 사용하고 있습니다.MBR의 원래 버전은 1982년 6월 IBM의 David Litton에 의해 작성되었습니다.파티션 테이블은 최대 4개의 프라이머리 파티션을 지원하며, 중 DOS는 1개만 사용할 수 있습니다.이것은 DOS 3.0에서 FAT16이 새로운 파일 시스템으로 도입되었을 때 변경되지 않았습니다.다른 파티션을 보관하기 위한 컨테이너로 사용되는 특수한 프라이머리 파티션 타입인 확장 파티션의 지원은 DOS 3.2에서 추가되었으며 확장 파티션 내에 중첩된 논리 드라이브는 DOS 3.30에서 제공되었습니다.MS-DOS, PC DOS, OS/2 및 Windows는 기동할 수 없기 때문에, 일부 서드 파티의 실장을 제외하고, DOS 및 OS/2의 시대까지 MBR 형식과 부트 코드는 거의 변경되지 않았습니다.

1996년에는 8GB보다 큰 디스크를 지원하기 위해 Windows 95B 및 DOS 7.10에서 LBA(논리 블록 주소 지정) 지원이 도입되었습니다.디스크 타임스탬프[3]도입되었습니다.이는 MBR이 운영체제와 파일시스템에 의존하지 않는다는 개념도 반영하고 있습니다.단, 이 설계규칙은 FAT16B FAT32 파티션타입 0x06/0x0B에 대해 CHS 액세스를 강제하는 최신 MBR 실장에서는 부분적으로 손상되어 LBA가 0x0E/0x0C에 사용됩니다.

MBR 포맷의 특정 본질적인 세부 사항에 대한 문서화가 불충분할 수 있지만(가끔 호환성 문제가 발생하기도 함), PC 호환 컴퓨터의 광범위한 인기와 수십 년에 걸친 반정전성 특성 때문에 MBR 포맷은 사실상의 업계 표준으로 널리 채택되어 왔습니다.이는 다른 플랫폼용 컴퓨터 운영 체제에서 지원되는 수준이었습니다.이는 부트스트래핑 및 파티션 [4]분할을 위한 기존 또는 크로스 플랫폼 표준과 함께 수행될 수 있습니다.

단, MBR 파티션엔트리와 상용 운영체제시스템에서 사용되는 MBR 부트코드는 32비트로 [2]제한됩니다.따라서 MBR 파티션 구성 방식(33비트 산술 없음)에 의해 512바이트 섹터(실제 또는 에뮬레이트)를 사용하는 디스크에서 지원되는 최대 디스크 크기는 [2]2TiB로 제한됩니다.따라서 용량이 큰 디스크는 2010년부터 널리 사용 가능하게 되었기 때문에 다른 파티션 구성을 사용해야 합니다.따라서 MBR 파티셔닝 방식이 GPT(GUID Partition Table)로 대체되고 있습니다.공식적인 접근 방식은 보호 MBR을 사용하여 데이터 무결성을 보장하는 것에 그칩니다.특히 GPT 체계를 지원하지 않는 운영 체제와의 하위 호환성은 제공하지 않습니다.한편, 복수의 형태의 하이브리드 MBR이 서드파티에 의해 설계 및 구현되고 있습니다.이는 양쪽 파티션 스킴에서 디스크의 첫 번째 물리적인2 TiB에 있는 파티션을 "병렬"로 유지하거나 오래된 운영체제를 GPT 파티션에서 부팅할 수 있도록 하기 위해서입니다.이러한 솔루션의 현재 비표준성으로 인해 특정 시나리오에서 다양한 호환성 문제가 발생합니다.

MBR은 드라이브의 첫 번째 섹터에 위치한 512바이트 이상으로 구성됩니다.

다음 중 하나 이상을 포함할 수 있습니다.

  • 스토리지 디바이스의 파티션을 설명하는 파티션 테이블입니다.이 맥락에서 부트 섹터는 파티션 섹터라고도 불립니다.
  • 부트스트랩 코드:설정되어 있는 부터블 파티션을 특정하고, 그 Volume Boot Record(VBR; 볼륨 부트 레코드)를 체인 로더로서 로드해 실행하는 순서.
  • 옵션의 32비트 [3]디스크타임스탬프
  • 옵션의 32비트 디스크 서명.[5][6][7][8]

디스크 파티셔닝

IBMPC DOS 2.0에서는FDISK유틸리티를 사용하여 MBR 파티션을 설정 및 유지관리합니다.스토리지 디바이스가 이 스킴에 따라 파티셔닝된 경우 해당 MBR에는 파티션이라고 하는 선형 영역의 위치, 크기 및 기타 속성을 설명하는 파티션 테이블이 포함됩니다.

파티션 자체에는 확장 부트 레코드(EBR), BSD Disk 레이블 또는 논리 Disk Manager 메타데이터 [9]파티션과 같은 보다 복잡한 파티션 체계를 설명하는 데이터가 포함될 수도 있습니다.

MBR은 파티션에 배치되지 않고 디바이스의 첫 번째 섹터(물리 오프셋0)에 배치되어 첫 번째 파티션 앞에 있습니다.(파티션이 없는 디바이스 또는 개별 파티션 내에 존재하는 부트 섹터를 볼륨 부트 레코드라고 합니다).컴퓨터에서 DDO BIOS 오버레이 또는 부트 매니저를 실행하고 있는 경우 파티션 테이블을 디바이스의 다른 물리적인 위치로 이동할 수 있습니다.를 들어 Ontrack Disk Manager는 원래 MBR 콘텐츠의 복사본을 두 번째 섹터에 배치한 후 이후 부팅되는 OS 또는 응용 프로그램에서 숨겨 MBR 복사는 i로 처리됩니다.만약 그것이 여전히 첫 번째 섹터에 존재한다면.

섹터 레이아웃

비록 몇몇 운영 시스템과 시스템 도구 5(고급 Active격판(미국)에 PTS-DOS 6.60[10]과 DR-DOS 7.07로 연장했었다 회의 보면, MBR파티션 테이블 계획에 정확히 네개의 기본 분할 표 항목, 음, 8(공중 감시 기사, NECMS-DOS3.x[11][12]뿐만 아니라 저장 치수 SpeedStor), 또는 심지어 16entr 있다.On(과 ies트랙 디스크 매니저).

표준 범용 MBR의 구조
주소. 묘사 크기
(바이트)
0x0000(0) 부트스트랩 코드 영역 446
0x01BE(446) 파티션 엔트리 11 파티션 테이블
(프라이머리 파티션용)
16
0x01CE(462) 파티션 엔트리 22 16
0x01DE(478) 파티션 엔트리 33 16
0x01EE(494) 파티션 엔트리 44 16
0x01FE(510) 0x55 부트 시그니처[a] 2
0x01FF(511) 0xAA
총 사이즈: 446 + 4 × 16 + 2 512

현대 표준 MBR의 구조
주소. 묘사 크기
(바이트)
0x0000(0) 부트스트랩 코드 영역(파트 1) 218
0x00DA(218) 0x0000 디스크[3][b] 타임스탬프(옵션, Windows 95B/98/98)SE/ME (MS-DOS 7.1~8.0)또는 NEWLDR에서 OEM 로더 시그니처로서 기능할 수도 있습니다). 2
0x00DC(220) 원래의 물리 드라이브 (0x800xFF) 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) 파티션 엔트리 11 파티션 테이블
(프라이머리 파티션용)
16
0x01CE(462) 파티션 엔트리 22 16
0x01DE(478) 파티션 엔트리 33 16
0x01EE(494) 파티션 엔트리 44 16
0x01FE(510) 0x55 부트 시그니처[a] 2
0x01FF(511) 0xAA
총 사이즈: 218 + 6 + 216 + 6 + 4 × 16 + 2 512

AAP MBR의 구조
주소. 묘사 크기
(바이트)
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/EBRCHS(시작) 주소 3
0x01B2(434) AAP 파티션타입용으로 예약되어 있습니다(0x00사용하지 않는 경우) (옵션) 1
0x01B3(435) AAP의 CHS 엔드 주소용으로 예약(옵션, 오프셋 바이트)0x01B5MBR 체크섬(PTS DE, BootWizard)에도 사용됩니다.0x000000사용하지 않는 경우) 3
0x01B6(438) AAP 이미지 파일, VBR/EBR 또는 AAP 파티션의 관련 섹터의 LBA를 시작합니다(오프셋에 복사).+01ChexEBR 부팅을 지원하기 위해 DOS 3.31 BPB(또는 그 에뮬레이션)의 "숨겨진 섹터" 엔트리를 통해 로드된 섹터에서도 사용할 수 있습니다. 4
0x01BA(442) AAP 섹터용으로 예약(옵션;0x00000000사용하지 않는 경우) 4
0x01BE(446) 파티션 엔트리 11 파티션 테이블
(프라이머리 파티션용)
16
0x01CE(462) 파티션 엔트리 22 16
0x01DE(478) 파티션 엔트리 33 16
0x01EE(494) 파티션 엔트리 44 16
0x01FE(510) 0x55 부트 시그니처[a] 2
0x01FF(511) 0xAA
총 사이즈: 428 + 2 + 16 + 4 × 16 + 2 512

NEWLDR MBR 구조
주소. 묘사 크기
(바이트)
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) LOADER 부트 섹터 또는 이미지 파일의 CHS 주소(예: IBMBIO).LDR) (0x000000사용하지 않는 경우) 3
0x000C(12) DL 최소 허용, 그렇지 않으면 파티션 테이블에서 가져옵니다.0x80: 디폴트;0x00: 항상 DL을 사용합니다.0xFF:항상테이블엔트리를사용합니다) 1
0x000D(13) 예약됨(기본값:0x000000) 3
0x0010(16) LOADER 부트 섹터 또는 이미지 파일의 LBA(옵션;0x00000000사용하지 않는 경우) 4
0x0014(20) VBR 부트 유닛의 패치오프셋(디폴트)0x0000사용하지 않을 경우0024hex또는01FDhex) 2
0x0016(22) 체크섬(0x0000사용하지 않는 경우) 2
0x0018(24) OEM 로더 시그니처(')MSWIN4REAL/32경우는, 「오프셋」도 참조해 주세요.+0DAhex오프셋의 OEM 라벨에 대응합니다.+003hexVBR의 경우(옵션) 6
다르다 부트스트랩코드영역(코드엔트리)0x0000) 다르다
0x01AC(428) 0x78 AAP 시그니처(옵션) 2
0x01AD(429) 0x56
0x01AE(430) 특별한 의미를 가진 AAP 파티션엔트리 '0 AAP 레코드(옵션) 16
0x01BE(446) 파티션 엔트리 11 파티션 테이블
(프라이머리 파티션용)
16
0x01CE(462) 파티션 엔트리 22 16
0x01DE(478) 파티션 엔트리 33 16
0x01EE(494) 파티션 엔트리 44 16
0x01FE(510) 0x55 부트 시그니처[a] 2
0x01FF(511) 0xAA
총 사이즈: 30 + 398 + 2 + 16 + 4 × 16 + 2 512

AST/NEC MS-DOS 및 SpeedStor MBR 구조
주소. 묘사 크기
(바이트)
0x0000(0) 부트스트랩 코드 영역 380
0x017C(380) 0x5A AST/NEC 시그니처(옵션, SpeedStor에서는 제외) 2
0x017D(381) 0xA5
0x017E(382) 파티션 엔트리 88 AST/NEC 확장 파티션 테이블
(옵션, Speed Stor의 경우도 마찬가지)
16
0x018E(398) 파티션 엔트리 77 16
0x019E(414) 파티션 엔트리 66 16
0x01AE(430) 파티션 엔트리 55 16
0x01BE(446) 파티션 엔트리 44 파티션 테이블
(프라이머리 파티션용)
16
0x01CE(462) 파티션 엔트리 33 16
0x01DE(478) 파티션 엔트리 22 16
0x01EE(494) 파티션 엔트리 11 16
0x01FE(510) 0x55 부트 시그니처[a] 2
0x01FF(511) 0xAA
총 사이즈 : 380 + 2 + 4 × 16 + 4 × 16 + 2 512

Ontrack Disk Manager MBR 구조
주소. 묘사 크기
(바이트)
0x0000(0) 부트스트랩 코드 영역 252
0x00FC(252) 0xAA DM 시그니처(옵션) 2
0x00FD(253) 0x55
0x00FE(254) 파티션 엔트리 DM 확장 파티션 테이블
(옵션)
16
0x010E(270) 파티션 엔트리 16
0x011E(286) 파티션 엔트리 16
0x012E(302) 파티션 엔트리 16
0x013E(318) 파티션 엔트리 16
0x014E(334) 파티션 엔트리 16
0x015E(350) 파티션 엔트리 16
0x016E(366) 파티션 엔트리 16
0x017E(382) 파티션 엔트리 16
0x018E(398) 파티션 엔트리 16
0x019E(414) 파티션 엔트리 16
0x01AE(430) 파티션 엔트리 16
0x01BE(446) 파티션 엔트리 11 파티션 테이블
(프라이머리 파티션용)
16
0x01CE(462) 파티션 엔트리 22 16
0x01DE(478) 파티션 엔트리 33 16
0x01EE(494) 파티션 엔트리 44 16
0x01FE(510) 0x55 부트 시그니처[a] 2
0x01FF(511) 0xAA
총 사이즈: 252 + 2 + 12 × 16 + 4 × 16 + 2 512

파티션 테이블 엔트리

1개의 16바이트 파티션엔트리[13] 레이아웃(모든 멀티바이트필드는 리틀엔디안)
오프셋
(바이트)
들판
길이
묘사
0x00 1 바이트 상태 또는 물리 드라이브(비트7은 액티브 또는 부터블의 경우 설정, 오래된 MBR은 0x80만 허용, 0x00은 비활성, 0x01~0x7F[c]무효를 나타냅니다.
0x01 3바이트 파티션 [d]내 첫 번째 절대 섹터의 CHS 주소.형식은 3바이트로 설명되어 있습니다.다음 3행을 참조해 주십시오.
0x01 1 바이트
h7–0 수장[e]
x x x x x x x x
0x02 1 바이트
c9–8. s5–0. 비트 5 – 0의 섹터, 비트 7 – 6은 실린더의 높은[e] 비트입니다.
x x x x x x x x
0x03 1 바이트
c7–0. 실린더 비트[e] 7 ~0
x x x x x x x x
0x04 1 바이트 파티션 타입[15]
0x05 3바이트 파티션 [d]내 마지막 절대 섹터의 CHS 주소.형식은 3바이트로 설명되어 있습니다.다음 3행을 참조해 주십시오.
0x05 1 바이트
h7–0 수장[e]
x x x x x x x x
0x06 1 바이트
c9–8. s5–0. 비트 5 – 0의 섹터, 비트 7 – 6은 실린더의 높은[e] 비트입니다.
x x x x x x x x
0x07 1 바이트
c7–0. 실린더 비트 7 ~0
x x x x x x x x
0x08 4 바이트 파티션[f] 내 첫 번째 절대 섹터의 LBA
0x0C 4 바이트 파티션[f] 내 섹터 수

PC XT 시대의 하드 디스크 기술의 아티팩트인 파티션 테이블은 실린더, 헤드 및 섹터 단위(CHS 주소 지정)를 사용하여 스토리지 미디어를 세분화합니다.이러한 값은 더 이상 최신 디스크 드라이브의 이름과 일치하지 않을 뿐만 아니라 물리적으로 실린더나 헤드가 없는 솔리드 스테이트 드라이브와 같은 다른 장치에도 해당되지 않습니다.

CHS 방식에서 섹터 인덱스는 관례상 섹터 0이 아닌 섹터 1에서 항상 시작되며 7.10까지 모든 버전의 MS-DOS/PC DOS에서 오류가 발생하여 헤드의 수는 일반적으로 256이 아닌 255로 제한됩니다[g].CHS 주소가 너무 커서 이러한 필드에 들어갈 수 없는 경우에는 일반적으로 태플(1023, 254, 63)이 사용됩니다.그러나 오래된 시스템에서는 실린더 값이 CHS 장벽의 모듈로 둘러싸여 8GB 부근에 있는 경우가 많아 데이터 파손의 위험이 있습니다.(GPT를 탑재한 디스크에 「보호」MBR이 포함되어 있는 경우는, 인텔의 Extensible Firmware Interface 사양에서는, 태플(1023, 255, 63)을 사용할 필요가 있습니다).10비트 실린더 값은 바이트 경계가 [14]아닌 섹터와 실린더 부분으로 16비트가 분할된 원본/레거시 INT 13h BIOS 디스크 액세스 루틴에 대한 호출을 용이하게 하기 위해 2바이트 내에 기록됩니다.

CHS [17][18]어드레싱의 제한으로 인해 LBA(논리 블록어드레싱)를 사용하는 것으로 이행했습니다.파티션 길이와 파티션 시작 주소는 모두 파티션 테이블 엔트리에 32비트 양으로 저장되는 섹터 값입니다.섹터 크기는 이전에는 512바이트로9 고정되어 있다고 간주되어 칩셋, 부트 섹터, 운영체제, 데이터베이스 엔진, 파티션 도구, 백업파일 시스템 유틸리티 및 기타 소프트웨어 등 다양한 중요 컴포넌트에는 이 값이 하드 코딩되어 있었습니다.2009년 말부터 4096바이트 섹터(4Kn 또는 Advanced Format)를 채용한 디스크 드라이브를 사용할 수 있게 되었습니다.단, 일부 드라이브의 섹터 크기는 하드 드라이브 펌웨어의 변환을 통해 호스트 시스템에 512바이트로 보고되어 512에뮬레이션 드라이브(512e)라고 불립니다.

블록 주소 및 크기는 32비트를 사용하여 MBR의 파티션 테이블에 저장되므로 512바이트 섹터(실제 또는 에뮬레이트)를 가진 드라이브를 사용하는 파티션의 최대 크기는 2-512바이트(29023255040바이트 또는 [2]섹터당 4294967295(2-132)×512바이트9)를 초과할 수 없습니다.이러한 용량 제한을 완화하는 것이 GPT 개발의 주요 동기 중 하나였습니다.

파티션 정보는 MBR 파티션테이블에 선두 블록주소와 길이를 사용하여 저장되기 때문에 이론적으로는 512바이트 섹터를 가진 디스크에 할당된 공간이 총 4TiB에 근접하도록 파티션을 정의할 수 있습니다.한 개의 파티션을 제외한 나머지 파티션이 모두 2TiB 제한보다 낮은 경우입니다.는 블록 2-1에서32 시작 또는 블록 2-1에 가까운 것으로 할당되어 최대 크기를32 2-1로 지정합니다.이에 따라 섹터 주소에 액세스하기 위해 32비트가 아닌 33비트가 필요한 파티션을 정의합니다.그러나 실제로는 Linux, FreeBSD, Windows[19] 7 등 64비트 섹터 주소를 내부적으로 사용하는 특정 LBA-48 지원 운영 체제만이 실제로 이를 지원합니다.코드 공간의 제약과 32비트만을 지원하는 MBR 파티션테이블의 특성상 부트 섹터는 LBA-28이 아닌 LBA-48을 지원하도록 설정되어 있는 경우에도 LBA-48의 풀주소 범위를 지원하도록 특별히 설계되어 있거나 64비트 플랫폼에서만 실행되도록 되어 있지 않은 한 32비트 계산을 사용하는 경우가 많습니다.내부적으로 32비트 섹터 주소를 사용하는 부트 코드 또는 운영체제는 이 파티션에 액세스하는 데 주소를 둘러쌀 수 있으므로 모든 파티션에서 심각한 데이터 손상을 초래할 수 있습니다.

USB 외장 드라이브와 같이 섹터 크기가 512바이트가 아닌 디스크의 경우에도 제한이 있습니다.섹터 크기가 4096이면 MBR을 사용하여 정의할 수 있는 파티션 크기가 최대 16TiB(2 × 4096바이트)[20]까지32 확장됩니다.Windows이전 버전의 더 WindowsXP보다 최근 지원 더 큰 부문 크기뿐만 아니라 맥 OSX및 리눅스 2.6.31[21]또는 2.6.32,[22]때부터 있어 왔지만 부팅 로더, 분할 도구와 컴퓨터 BIOS구현과의 문제 더 큰 부문의 판형을 지원해 왔다 현재 특정 limitations,[23]부터 그들은 종종 오직 512바이트를 확보하려는 본능 있다.secto에 sr 버퍼: 더 큰 섹터 크기로 인해 메모리가 덮어쓰게 됩니다.이로 인해 예측할 수 없는 동작도 발생할 수 있으므로 호환성 및 표준 적합성이 문제가 될 때는 피해야 합니다.

데이터 스토리지 디바이스가 GPT 스킴으로 분할되어 있는 경우 마스터 부트 레코드에는 여전히 파티션 테이블이 포함되어 있지만, 그 목적은 GPT의 존재를 나타내고 MBR 파티션 테이블 스킴만을 이해하는 유틸리티 프로그램이 빈 공간이라고 생각되는 파티션을 만들지 않도록 하는 것입니다.e를 디스크에 저장하여 실수로 GPT를 지웁니다.

시스템 부트스트랩

IBM PC 호환 컴퓨터에서는 부트스트래핑 펌웨어(ROM BIOS에 포함)가 마스터 부트 레코드를 [24]로드하고 실행합니다.PC/XT (타입 5160)Intel 8088 마이크로프로세서를 사용했습니다.호환성을 유지하기 위해 모든 x86 아키텍처 시스템은 리얼 모드라고 불리는 동작 모드로 마이크로프로세서를 사용합니다.BIOS 는, 스토리지 디바이스로부터 MBR 를 물리 메모리로 읽어내, 마이크로프로세서를 기동 코드의 선두로 향하게 합니다.BIOS는 리얼 모드로 동작하기 때문에 MBR 프로그램이 실행될 때 프로세서는 리얼 모드가 되기 때문에 MBR의 선두에는 리얼 모드머신 [24]코드가 포함되어 있을 것으로 예상됩니다.

BIOS 부트스트랩 루틴은 물리 디스크에서 정확히 1개의 섹터를 로드하여 실행하므로 MBR에 부트 코드를 포함한 파티션테이블이 있으면 MBR 프로그램 설계가 단순해집니다.여기에는 대상 파티션의 볼륨 부트 레코드(VBR)를 로드하는 작은 프로그램이 포함되어 있습니다.제어는 실제 운영체제를 로드하는 역할을 하는 이 코드로 넘어갑니다.이 프로세스를 체인 로딩이라고 합니다.

널리 사용되는 MBR 코드 프로그램은 PC DOS 및 MS-DOS 부팅용으로 생성되었으며 유사한 부트 코드가 널리 사용되고 있습니다.이러한 부트 섹터는FDISK파티션 테이블 구성표를 사용하여 MBR의 내장 파티션 테이블에서 파티션 목록을 검색하여 활성 [25]플래그가 표시된 유일한 파티션을 찾습니다.그런 다음 활성 파티션의 볼륨 부트 레코드(VBR)를 로드하고 실행합니다.

대체 부트 코드 구현이 있습니다.그 중 일부는 부트 매니저에 의해 설치되며 다양한 방식으로 작동합니다.일부 MBR 코드는 디스크의 첫 번째 트랙에서 부트 매니저용 추가 코드를 로드하고 디스크 파티션에 할당되지 않은 "사용 가능한" 공간으로 간주하여 실행합니다.MBR 프로그램은 사용자와 대화하여 부팅해야 할 드라이브의 파티션을 결정하고 제어를 다른 드라이브의 MBR로 이전할 수 있습니다.다른 MBR 코드에는 로드 및 실행할 부트 매니저 코드의 나머지 디스크 위치 목록(종종 파일 시스템 내의 파일 내용에 해당)이 포함됩니다.(첫 번째는 모든 디스크 파티션 유틸리티, 특히 GPT를 읽고 쓰는 유틸리티에서 보편적이지 않은 동작에 의존합니다.마지막 절차에서는 코드의 나머지 부분을 재배치하는 변경이 이루어졌을 때 내장된 디스크 위치 목록을 업데이트해야 합니다.)

x86 프로세서를 사용하지 않는 시스템 또는 B가 아닌 x86 시스템Open Firmware 나 Extensible Firmware Interface(EFI) 펌웨어 의 IOS 펌웨어는 이 설계가 적절하지 않으며 MBR은 시스템 부트스트랩의 [26]일부로 사용되지 않습니다.대신 EFI 펌웨어는 GPT 파티셔닝 방식 및 FAT 파일 시스템 형식을 직접 이해할 수 있으며 EFI 시스템 [27]파티션에 파일로 보관된 프로그램을 로드 및 실행합니다.MBR은 GPT 파티션테이블 스킴이 사용된 경우 호환성을 위해 파티션테이블을 포함할 수 있는 경우에만 관여합니다.

EFI 펌웨어의 부트스트랩을 에뮬레이트하는 MBR 치환 코드가 있어 EFI 이외의 머신은 GPT 파티셔닝 방식을 사용하여 디스크에서 부팅할 수 있습니다.GPT 를 검출해, 프로세서를 올바른 동작 모드로 해, EFI 호환 코드를 디스크로부터 로드해, 이 작업을 완료합니다.

디스크 아이덴티티

Linux에서 실행되는 유틸리티 프로그램 QtParted에 표시되는 외장 하드 드라이브의 파티션 테이블에 포함된 정보

마스터 부트 레코드에는 부트스트랩 코드와 파티션테이블 외에 디스크시그니처가 포함되어 있을 수 있습니다.이 값은 디스크 매체를 고유하게 식별하기 위한 32비트 값입니다(디스크 장치가 아니라 이동식 하드 디스크에서 두 개의 매체가 동일할 필요는 없습니다.

디스크 서명은 Windows NT 버전 3.5에서 도입되었지만 현재 Linux 커널 버전 2.6 이후를 포함한 여러 운영 체제에서 사용되고 있습니다.Linux 도구는 NT 디스크 서명을 사용하여 시스템이 [28]부팅된 디스크를 확인할 수 있습니다.

Windows NT(및 그 이후의 Microsoft 운영 체제)에서는 디스크 서명을 해당 OS에서 컴퓨터에 연결된 모든 디스크의 모든 파티션에 대한 인덱스로 사용합니다.이러한 서명은 주로 디스크 파티션과 드라이브 문자 간의 영속적인 매핑을 저장하기 위해 Windows 레지스트리 키에 저장됩니다.Windows NT BOOT에서도 사용할 수 있습니다.기동 가능한 Windows NT(또는 그 이후의) [29]파티션의 위치를 기술하는 INI 파일(대부분은 그렇지 않습니다).Windows 2000/XP 레지스트리에 NT 디스크시그니처가 표시되는 키 중 하나는 다음과 같습니다.

HKEY_LOCAL_MACHINE\SYSTEM\Mounted Devices\

MBR에 저장된 디스크의 시그니처가 A8 E1 B9 D2(순서대로)이고 Windows에서 첫 번째 파티션이 논리 드라이브 C:에 대응하는 경우REG_BINARY주요 값 아래의 데이터는 다음과 같습니다.

A8 E1 B9 D2 00 7E 00 00 00 00 00 00 00 00 00 00

첫 번째 4바이트는 디스크시그니처입니다(다른 키에서는 이러한 바이트는 MBR 섹터에서 발견된 바이트와 역순으로 표시될 수 있습니다).이어서 8바이트가 추가되어 64비트 정수를 형성합니다.리틀 엔디안 표기에서는 이 파티션의 바이트오프셋을 찾는 데 사용됩니다.이 경우 00 7E는 16진수 값 0x7E00(32,256)에 해당합니다.문제의 드라이브가 섹터 크기를 512바이트로 보고한다고 가정하고, 이 바이트 오프셋을 512바이트로 나누면 63이 됩니다. 이는 파티션의 첫 번째 섹터를 포함하는 물리적 섹터 번호(또는 LBA)입니다(하나, 절대 또는 LBA 섹터 에서 카운트되는 CHS 튜플의 섹터 값에 사용되는 섹터 수와는 다릅니다).0부터 카운트를 시작합니다).

이 디스크에 디스크 서명 다음에 값이 00 F8 93 71 02인 다른 파티션이 있는 경우(예: 키 값 아래)\DosDevices\D:), 바이트 오프셋 0x00027193F800(10,495,457,280)으로 시작합니다.이것은 물리 섹터 20,498,940의 첫 번째 바이트이기도 합니다.

Windows Vista 이후 디스크시그니처는 BCD(Boot Configuration Data) 스토어에도 저장되어 부트프로세스에 [30]의존합니다.디스크 시그니처가 변경되어 찾을 수 없거나 경합이 발생했을 경우, Windows [31]를 기동할 수 없습니다.Windows가 Advanced Active Partition 엔트리의 LBA 주소의 중복 부분을 의사 디스크 시그니처로 사용하도록 강제하지 않는 한 Windows의 사용은 PTS-DOS 7 및 DR-DOS 7.07의 Advanced Active Partition 기능과 경합합니다.특히 부트 코드가 디스크의 첫 번째 8GB 밖에 있는 경우에는 LBA가 주소를 지정해야 합니다.e 사용.

프로그래밍에 관한 고려 사항

MBR은 PC [32]XT에서 발생.IBM PC 호환 컴퓨터는 little-endian입니다.즉, 프로세서는 2바이트 이상의 수치 값을 최하위 바이트의 메모리에 먼저 저장합니다.미디어의 MBR 형식은 이 규칙을 반영합니다.따라서 MBR 시그니처는 디스크 에디터에 시퀀스로 표시됩니다.55 AA를 클릭합니다.[a]

BIOS 의 부트스트랩 시퀀스는, 최초로 검출된 유효한 MBR 를 주소 0x0000:0x7C00 [32]있는 컴퓨터의 물리 메모리에 로드합니다.BIOS 코드로 실행된 마지막 명령은 MBR 복사의 선두로 실행을 지시하기 위해 해당 주소로 "점프"됩니다.대부분의 BIOS에서 주요 검증은 오프셋 0x01의 시그니처입니다.다만, BIOS 실장자는, 디스크의 보고 용량을 넘는 섹터를 참조하는 엔트리가 없는 유효한 파티션 테이블이 MBR 에 포함되어 있는 것을 확인하는 등, 그 외의 체크를 선택할 수 있습니다.

BIOS 에서는, 리무버블(플로피 등) 디스크와 고정 디스크는 기본적으로 같습니다.어느 쪽이든 BIOS는 미디어의 첫 번째 물리 섹터를 절대 주소 0x7C00의 RAM으로 읽어내고 로드된 섹터의 마지막 2바이트의 서명을 체크한 후 올바른 시그니처가 발견되면 점프(JMP) 명령으로 섹터의 첫 번째 바이트로 제어를 이양합니다.BIOS가 유일하게 실질적으로 구별하는 것은 첫 번째 고정 디스크에서 부팅을 시도하기 전에 첫 번째 이동식 디스크에서 부팅을 시도하는 것입니다(기본적으로 부팅 순서를 설정할 수 없는 경우).BIOS의 관점에서 볼 때 MBR이 볼륨 부트 레코드를 RAM에 로드하는 동작은 플로피 디스크 볼륨 부트 레코드가 RAM에 로드하는 객체 코드를 RAM에 로드하는 동작과 동일합니다.어느 경우든 BIOS가 로드한 프로그램은 운영체제를 체인 로드하는 작업을 하고 있습니다.

MBR 부트 섹터 코드는 물리 주소 0x0000:[h]0x7C00에 로드될 것으로 예상되지만 물리 주소 0x0000:0x0501(주소 0x0000:0x0500은 Phoenix [14]BIOS에서 마지막으로 사용되는 메모리)에서 0x0000:0x7FF까지 모든 메모리가 로드되고 나중에 0x00:0x00:0x00:[32]0x0으로 완화됩니다.FFFF[33](및[i] 최대 0x9000:0xFFF)는, 최초의 640 의 끝을 리얼 [j]모드로 사용할 수 있습니다.INT 12h BIOS 인터럽트 콜은 안전하게 할당할 수 있는 메모리의 양을 결정하는 데 도움이 될 수 있습니다(디폴트에서는 segment: offset location 0x0040:0x0013에서 기본 메모리 크기(KB)를 읽기만 하면 됩니다만, BIOS 오버레이, RPL 코드, 바이러스 등, 사용 가능한 메모리의 보고량을 줄이는 것이 가능합니다).부트 섹터 등의 부트 단계 소프트웨어를 덮어쓰지 않도록 합니다).

512바이트 MBR의 마지막 66바이트는 파티션테이블 및 기타 정보용으로 예약되어 있기 때문에 MBR 부트섹터 프로그램은 446바이트 이하의 메모리 내에 들어갈 수 있을 정도로 작아야 합니다.

MBR 코드는 파티션 테이블을 검사하고 적절한 파티션을 선택하여 부트 프로세스의 다음 단계를 수행할 프로그램을 로드합니다.보통 INT 13h BIOS 호출을 사용합니다.MBR 부트스트랩코드는 "액티브" 파티션의 선두에 있는 볼륨부트 레코드 코드(부트 로더 또는 운영체제 의존)를 로드하여 실행합니다.볼륨 부트 레코드는 512바이트 섹터 내에 들어가지만 MBR 코드가 섹터 크기를 가정하지 않는 한 두 섹터보다 긴 부트 로더를 수용하기 위해 추가 섹터를 로드하는 것이 안전합니다.실제로 모든 IBM XT- 및 AT-클래스 시스템의 주소 0x7C00에서 최소 1KB의 RAM을 사용할 수 있으므로 1KB 섹터를 문제 없이 사용할 수 있습니다.MBR과 마찬가지로 볼륨부트 레코드는 일반적으로 주소 0x0000:0x7C00으로 로드됩니다.이는 볼륨 부트 레코드의 설계가 분할되지 않은 미디어에서 시작되었기 때문입니다.이 미디어에서는 볼륨 부트 레코드가 BIOS 부트 절차에 의해 직접 로드됩니다.앞서 설명한 바와 같이 BIOS는 MBR과 볼륨 부트 레코드(VBR)[k]를 동일하게 취급합니다.MBR이 로드되는 장소와 같은 장소이기 때문에 MBR의 첫 번째 작업 중 하나는 메모리 내의 다른 곳으로 재배치하는 입니다.재배치 주소는 MBR에 의해 결정되지만 대부분의 경우 0x0000:0x0600(MS-DOS/PC DOS, OS/2 및 Windows MBR 코드의 경우) 또는 0x0060:0x00(대부분의 DR-DOS MBRs 세그먼트주소는 실제 메모리에서는 같은 물리 모드로 해결됩니다).코드는 DS에 따라 다르므로 0x0060:0x0000 입니다.MBR에 의해 제공되는 파티션엔트리에 대한 SI 포인터는 0x0000을 통해 잘못 참조됩니다.SI만)[34]많은 VBR이 부트 파일을 로드할 때 특정 표준 메모리 레이아웃을 가정하기 때문에 메모리 내의 다른 주소로 재배치하지 않는 것이 중요합니다.

파티션 테이블레코드의 [Status]필드는 활성 파티션을 나타내기 위해 사용됩니다.표준 준거 MBR에서는 액티브하게 마크된 파티션이1개만 허용되며 이를 건전성 체크의 일부로 사용하여 유효한 파티션테이블이 존재하는지 여부를 판별합니다.여러 개의 파티션이 활성으로 표시되어 있는 경우 오류 메시지가 표시됩니다.일부 비표준 MBR에서는 이것이 에러 상태로 취급되지 않고 행의 첫 번째 마킹된 파티션만 사용됩니다.

기존에는 0x00(액티브하지 않음) 및 0x80(액티브) 이외의 값은 유효하지 않습니다.이 값이 발견되면 부트스트랩 프로그램에 오류 메시지가 표시됩니다.다만, 플러그 플레이 BIOS 사양과 BIOS 기동 사양(BBS)에 의해서,[33][35] 1994년부터 다른 디바이스도 기동 가능하게 되었습니다.따라서 MS-DOS 7.10(Windows 95B) 이후가 도입됨에 따라 MBR은 설정 비트7을 액티브플래그로 취급하기 시작하고 값 0x01에 대한 오류 메시지를 표시했다.0x7F만엔트리를 나중에 대응하는 파티션의 VBR을 로드할 때 사용하는 물리 드라이브 유닛으로 취급해, 현재는 0x80 이외의 다른 부트 드라이브도 유효하게 취급하고 있습니다만, MS-DOS는 이 확장자를 단독으로 사용하지 않았습니다.실제 물리 드라이브 번호를 파티션 테이블에 저장해도 일반적으로 하위 호환성 문제는 발생하지 않습니다. 이 값은 첫 번째 드라이브 이외의 드라이브에서만 0x80과 다르기 때문입니다.다만, 다른 드라이브를 기동할 수 있는 시스템에서도, 드라이브를 떼어내거나 추가, 또는 스왑 했을 때에 물리 드라이브의 BIOS 의 할당이 변경되었을 경우 등, 확장 기능이 전체적으로 기능하지 않는 경우가 있습니다.따라서 BIOS Boot Specification([33]BBS; 부트 사양)에 따르면 최신 MBR은 파티션 테이블의 엔트리를 사용하는 대신 BIOS에서 원래 제공한 DL 값을 전달하는 것이 좋습니다.

BIOS-MBR 인터페이스

MBR은 메모리 위치 0x0000:0x7C00에 로드되며 이전 부트스트랩로더(BIOS에서는 보통 IPL)가 CPU 리얼모드에서 0x00:0x7C00으로 점프하여 실행이 이루어졌을 때 다음과 같은 CPU 레지스터가 설정됩니다.

  • CS: IP = 0x0000:0x7C00(표준)
일부 Compaq BIOS는 0x07C0:0x0000을 잘못 사용합니다.이것은 리얼 모드 메모리의 같은 장소에 해결되지만, 이것은 비표준이며, 이것은 피해야 합니다.이는 특정 레지스터 값을 가정하거나 재배치할 수 있도록 기록되지 않은 MBR 코드가 다른 방법으로는 작동하지 않을 수 있기 때문입니다.
  • DL = 부팅 드라이브 장치(디스크/리무버블 드라이브: 0x80 = first, 0x81 = second, ..., 0xFE; 플로피/슈퍼플로피: 0x00 = first, 0x01 = second, ..., 0x7E; 0x7F0xFF 값은 ROM/원격 드라이브용으로 예약되어 있으며 디스크에서 사용해서는 안 됩니다.)[필요한 건]
DL은 IBM BIOS 및 대부분의 다른 BIOS에서 지원됩니다.Toshiba T1000 BIOS는 이 기능을 제대로 지원하지 않는 것으로 알려져 있으며, 일부 오래된 Wyse 286 BIOS는 고정 디스크에 대해 2 이상의 DL 값을 사용합니다(따라서 BIOS의 물리 드라이브 번호가 아닌 DOS 아래의 논리 드라이브 번호를 반영합니다).이동식 드라이브로 구성된 USB 스틱에는 일반적으로 DL = 0x80, 0x81 등이 할당됩니다.그러나 일부 드문 BIOS는 슈퍼플로피로 구성된 것처럼 DL = 0x01 아래에 잘못 표시되었습니다.
표준 준거 BIOS에서는 고정 디스크/리무버블 드라이브에만 0x80 이상의 숫자를 할당하고 있습니다.기존에는 0x800x00의 값만 물리 드라이브 유닛으로 전달되었습니다.일반적으로 고정 디스크/리무버블 드라이브만 파티셔닝되므로 MBR에서 볼 수 있는 DL 값은 0x80뿐이었습니다.많은 MBR은 DL 값을 무시하고 유선(보통 0x80) 값으로 동작하도록 코드화되어 있습니다.
플러그 플레이 BIOS 사양과 BIOS 부트 사양(BBS)에 의해,[33][35] 1994년부터 다른 디바이스도 부트 가능하게 됩니다.후자의 경우 MBR 및 VBR 코드는 내부 유선 연결 [33]기본값보다 DL을 사용할 것을 권장합니다.이것에 의해, MBR 코드에 관한 한, 다양한 비표준 할당(위의 예 참조)과의 호환성도 보증됩니다.
El Torito 사양에 준거한 부터블 CD-ROM 에는, 이 인터페이스상에서 플로피 또는 슈퍼 플로피로서 발생하는 BIOS 로 마운트 된 디스크 이미지가 포함되어 있는 경우가 있습니다.0x000x01의 DL 값은 Protected Area Run Time Interface Extension Services(PARTIES) 및 Trusted Computing Group(TCG) BIOS 확장에 의해 신뢰할 수 있는 모드로 사용되어 보이지 않는 파티 파티션, BEER 경유 디스크 이미지 파일에 액세스 할 수도 있습니다. Protected Area(HPA; 보호지역)MBR 코드는 플로피 또는 슈퍼플로피를 에뮬레이트 하도록 설계되어 있지만, 이러한 비표준 DL 값을 받아들이면 적어도 운영 체제의 부트 단계에서 분할된 미디어의 이미지를 사용할 수 있습니다.
  • DH비트 5=0:장치 INT13h이 지원하고, 다른 것이 있어요.( 되어야 한다 영점)신경 쓰지 않는다.DH일부 IBMBIOSes에 의해서 지탱됩니다.
  • 몇몇 다른 줄의 일반적으로 또한, 하지만 이건 아무것도 아닌 것처럼 다른 BIOSes 다른 값을 사용할지에 대해서는, 의지하는 특정 레지스터 값 원래 IBMROMBIOSes과(DS, 줄기, SS=0x0000, SP=0x0400)할 수 있다.이런 이유로, IBM, 마이크로 소프트, 디지털 리서치 등에 MBR코드의 이용하지 않았습니다.트렁크 부문에서 이러한 레지스터 값에 안주 또한 chain-boot 시나리오에서 문제를 일으킬 수 있다

Plug-and-Play BIOS나 게시판 지원으로 시스템 플러그 앤 플레이 데이터에 DL:[33][35]외에 포인터를 제공할 것이다.

  • DL)부팅 드라이브 단위(상기 참조).
  • 엔릭 살라:DI)포인트 받기$PnP"설치 점검 구조
이 정보를, 등, 하지만, 이 정보는 대부분의 표준 참조로 마샬링 된 개체와 VBRs에서 무시된 사람을 위해 구성할 수 MBR(또는 가변 비트율, 만약에 통과시키)가 약자 로더 적극적으로 BIOS나 기억력에 사는 플러그 앤 플레이/게시판 BIOS오버레이와 함께 적극 참여하도록 한다.이상적으로, 엔릭 살라:DI는 VBR에 로드된 운영 체제가 이후에 사용할 수 있지만, 그래서 대부분의 운영 체제 이것에 의존하지 않는PnP-enabled 운영 시스템은 일반적으로 또한 나중에 플러그 앤 플레이 BIOS진입점 검색할 경우 대체 방법이 전염된다.

MBRVBR인터페이스에

기본적으로 표준, MBR성공적으로 로드된 가변 비트율, 메모리 위치 0x0000:0x7C00에 싣고에 0x0000에 뛰어내려:0x7C00 다음 등록과 CPU의 진정한 모드에 있거나 특별히 설정을 유지했다:처형을 전달합니다.

  • CS:IP=0x0000:0x7C00[나는](상수)
  • DL)부팅 드라이브 단위(상기 참조).
MS-DOS 2.0-7.0 / PC DOS 2.0-6.3 MBR은 엔트리 시 수신된 DL 값을 전달하지 않고 선택한 프라이머리 파티션의 파티션 테이블 엔트리의 부트 상태 엔트리를 물리 부트 드라이브 유닛으로 사용합니다.이는 대부분의 MBR 파티션 테이블에서 0x80이므로 BIOS가 열의 첫 번째 고정 디스크/리무버블 드라이브 이외의 물리 디바이스에서 부팅을 시도하지 않는 한 변경되지 않습니다.또, 이러한 operating system이 2대째의 하드 디스크등에서 기동할 수 없는 이유이기도 합니다.일부 FDISK 도구는 보조 디스크의 파티션을 "활성"으로 표시할 수도 있습니다.이 경우 이들 운영체제는 다른 드라이브에서 부팅할 수 없으므로 일부 운영체제는 기존 고정값인 0x80을 활성 마커로 계속 사용하는 반면 다른 운영체제는 현재 할당된 물리적 드라이브 장치(0x81, 0x82)에 해당하는 값을 사용하여 적어도 이론적으로는 다른 드라이브에서 부팅할 수 있습니다.실제로 이 방법은 부트 상태 엔트리의 세트비트7을 0x80이 아닌 액티브플래그로 사용하는 MBR 코드와 함께 동작합니다만, MS-DOS/PC DOS MBR은 고정값 0x80만을 받아들이도록 유선 접속되어 있습니다.실제 물리 드라이브 번호를 파티션 테이블에 저장하면 물리 드라이브의 BIOS 할당이 변경되었을 때(드라이브의 분리, 추가, 스왑 등)에도 문제가 발생합니다.따라서 통상적인 MBR에서는 비트7을 액티브플래그로 받아들이거나 VBR을 사용하여 VBR에 전달하는 것만으로 BIOS가 제공하는 DL 값을 최대한 유연하게 사용할 수 있습니다.MS-DOS 7.1~8.0 MBR은 비트7을 액티브플래그 및 임의의 값 0x01로 처리하도록 변경되었습니다.0x7F는 무효로 되어 있습니다만, 여전히 파티션 테이블로부터 물리 드라이브 유닛을 가져옵니다.DR-DOS 7.07 확장 MBR은 비트7을 액티브플래그로 취급하여 디폴트로 BIOS DL 값(비표준값 0x00 포함)을 사용하여 전달합니다.0x01은 일부 BIOS에서 파티션 미디어용으로도 사용됩니다.단, LOADER 및 REAL/32와 함께 다른 부팅 방법을 지원하며 MBR의 세부 동작을 변경하여 파티션 테이블에서 가져온 드라이브 값(conjunc에서 중요)에서도 동작할 수 있도록 하기 위해 특별한 NEWLDR 구성 블록도 제공합니다.로더 및 AAP에서의 조작, "NEWLDR 오프셋" 참조0x000CWyse 비표준 드라이브 유닛 0x02를 변환합니다.0x7F ~ 0x80..0xFD 및 옵션으로 드라이브 값 고정(오프셋에 저장)0x019EBPB(Extended BIOS Parameter Block) 또는 섹터 오프셋으로 설정0x01FD로드된 VBR에 실행이 전달되기 전에 로드된 VBR에 포함(NEWLDR 오프셋 참조)0x0014): 이를 통해 다른 부트 로더는 NEWLDR을 체인 로더로 사용하여 인메모리 이미지를 즉시 설정하고 NEWLDR을 통해 VBR, EBR 또는 AAP 로드를 '터널링'할 수도 있습니다.
  • DH 및 ES의 내용:DI는 완전한 플러그 앤 플레이 지원을 위해 MBR에 의해 유지되어야 합니다(위 참조). 단, MS-DOS 2.0~8.0/PC DOS 2.0-6.3 및 Windows NT/2000/XP를 포함한 많은 MBR은 유지되지 않습니다(이는 DOS의 플러그 앤 플레이 BIOS 버전이므로 놀랄 일이 아닙니다).DL 이외의 레지스터는 모두 해방됩니다).일부 MBR은 DH를 0으로 설정합니다.

많은 구현에서 MBR 코드는 추가 정보를 VBR로 전달합니다.

  • DS:SI = 활성화된 VBR에 해당하는 16바이트 MBR 파티션 테이블 항목(이전된 MBR)을 가리킵니다.PC-MOS 5.1은 파티션테이블에 부트 가능 플래그가 붙어 있지 않은 경우 부트하기 위해 이 기능에 의존합니다.LOADER, Multiuser DOS 및 REAL/32 부트 섹터와 연계하여 액티브 파티션(또는 IBMB와 같은 다른 부트스트랩 로더)의 부트 섹터를 찾습니다.부트 파일(LOADER)의 경우는, 디스크의 고정 위치에 IO.LDR 가 있습니다.SYS)를 찾을 수 없습니다.PTS-DOS 6.6 및 S/DOS 1.0은 Advanced Active Partition(AAP) 기능과 함께 사용합니다.DR-DOS 7.07은 LOADER 및 AAP 지원 외에 듀얼 CHS/LBA VBR 코드를 사용할 때 필요한 INT 13h 액세스 방법을 결정할 수 있습니다.또, 파티션 엔트리의 부트 드라이브/상태 플래그 필드를 유효하게 사용되는 DL 값에 따라 갱신합니다.Darwin 부트로더(Apple's)boot1h,boot1u데이비드 엘리엇의boot1fat32)도 이 포인터에 의존하지만 DS는 사용하지 않지만 대신 [34]0x0000으로 설정되어 있다고 가정합니다.이 가정이 틀릴 경우 문제가 발생합니다.OS/2, MS-DOS 2.0~8.0, PC DOS 2.0~7.10 및 Windows NT/2000/XP의 MBR 코드도 동일한 인터페이스를 제공합니다.단, 이러한 시스템은 이 인터페이스를 사용하지 않습니다.Windows Vista/7 MBR에서는 다음 DS가 제공되지 않습니다.SI 포인터일부 확장자는 16바이트 파티션테이블 엔트리 자체에 의존하지만 다른 확장자는 4개(또는 5개의 엔트리) 파티션테이블 전체를 필요로 할 수도 있습니다.
  • DS:BP = 활성화된 VBR에 대응하는 16바이트 MBR 파티션테이블 엔트리(재배치된 MBR)를 선택적으로 가리킵니다.이것은 DS에서 제공하는 포인터와 동일합니다.SI(위 참조) 및 MS-DOS 2.0-8.0, PC DOS 2.0-7.10, Windows NT/2000/XP/Vista/7 MBR에 의해 제공됩니다.단, 대부분의 서드파티 MBR에서는 지원되지 않습니다.

DR-DOS 7.07에서는 확장 MBR에 의해 확장 인터페이스가 선택적으로 제공되며 LOADER와 함께 제공될 수 있습니다.

  • AX = 이 NEWLDR 확장(0x0EDC)의 존재를 나타내는 매직시그니처
  • DL = 부팅 드라이브 장치(위 참조)
  • DS:SI = 사용되는 16바이트 MBR 파티션테이블 엔트리를 포인트 합니다(위 참조).
  • ES: BX = 부트 섹터 또는 NEWLDR 섹터 이미지 시작(일반적으로 0x7C00)
  • CX = 예약 완료

GPT와 연계하여 EDD(Enhanced Disk Drive Specification) 4 Hybrid MBR 제안에서는 인터페이스에 [36]대한 다른 확장을 권장합니다.

  • EAX = 0x54504721 ( )!GPT")
  • DL)부팅 드라이브 단위(상기 참조).
  • DS:SI = 하이브리드 MBR 핸드오버 구조를 가리키며, 16바이트 더미 MBR 파티션 테이블 엔트리(오프셋 0x00의 부트 플래그와 오프셋 0x04파티션 유형을 제외한 모든 비트가 설정됨) 뒤에 이어지는 추가 데이터로 구성됩니다.이것은 이전 DS와 부분적으로 호환됩니다.위에서 설명한 SI 확장자는 16바이트 파티션엔트리만 있는 경우 이들 오래된 확장자에 의해 파티션테이블 전체가 필요하지 않습니다.
오래된 운영체제시스템(VBR 포함)은 이 확장을 지원하지 않으며 2TiB 장벽 이상의 섹터를 처리할 수도 없기 때문에 부트 파티션이 처음 2TiB [m]내에 있는 경우에도 GPT 대응 하이브리드부트로더는 16바이트 더미 MBR 파티션 테이블엔트리를 에뮬레이트해야 합니다.
  • 엔릭 살라:DI)포인트 받기$PnP설치 체크 구조(위 참조)

콘텐츠 편집 및 치환

다양한 디스크 에디터를 사용하여 MBR 섹터의 바이트를 직접 조작할 수 있지만, MBR에 기능하는 코드의 고정 세트를 쓰는 툴이 있습니다.MS-DOS 5.0 이후 프로그램은FDISK스위치가 포함되어 있습니다./MBRMBR [37]코드를 다시 씁니다.Windows 2000 및 Windows XP에서는 회복 콘솔을 사용하여 스토리지 디바이스에 새로운 MBR 코드를 쓸 수 있습니다.fixmbr명령어를 입력합니다.Windows Vista 및 Windows 7에서는 회복 환경을 사용하여 새로운 MBR 코드를 작성할 수 있습니다.BOOTREC /FIXMBR명령어를 입력합니다.MBRWizard[n]같은 일부 서드파티 유틸리티는 파티션 테이블의 내용을 직접 편집하는 데도 사용할 수 있습니다(16진수 또는 디스크/섹터 에디터에 대한 지식 없이).

dd는 MBR을 포함한 스토리지 디바이스 상의 임의의 위치를 읽거나 쓰기 위해 일반적으로 사용되는 POSIX 명령어입니다.Linux 에서는, Windows MBR 의 인스톨에 ms-sys 를 사용할 수 있습니다.GRUB 및 LILO 프로젝트에는 MBR 섹터에 코드를 쓰기 위한 도구가 있습니다.grub-install그리고.lilo -mbr. GRUB 레거시 인터랙티브콘솔에서는, 다음의 명령어를 사용하여 MBR에 쓸 수 있습니다.setup그리고.embed현재 GRUB2에는 명령어가 필요합니다.grub-installoperating system내에서 실행할 수 있습니다.

다양한 프로그램이 확장 파티션의 프라이머리 파티션 테이블과 논리 파티션의 "백업"을 생성할 수 있습니다.

리눅스sfdisk(SystemRescue CD의 경우) 프라이머리 파티션테이블과 확장 파티션테이블의 백업을 저장할 수 있습니다.텍스트 편집기에서 읽을 수 있는 파일이 생성되거나 sfdisk에서 이 파일을 사용하여 기본/확장 파티션 테이블을 복원할 수 있습니다.파티션 테이블을 백업하는 명령어의 예를 다음에 나타냅니다.sfdisk -d /dev/hda > hda.out복원하는 것은sfdisk /dev/hda < hda.out이렇게 하면 디스크 간에 파티션 테이블을 복사할 수 있어 미러링 설정에 도움이 되지만 sfdisk에서는 프롬프트나 경고 없이 명령어를 실행할 수 있습니다.sfdisk -d /dev/sda sfdisk /dev/sdb를 클릭합니다.[38]

「 」를 참조해 주세요.

메모들

  1. ^ a b c d e f g 오프셋 0x01의 시그니처부트 섹터의 FE는55hex AAhex즉, 오프셋 0x01에서 0x55입니다.FEAAhex오프셋 0x01로FF. little-endian 표현은 IBM PC 호환 머신의 컨텍스트에서 가정해야 하므로 16비트 단어로 작성할 수 있습니다.AA55hexx86 프로세서용 프로그램(스왑 순서 주의)에서는, 다음과 같이 기술할 필요가 있습니다.55AAhexBig-endian 표현을 사용하여 다른 CPU 아키텍처용 프로그램에서 사용할 수 있습니다.이 내용은 서적이나 원래의 Microsoft 레퍼런스 문서에서도 여러 번 혼재되어 있기 때문에, 이 문서에서는, 오해를 피하기 위해서, 디스크상의 오프셋 베이스의 바이트 단위의 표현을 사용하고 있습니다.
  2. ^ MBR 부트로더 코드의 무결성을 확보하기 위해서는 0x00 바이트가 중요합니다.DA ~ 0x00DF는 6바이트가 모두0의 값을 나타내거나 MBR 부트스트랩로더 코드 전체(확장) 파티션테이블 제외)가 동시에 치환되지 않는 한 변경되지 않습니다.여기에는 이러한 값의 리셋이 포함됩니다.00 00 00 00 00 00hexMBR에 저장된 코드가 알려지지 않은 경우.Windows는 이 규칙을 준수합니다.
  3. ^ 원래 0x000x80 이외의 상태 값은 유효하지 않지만 최신 MBR에서는 비트7을 액티브플래그로 취급하여 이 엔트리를 사용하여 물리 부트 유닛을 저장합니다.
  4. ^ a b 시작 섹터 필드는 1023+1 실린더, 255+1 헤드 및 63 섹터로 제한됩니다.종료 섹터 필드에는 동일한 제한이 있습니다.
  5. ^ a b c d e 섹터의 범위는 1 ~63, 실린더의 범위는 0 ~1023, 헤드의 범위는 0 ~255입니다.[14]
  6. ^ a b 섹터 수는 인덱스 필드이므로 0 값은 유효하지 않고 예약되어 있으므로 일반 파티션 항목에서는 사용할 수 없습니다.이 엔트리는 특정 상황에서 운영시스템에 의해 사용됩니다.이 경우 CHS [16]주소는 무시됩니다.
  7. ^ 견적: [대부분] 버전의 MS-DOS (MS-DOS 7 [Windows 95] 포함)에는 256 헤드(FFH)의 하드 디스크에서 부팅할 수 없는 오류가 있기 때문에 최신 BIOS에서는 255 헤드(FEH)까지의 매핑을 제공하고 있습니다." RBIL[39][40]
  8. ^ 주소0000hex:7C00hex는 RAM의 32번째 KB의 첫 번째 바이트입니다.이전에는 원래 IBM PC(타입 5150)의 최소 RAM 크기가 16KB였지만 IBM XT의 디스크 옵션에 32KB가 필요했습니다.
  9. ^ EBDA가 있는 경우 사용 가능한 메모리는 그 아래에서 종료됩니다.
  10. ^ 매우 오래된 머신의 용량은 640KB 미만일 수 있습니다.A0000hex또는 655,360 바이트).이론상으로는 32KB(최대)만0000hex:7FFFhex) 또는 64KB(최대)0000hex:FFFFhex디스크 시스템에 필요한 최소한의 메모리만 탑재된 IBM XT 클래스 시스템의 경우)가 존재합니다.
  11. ^ 이는 BIOS가 VBR을 처리할 때 적용됩니다. 즉, 파티셔닝되지 않은 미디어의 첫 번째 물리적 섹터에 있는 경우입니다.그 이외의 경우는, BIOS 는 VBR 와는 관계가 없습니다.VBR의 설계는 VBR이 파티셔닝되지 않은 플로피 디스크 미디어(원래 하드 디스크 옵션이 없었던 타입 5150 IBM PC)에서만 발생했으며 MBR을 사용하는 파티션 시스템이 나중에 자체 VBR을 미리 정의된 상태로 하나의 디스크에 두 개 이상의 볼륨을 저장하기 위한 적응 방식으로 개발되었기 때문입니다.이 설계에 따르면 MBR은 기본적으로 BIOS 부팅 루틴을 에뮬레이트하고 BIOS가 이 VBR을 처리하고 초기 동작 환경을 설정하는 것과 동일한 작업을 수행합니다.이것은 마치 BIOS가 분할되지 않은 미디어에서 VBR을 검출한 것과 같습니다.
  12. ^ IP는 점프의 결과로 설정됩니다.CS는 원점프를 실행하거나 니어점프를 실행하기 전에 레지스터 값을 명시적으로 로드함으로써 0으로 설정할 수 있다.(점프를 한 코드가 어떤 식으로든 이 정보를 별도로 전달하지 않는 한, x86으로 점프한 코드가 근접 점프를 사용했는지 또는 원점프를 사용했는지 탐지하는 것은 불가능합니다.)
  13. ^ 이는 위에서 언급한 제안의 일부가 아니라 기존 조건의 자연스러운 결과입니다.
  14. ^ 를 들어 PowerQuest의 파티션 테이블 편집기(PTEDIT32)가 있습니다.Windows operating system으로 동작하는 EXE)는, 시만텍의 FTP 사이트에서도 입수할 수 있습니다.

레퍼런스

  1. ^ Howe, Denis (2009-05-19) [1985]. "master boot record". FOLDOC. Archived from the original on 2017-08-24. Retrieved 2015-05-02.
  2. ^ a b c d "Windows support for hard disks that are larger than 2 TB". 1. Microsoft. 2013-06-26. 2581408. Archived from the original on 2017-04-27. Retrieved 2013-08-28.
  3. ^ a b c Sedory, Daniel B. (2004). "The Mystery Bytes (or the Drive/Timestamp Bytes) of the MS-Windows 95B, 98, 98SE and Me Master Boot Record (MBR)". Master Boot Records. thestarman.pcministry.com. Archived from the original on 2017-08-24. Retrieved 2012-08-25.
  4. ^ Lucas, Michael (2003). Absolute OpenBSD: Unix for the practical paranoid. p. 73. ISBN 9781886411999. Retrieved 2011-04-09. Every operating system includes tools to manage MBR partitions. Unfortunately, every operating system handles MBR partitions in a slightly different manner.
  5. ^ Norton, Peter; Clark, Scott (2002). Peter Norton's New Inside the PC. Sams Publishing. pp. 360–361. ISBN 0-672-32289-7.
  6. ^ Graves, Michael W. (2004). A+ Guide To PC Hardware Maintenance and Repair. Thomson Delmar. p. 276. ISBN 1-4018-5230-0.
  7. ^ Andrews, Jean (2003). Upgrade and Repair with Jean Andrews. Thomson Course Technology. p. 646. ISBN 1-59200-112-2.
  8. ^ Boswell, William (2003). Inside Windows Server 2003. Addison-Wesley Professional. p. 13. ISBN 0-7357-1158-5.
  9. ^ Smith, Roderick W. (2000). The Multi-Boot Configuration Handbook. Que Publishing. pp. 260–261. ISBN 0-7897-2283-6.
  10. ^ Brouwer, Andries Evert (2004-04-22) [2000]. "Properties of partition tables". Partition types. Archived from the original on 2017-08-24. Retrieved 2017-08-24. Matthias [R.] Paul writes: "[…] PTS-DOS [uses] a special fifth partition entry in front of the other four entries in the MBR and corresponding AAP-aware MBR bootstrap code. […]"
  11. ^ 브라우어, Andries 에버트(2004-04-22)[2000년]."파티션 테이블의 특성".분할 형식.그 2017-08-24에 원래에서 Archived.2017-08-24 Retrieved.공중 감시 기사 도스(형식 14hex), NEC도스(형식 24hex) 같은 일부 OEM시스템,.(마티아스 R. 폴).(NB다. NECMS-DOS분까지로와 공중 감시 기사 MS-DOS파티션 테이블 8항목으로 서명하여 그들의 MBR부문에서 8대신 4파티션 항목이 있었다.A55Ahex(오프셋 0x017C).
  12. ^ Sedory, 다니엘 B[2003년](2007-05-18)."도스분까지로 한 OEM버전에 참고 MBR".마스터 부트 기록물.그 2017-08-24에 원래에서 Archived.2017-08-24 Retrieved.이 중앙 선거 관리 위원회 테이블로 파티션 덧붙였다, 첫번째 오프셋 0x01에 놓였습니다.EE0x01을 통해강제 통풍과 다음 항목이 바로 위에 추가되었다.그래서, 항목과 나열된 다른 일반적인 표 I의부터 거꾸로 끼워 넣어진다.따라서, 디스크 편집인이나 파티션 목록 유틸리티로 이러한 표를 보면 평범한 파티션 테이블.(NB.8-entry 파티션 테이블과 MS-DOS분까지로에서 어디에 부팅 코드 차이를 표시한다.)의 마지막(4진입)로 NECeight-entry 테이블에서 먼저 진입을 보일 전망이다.
  13. ^ "Partition Table". osdev.org. 2017-03-18 [2007-03-06]. Archived from the original on 2017-08-24. Retrieved 2017-08-24.
  14. ^ a b c System BIOS for IBM PC/XT/AT Computers and Compatibles. Phoenix technical reference. Addison-Wesley. 1989. ISBN 0-201-51806-6.
  15. ^ Brouwer, Andries Evert (2013) [1995]. "List of partition identifiers for PCs". Partition types. Archived from the original on 2017-08-24. Retrieved 2017-08-24.
  16. ^ Wood, Sybil (2002). Microsoft Windows 2000 Server Operations Guide. Microsoft Press. p. 18. ISBN 978-0-73561796-4.
  17. ^ "An Introduction to Hard Disk Geometry". Tech Juice. 2012-12-06 [2011-08-08]. Archived from the original on 2013-02-04.
  18. ^ Kozierok, Charles M. (2001-04-17). "BIOS and the Hard Disk". The PC Guide. Archived from the original on 2017-06-17. Retrieved 2013-04-19.
  19. ^ Smith, Robert (2011-06-26). "Working Around MBR's Limitations". GPT fdisk Tutorial. Archived from the original on 2017-08-24. Retrieved 2013-04-20.
  20. ^ "More than 2 TiB on a MBR disk". superuser.com. 2013-03-07. Archived from the original on 2017-08-24. Retrieved 2013-10-22.
  21. ^ "Transition to Advanced Format 4K Sector Hard Drives". Tech Insight. Seagate Technology. 2012. Archived from the original on 2017-08-24. Retrieved 2013-04-19.
  22. ^ Calvert, Kelvin (2011-03-16). "WD AV‐GP Large Capacity Hard Drives" (PDF). Western Digital. Retrieved 2013-04-20.
  23. ^ Smith, Roderick W. (2010-04-27). "Linux on 4KB-sector disks: Practical advice". DeveloperWorks. IBM. Archived from the original on 2017-08-24. Retrieved 2013-04-19.
  24. ^ a b "MBR (x86)". OSDev Wiki. OSDev.org. 2012-03-05. Archived from the original on 2017-08-24. Retrieved 2013-04-20.
  25. ^ Sedory, Daniel B. (2003-07-30). "IBM DOS 2.00 Master Boot Record". The Starman's Realm. Archived from the original on 2017-08-24. Retrieved 2011-07-22.
  26. ^ Singh, Amit (2009-12-25) [December 2003]. "Booting Mac OS X". Mac OS X Internals: The Book. Retrieved 2011-07-22.
  27. ^ de Boyne Pollard, Jonathan (2011-07-10). "The EFI boot process". Frequently Given Answers. Archived from the original on 2017-08-24. Retrieved 2011-07-22.
  28. ^ Domsch, Matt (2005-03-22) [2003-12-19]. "Re: RFC 2.6.0 EDD enhancements". Linux Kernel Mailing List. Archived from the original on 2017-08-24. Retrieved 2017-08-24.
  29. ^ "Windows may use Signature() syntax in the BOOT.INI file". KnowledgeBase. Microsoft.
  30. ^ McTavish (February 2014). "Vista's MBR Disk Signature". Multibooters: Dual and Multibooting with Vista. Archived from the original on 2017-08-24. Retrieved 2017-08-24.
  31. ^ Russinovich, Mark (2011-11-08). "Fixing Disk Signature Collisions". Mark Russinovich's Blog. Microsoft. Archived from the original on 2017-08-24. Retrieved 2013-04-19.
  32. ^ a b c Sakamoto, Masahiko (2010-05-13). "Why BIOS loads MBR into 0x7C00 in x86?". Glamenv-Septzen.net. Archived from the original on 2017-08-24. Retrieved 2011-05-04.
  33. ^ a b c d e f Compaq Computer Corporation; Phoenix Technologies Ltd.; Intel Corporation (1996-01-11). "BIOS Boot Specification 1.01" (PDF). 1.01. ACPICA. Archived (PDF) from the original on 2017-08-24. Retrieved 2013-04-20. [1]
  34. ^ a b Elliott, David F. (2009-10-12). "Why does the "standard" MBR set SI?". tgwbd.org. Archived from the original on 2017-08-24. Retrieved 2013-04-20.
  35. ^ a b c Compaq Computer Corporation; Phoenix Technologies Ltd.; Intel Corporation (1994-05-05). "Plug and Play BIOS Specification 1.0A" (PDF). 1.0A. Intel. Archived from the original (PDF) on 2017-08-24. Retrieved 2013-04-20.
  36. ^ Elliott, Robert (2010-01-04). "EDD-4 Hybrid MBR boot code annex" (PDF). Hewlett Packard, T13 Technical Committee. e09127r3. Archived (PDF) from the original on 2017-08-24. Retrieved 2013-04-20.
  37. ^ "FDISK /MBR rewrites the Master Boot Record". Support. 1. Microsoft. 2011-09-23. 69013. Archived from the original on 2017-02-08. Retrieved 2013-04-19.
  38. ^ "sfdisk(8) – Linux man page". die.net. 2013 [2007]. Archived from the original on 2017-08-24. Retrieved 2013-04-20.
  39. ^ Brown, Ralf D. (2000-07-16). "Ralf Browns Interrupt List (v61 html)". Delorie Software. Retrieved 2016-11-03.
  40. ^ Brown, Ralf D. (2000-07-16). "B-1302: INT 13 - DISK - READ SECTOR(S) INTO MEMORY". Ralf Brown's Interrupt List (RBIL) (61 ed.). Retrieved 2016-11-03. (NB. INTERRUP 파일을 참조하십시오.보관소 "INTER61A" 안에 B.ZIP)

추가 정보

외부 링크