You need to swich from bios to efi? Read on.
DISCLAIMER: you need to be familiar with these commands and make sure you have backup because you may destroy your linux if you do not pay attention.
1. List the existing partiton
# fdisk -l /dev/sda
Output:
root@vboxbox:~# fdisk -l /dev/sda Disk /dev/sda: 14.7 GiB, 15724707840 bytes, 30712320 sectors Disk model: Kingston DataTra 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: dos Disk identifier: 0xfcf559cd Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 499711 497664 243M 83 Linux /dev/sda2 501758 30711807 30210050 14.4G 5 Extended /dev/sda5 501760 30711807 30210048 14.4G 8e Linux LVM
2. Must convert your partition table from MBR to GPT
The commant gdisk confirms you have MBR:
root@vboxbox:~# gdisk -l /dev/sda GPT fdisk (gdisk) version 1.0.3 Partition table scan: MBR: MBR only BSD: not present APM: not present GPT: not present *************************************************************** Found invalid GPT and valid MBR; converting MBR to GPT format in memory. *************************************************************** Disk /dev/sda: 30712320 sectors, 14.6 GiB Model: Kingston DataTra Sector size (logical/physical): 512/512 bytes Disk identifier (GUID): A3E95EC8-299A-4799-B553-CF4DE54438FB Partition table holds up to 128 entries Main partition table begins at sector 2 and ends at sector 33 First usable sector is 34, last usable sector is 30712286 Partitions will be aligned on 2048-sector boundaries Total free space is 4541 sectors (2.2 MiB) Number Start (sector) End (sector) Size Code Name 1 2048 499711 243.0 MiB 8300 Linux filesystem 5 501760 30711807 14.4 GiB 8E00 Linux LVM
Transform the partition table from MBR to GPT:
1. run gdisk /dev/sda
2. type r
3. type f (choose Y)
4. type w (choose Y)
root@vboxbox:~# gdisk /dev/sda GPT fdisk (gdisk) version 1.0.3 Partition table scan: MBR: MBR only BSD: not present APM: not present GPT: not present *************************************************************** Found invalid GPT and valid MBR; converting MBR to GPT format in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by typing 'q' if you don't want to convert your MBR partitions to GPT format! *************************************************************** Command (? for help): r Recovery/transformation command (? for help): f Warning! This will destroy the currently defined partitions! Proceed? (Y/N): y Recovery/transformation command (? for help): w Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): y OK; writing new GUID partition table (GPT) to /dev/sda. Warning: The kernel is still using the old partition table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) The operation has completed successfully.
Now, if you run again gdisk -l, you should have GPT present:
root@vboxbox:~# gdisk -l /dev/sda GPT fdisk (gdisk) version 1.0.3 Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR; using GPT. Disk /dev/sda: 30712320 sectors, 14.6 GiB Model: Kingston DataTra Sector size (logical/physical): 512/512 bytes Disk identifier (GUID): 482F1B37-C2BB-470E-A8E6-16F9AE60F9D9 Partition table holds up to 128 entries Main partition table begins at sector 2 and ends at sector 33 First usable sector is 34, last usable sector is 30712286 Partitions will be aligned on 2048-sector boundaries Total free space is 4541 sectors (2.2 MiB) Number Start (sector) End (sector) Size Code Name 1 2048 499711 243.0 MiB 8300 Linux filesystem 5 501760 30711807 14.4 GiB 8E00 Linux LVM
Shrink /boot filesystem
# umount /boot; e2fsck -f /dev/sda1; resize2fs /dev/sda1 200M
root@vboxbox:~# resize2fs /dev/sda1 200M resize2fs 1.44.5 (15-Dec-2018) Filesystem at /dev/sda1 is mounted on /boot; on-line resizing required resize2fs: On-line shrinking not supported root@vboxbox:~# umount /boot root@vboxbox:~# resize2fs /dev/sda1 200M resize2fs 1.44.5 (15-Dec-2018) Please run 'e2fsck -f /dev/sda1' first. root@vboxbox:~# e2fsck -f /dev/sda1 e2fsck 1.44.5 (15-Dec-2018) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/sda1: 343/62248 files (24.2% non-contiguous), 103564/248832 blocks root@vboxbox:~# resize2fs /dev/sda1 200M resize2fs 1.44.5 (15-Dec-2018) Resizing the filesystem on /dev/sda1 to 204800 (1k) blocks. The filesystem on /dev/sda1 is now 204800 (1k) blocks long. root@vboxbox:~# mount /boot root@vboxbox:~# df -h /boot Filesystem Size Used Avail Use% Mounted on /dev/sda1 194M 93M 91M 51% /boot
Shrink boot partition and create boot efi partition (that will become /boot/efi)
NOTE: here you may wreck your boot partition so if you want to be on a safe side, you can save it's content. If you skip this, no worries: everything in boot can be recreated and is presented in this tutorial.
Choose whatever method you want (fdisk, cfdisk, etc.).
By default, debian installation creates /boot partition with 244M in size. So in order to have an efi partition next to the existing boot, we need to reduce /boot to 200M and create another efi partition 44M in size
At the end you should have:
root@vboxbox:~# fdisk -l /dev/sda Disk /dev/sda: 14.7 GiB, 15724707840 bytes, 30712320 sectors Disk model: Kingston DataTra 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 Disk identifier: 482F1B37-C2BB-470E-A8E6-16F9AE60F9D9 Device Start End Sectors Size Type /dev/sda1 2048 411647 409600 200M Linux filesystem /dev/sda2 411648 501759 90112 44M EFI System /dev/sda5 501760 30711807 30210048 14.4G Linux LVM
If the newly created partition is not listed with "EFI System" type, you can modify it with gdisk:
1. run gdisk /dev/sda
2. type t
3. choose partition number 2
4. choose code EF00
5 type w (choose Y)
root@vboxbox:~# gdisk /dev/sda GPT fdisk (gdisk) version 1.0.3 Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR; using GPT. Command (? for help): t Partition number (1-5): 2 Current type is 'EFI System' Hex code or GUID (L to show codes, Enter = 8300): EF00 Changed type of partition to 'EFI System' Command (? for help): w Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): y OK; writing new GUID partition table (GPT) to /dev/sda. Warning: The kernel is still using the old partition table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) The operation has completed successfully.
Format efi partition as vfat
# mkfs.vfat /dev/sda2
root@vboxbox:~# mkfs.vfat /dev/sda2 mkfs.fat 4.1 (2017-01-24)
If you get the following error (or any other error), do this after reboot.
root@vboxbox:~# mkfs.vfat /dev/sda2 mkfs.fat 4.1 (2017-01-24) mkfs.vfat: Attempting to create a too large filesystem
Did I say reboot? Yes, you need to do that in order to enable UEFI in BIOS.
Boot in rescue mode with linux installation disk and mount the root partition
1. Advanced options → Rescue mode
2. Configure keyboard, hostname, domain and network.
3. Chose device to use as root system, e.g. /dev/rootvg/root
4. Mount separate /boot partition? -> YES
5. Choose "Execute a shell in /dev/rootvg/root.
Update /etc/fstab to reflect the modifications above
In our example, sda1 is /boot and sda2 is new efi boot (which will be /boot/efi)
List partition UUIDs:
root@debian:/# ls -la /dev/disk/by-uuid/ | grep sd lrwxrwxrwx 1 root root 10 Nov 7 12:16 0a277628-c287-4d28-81a0-c6b6ab590479 -> ../../sda1 lrwxrwxrwx 1 root root 10 Nov 7 12:16 FF09-EF8F -> ../../sda2
Replace UUID of /boot for sda1 and create another entry with the UUID of sda2. At the end, you should have the following for boot:
root@debian:/# grep boot /etc/fstab UUID=0a277628-c287-4d28-81a0-c6b6ab590479 /boot ext2 defaults 0 2 UUID=FF09-EF8F /boot/efi vfat defaults 0 2
Create /boot/efi mount point and mount it
# mkdir -p /boot/efi
# mount -a
root@debian:/# mount | grep boot /dev/sda1 on /boot type ext2 (rw,relatime) /dev/sda2 on /boot/efi type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro)
If you have created correctly the entries in /etc/fstab, you should have /boot/efi mounted now. If not, you will need to mount it manually. Do not forget to correct /etc/fstab.
mount -t vfat /dev/sda2 /boot/efi
Install grub-efi (will uninstall grub-pc)
# apt install grub-efi
root@debian:/# apt install grub-efi Reading package lists... Done Building dependency tree Reading state information... Done The following package was automatically installed and is no longer required: grub-pc-bin Use 'apt autoremove' to remove it. The following additional packages will be installed: efibootmgr grub-efi-amd64 grub-efi-amd64-bin grub-efi-amd64-signed mokutil shim-helpers-amd64-signed shim-signed shim-signed-common shim-unsigned Recommended packages: secureboot-db The following packages will be REMOVED: grub-pc The following NEW packages will be installed: efibootmgr grub-efi grub-efi-amd64 grub-efi-amd64-bin grub-efi-amd64-signed mokutil shim-helpers-amd64-signed shim-signed shim-signed-common shim-unsigned 0 upgraded, 10 newly installed, 1 to remove and 0 not upgraded. Need to get 2,557 kB of archives. After this operation, 20.8 MB of additional disk space will be used. Do you want to continue? [Y/n] [...]
Install grub on disk
grub-install /dev/sda
root@debian:/# grub-install /dev/sda Installing for x86_64-efi platform. Installation finished. No error reported.
NOTE: if you forgot to switch to EFI in BIOS, you can still continue but you will have to execute the above command as follows, else you will encounter errors.
root@debian:/# grub-install --target x86_64-efi /dev/sda Installing for x86_64-efi platform. grub-install: warning: EFI variables are not supported on this system.. Installation finished. No error reported.
[h3]Now /boot/efi should be populated and you should have the following file present:[/h3
# file /boot/efi/EFI/debian/grubx64.efi
Also, debian entry should be listed when running the following command
# efibootmgr
root@vboxbox:~# efibootmgr BootCurrent: 0005 BootOrder: 0002,0001,0003,0000,0005,0004 Boot0000* Kingston DataTraveler SE9 Media Boot0000$ASN Boot0001* Virtual DVD-ROM [1] Boot0001$ASN Boot0002* EFI DVD/CDROM Boot0002$ASN Boot0003* EFI Hard Drive Boot0003$ASN Boot0004* EFI Internal Shell Boot0004$ASN Boot0005* debian Boot0005$ASN root@vboxbox:~#