MBR과 부트로더의 개념 정리



1. MBR 이란?

  • 마스터 부트 레코드, MBR은 운영체계가 어디에, 어떻게 위치해 있는지를 식별하여 컴퓨터의 주기억장치에 적재될 수 있도록 하기 위한 정보로서 하드디스크나 디스켓의 첫 번째 섹터에 저장되어 있다.
  • MBR은 파티션 섹터 또는 마스터 파티션 테이블이라고도 불리는데, 이유는 하드디스크가 포맷될 때 나뉘어지는 각 파티션의 위치에 관한 정보를 가지고 있기 때문이다.
  • MBR은 메모리에 적재될 운영체제가 저장되어 있는 파티션의 부트 섹터 레코드를 읽을 수 있는 프로그램을 포함하고 있는데, 부트 섹터 레코드에는 다시 운영체계의 나머지 부분들을 메모리에 적재시키는 프로그램을 담고 있다.

2. 부트로더란?

  • 부팅되기까지 부팅의 전과정을 진행하는 부팅 전문 프로그램
  • 리눅스의 GRUB과 같은 부트로더는 하드디스크의 첫번째 부트섹트인 MBR(Master Boot Record)에 저장된다.
  • 시스템에 전원이 공급되면 가장 먼저 ROM-BIOS에서 시스템 제어권을 가지고 장착된 하드웨어에 대한 기본적인 점검과 인식을 한다. 이 과정이 모두 끝나고 나면 ROM-BIOS는 하드디스크의 첫번째 부트섹트인 MBR에 있는 부트로더에게 그 제어권을 넘겨준다.

3. MBR 구조

  • 그림을 통한 자세한 설명은 galid1 블로그 에 자세하게 나와있으니 참조하세요. 그림으로 보면 더 이해가 잘 됩니다.
  • 하드디스크에서 파티션 된 첫 섹터. 512Byte(0번 섹터)
  • Bootstrap Code, Partition Table Entry, Signature 3가지로 이루어짐.

3.1. Boot Strap Code(446byte)

  • 운영체제를 부팅시키기 위해서는 부트 파티션(active partition)을 찾아서, 해당 파티션의 MBR의 BootStrapCode를 실행 시켜야 한다.

3.2. Partition Table(64byte)

  • 파티션의 시작 위치와 크기, 부팅 여부, 파티션 타입
  • 4 가지의 엔트리가 있으며, 하나의 엔트리 당 하나의 파티션의 대한 정보를 가진다(16byte씩 기록한다). 각 엔트리당 가지고 있는 속성은 아래와 같다.
    • Boot Flag (1 Byte)
      • 0x80 -> 부팅 가능
      • 0x00 -> 부팅 불가
    • Starting CHS Address (3 Byte) : 파티션 시작 주소(CHE방법). CHS 주소 방식은 더이상 사용되지 않음.
    • Partition Type (1 Byte) : 파티션이 어떤 종류인지 파악.
      • 0x07 -> NTFS
      • 0x0B, 0x0C -> FAT32
      • 0x05, 0x06 -> Extended partition (확장 파티션)
      • 0x83 -> Patition for Linux
      • 0x82 -> Swap Partition for Linux
    • Ending CHS Address (3 Byte) : 파티션 끝 주소(CHE방법). CHS 주소 방식은 더이상 사용되지 않음
    • Starting LBA Address (4 Byte) : 파티션 시작 섹터 번호. LBA 시작 주소. 실제 파티션의 시작 위치.
    • Size in Sector (4 Byte) : 섹터의 크기 (파티션의 총 섹터 수)

3.3. Signature (2 Byte)

  • MBR의 끝을 나타낸다. MBR이 손상되었는지 아닌지를 확인하기 위하여 필요한 값. 에러 체크 코드와 유사한 기능(기본값 0xAA55)

출처

  • https://gedor.tistory.com/3
  • https://m.blog.naver.com/PostView.nhn?blogId=coooer&logNo=220201452792&proxyReferer=https%3A%2F%2Fwww.google.com%2F
  • https://positivemh.tistory.com/77
  • https://m.blog.naver.com/PostView.nhn?blogId=dudwo567890&logNo=130158001734&proxyReferer=https%3A%2F%2Fwww.google.com%2F
  • https://galid1.tistory.com/56