1

Does this laptop with Lubuntu 18.04 have a bootloader installed and use it? If not, what does it use instead? What is its booting process like?

Does the laptop use UEFI instead of BIOS? Is UEFI a bootloader besides a replacement of BIOS?

I follow https://unix.stackexchange.com/a/137587/674 to find out bootloader.

Thanks.

$ 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 
8
  • It clearly says EFI System Partition so I guess it uses EFI en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface as (most?) today's x86 computers. Commented Feb 21, 2019 at 23:03
  • Which laptop (What do you mean by “this”)? Commented Feb 21, 2019 at 23:03
  • Sorry I thought you were asking about the firmware of the laptop, now I see you are asking about what is installed on the hard-disk. I have edited you question, to prevent others making the same mistake. Commented Feb 21, 2019 at 23:20
  • “Is the bootloader, that is installed on this laptop, used?” Commented Feb 21, 2019 at 23:28
  • Ah yes, the very question I thought you were asking at the start. However I don't now know if you are asking because you don't know, or as a snide comment about my comment. Out. Commented Feb 21, 2019 at 23:37

1 Answer 1

6

Yes, that laptop has an UEFI version of the GRUB bootloader installed - you can see the /efi/ubuntu/grubx64.efi file. But there is no MBR-style bootloader installed, as evidenced by the output

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

No, UEFI is not technically a bootloader.

UEFI is a system firmware, and replaces BIOS in that role on modern PCs. A bootloader could be defined as "something relatively simple (compared to an actual OS), that utilizes the services provided by the system firmware to load the actual operating system."

The system firmware initially controls the system, and so it will dictate what a bootloader is expected to be like. A traditional PC BIOS would essentially:

  • setup the system in 16-bit 8086-compatible mode
  • read the first 512-byte block of a disk that has been previously selected in some not-so-well-specified way
  • if the two last bytes of that block are 0x55 and 0xaa, then attempt to execute the first 446 or so bytes of the block as a program. Provide it the basic input/output functions, callable essentially same way as in the original IBM PC/AT in year 1986, with a number of various extensions added in here and there over the years.

On a modern system, 446 bytes is barely enough to cover the possible disk access interfaces (old C/H/S and the modern LBA), and then load the rest of the bootloader, which is often embedded in the space between the Master Boot Record and the beginning of the first partition.

UEFI on the other hand will:

  • allow the use of the system's native bit depth, whether 32- or 64-bit.
  • provide a built-in support for reading at least (a specific version of) a FAT32 filesystem on a GPT partition. Other filesystems may be supported too.
  • provide a standard interface for the bootloader and the OS to access firmware settings, including the boot order settings
  • allow the bootloader to be a regular file, not a fixed-size block of machine code in a specific location.

If you use the sudo efibootmgr -v command, you'll see the link between the system firmware and the bootloader: the UEFI boot order settings. They are stored in the battery-backed NVRAM memory of the system (= essentially the same place the BIOS settings were stored on systems that had BIOS instead of UEFI), and specify four things about each configured bootloader:

  • its human-readable name
  • the GUID-style partition ID of the partition containing the bootloader
  • the filename of the bootloader, usually with DOS/Windows-style backslashes as directory separators
  • a string of additional parameters each bootloader can decide how to use.

In your case, the bootloader registered in the UEFI boot order might not actually be /efi/ubuntu/grubx64.efi, but /efi/ubuntu/shimx64.efi: the UEFI Secure Boot shim bootloader. It is signed by Microsoft and so should be loadable on essentially all 64-bit x86 systems supporting UEFI Secure Boot. It has a built-in copy of Canonical's Secure Boot certificate, and it uses that (or optionally any other certificate installed into the system NVRAM as Machine Owner Key, or MOK) to cryptographically verify the next file it loads, which is by convention the grubx64.efi file in the same directory the shimx64.efi is located in.

If your system doesn't have Secure Boot enabled, this step can be skipped and \efi\ubuntu\grubx64.efi might be specified directly in the UEFI boot order settings.

For removable media and other situations where the bootloader might not be registered in NVRAM settings, UEFI also includes a fallback bootloader path. For 64-bit x86 architecture, it's \efi\boot\bootx64.efi. If this file exists in a FAT32 partition on a removable media, then that media is effectively bootable for UEFI.

It would be technically possible (and in fact quite easy) to embed a UEFI-compatible bootloader into the system firmware. But that makes it hard to update the bootloader, which can often be specific to a particular OS or a family of OSs. As a result, you'd be generally more likely to see such an embedded bootloader in an appliance rather than in a general-purpose computer.

8
  • 2
    It is also possible to skip GRUB, the kernel itself can be configured as an EFI bootloader. Commented Feb 22, 2019 at 7:59
  • 1
    I tend to just point people to rodsbooks.com/efi-bootloaders/principles.html so they could get even better description with less effort :-) Commented Feb 22, 2019 at 10:40
  • @StephenKitt "the kernel itself can be configured as an EFI bootloader". Do you mean an OS kernel can be a bootloader of itself or a bootloader of firmware EFI? Commented Feb 22, 2019 at 12:30
  • 1
    The Linux kernel can boot itself from EFI: you can copy a kernel to the ESP, and boot it directly from EFI, without GRUB or anything else. Commented Feb 22, 2019 at 13:11
  • @StephenKitt is "the Linux kernel can boot itself from EFI" a popular or better practice than using a boot loader? Commented Feb 22, 2019 at 13:44

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.