Reparar arranque Dual en equipos Linex-Windows

En los centros existen equipos en los que se permite elegir, al inicio, arrancar en el sistema operativo Linex o windows. Estos equipos, motivados por alguna actulización, pierden esta funcionalidad con el paso del tiempo y solamente aparece disponible la posibilidad de iniciar en windows.
Para solucionar este problema y permitir al usuario recuperar la posibilidad de volver a trabajar en Linex, desde la Sección y concretamente el compañero Oscar, publicó una serie de posibles soluciones para reparar el arranque dual en equipos que sólo entran en Windows y tienen el arranque en modo UEFI.
Vamos al lio...
- En windows ("solución" "permanente"). Copiad el .bat de la parte inferior de la página (bootrepair.bat) en el disco (por ejemplo, en C:\) y ejecutad lo siguiente en consola con privilegios de administrador:
schtasks /create /tn "BootRepair" /tr "C:\bootrepair.bat" /sc ONSTART /ru SYSTEM |
(sobra decir que si lo copiáis en otra ruta la cambiéis también en esa línea)
A partir de ahí, en cada reinicio en windows se eliminan todas las entradas de arranque de ubuntu y se crea una nueva. Esto se hace porque en su momento comprobamos que cuando sólo arranca en windows la entrada de arranque de ubuntu existía, pero estaba fuera de la lista de preferencias de arranque, y volver a añadirla a dicha lista no lo solucionaba. También nos ha pasado a posteriori que SÍ funcionase, pero habiendo visto los dos casos preferimos curarnos en salud (burramente).
Si alguien se siente molesto con eso, puede probar a utilizar este otro código para el .bat:
@echo off
set identificador=Inicial
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=2" %%A in ('bcdedit /enum firmware ^| findstr "Identificador shimx64.efi"') do (
if /i "%%A" == "\EFI\ubuntu\shimx64.efi" (
bcdedit /set {fwbootmgr} displayorder "!identificador!" /addfirst
)
SET identificador=%%A
)
endlocal
|
- En ubuntu ("solución" "puntual").
Entrando en la bios (aka UEFI firmware), desde las opciones de arranque seleccionamos Arrancar desde archivo, elegimos el disco donde está la partición EFI, y ahí usamos el "navegador" para seleccionar EFI->ubuntu->shimx64.efi. Con eso debemos poder arrancar normalmente en ubuntu. Una vez hayamos arrancado, ejecutamos el script adjunto (EFIBootOrder.sh), que viene en la imagen de los infolab que sacamos en verano.
- En ubuntu ("solución" "permanente").
Repetimos el paso anterior y, además, montamos /dev/sda1, copiamos /EFI/Microsoft/Boot/bootmgfw.efi como /EFI/Microsoft/Boot/bootmgfw_ORIG.efi, sobreescribimos /EFI/ubuntu/shimx64.efi encima de /EFI/Microsoft/Boot/bootmgfw.efi, editamos /boot/grub/grub.cfg y reemplazamos /EFI/Microsoft/Boot/bootmgfw.efi por /EFI/Microsoft/Boot/bootmgfw_ORIG.efi en la línea del chainloader. Y desmontamos /dev/sda1.
Esto último tiene la tara de que si actualizamos grub la entrada de windows hará que también arranquemos en ubuntu...pero es un mal menor (al fin y al cabo, en ubuntu podríamos usar una tarea de puppet para corregir grub.cfg).
bootrepair.bat (la base de este script se copió vilmente de aquí)
@echo off
set identificador=Inicial
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=2" %%A in ('bcdedit /enum firmware ^| findstr "Identificador shimx64.efi"') do (
if /i "%%A" == "\EFI\ubuntu\shimx64.efi" (
bcdedit /delete "!identificador!" /cleanup
)
SET identificador=%%A
)
endlocal
for /f "tokens=2 delims={}" %%a in ('bcdedit /copy {bootmgr} /d "Ubuntu"') do set guid={%%a}
bcdedit /set %guid% path \EFI\ubuntu\shimx64.efi
bcdedit /set {fwbootmgr} displayorder %guid% /addfirst
|
EFIBootOrder.sh
#!/bin/bash
#
# Limpia entradas de arranque de ubuntu no funcionales (gracias HP, por ser tan HP),
# y añade como primera opción la actual.
#
bootcurrent=$(efibootmgr | grep BootCurrent | cut -d" " -f2)
for e in $(efibootmgr | grep "\\\EFI\\\ubuntu\\\shimx64.efi" | cut -d* -f1 | cut -c5-9 | grep -v $bootcurrent)
do
efibootmgr -b $e -B
done
bootchain=$(efibootmgr | grep BootOrder | cut -d" " -f2)
[[ $(echo $bootchain | grep $bootcurrent) ]] || efibootmgr -o $bootcurrent,$bootchain
|
Este script busca las entradas filtrando por '\EFI\ubuntu\shimx64.efi' porque así aparecía originalmente la entrada de Ubuntu en el infolab donde se probó. Sin embargo, en la mayoría de sistemas las entradas tendrán la descripción 'Ubuntu' o 'Ubuntu Boot Manager', así que no está de más ejecutar efibootmgr para echar un vistazo al tipo de entradas que tenemos, para modificar el grep si fuese necesario (cambiando '\\\EFI\\\ubuntu\\\shimx64.efi' por 'Ubuntu', por ejemplo).
Para el caso de profesores que hayan recibido el DEP (Dispositivo Educativo Personal) tenemos un manual estupendo elaborado por los compañeros del CPR de Mérida, en el que describe perfectamente y de una manera muy sencilla como podemos recuperar el gestor de arranque: http://www.disanedu.com/index.php/descargar-docs/send/3-asi-de-facil/138-asi-de-facil-recuperar-el-gestor-de-arranque-del-dispositivo-educativo-personal-del-profesor
Espero que sea de ayuda... ;-)