BIOS 부팅 구조

BIOS는 메인 보드에 내장된 펌웨어의 한 종류로서 전원이 공급되면 하드웨어를 초기화하고 검사하며 부팅을 시작합니다. UEFI는 BIOS 인터페이스를 대체할 목적으로 개발된 펌웨어입니다. 그래픽 인터페이스를 제공하며 BIOS 보다 확장된 기능을 가지고 있습니다. 각각 시스템의 부팅 과정을 살펴보려면 먼저 디스크와 파티션의 구조를 이해해야 합니다.



MBR과 GPT

큰 창고에 물건을 관리할 때, 체계적인 보관을 위해 여러 문서가 필요합니다. 창고의 용도, 지게차의 동선, 각각의 구역과 보관 한도 등을 자세히 기록하여 입구에 붙여 놓으면 출입 작업의 효율과 정확성이 올라갑니다. 컴퓨터가 디스크를 사용할 때에도 마찬가지입니다. 이 디스크가 어떤 디스크인지, 파티션이 어떻게 구성되어 있는지 등의 필요한 정보를 디스크의 첫 부분에 기록해 놓고 그 양식대로 디스크를 관리합니다. 그것을 MBR(master boot record)이라 합니다.

현재에 와서는 창고의 크기가 너무 커지고 각각의 구역과 용도가 늘어나다 보니 MBR 만으로는 효과적인 기록 / 관리가 어려워졌습니다. 이를 대체하여 새로운 방법으로 창고를 관리하고 더 많은 정보를 기록할 수 있는 규격이 필요해졌는데 MBR 이후 표준으로 사용되고 있는 새로운 양식이 GPT(GUID partition table)입니다. MBR과 GPT는 파티션을 나누고 디스크를 관리하는데 서로 다른 규격을 사용하기 때문에 MBR <-> GPT 전환을 하려면 디스크를 모두 비우고 시도해야 합니다.



MBR의 이해

BIOS에서 사용하는 디스크의 기본 형식은 MBR 입니다. UEFI 부팅, 또는 2T 이상의 저장 장치를 사용하는 경우가 아니라면 대부분 MBR 형식의 디스크를 사용합니다. 디스크의 첫 섹터에 512 Byte의 크기를 가진 MBR 영역이 있으며, MBR은 이 디스크의 부팅 및 파티션에 대한 정보를 가지고 있습니다.

주소설명크기
(바이트)
십육진수십진수
00000코드 영역440
최대 446
01B8440디스크 서명4
01BC444보통 없음(Null); 0x00002
01BE446프라이머리 파티션 테이블
(4개의 16바이트 엔트리)
64
01FE51055hMBR 서명;
0xAA55
2
01FF511AAh
MBR, 전체 크기: 446 + 64 + 2 =512

디스크 서명을 제외하면 크게 2개의 영역으로 나눌 수 있습니다. 코드 영역과 파티션 테이블입니다. 코드 영역은 부팅과 관계된 실행 코드를 포함하고 있으며 파티션 테이블은 파티션의 정보를 담고 있습니다.

1. 코드 영역 - 컴퓨터에 전원을 넣으면 BIOS가 하드웨어를 점검한 후 디스크의 첫 번째 섹터를 불러오게 되는데 이 때 코드 영역에 있는 부트 코드가 실행됩니다. 파티션 테이블을 읽어 부팅 가능한 파티션을 찾아 줍니다.

2. 파티션 테이블 - 총 64 Byte의 크기를 가지고 있으며 16 Byte 씩 4개의 엔트리로 구성됩니다. 하나의 엔트리는 주 파티션 하나의 정보를 담고 있으므로, MBR 의 파티션 테이블에는 주 파티션의 정보를 4개까지밖에 기록할 수 없습니다. 4개 이상으로 파티션을 나누려면 주 파티션이 아닌 논리드라이브를 만들어야 합니다.

