작동 방식
UEFI 펌웨어는 다루는 거의 모든 것을 GUID로 식별합니다. 드라이버가 제공하는 프로토콜, DXE·PEI·SMM 모듈, 펌웨어 볼륨, 그리고 전역 부팅 변수나 보안 부팅 서명 데이터베이스 같은 변수의 네임스페이스가 그 예입니다. GUID만으로는 아무것도 알 수 없습니다. 이 도구는 EDK2와 주요 펌웨어 제조업체의 GUID 수천 개를 담은 카탈로그에서 해당 기호 이름을 찾아 줍니다.
디바이스 경로는 펌웨어가 장치나 파일에 도달하기 위해 사용하는 경로로, PCI 버스의 루트에서 컨트롤러, 디스크, 파티션, .efi 로더까지 이어집니다. Boot#### 부팅 항목은 디바이스 경로를 바이너리로 저장합니다. 이 도구는 이를 텍스트 형식으로 변환하고 각 노드를 필드와 함께 설명합니다.
예시
8BE4DF61-93CA-11D2-AA0D-00E098032B8CEfiGlobalVariableGuidBootOrder, Boot####, SecureBoot 같은 사양의 전역 변수 네임스페이스입니다.db-d719b2cb-3d3a-4596-a3bc-dad00e67656fEfiImageSecurityDatabaseGuid/sys/firmware/efi/efivars의 파일 이름으로, 보안 부팅의 db 변수입니다. 이 도구는 이름에서 GUID를 추출합니다.Fv(7CB8BDC9-F8EB-4F34-AAEA-3EE4AF6516A1)/FvFile(7C04A583-9E3E-4F1C-AD65-E05268D0B4D1)Fv → FvFile 7C04A583-9E3E-4F1C-AD65-E05268D0B4D1 = FullShell펌웨어에 내장된 UEFI Shell의 부팅 항목입니다. 파일은 펌웨어 볼륨 안에서 GUID로 검색됩니다.01 00 00 00 20 00 55 00 45 00 46 00 49 00 20 00 4F 00 53 00 00 00 02 01 0C 00 D0 41 03 0A 00 00 00 00 01 01 06 00 02 1F 03 12 0A 00 00 00 FF FF 00 00 7F FF 04 00UEFI OS — PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0)Boot#### 변수의 바이너리 내용으로, 속성, 설명, 디바이스 경로가 들어 있습니다. efivarfs 파일을 붙여넣으면 맨 앞에 있는 변수의 4바이트 속성이 자동으로 인식됩니다.활용 사례
- 부팅 순서를 변경하거나 항목을 삭제하기 전에 efibootmgr -v가 나열하는 각 항목이 무엇을 부팅하는지 파악합니다.
- 부팅 로그, 변수 덤프 또는 EDK2 코드에 나타나는 GUID를 식별합니다.
- /sys/firmware/efi/efivars의 각 파일이 어떤 변수에 해당하는지(예: 보안 부팅 서명 데이터베이스) 알아봅니다.
- 디스크를 복제하거나 교체한 후 작동하지 않게 된 부팅 항목이 어떤 디스크, 파티션, 파일을 사용하는지 찾습니다.
- UEFITool 또는 기타 분석 도구로 연 펌웨어 이미지의 모듈을 검토합니다.
자주 묻는 질문
부팅 항목의 디바이스 경로는 어디서 얻을 수 있나요?
Linux에서는 efibootmgr -v가 각 항목을 텍스트 디바이스 경로와 함께 표시하며, /sys/firmware/efi/efivars의 Boot#### 파일에는 전체 바이너리가 들어 있어 xxd나 hexdump -C로 덤프할 수 있습니다. UEFI Shell에서는 bcfg boot dump -v가 항목을, map -v가 디스크의 디바이스 경로를 보여 줍니다.
GUID가 카탈로그에 없는 이유는 무엇인가요?
모든 제조업체는 어디에도 등록하지 않고 자체 모듈용 GUID를 만들 수 있습니다. 카탈로그에는 EDK2의 GUID와 커뮤니티가 주요 제조업체의 펌웨어에서 식별해 온 GUID가 모여 있지만, 이름 없는 고유 GUID는 항상 남게 됩니다. HD 노드에 나타나는 파티션 GUID는 디스크마다 고유하므로 카탈로그에 절대 포함되지 않습니다.
어떤 디바이스 경로 형식을 지원하나요?
UEFI Shell과 EDK2가 표시하는 사양의 텍스트 형식, efibootmgr -v의 전체 줄, 그리고 공백 구분 여부와 관계없는 16진수 바이너리(xxd 또는 hexdump -C 출력 포함)를 지원합니다. 바이너리는 디바이스 경로만 있는 것, Boot#### 변수의 내용, 또는 앞에 속성이 붙은 efivarfs 파일일 수 있습니다.
디바이스 경로가 서버로 전송되나요?
아니요. 디바이스 경로는 브라우저에서 디코딩됩니다. 이름을 표시하기 위해 노드에 나타나는 펌웨어 GUID만 서버에 조회하며, 파티션 GUID와 나머지 데이터는 컴퓨터 밖으로 나가지 않습니다.
efibootmgr가 파일 경로 뒤에 표시하는 데이터는 무엇을 의미하나요?
펌웨어가 로더에 전달하는 항목의 선택적 데이터입니다. 예를 들어 Windows 부팅 관리자는 여기에 BCD 저장소에 대한 참조를 저장합니다. 디바이스 경로의 일부가 아니며, 변수의 바이너리를 붙여넣으면 도구가 따로 표시합니다.