2019/01/20

BIOS, UEFI 정리

BIOS : Basic Input Output System 기본 입출력 동작 칩(휘발성)
CMOS : Complementary Metal-Oxide Semiconductor, 비휘발성 칩으로 BIOS 설정 값 저장
POST : Power-on self-test, CMOS에 설정된 하드웨어 점검.
UEFI : Unified Extensible Firmware Interface, 걍 대용량 하드디시크 3TB 인식 및 최신 부트로더 사용, 운영체제 선택

IBM 호환 컴퓨터 BIOS의 시대와 UEFI와 GPT 시대의 컴퓨터

BIOS, UEFI 펌웨어 유형.
BIOS 펌웨어:
- IBM PC(거의 대부분) 호환 컴퓨터.
- PC 펌웨어의 일반적 용어가 아니며 특정 유형의 펌웨어를 가르킴.
- BIOS 스팩이 따로 없으며, 사실성 표준(UEFI 존재하는 이유)

UEFI:
- 프로젝트 사이트: http://www.uefi.org
- 문서 다운로드 : http://www.uefi.org/sites/default/files/resources/2_4_Errata_A.pdf

- EFI 인텔에 의개 개발된후, fork 후 발전(회원사 HW:Intel,AMD SW:redhat, Mac, MS)
- IBM PC(거의 대부분) 호환 컴퓨터 지원.
- PC 펌웨어의 일반적 용어가 아니며 특정 유형의 펌웨어를 가르킴.
- UEFI BIOS 가지고 있지 않음.
- UEFI 2.2 보안 부팅 추가
- Secure Boot는 UEFI의 확장

BIOS 부팅
- 하드디스크 MBR(Master Boot Record) 영역
- BIOS 연동 코드 영역(MBR)
- 부팅 영역(부트 로더)

- BIOS 펌웨어가 하드디스크 MBR 영역 검색 해 부트로더 실행

- BIOS 펌웨어는 운영체제, 파티션 유형은 알 지 못하며 오로지 MBR영역의 부트로더를 실행한다.

- BIOS 펌웨어는 외부(통신 및 Netsork) 부팅 프로세스를 구성 할 수 있음.

UEFI 부팅 배경 지식
- BIOS 부팅 방식과 완전히 다름.
- UEFI, BIOS 펌웨어의 호환을 위해 CSM 구현.
- UEFI 펌웨어는 BIOS 펌웨어 부팅 방법 지원.(디스크 MBR 영역의 부트로더 실행)
- UEFI 펌웨어에서 BIOS 방식으로 부팅 UEFI 사용 중지 된 게 아님.
- 시스템의 설치된 UEFI 펌웨어를 비활성화 할 수 없음.

UEFI 기본 부팅: 실제 동작 방식
- BIOS 와 다르게 디스크 파티션, 부트 로더 및 운영체제 UEFI 펌웨어가 선택 할 수 있음.
- UEFI 펌웨어 방식은 문제 해결을 위해 다양한 비트 설정 방법을 통해 문제 해결을 하는데 도움을 줌.
- BIOS 펌웨어는 MBR 영역의 비트 설정만 할 수 있음.
- UEFI 펌웨어는 디스크 영역 앞에서 더 많은 일 처리를 할 수 있다는 의미가 됨.

