UEFI는 부트로더입니까, 아니면 BIOS를 대체합니까?

UEFI는 부트로더입니까, 아니면 BIOS를 대체합니까?

Lubuntu 18.04가 설치된 이 노트북에는 부트로더가 설치되어 사용됩니까? 그렇지 않다면 대신 무엇을 사용합니까? 시작 프로세스는 무엇입니까?

노트북이 BIOS 대신 UEFI를 사용합니까? UEFI는 BIOS 교체 외에 부트로더이기도 합니까?

나는 팔로우한다https://unix.stackexchange.com/a/137587/674부트로더를 찾으세요.

감사해요.

$ sudo parted -l
[sudo] password for t: 
Model: ATA TOSHIBA MQ01ABF0 (scsi)
Disk /dev/sda: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name                  Flags
 1      1049kB  538MB  537MB  fat32        EFI System Partition  boot, esp
 2      538MB   500GB  500GB  ext4

$ sudo dd if=/dev/sda bs=512 count=1 2>&1 | grep GRUB
$ sudo dd if=/dev/sda bs=512 count=1 2>&1 | grep LILO
$ sudo ./bootinfoscript --stdout
                  Boot Info Script 0.61      [1 April 2012]


============================= Boot Info Summary: ===============================

 => No boot loader is installed in the MBR of /dev/sda.

sda1: __________________________________________________________________________

    File system:       vfat
    Boot sector type:  FAT32
    Boot sector info:  No errors found in the Boot Parameter Block.
    Operating System:  
    Boot files:        /efi/BOOT/fbx64.efi /efi/ubuntu/fwupx64.efi 
                       /efi/ubuntu/grubx64.efi /efi/ubuntu/mmx64.efi 
                       /efi/ubuntu/shimx64.efi

sda2: __________________________________________________________________________

    File system:       ext4
    Boot sector type:  -
    Boot sector info: 
    Operating System:  Ubuntu 18.04.2 LTS
    Boot files:        /boot/grub/grub.cfg /etc/fstab

============================ Drive/Partition Info: =============================

Drive: sda _____________________________________________________________________
Disk /dev/sda: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt

Partition  Boot  Start Sector    End Sector  # of Sectors  Id System

/dev/sda1                   1   976,773,167   976,773,167  ee GPT


GUID Partition Table detected.

Partition    Start Sector    End Sector  # of Sectors System
/dev/sda1           2,048     1,050,623     1,048,576 EFI System partition
/dev/sda2       1,050,624   976,771,071   975,720,448 Data partition (Linux)

"blkid" output: ________________________________________________________________

Device           UUID                                   TYPE       LABEL

/dev/sda1        0C1E-EE69                              vfat       
/dev/sda2        7a7ed7ca-d939-49d6-8951-ba573929f41f   ext4       

================================ Mount points: =================================

Device           Mount_Point              Type       Options

/dev/sda1        /boot/efi                vfat       (rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
/dev/sda2        /                        ext4       (rw,relatime,errors=remount-ro,data=ordered)


=========================== sda2/boot/grub/grub.cfg: ===========================

--------------------------------------------------------------------------------
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
  set have_grubenv=true
  load_env
fi
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="0"
fi

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
else
  menuentry_id_option=""
fi

export menuentry_id_option

if [ "${prev_saved_entry}" ]; then
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi

function savedefault {
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
}
function recordfail {
  set recordfail=1
  if [ -n "${have_grubenv}" ]; then if [ -z "${boot_once}" ]; then save_env recordfail; fi; fi
}
function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}

if [ x$feature_default_font_path = xy ] ; then
   font=unicode
else
insmod part_gpt
insmod ext2
set root='hd0,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  7a7ed7ca-d939-49d6-8951-ba573929f41f
else
  search --no-floppy --fs-uuid --set=root 7a7ed7ca-d939-49d6-8951-ba573929f41f
fi
    font="/usr/share/grub/unicode.pf2"
fi

if loadfont $font ; then
  set gfxmode=auto
  load_video
  insmod gfxterm
  set locale_dir=$prefix/locale
  set lang=en_US
  insmod gettext
fi
terminal_output gfxterm
if [ "${recordfail}" = 1 ] ; then
  set timeout=30
else
  if [ x$feature_timeout_style = xy ] ; then
    set timeout_style=hidden
    set timeout=0
  # Fallback hidden-timeout code in case the timeout_style feature is
  # unavailable.
  elif sleep --interruptible 0 ; then
    set timeout=0
  fi
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/10_linux ###
function gfxmode {
    set gfxpayload="${1}"
    if [ "${1}" = "keep" ]; then
        set vt_handoff=vt.handoff=1
    else
        set vt_handoff=
    fi
}
if [ "${recordfail}" != 1 ]; then
  if [ -e ${prefix}/gfxblacklist.txt ]; then
    if hwmatch ${prefix}/gfxblacklist.txt 3; then
      if [ ${match} = 0 ]; then
        set linux_gfx_mode=keep
      else
        set linux_gfx_mode=text
      fi
    else
      set linux_gfx_mode=text
    fi
  else
    set linux_gfx_mode=keep
  fi
