How to create an EFI System Partition?
TL; DR How do I create an EFI system partition from scratch? How do I put the EFI firmware on it onces it is created? Long version I hava Toshiba T430 laptop. I received it with Windows 7 installed (but I think originally it has shipped with Windows 8). I installed Ubuntu on it, but deleted some partitions on the disk so that I ended up wiping out the Windows and only having Ubuntu. Among the deleted partitions was the EFI System partition. I discovered that Ubuntu now boots in Legacy mode (and not UEFI). I am trying to follow this guide on converting my Ubuntu installation from Legacy to UEFI. The problem — since there is no EFI partition whenever I choose from BIOS to boot using UEFI I cannot boot. That counts not only for the harddrive, but usb and DVD as well. I think this is logical — it expects an EFI partition and since it can’t find it, it cannot continue booting futher, be it from HDD or DVD. So how do I recreate the EFI partition? The guide above says:
- If your disk already contains an EFI partition (eg if your computer had Windows8 preinstalled), it can be used for Ubuntu too. Do not format it. It is strongly recommended to have only 1 EFI partition per disk.
- An EFI partition can be created via a recent version of GParted (the Gparted version included in the 12.04 disk is OK), and must have the following attributes:
- Mount point: /boot/efi (remark: no need to set this mount point when using the manual partitioning, the Ubuntu installer will detect it automatically)
- Size: minimum 100Mib. 200MiB recommended.
- Type: FAT32
- Other: needs a «boot» flag.
I had some trouble creating this partition:
- I boot from a live Ubuntu DVD, open GParted, create a 200MB partition and format it to FAT32.
- In GParted I cannot set the mount point and thus cannot set the bootflag.
- I didn’t set the mount point in /etc/fstab since it’s a live CD and fstab looked quite differently from what I expected compared to a normal boot. Anyway, I just didn’t know what values to set.
I booted again via the live DVD and then chose to install Ubuntu. I then created a partition with the mentioned criteria — mount point, 200MB, FAT32, boot flag.
However, I continue to have this problem and I suppose it’s because on that partition there is no EFI firmware, it’s just an empty partition, which is suitable to have EFI firmware.
So again, how do I create an EFI partition, which has the EFI software, so that the laptop can once again boot in UEFI mode?
SOLUTION Thank you both for the answers. What I did was install Windows 8.1 from scratch by formatting the whole disk and then installing (this time properly) Ubuntu next to it. These are my partitions now:
During the Win 8 setup, as soon as I deleted all existing partitions and let Windows reformat the disk, it automatically created, besides the main install partition, three additional partitions, namely 1, 2, 3. Now, after I had a proper ESP, I could boot both from HDD or DVD in UEFI mode.
You say that the ESP doesn’t store any info by default, but I guess that when an OS installs, it puts some info there. So I guess my case was the following: I had wiped it out and even though I recreated it, it was not filled with any info, since the creation of the ESP was done after an OS had been installed. I lost the Ubuntu installation (no big deal, it was a fresh install anyway), but I guess that in order to save it, I should have followed grawity’s advice. Didn’t have time, though, but happily everything is fine now.
The ESP stores boot loaders. Thus, if you’ve got an existing installation and delete the ESP, you’ll lose the ability to boot the computer. This type of problem is actually fairly straightforward to fix — IF you know how!
4 Answers 4
First, you don’t set the mount point in GParted; that’s done manually (and temporarily) via the mount command or permanently by editing /etc/fstab . Thus, your concern over this issue is misplaced.
Second, an EFI System Partition (ESP) is simply a FAT partition with a particular type code (namely, C12A7328-F81F-11D2-BA4B-00A0C93EC93B on GPT disks) set. Note that the mount point in /etc/fstab is not part of the ESP’s definition; it’s just conventional (but not required) in Linux to access the ESP by mounting it at /boot/efi , typically via an /etc/fstab entry. How you set the type code varies from one program to another:
- In gdisk , you set the type code to EF00. ( gdisk uses two-byte type codes that expand out to the real type codes on the disk; «EF00» is just a mnemonic for «C12A7328-F81F-11D2-BA4B-00A0C93EC93B».)
- In GParted or parted , you set the «boot flag.» Note, however, that this works only on GPT disks; you cannot set the ESP type code on MBR disks with these programs. (This isn’t normally a big deal, since EFI-based computers usually boot from GPT disks.)
- In the Ubuntu installer, you identify the partition as an «EFI boot partition.» It then sets the type code and will set up /etc/fstab appropriately.
- In recent versions of Linux fdisk , you set the partition type by its number (1 for «EFI System» on GPT disks or 0xEF on MBR disks) or by entering the full type code on GPT disks.
Third, the ESP does not hold firmware — firmware is, by definition, stored in chips on the motherboard. Thus, your effort to install the EFI firmware on the ESP is a wild goose chase. (There are two exceptions to this rule. First, you might store a firmware file on the ESP in order to update the firmware on your computer. This is just a temporary holding area, though. Second, the DUET or Clover boot loader, the EFI is loaded as a regular program, typically from the ESP. These tools are BIOS boot loaders, though, that enable BIOS-only computers to boot as if they were EFI machines; they are not normally used on computers with EFI firmware, which you claim your computer has. Technically, neither DUET nor Clover is firmware; they’re BIOS boot loaders that do the same job as EFI.)
Finally, I can think of a number of possible causes for your problem, but without further information, I’d need to write half a book to cover them all. I recommend you run the Boot Info Script on the computer. This will produce a file called RESULTS.txt . Post it to a pastebin site and post back with the URL to your document. That will give hard data on your configuration, which will greatly reduce the range of possible causes of your problem.
Создание загрузочной системы EFI⚓︎
Отключите secure boot ! На данный момент эта технология не поддерживается. Чтобы настроить процесс загрузки с помощью GRUB для UEFI, необходимо отключить её в интерфейсе конфигурации прошивки. Прочтите документацию, предоставленную производителем вашей системы, чтобы узнать, как это сделать.
Убедитесь, что вы не пропустили раздел по настройке ядра, для поддержки EFI.
Поиск, или создание системного раздела EFI⚓︎
В системе на основе EFI загрузчики устанавливаются в специальный раздел FAT32, называемый системным разделом EFI (ESP). Если ваша система поддерживает EFI и предустановлен дистрибутив Linux и (или) Windows, скорее всего, ESP уже создан. Посмотрите все разделы на вашем жёстком диске (замените sda на нужное устройство):
Столбец ESP type должен быть EFI System .
Устр-во начало Конец Секторы Размер Тип /dev/sda1 4096 618495 614400 300M EFI /dev/sda2 618496 268430084 267811589 127,7G Файловая система Linux
Если система или жёсткий диск новые, или если вы впервые устанавливаете ОС, загружаемую через UEFI , ESP может не существовать. В этом случае создайте новый раздел, создайте на нем файловую систему vfat и установите тип раздела EFI system .
Некоторые (старые) реализации UEFI могут требовать, чтобы ESP был первым разделом на диске.
Создайте точку монтирования для ESP и смонтируйте ее (замените sda1 на соответствующий ESP ):
mkdir -pv /boot/efi && mount -v -t vfat /dev/sda1 /boot/efi
Добавьте запись для ESP в /etc/fstab , чтобы он автоматически монтировался во время загрузки системы:
cat >> /etc/fstab /dev/sda1 /boot/efi vfat defaults 0 1 EOF
Монтирование EFI Variable File System⚓︎
Для установки GRUB на UEFI необходимо смонтировать файловую систему EFI Variable, efivarfs . Если она еще не была смонтирована ранее, выполните команду:
mountpoint /sys/firmware/efi/efivars || mount -v -t efivarfs efivarfs /sys/firmware/efi/efivars
Добавьте запись для efivarfs в /etc/fstab , чтобы она автоматически монтировалась во время загрузки системы:
cat >> /etc/fstab efivarfs /sys/firmware/efi/efivars efivarfs defaults 0 0 EOF
Если система не загружается с UEFI, каталог /sys/firmware/efi будет отсутствовать. В этом случае вы должны загрузить систему в режиме UEFI с аварийным загрузочным диском.
Настройка⚓︎
В системах на основе UEFI GRUB работает устанавливая приложение EFI (особый вид исполняемого файла) в /boot/efi/EFI/[id sizes/grubx64.efi , где /boot/efi — точка монтирования ESP , а [id] заменяется идентификатором, указанным в командной строке grub-install . GRUB создаст запись в переменных EFI , содержащую путь EFI/[id]/grubx64.efi , чтобы прошивка EFI могла найти grubx64.efi и загрузить его.
grubx64.efi очень легкий (136 Кб), поэтому он не будет занимать много места в ESP. Типичный размер ESP составляет 100 Мб (для диспетчера загрузки Windows, который использует около 50 Мб в ESP). Как только grubx64.efi загружен прошивкой, он загрузит модули GRUB в загрузочный раздел. Расположение по умолчанию — /boot/grub .
Установите файлы GRUB в /boot/efi/EFI/LFS/grubx64.efi и /boot/grub . Затем настройте загрузочную запись в переменных EFI:
grub-install --bootloader-id=LIN --recheck
Если установка прошла успешно, вывод должен быть:
Installing for x86_64-efi platform. Installation finished. No error reported.
Запустите efibootmgr , чтобы ещё раз проверить конфигурацию загрузки EFI.
BootCurrent: 0000 Timeout: 1 seconds BootOrder: 0005,0000,0002,0001,0003,0004 Boot0000* ARCH Boot0001* UEFI:CD/DVD Drive Boot0002* Windows Boot Manager Boot0003* UEFI:Removable Device Boot0004* UEFI:Network Device Boot0005* LIN
Обратите внимание, что 0005 является первым в BootOrder , а Boot0005 — это LIN . Это означает, что при следующей загрузке системы будет использоваться версия GRUB , установленная в LIN .
Создание файла конфигурации GRUB⚓︎
Создайте /boot/grub/grub.cfg для настройки меню загрузки GRUB:
cat > /boot/grub/grub.cfg # Begin /boot/grub/grub.cfg set default=0 set timeout=5 insmod part_gpt insmod ext2 set root=(hd0,2) if loadfont /boot/grub/fonts/unicode.pf2; then set gfxmode=auto insmod all_video terminal_output gfxterm fi menuentry "GNU/Linux, Linux 5.10.17-lfs-10.1" linux /boot/vmlinuz root=/dev/sda2 ro > menuentry "Firmware Setup" fwsetup > EOF
(hd0,2) , sda2 следует заменить в соответствии с вашей конфигурацией.
Для GRUB файлы используются относительно раздела. Если вы использовали отдельный раздел /boot , удалите /boot из указанных выше путей (к ядру и к unicode.pf2). Вам также нужно будет изменить строку корневого раздела, чтобы она указывала на загрузочный раздел.
Загрузка вместе с Windows⚓︎
Добавьте запись в файл конфигурации grub.cfg :
cat >> /boot/grub/grub.cfg # Begin Windows addition menuentry "Windows 10" insmod fat insmod chain set root=(hd0,1) chainloader /EFI/Microsoft/Boot/bootmgfw.efi > EOF
(hd0,1) следует заменить назначенным GRUB именем для ESP. Директива chainloader может использоваться, чтобы указать GRUB запустить другой исполняемый файл EFI, в данном случае диспетчер загрузки Windows. вы можете поместить больше используемых инструментов в исполняемом формате EFI (например, оболочку EFI) в ESP и создать для них записи GRUB.