UEFI 부팅 구조

지난 글에서 BIOS 부팅 순서를 간략하게 알아보았습니다. BIOS가 부팅 디스크의 MBR 영역을 읽게 되면 MBR 내부의 부트 코드가 실행되어 활성 파티션의 부트 섹터를 호출합니다. 부트 섹터 내부의 코드는 부트 로더를 실행시키게 되고 부트로더를 통해 OS가 로딩됩니다.

UEFI를 사용한 부팅 구조는 BIOS와 조금 다릅니다. MBR 및 부트섹터를 거치지 않고 직접 디스크 내부의 .efi 파일을 읽어 부팅을 할 수 있습니다.



GPT 디스크 구조

GPT 디스크로 부팅하려면 UEFI가 필요하지만 반대로 UEFI 부팅에 GPT 디스크가 필요한 것은 아닙니다. 컴퓨터가 EFI 펌웨어를 사용하기만 한다면 MBR 디스크와 GPT 디스크 모두 UEFI 부팅이 가능합니다. 윈도우에서는 기본적으로 UEFI 설치 시 GPT 디스크를 사용하도록 설정되어 있기 때문에 MBR 디스크를 UEFI 부팅에 사용하기 어렵습니다.
GPT 디스크의 구조는 다음과 같습니다.

MBR 에서 16 Byte였던 파티션 엔트리가 128 Byte로 늘어났습니다. 파티션 테이블의 전체 크기도 확장되어 128개의 파티션을 만들 수 있습니다.
GPT 구조에서는 64bit 주소 체계를 사용하여 이론적으로 2^64 x 512 Byte = 8 ZB 의 디스크를 사용할 수 있습니다.
특이한 점은 디스크의 마지막 부분에 Secondary GPT가 있다는 점입니다. 디스크의 처음 부분에만 기록되어있는 MBR과 달리 마지막 부분에도 GPT가 기록되어 있습니다.



UEFI 설치와 EFI 파티션

윈도우 10을 UEFI 부팅이 가능하도록 설치하면 총 4개의 파티션이 생성됩니다.
복구 파티션 / EFI 시스템 파티션 / MS 예약 파티션 / C 드라이브
C 드라이브를 제외한 3개의 파티션 중 UEFI 부팅과 관련이 있는 파티션이 EFI 시스템 파티션 (ESP)입니다. EFI 시스템 파티션은 UEFI에서 정의한 시스템으로 포맷되어 있어야 합니다. 보통 FAT32 포맷으로 정의되어 있으며 파티션의 최상단 경로에 EFI 폴더를 가지고 있습니다. 어떤 디스크에 속해 있는지와 상관없이 FAT32, EFI 폴더 이 두가지를 만족하면 UEFI 펌웨어에서 이 파티션을 ESP로 인식할 수 있습니다. EFI 시스템 파티션에는 부트로더 및 장치 드라이버, 데이터 파일 등이 포함되어 있으며 UEFI 펌웨어에서 부팅을 위해 사용됩니다.

다음 명령어를 통해 EFI 시스템 파티션을 B 드라이브에 마운트 할 수 있습니다.
mountvol b: /s
cd 명령어 및 dir 명령어를 사용하여 각각의 폴더 구성과 파일을 살펴볼 수 있습니다.
B 드라이브의 마운트 해제는 다음 명령어를 사용합니다.
mountvol b: /d



UEFI 부팅 순서

1. ESP 검색
전원을 켜면 UEFI 펌웨어가 로드됩니다. UEFI는 연결된 장치들을 검색하여 EFI System Partition (ESP) 을 찾게 됩니다.

2. EFI 파일 실행
EFI 시스템 파티션은 efi 파일을 포함하고 있습니다. efi 파일은 UEFI 펌웨어가 직접 접근할 수 있는 작은 실행 파일이며 부팅 시에 부트 매니저로 사용됩니다. BIOS에서 각각의 "디스크"를 부팅 우선순위로 설정하는 것과는 달리 UEFI 에서는 이 efi 파일을 찾아 부팅 우선순위를 설정합니다.

EFI 시스템 파티션에는 EFI 폴더가 있으며 그 하위에 각각의 OS에서 사용하는 efi 파일이 있습니다. 윈도우의 경우 \EFI\Microsoft 에서 찾을 수 있으며 우분투는 \EFI\ubuntu 폴더에 부팅을 할 수 있는 efi 파일이 존재합니다. MBR의 부트 로더와 마찬가지로 BCD 파일을 통해 설정을 저장합니다. UEFI 펌웨어가 해당 EFI 시스템 파티션에서 설치된 OS의 흔적을 못찾으면 기본 파일인 \EFI\boot\bootx64.efi 를 불러옵니다.

UEFI 설치된 윈도우 10의 부트 매니저는 \EFI\Microsoft\Boot\bootmgfw.efi 이며 BCD는 같은 폴더 (\EFI\Microsoft\Boot)에 위치합니다. bootmgfw.efi 파일이 실행되면 BCD의 설정에 따라 C:\Windows의 파일들을 읽게 되며, 윈도우 로더 Winload.efi 를 실행하여 윈도우를 불러옵니다.


BIOS는 부트 매니저를 실행시키기 위해 BIOS > MBR > 부트섹터 > 부트 매니저의 여러 경로를 거쳐야 하지만, UEFI 부팅에 필요한 것은 EFI 시스템 파티션에 있는 efi 파일 입니다. BIOS와 달리 UEFI는 MBR 및 부트 섹터에 의존하지 않으며, 대신 UEFI가 정의한 부트 매니저를 직접 사용합니다.

FAT32 포맷을 사용한 부팅 USB를 만들면 USB 파티션이 ESP로 인식 됩니다. 설치된 OS가 없기 때문에 기본 efi 파일 (\EFI\boot\bootx64.efi) 을 사용해 부팅되며, UEFI 에서 인식할 때 UEFI: USB Device 같은 형식으로 나타납니다.


참고 및 출처
https://en.wikipedia.org/wiki/GUID_Partition_Table
https://ko.wikipedia.org/wiki/통일_확장_펌웨어_인터페이스
http://cappleblog.co.kr/131

댓글

  1. 무척 이해하기 쉽게 써주셔서 읽으면서도 재미있었습니다. 좋은 글 감사합니다.

    답글삭제
  2. efi 파일은 수정이 불가능한가요?

    답글삭제
  3. 호 드디어 이글보고 해결했네요 감사합니다

    답글삭제
  4. 안녕하세요
    여기서는 GPT는 UEFI에서만 사용할 수 있다고 하셨는데, BIOS 글에서는 MBR, GPT 둘 다 사용할 수 있다고 적혀 있습니다.
    어떤 게 맞는건가요..?

    답글삭제
    답글
    1. 메인보드가 BIOS 에서 UEFI지원되면 MBR, GPT 둘 다 사용할 수 있지요
      요즘 근 1년전쯤 부터 나오는 노트북이나 보드는 UEFI만 지원되서 나오니 MBR로는 부팅이 안됩니다
      MBR은 기존 방식이므로 UEFI로 부팅할 수 없습니다
      GPT는 UEFI 를 따르니 UEFI로 되는 것이죠
      지나가는 무식쟁이가 남깁니다

      삭제
  5. 일반인도 어느 정도 이해되게 자세히 설명해주셨네요. 감사드립니다.

    답글삭제

댓글 쓰기