BIOS MBR 방식 설정 문제
- 처리 불편. MBR 영역을 작성 하는데 응용 프로그램이 필요 함.
- MBR 영역에 최신 부트로더 사용시 충분한 크기를 제공하지 않음. MBR 512byte 크기를 같는다.
- 446Byte 부트코드, 64Byte 파티션 테이블, 2Byte 디스크 서명
- 부트코드: 부팅 가능한 파티션 검색 후 부트 섹터 호출
- 파티션 테이블: 16byte 4개의 파티션 영역. 3개 영역은 Primary Parttion(주파티션), 나머지 하나는 exten parttion(확장 파티션)
- 디스크 서명: 해당 하드디시크 식별하기 위한 2Byte 공유 ID 식별 정보.
- 최신 부트로더는 MBR 영역의 크기에 맞게 부트로더를 설치 하므로, 전체 기능을 사용하지 못한다.
- mbr 영역을 벗어난 부트로더 기능은 mbr(512Byte) 영역을 벗어난 하드디스크 첫번째 파티션 영역에 설치.
- 이러한 문제가 시스템 디자인 큰 문제 발생하 지만 신경 쓸 필요는 없다.
- 첫번째 파티션에 충분한 공간을 확인하기 어렵고, 만약 충분한 공간이 없다면 시스템 부팅시 문제 발생
- 하드디스크 부팅 디자인은 표준화된 방법은 제공하지 않음
- 다수의 운영체제를 선택해 부팅 하려면 BIOS/MBR 방식에서는 부트로더가 유일한 해결방법.
- UEFI 부팅의 경우 원격 서버에 부팅하는 표준 방법을 제공 함.

요약
초창기 제안 인텔.
GUID Partition Table, MBR은 최대 2.2TB 디스크 파티션을 영역 설정, GPT 최대 9.4ZB 디스크 파티션 영역 설정. GPT는 부트레코드 영역이 아니라 데이터 영역으로 사용해야 함.

GPT MBR 사용방안.
기존 Legacy 방식에서 새롭게 추가된 EFI 방식이 필요한 이유는 3TB HDD가 보급되기 시작, 기존 Legacy 방식으로는 GPT 3TB 이상의 HDD 포맷을 인식 할 수 없음. 메인보드의 바이오스 설정에도 GPT 파티션으로 된 HDD 운영체제를 설치하기 위해 UEFI가 추가. MBR과 GPT의 속도 차이는 GPT에서 조금 더 빠름.

UEFI가 아닌 Legacy 방식의 하드디스크는 MBR 방식으로 포맷되어 설치 됨(Linux의 경우 MSDOS 인식)
UEFI BIOS 방식의 하드디스크는 GPT 방식으로 포맷되어 설치 됨(Linux의 경우 GPT로 인식)

UEFI 펌웨어 방식은 개별 디스크 하나 당 부트 로더 코드를 상주 함.
부팅 로드를 처리 하기 위한 더 많은 인프라가 추가된 펌웨어 임.

인프라 추가 내용(EFI 실행파일, GPT, EFI 시스템 파티션)
EFI 실행파일
UEFI 펌웨어가 EFI 형식의 코드를 실행 할 수 있도록 작성 되어야 함.

GPT (GUID 파티션 테이블) 형식
GPT 파티션 테이블을 만들기 위한 표준으로 디스크 파티션 정보로 디스크 시작 부분에 정의됨.
MBR/MS-DOS 파티션 테이블 표준 보다 더 나은 표준을 제공(3TB) 이상 인식.
UEFI 펌웨어는 GPT 파티션(MBR)을 인식 할 수 있어야 함.

EFI 시스템 파티션
펌웨어는 특정 유형의 파일 시스템을 읽을 수 있음.
UEFI 펌웨어는 본질 적으로 FAT, FAT12, FAT16, FAT32 파일 지원. 

파티션 테이블을 읽을 수 있다.
특정 파일 시스템의 파일에 접근 할 수 있다.
특정 현식으로 코드를 실행 할 수 있다.


UEFI 부팅 관리자
sudo apt-get install efibootmgr
efibootmgr은 UEFI 구성을 설정 제어하느데 사용되는 프로그램이다.

UEFI 부팅 관리자는 구조적으로 정의된 NVRAM 변수를 수정하여 구성 할 수 있는 펌웨어 정책이다.
부트 관리자는 UEFI 드라이버와 UEFI 응용 프로그램(UEFI OS 부트 로더 포함)을 NVRAM 전역 변수로 정의 된 순서대로 로드하려고 시도 한다.

