Las placas base modernas traen UEFI como sistema de arranque, esto aporta una serie de ventajas como la posibilidad de arrancar un SO sin bootloader, soporte de particiones GPT, capacidades de red desde el propio arranque entre otras.
UEFI utiliza una partición donde guarda las imágenes de EFI, si esta es borrada hay que restaurarla para poder arrancar, en este manual explicaré dicho procedimiento tanto en Linux como Windows10.
Primero debemos tener claro que hay una partición donde residirán todas las imágenes de arranque(/boot/efi), mientras esta partición vfat exista y tenga el contenido correcto tanto la BIOS-UEFI como Grub serán capaces de arrancar dichas imágenes. En el arranque UEFI se carga el boot loader principal /EFI/BOOT/BOOTX64.EFI y es este el encargado de buscar el resto de imágenes UEFI de cada sistema operativo.
En este artÃculo describiremos como hacerlo bajo varios sistemas operativos:
Linux
Bajo Linux es tan sencillo como chrootear a la partición del sistema y reinstalar grub.
Las particiones en mi sistema son:
Disposit. Comienzo Final Sectores Tamaño Tipo
/dev/sda1 2048 4095 2048 1M Arranque de BIOS
/dev/sda2 4096 413695 409600 200M Sistema EFI
/dev/sda3 413696 2510847 2097152 1G Sistema de ficheros de Linux
/dev/sda4 2510848 468862094 466351247 222,4G Sistema de ficheros de Linux
Chrooteamos:
mount /dev/sda4 /mnt/gentoo
mount /dev/sda3 /mnt/gentoo/boot
mount /dev/sda2 /mnt/gentoo/boot/efi
mount -t proc none /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
chroot /mnt/gentoo /bin/bash
env-update
source /etc/profile
export PS1="(chroot) $PS1"
Montamos el directorio /sys/firmware/efi/efivars con la opción rw para poder escribir en él:
Reinstalamos el EFI y regeneramos la config de grub:
grub-mkconfig -o /boot/grub/grub.cfg
Salimos del chroot:
Reiniciamos:
NOTA: Tendremos que compilar Grub del siguiente modo
GRUB_PLATFORMS="efi-64"
Windows
En windows debemos arrancar desde el cd de instalación, acceder a la lÃnea de comandos y reinstalar la imagen EFI.
Arrancamos diskpart
Seleccionamos el disco donde está la partición EFI:
select disk 0
Seleccionamos la partición donde está la partición EFI y le asignamos la letra A:
select partition 1
assign letter=A
Seleccionamos la partición donde está Windows instalado y le asignamos la letra C:
list vol
select vol 3
assign letter=C
exit
Cambiamos al directorio de EFI y copiamos los ficheros necesarios:
bootrec /fixboot
bcdboot c:\Windows /l en-gb /s a: /f ALL
Tras esto podremos ejecutar grub-mkconfig -o /boot/grub/grub.cfg y obtendremos una entrada adicional de Windoz.
FreeBSD
En FreeBSD es incluso mas fácil, tan solo copiamos los ficheros efi del memstick a la partición GPT, para ello nos bajamos la imagen iso y la volcamos a un usb para arrancar desde él:
Volcamos la imagen:
Al arrancar seleccionaremos la opción “shell” y localizaremos la partición GPT:
Debe aparecer una con type: efi:
3. Name: ada0p3
type: efi
Montamos la partición en un directorio montado mediante unionfs para que sea escrivible:
mount_unionfs /tmp/mnt /mnt/
mount -t msdosfs /dev/ada0p3 /mnt
Creamos el directorio donde copiaremos las imágenes efi y copiamos dichas imágenes:
cp /boot/*.efi /mnt/EFI/FreeBSD/
Consultamos el estado de UEFI en estos momentos:
Insertamos una entrada nueva:
Si añadimos una entrada incorrecta y queremos eliminarla ejecutaremos:
Para mas información acerca de efibootmgr y UEFI sobre FreeBSD:
https://www.freebsd.org/cgi/man.cgi?query=efibootmgr&sektion=8&manpath=freebsd-release-ports
https://www.freebsd.org/cgi/man.cgi?query=uefi&sektion=8&manpath=freebsd-release-ports
Si además tenemos Linux instalado y utilizamos Grub como gestor de arranque debemos introducir una entrada manual desde Linux:
#!/bin/sh
exec tail -n +3 $0
menuentry "FreeBSD chainloader" {
insmod part_gpt
insmod fat
set root='hd0,gpt3'
chainloader /efi/freebsd/boot1.efi
}
Instalamos y regeneramos la configuración de Grub:
grub-mkconfig -o /boot/grub/grub.cfg