살며 사랑하며

UEFI / BIOS 그리고 GPT / MBR 본문

OS 다루기

UEFI / BIOS 그리고 GPT / MBR

dooly22 2020. 1. 4. 00:04

Firmware 디자인과 Partitioning 디자인에 대해 알아보자. (FAI를 이용한 BIOS와 GPT partition 방법 포함)

  • Firmware designs
    • UEFI: Unified Extensible Firmware Interface
    • BIOS: Basic Input Output System
  • Partitioning designs
    • GPT: GUID Partition Table
    • MBR: Master Boot Record

BIOS vs UEFI

UEFI

EFI(Extensible Firmware Interface)를 확장한 것이 UEFI 이다. 1990년대 중반 인텔은 IBM BIOS 방식의 firmware interface가 너무 제한적이어서 1998년에 EFI을 개발하기 시작했다. 2005년 EFI 개발을 중단하고 Unified EFI Forum에 EFI를 넘긴다. 

UEFI가 BIOS보다 나은 점

  • 애플리케이션을 실행할 수 있는 강력한 pre-boot 환경
  • 모듈라 디자인
  • CPU 독립적인 아키텍처(Itanium, x86, x86-64, ARM Arch32, Arm Arch64)
  • BIOS 인터페이스 호환, 레거시 부팅 지원
  • Secure Boot 가능 (Windows용. 리눅스에서는 오히려 장애가 됨)

GPT가 MBR보다 나은 점

  • 2TiB 보다 더 큰 디스크 부팅 가능(MBR은 2TiB까지만 부팅 가능)
  • 부팅가능한 파티션의 수 제한
  • 8ZiB add(512B sectors), 64ZiB (4KiB sectors)
    • ZiB: Zebibyte, <- Exbibyte <- Pebibyte <-Tebibyte <- Gibibyte
    • ZB: Zettabyte, <- Exabyte <- Petabyte <-Terabyte <- Gigabyte
  • boot code와 partition table을 분리(MBR은 boot code가 boot sector에 존재)

GPT에서 사용하는 특별 파티션 ESP(EFI System Partition)가 있다. 이 파티션은 FAT32로 포맷해야 하고 partition type code는 EF00이다. 이 파티션에는 .efi 확장자를 가진 bootloaders와 boot manager파일이 있다. 부팅할 때 mainboard의 UEFI compliant firmware는 모든 디스크의 ESP파티션의 EFI파일들을 검색한다.

BIOS firmware로 부팅해서 GPT를 사용할 수 있을까?

BIOS만 지원하는 또는 UEFI/BIOS 모두 지원하지만 BIOS로 부팅하고 싶은데 2TiB가 넘는 디스크를 사용하고 싶으면 GPT를 사용해야 한다.

  • UEFI machine + GPT partition: need an ESP partition(Code EF00)
  • BIOS machine + GPT partition: need a BIOS boot partition(Code EF02)
  • BIOS + MBR(BIOS-MBR) = OK
  • BIOS + GPT(BIOS-GPT) = OK
  • UEFI + GPT(UEFI-GPT) = OK
  • UEFI + MBR = NO

Layout of GPT partition

The beginning of a GPT partitioned disk

Protective MBR | 512B |

Primary GPT Header | 512B |

Primary Partition Table entries | up to 16KiB (max. of 128 partitions)|

17KiB가 사용된다.

The end of a GPT-partitioned disk

Secondary Partition Table entries | Up to 16KiB (max. of 128 partitions) |

Secondary GPT Header | 512B |

16.5KiB가 사용된다.

위 두 개의 unpartitioned space 사이에 GPT partition이 최대 128개까지 만들어 질 수 있다. 그 중 한 파티션(주로 첫번째 파티션)은 특별한 ESP 파티션이다. ESP 파티션은 FAT32로 포맷해야 하고 esp와 boot 플래그 설정을 가지고 code는 EF02이다. FAT32 파티션의 최소 크기는 약 32MiB이다. ESP 파티션의 크기는 100 ~ 200 MiB 사이로 할당하는 것을 권장한다.

가장 좋은 것은 BIOS든 UEFI든 GPT로 파티션된 디스크를 부팅할 수 있도록 하면 된다.

BIOS boot partition와 EFI System Partition(ESP)을 모두 만들자.

  • 1MB BIOS boot partition (type EF02) grub는 여기에 core image를 저장.
  • 100MB EFI System Partition (type EF00). FAT32 포맷. EFI boot 이미지 저장
  • 나머지 공간에 원하는 대로 파티션

BIOS boot partition을 생성하여 BIOS-GPT 조합을 FAI에서 사용하는 법이다.

FAI의 setup-storage대로 설정하려면 다음과 같이 하면 된다.

$ cat porch/porch/templates/dpt-kubeminion.j2
disk_config disk1 disklabel:gpt-bios bootable:1 fstabkey:uuid
primary swap   10G       swap  sw
primary /      30G      ext4  rw,noatime,errors=remount-ro
primary -      50G       -       -
primary /data  10G-     xfs     rw

disklabel에 gpt-bios로 지정하면 BIOS boot partition을 자동으로 만들어준다.

다음은 FAI로 설치 후에 본 disk partition 정보이다.

# parted /dev/sda print
Model: IBM ServeRAID M5210 (scsi)
Disk /dev/sda: 398GB
Sector size (logical/physical): 12B/096B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system     Name     Flags
 5      049kB  097kB  049kB                  primary  bios_grub
 1      097kB  10.GB  10.GB  linux-swap(v1)  primary  boot
 2      10.GB  43.GB  32.GB  ext4            primary
 3      43.GB  96.GB  53.GB                  primary
 4      96.GB  398GB  301GB  xfs             primary

다섯번째 파티션으로 bios_grub flag를 가진 약 1MiB 크기의 BIOS boot partition이 생성되었다.

References