BIOS 펌웨어는 부트 메뉴에서 시스템에 연결된 하드디스키가 필연적으로 연결 된다.
UEFI 펌웨어에서는 이러한 방식은 해당 사항이 없다.

UEFI 부팅 관리자 구성은 "부팅 메뉴"에서 항목을 추가 제거 할 수 있음
운영체제가 부팅된 후 시스템 부팅 설정을 구성 할 수 있다.

modprobe efivars
efibootmgr -v
BootCurrent: 0000 ---> 부트 메뉴 항목
Timeout: 2 seconds ---> 대기 시간
BootOrder: 0000,0004,0002,0003 ---> 부트 시퀀서
Boot0000* ubuntu    HD(1,800,f3800,053af52d-919d-4762-9def-19de4664b680)File(\EFI\UBUNTU\SHIMX64.EFI)
Boot0002* Hard Drive     BIOS(2,0,00)..GO..NO........o.e.s....................A...........................>..Gd-.;.A..MQ..L.E.D.9.D.7.0.A.8.7.1.C.E.5.0.5.8.7.3.7.0........BO
Boot0003* UEFI: Built-in EFI Shell     Vendor(5023b95c-db26-429b-a648-bd47664c8012,)..BO
Boot0004* ubuntu    HD(1,800,f3800,053af52d-919d-4762-9def-19de4664b680)File(\EFI\UBUNTU\GRUBX64.EFI)

UEFI 기본 부팅: 실제 동작 방식 - 부팅 관리자 항목
- EFI_DEVICE_PATH_PROTOCOL 섹션(부팅 이외의 다른 용도로 사용되는 일반적 프로토콜)
-- 비디오 카드 부팅 시도 하지 않음
-- PXE 서버 설정
-- 노 디스크 설정 

부팅 프로세스 구성(운영체제)
efibootmgr 명령어를 사용해 구성 할 수 있음.
자세한 내용은 맨 페이지 참고.
이 모드를 사용하려면 BIOS 변경 필요(EFI, UEFI 활성화)
펌웨어의 UI 화면 갱신이 안될 수 도 있음.

UEFI 기본 및 BIOS 호환 부팅
EFI 시스템 파티션에 쓰고, UEFI 항목을 추가
BIOS 호환성 모드로 부팅하면 운영 체제는 BIOS 호환 설치로 운영체제 설치(MBR 유형의 부트로 사용)

부팅 모드 찾기
efibootmgr -v
Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.
Try 'modprobe efivars' as root.

dmesg 확인 및 커널 로그 확인해 어떠한 부팅 모드인지 확인 가능

UEFI 기본 부팅 사용
라이브 CD 제작 후 usb 스틱에 기록 할 때 -efi 매개 변수 사용해 UEFI 부팅 가능

디스크 형식 ( MBR VS GPT)
sudo parted /dev/sda
GNU Parted 3.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p                                                               
Model: ATA C300-CTFDDAC128M (scsi)
Disk /dev/sda: 128GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End    Size   Type     File system  Flags
 1      1049kB  525MB  524MB  primary  ext4         boot
 2      525MB   128GB  128GB  primary               lvm

(parted)

파티션 테이블 정보가 msdos이면 MBR 방식의 파티션.
파티션 테이블 정보가 gpt 이면 gpt 방식의 파티션 인식.

디스크 포맷 확인
포맷 하기.(데이터 전부 삭제 됨)

3TB 인식 파티션 생성.
mklabel gpt

2TB 인식 파티션 생성.
mklabel msdos

수동 파티션 수행 EFI 시스템 파티션 처리
uefi 기본 설치 수행 후 사용자 정의 파티션을 사용할 경우 EFI 시스템 파티션 마운트 해야함.
/boot/efi EFI 시스템 파티션이 찾음.
이 위치를 마운트 해야함.
efi 파티션 생성, 파티션 크기 최소 200MB 적당 500MB로 설정 하고 마운트 한다.

오픈소스 부트로더...
coreboot: OpenSrc https://www.coreboot.org/downloads.html

댓글 없음:

댓글 쓰기