각각의 주 파티션 정보 (엔트리) 는 16 Byte를 차지하는데, 그 16 Byte 중 첫 번째에는 식별자가 포함되어 부팅 가능한 파티션인지 아닌지를 표시해 줍니다. 부팅 가능한 파티션을 활성 파티션이라 하며 활성 파티션은 디스크당 하나만 만들 수 있습니다. 활성 파티션은 BIOS에서 부팅을 하기 위해 편의상 분류한 것으로, 파티션 내부 데이터와는 상관없는 단순한 마킹이라 생각하면 됩니다.
오프셋설명
0x00(1 바이트) 파티션 상태 (0x80 = 시동 가능, 0x00 = 부팅불가, 기타 = 비정상)
0x01(3 바이트) 파티션의 첫 번째 섹터의 실린더-헤드-섹터 주소
0x04(1 바이트) 파티션 종류
0x05(3 바이트) 파티션의 마지막 실린더-헤드-섹터 주소
0x08(4 바이트) 파티션의 첫 번째 섹터의 LBA
0x0C(4 바이트) 파티션의 크기 (단위: 섹터)

MBR 에서는 32 비트의 주소 체계를 사용하여 디스크의 크기가 2TB 를 넘으면 그 이상은 사용할 수 없습니다. (2^32 x 512 Byte = 2TB)


파티션과 부트 섹터

창고의 입구에 붙인 전체 관리 기록 및 명령을 MBR 또는 GPT 라 한다면, 창고 내부의 구역(파티션) 마다 그 구역을 설명하고 물건들의 위치를 기록한 자세한 문서가 필요합니다. 각각의 파티션 내부에 이런 정보들이 기록되는데, 파티션의 포맷에 따라 형식은 조금씩 다르지만, 기본적으로 부팅 관련 영역과 파일 시스템 영역이 있습니다.

NTFS 파티션을 예로 들어 설명하면 다음과 같습니다.






VBR 영역은 부팅에 관계된 코드와 정보 등이 들어있고 MFT 영역에는 NTFS 파티션의 개별 파일 및 구조 정보를 담고 있습니다.

VBR 영역에는 부트 섹터가 있는데, 이 부트 섹터에 있는 코드가 실행되면 지정된 부트 매니저를 불러와 운영체제 부팅이 시작됩니다. FAT 파티션의 경우에는 Reserved Area에 부트 섹터가 존재 하며 NTFS의 부트섹터와 마찬가지의 역할을 수행합니다.

윈도우에서 포맷한 파티션은 윈도우의 부트 매니저를 불러오도록 자동으로 부트 섹터가 구성됩니다.





윈도우의 BIOS 부팅 순서

윈도우 시스템이 BIOS로 부팅되는 과정을 설명하면 다음과 같습니다.
BIOS > 부팅 디스크의 MBR > 활성 파티션의 부트 섹터 > 부트 매니저

1. BIOS
전원을 켜면 BIOS 가 실행되어 하드웨어를 검사한 후 설정된 부팅 순서에 따라 장치를 확인합니다. 부팅 디스크의 첫 번째 섹터(MBR)를 불러옵니다.

2. MBR
디스크의 MBR이 호출되면 코드 영역에 있는 부트 코드가 실행됩니다. MBR 파티션 테이블을 읽어 활성 파티션을 찾고, 그 활성 파티션 내부의 부트 섹터를 읽게 됩니다.

3. 부트 섹터
활성 파티션의 부트 섹터에서 지정된 부트 매니저를 실행시키는 코드가 작동합니다.

4. 부트 매니저
실질적으로 OS를 로딩하는 프로그램입니다. 윈도우에서는 VISTA 이후 BOOTMGR 를 사용하며 BCD 파일을 이용하여 부팅 환경 설정을 저장합니다. BOOTMGR은 시스템 파티션의 최상위 경로에, BCD 파일은 \boot 폴더에 위치합니다. BOOTMGR이 실행되면 winload.exe를 불러오고 윈도우 부팅을 시작하게 됩니다.

BIOS 의 부팅 순서와 그에 따른 몇 가지 내용을 살펴보았습니다. 위에 설명한 MBR 및 부트섹터에 관한 내용은 간략하고 비유적으로 표현한 것이기 때문에 자세한 공부를 하고 싶은 분은 파일 시스템 관련 도서나 여러 가지 기술 분석 글들을 찾아보시기 바랍니다.


관련글:
UEFI 부팅 구조


참고 및 출처:
https://ko.wikipedia.org/wiki/마스터_부트_레코드
https://en.wikipedia.org/wiki/Master_boot_record
http://forensic-proof.com/archives/435

댓글

댓글 쓰기