else
  set linux_gfx_mode=text
fi
export linux_gfx_mode
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-7a7ed7ca-d939-49d6-8951-ba573929f41f' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_gpt
    insmod ext2
    set root='hd0,gpt2'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  7a7ed7ca-d939-49d6-8951-ba573929f41f
    else
      search --no-floppy --fs-uuid --set=root 7a7ed7ca-d939-49d6-8951-ba573929f41f
    fi
        linux   /boot/vmlinuz-4.15.0-45-generic root=UUID=7a7ed7ca-d939-49d6-8951-ba573929f41f ro  quiet splash $vt_handoff
    initrd  /boot/initrd.img-4.15.0-45-generic
}
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-7a7ed7ca-d939-49d6-8951-ba573929f41f' {
    menuentry 'Ubuntu, with Linux 4.15.0-45-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-45-generic-advanced-7a7ed7ca-d939-49d6-8951-ba573929f41f' {
        recordfail
        load_video
        gfxmode $linux_gfx_mode
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt2'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  7a7ed7ca-d939-49d6-8951-ba573929f41f
        else
          search --no-floppy --fs-uuid --set=root 7a7ed7ca-d939-49d6-8951-ba573929f41f
        fi
        echo    'Loading Linux 4.15.0-45-generic ...'
            linux   /boot/vmlinuz-4.15.0-45-generic root=UUID=7a7ed7ca-d939-49d6-8951-ba573929f41f ro  quiet splash $vt_handoff
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img-4.15.0-45-generic
    }
    menuentry 'Ubuntu, with Linux 4.15.0-45-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-45-generic-recovery-7a7ed7ca-d939-49d6-8951-ba573929f41f' {
        recordfail
        load_video
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt2'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  7a7ed7ca-d939-49d6-8951-ba573929f41f
        else
          search --no-floppy --fs-uuid --set=root 7a7ed7ca-d939-49d6-8951-ba573929f41f
        fi
        echo    'Loading Linux 4.15.0-45-generic ...'
            linux   /boot/vmlinuz-4.15.0-45-generic root=UUID=7a7ed7ca-d939-49d6-8951-ba573929f41f ro recovery nomodeset 
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img-4.15.0-45-generic
    }
    menuentry 'Ubuntu, with Linux 4.15.0-20-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-20-generic-advanced-7a7ed7ca-d939-49d6-8951-ba573929f41f' {
        recordfail
        load_video
        gfxmode $linux_gfx_mode
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt2'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  7a7ed7ca-d939-49d6-8951-ba573929f41f
        else
          search --no-floppy --fs-uuid --set=root 7a7ed7ca-d939-49d6-8951-ba573929f41f
        fi
        echo    'Loading Linux 4.15.0-20-generic ...'
            linux   /boot/vmlinuz-4.15.0-20-generic root=UUID=7a7ed7ca-d939-49d6-8951-ba573929f41f ro  quiet splash $vt_handoff
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img-4.15.0-20-generic
    }
    menuentry 'Ubuntu, with Linux 4.15.0-20-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-20-generic-recovery-7a7ed7ca-d939-49d6-8951-ba573929f41f' {
        recordfail
        load_video
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt2'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  7a7ed7ca-d939-49d6-8951-ba573929f41f
        else
          search --no-floppy --fs-uuid --set=root 7a7ed7ca-d939-49d6-8951-ba573929f41f
        fi
        echo    'Loading Linux 4.15.0-20-generic ...'
            linux   /boot/vmlinuz-4.15.0-20-generic root=UUID=7a7ed7ca-d939-49d6-8951-ba573929f41f ro recovery nomodeset 
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initrd.img-4.15.0-20-generic
    }
}

### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###

### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/20_memtest86+ ###
### END /etc/grub.d/20_memtest86+ ###

### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/30_uefi-firmware ###
menuentry 'System setup' $menuentry_id_option 'uefi-firmware' {
    fwsetup
}
### END /etc/grub.d/30_uefi-firmware ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f  ${config_directory}/custom.cfg ]; then
  source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
--------------------------------------------------------------------------------

=============================== sda2/etc/fstab: ================================

--------------------------------------------------------------------------------
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda2 during installation
UUID=7a7ed7ca-d939-49d6-8951-ba573929f41f /               ext4    errors=remount-ro 0       1
# /boot/efi was on /dev/sda1 during installation
UUID=0C1E-EE69  /boot/efi       vfat    umask=0077      0       1
/swapfile                                 none            swap    sw              0       0
--------------------------------------------------------------------------------

=================== sda2: Location of files loaded by Grub: ====================

           GiB - GB             File                                 Fragment(s)


=============================== StdErr Messages: ===============================

cat: /tmp/BootInfo-7fBr4xK8/Tmp_Log: No such file or directory

답변1

예, 이 노트북에는 UEFI 버전의 GRUB 부트로더가 설치되어 있습니다. /efi/ubuntu/grubx64.efi파일을 볼 수 있습니다. 하지만MBR 유형출력에 표시된 대로 부트로더가 설치됩니다.

