UEFI
펌웨어가 있는 워크스테이션과 파티션 테이블 유형이 있는 디스크가 있습니다 . GPT
EFI Boot Manager에 따르면 시스템은 UUID에서 부팅하라는 지시를 받습니다 7e169454-1df0-40bf-9c63-0f6b094c1e15
.
# efibootmgr -v
BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0000
Boot0000* debian HD(1,GPT,7e169454-1df0-40bf-9c63-0f6b094c1e15,0x800,0xee000)/File(\EFI\debian\grubx64.efi)
#
7e169454-1df0-40bf-9c63-0f6b094c1e15
/dev/sdb
FAT32
파일 시스템이 있는 디스크의 첫 번째 파티션 은 다음과 같습니다 .
# blkid /dev/sdb1
/dev/sdb1: UUID="DA79-BCEA" TYPE="vfat" PARTUUID="7e169454-1df0-40bf-9c63-0f6b094c1e15"
#
~에 따르면이 UEFI 가이드GPT
, UEFI 사양에서는 UEFI가 파티션 테이블을 읽을 수 있어야 합니다( ). 이는 EFI 부팅 관리자를 설치/편집하는 동안에만 필요합니까? 내가 아는 바로는 efibootmgr
파티션의 시작 및 끝 섹터가 EFI 부팅 관리자 항목에 추가됩니다. 예를 들어 위의 예를 기반으로 내 EFI 부팅 관리자 항목에는 다음에서 읽은 시작 및 끝 섹터와 일치하는 0x800
( 2048
십진수) 및 (십진수)이 포함됩니다.0xee000
974848
fdisk
GPT
# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): i
Partition number (1-4, default 4): 1
Device: /dev/sdb1
Start: 2048
End: 976895
Sectors: 974848
Size: 476M
Type: EFI System
Type-UUID: C12A7328-F81F-11D2-BA4B-00A0C93EC93B
UUID: 7E169454-1DF0-40BF-9C63-0F6B094C1E15
UEFI
EFI 부팅 관리자에 시작 및 끝 섹터 정보를 채우려면 파티션 테이블에 액세스해야 합니까 ?
또는 ?와 일치하는 파티션을 UEFI
찾아야 하기 때문에 부팅할 때마다 파티션 테이블에 액세스해야 할 수도 있습니다. UUID
내가 이해한다면이 UEFI
가이드맞다면 UEFI
각 주변 장치는 부팅 중에 일치하는 장치를 찾을 때까지 지정되지 않은 순서로 초기화됩니다 UUID
. 따라서 제 예에서는 EFI 부팅 관리자에서 읽은 7e169454-1df0-40bf-9c63-0f6b094c1e15
다음 각 블록 장치를 반복하고 7e169454-1df0-40bf-9c63-0f6b094c1e15
파티션이 완료될 때까지 GPT를 읽습니다. 설립하다?
답변1
이 UEFI 가이드에 따르면 UEFI 사양에서는 UEFI가 (GPT) 파티션 테이블을 읽을 수 있어야 합니다.
이는 사양 요구 사항이므로 특정 UEFI 펌웨어 구현이가능한다른 파티션 테이블 형식도 지원됩니다.모든UEFI 구현~ 해야 하다규정 준수를 위해 GPT도 지원됩니다. 따라서 PC 하드웨어의 UEFI 구현은 일반적으로 최소한 이를 인식할 수 있을 만큼 클래식 MBR 파티션도 지원합니다. Apple의 UEFI 구현은 Apple의 자체 레거시 파티셔닝 체계도 지원할 수 있으며, Oracle/Sun UEFI는 Solaris VTOC 디스크 레이블 등도 이해할 수 있습니다.
이는 EFI 부팅 관리자를 설치/편집하는 동안에만 필요합니까?
EFI 부팅 관리자는 UEFI 펌웨어에 내장되어 있습니다. 절대로 "설치"하지 마십시오. 이 efibootmgr
명령을 사용하면 편집할 수 있습니다.매개변수이는 마더보드의 비휘발성 메모리(NVRAM)에 저장됩니다.
UEFI 펌웨어는 특정 UEFI 구현에서 지원하는 대체 파티션 테이블 형식을 사용하여 시스템을 설치하지 않는 한 부팅할 때마다 GPT 파티션 테이블을 읽을 수 있어야 합니다.
HD(1,GPT,7e169454-1df0-40bf-9c63-0f6b094c1e15,0x800,0xee000)
출력의 문자열은 efibootmgr
단순한 문자열이 아닙니다. 이는 사람이 읽을 수 있는 간결한 표현입니다.UEFI하드 디스크 미디어 장치 경로데이터 구조. 이 데이터 구조는 데이터가 실제로 EFI 부팅 관리자의 NVRAM에 저장되는 방식입니다.
UEFI 사양에 따르면(내 강조점과 단락으로 나누어짐):
부팅 관리자는 첫 번째 요소로 시작하는 약식 장치 경로에서의 부팅도 지원해야 합니다.하드 디스크 미디어 장치 경로(표 77 참조) 부팅 관리자는 하드 드라이브 장치 경로의 GUID나 서명 및 파티션 번호를 사용하여 시스템의 장치와 일치시켜야 합니다.
드라이브가 GPT 파티션 구성표를 지원하는 경우 GUID는 다음 위치에 있습니다.하드 디스크 미디어 장치 경로
UniquePartitionGuid
GUID 파티션 항목의 필드와 비교하십시오(표 18 참조). 드라이브가 PC-AT MBR 방식을 지원하는 경우 서명은하드 디스크 미디어 장치 경로UniqueMBRSignature
기존 마스터 부트 레코드와 비교해 보세요(표 13 참조).서명이 일치하면 파티션 번호도 일치해야 합니다. 하드 드라이브 장치 경로를 일치하는 하드웨어 장치 경로에 추가하면 일반 부팅 동작을 사용할 수 있습니다. 하드 디스크 장치 경로와 일치하는 장치가 여러 개 있으면 부팅 관리자가 임의로 하나를 선택합니다. 따라서 운영 체제는 결정적인 부팅 동작을 보장하기 위해 하드 드라이브 서명의 고유성을 보장해야 합니다.
따라서 파티션의 고유한 UUID를 일치시키는 것이 기본 메커니즘입니다. 시작 및 끝 섹터 정보는 중복성을 제공하기 위해서만 존재합니다. 모든 UEFI 구현은 이를 자유롭게 사용하거나 무시할 수 있습니다.
UEFI 펌웨어는 시작 및 끝 섹터 정보를 사용하여 NVRAM 정보와 디스크 내용이 서로 일치하는지 추가로 확인할 수 있습니다. 또한 디스크의 파티션 테이블이 손상된 것으로 보이는 경우 펌웨어가 위치별로 ESP 파티션을 찾으려고 시도할 수 있으므로 데이터 오류로부터 시스템의 안정성이 높아집니다. 각 UEFI 펌웨어 구현자는 이 추가 정보를 사용할지 여부와 사용할 경우 전반적인 전략이 무엇인지 스스로 결정할 수 있습니다.
보안을 염두에 둔 UEFI 구현은 부팅 프로세스를 중단하고 불일치에 대한 오류를 보고할 수 있는 반면, 최대 안정성을 위해 설계된 구현은 단일 NVRAM 오류 또는 파티션 테이블을 해결할 가능성을 최대화하지 못하기 전에 중복 정보의 모든 조합을 시도할 수 있습니다. 일치하는 서명을 찾을 수 없는 경우 최소 UEFI 구현은 오류 메시지와 함께 중지되고 추가 정보를 완전히 무시할 수 있습니다.
UEFI와 해당 기능을 더 잘 이해하려면 UEFI 셸을 사용해 보아야 합니다. 일부 UEFI 구현(예: Intel 또는 Phoenix)에는 이 기능이 내장되어 있으며, 다른 것(AMI)에는 shellx64.efi
파일이 ESP(EFI 시스템 파티션)의 루트에 추가된 경우 파일을 실행하는 특정 옵션이 있습니다. 다른 모든 방법이 실패하면 언제든지 .efi
ESP에 셸 파일을 배치하고 efibootmgr
EFI Boot Manager에서 추가 부팅 메뉴 항목으로 구성할 수 있습니다.
이 글을 쓰는 시점에서 TianoCore 프로젝트에서 제공하는 UEFI 셸의 사전 컴파일된 최신 버전은 다음 위치에 있는 것으로 보입니다. https://github.com/tianocore/edk2/releases/download/edk2-stable201911/ShellBinPkg.zip