logojuntaexblanco 210x30

Reparar arranque Dual en equipos Linex-Windows

penguin 1415562 1280
 
 
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... ;-)
 
 

Junta de Extremadura
Consejería de Educación y Empleo
Secretaría General de Educación
Avda. de Valhondo, S.N,
III Milenio, Módulo 5
06800 Mérida
Aviso legal

emtic es el portal de innovación y tecnología de la educación de la Secretaria General de Educación de la Consejería de Educación y Empleo de la Junta de Extremadura