=> No boot loader is installed in the MBR of /dev/sda

아니요, UEFI는 기술적으로 부트로더가 아닙니다.

UEFI는시스템 펌웨어, 최신 PC에서 BIOS의 역할을 대체합니다. 부트로더는 "실제 운영 체제를 로드하기 위해 시스템 펌웨어에서 제공하는 서비스를 활용하는 (실제 운영 체제에 비해) 비교적 간단한 것"으로 정의할 수 있습니다.

시스템 펌웨어는 초기에 시스템을 제어하므로부트로더의 모습. 기존 PC BIOS는 기본적으로 다음과 같습니다.

  • 시스템을 16비트 8086 호환 모드로 설정
  • 모호한 방식으로 이전에 선택한 디스크의 첫 번째 512바이트 블록을 읽습니다.
  • 블록의 마지막 2바이트가 0x55 및 0xaa인 경우 블록의 처음 446바이트 정도를 프로그램으로 실행해 보십시오. 이는 원래 1986년 IBM PC/AT와 기본적으로 동일한 기본 입/출력 기능을 제공하며 수년에 걸쳐 다양한 확장 기능이 추가되었습니다.

최신 시스템에서 446바이트는 가능한 디스크 액세스 인터페이스(이전 C/H/S 및 최신 LBA)를 처리하고 나머지 부트로더를 로드하는 데 거의 충분하지 않습니다. 이는 일반적으로 기본 부팅 사이에 포함됩니다. 첫 번째 파티션의 시작 공간에 기록됩니다.

반면에 UEFI는 다음을 수행합니다.

  • 32비트이든 64비트이든 시스템의 기본 비트 심도를 사용할 수 있습니다.
  • GPT 파티션에서 최소한 FAT32 파일 시스템(특정 버전)을 읽기 위한 기본 지원을 제공합니다. 다른 파일 시스템도 지원될 수 있습니다.
  • 부팅 순서 설정을 포함한 펌웨어 설정에 액세스할 수 있도록 부트 로더 및 운영 체제에 대한 표준 인터페이스를 제공합니다.
  • 부트로더 허용일반 파일, 특정 위치에 있는 고정된 크기의 기계어 코드 블록이 아닙니다.

이 명령을 사용하면 sudo efibootmgr -v시스템 펌웨어와 부트 로더 간의 링크(UEFI 부팅 순서 설정)가 표시됩니다. 이는 시스템의 배터리 지원 NVRAM 메모리(= 기본적으로 UEFI 대신 BIOS가 있는 시스템에 BIOS 설정이 저장되는 위치와 동일)에 저장되며 각 구성의 부트로더에 대해 네 가지 사항을 지정합니다.

  • 사람이 읽을 수 있는 이름
  • 부트로더가 포함된 파티션의 GUID 스타일 파티션 ID
  • 일반적으로 DOS/Windows 스타일 백슬래시를 디렉터리 구분 기호로 사용하는 부트 로더의 파일 이름
  • 각 부트로더가 사용 방법을 결정할 수 있는 추가 매개변수 문자열입니다.

귀하의 경우 UEFI 부팅 순서에 등록된 부트 로더는 실제로는 UEFI 보안 부팅 심 부트 로더가 아닐 수도 /efi/ubuntu/grubx64.efi있습니다 /efi/ubuntu/shimx64.efi. 이는 Microsoft에서 서명했으므로 기본적으로 UEFI 보안 부팅을 지원하는 모든 64비트 x86 시스템에 로드할 수 있습니다. 여기에는 Canonical Secure Boot 인증서의 복사본이 내장되어 있으며 해당 인증서(또는 선택적으로 시스템 NVRAM에 시스템 소유자 키 또는 MOK로 설치된 다른 인증서)를 사용하여 규칙에 따라 로드하는 다음 파일을 암호화 방식으로 인증합니다. 파일은 grubx64.efi파일과 동일한 디렉터리에 있습니다 .shimx64.efi

시스템에서 보안 부팅이 활성화되지 않은 경우 이 단계를 건너뛰고 \efi\ubuntu\grubx64.efiUEFI 부팅 순서 설정에서 직접 지정할 수 있습니다.

UEFI에는 이동식 미디어에 대한 대체 부트로더 경로와 부트로더가 NVRAM 설정에 등록되지 않을 수 있는 기타 경우도 포함되어 있습니다. 64비트 x86 아키텍처의 경우 \efi\boot\bootx64.efi이 파일이 이동식 미디어의 FAT32 파티션에 존재하는 경우 해당 미디어는 실제로 삭제된 것입니다.부팅 가능UEFI의 경우.

UEFI 호환 부트로더를 시스템 펌웨어에 내장하는 것은 기술적으로 가능하며 실제로 쉽습니다. 그러나 이로 인해 특정 운영 체제나 운영 체제 제품군에 특정한 부트로더를 업데이트하기가 어렵습니다. 따라서 일반적으로 다음과 같은 임베디드 부트로더를 볼 가능성이 더 높습니다.가전제품대신에일반 컴퓨터.

관련 정보