Compartir a través de


Arranque de máquinas virtuales Linux en rescate de GRUB

Se aplica a: ✔️ Máquinas virtuales Linux

Nota

CentOS al que se hace referencia en este artículo es una distribución de Linux y llegará al final del ciclo de vida (EOL). Tenga en cuenta su uso y planifique en consecuencia. Para obtener más información, consulte Guía de fin de vida de CentOS.

En este artículo se describen varias condiciones que provocan problemas de rescate de GRUB y se proporcionan instrucciones para solucionar problemas.

Durante el proceso de arranque, el cargador de arranque intenta localizar el kernel de Linux y entregar el control de arranque. Si no se puede realizar esta entrega, la máquina virtual (VM) entra en una consola de rescate de GRUB. El mensaje de la consola de rescate de GRUB no se muestra en el registro de la consola serie de Azure, pero se puede mostrar en la captura de pantalla de diagnóstico de arranque de Azure.

Identificación del problema de rescate de GRUB

Vea una captura de pantalla de diagnóstico de arranque en la página Diagnósticos de arranque de la máquina virtual de Azure Portal. Esta captura de pantalla ayuda a diagnosticar el problema de rescate de GRUB y a determinar si un error de arranque provoca el problema.

El texto siguiente es un ejemplo de un problema de rescate grub:

error: file '/boot/grub2/i386-pc/normal.mod' not found.  
Entering rescue mode...  
grub rescue>

Solución de problemas de rescate de GRUB sin conexión

  1. Para solucionar un problema de rescate de GRUB, se requiere una máquina virtual de rescate o reparación. Use comandos de reparación de máquina virtual para crear una máquina virtual de reparación que tenga una copia del disco del sistema operativo de la máquina virtual afectada conectado. Monte la copia de los sistemas de archivos del sistema operativo en la máquina virtual de reparación mediante chroot.

    Nota

    Como alternativa, puede crear una máquina virtual de rescate manualmente mediante el Azure Portal. Para más información, consulte Solución de problemas de una máquina virtual Linux mediante la conexión del disco del sistema operativo a una máquina virtual de recuperación mediante el Azure Portal.

  2. Identifique el problema de rescate de GRUB. Cuando encuentre uno de los siguientes problemas de rescate de GRUB, vaya a la sección correspondiente para resolverlo:

  3. Una vez resuelto el problema de rescate de GRUB, realice las siguientes acciones:

    1. Desmonte la copia de los sistemas de archivos de la máquina virtual de rescate o reparación.

    2. Ejecute el az vm repair restore comando para intercambiar el disco del sistema operativo reparado con el disco del sistema operativo original de la máquina virtual. Para más información, consulte Paso 5 en Reparación de una máquina virtual Linux mediante los comandos de reparación de máquinas virtuales de Azure.

    3. Compruebe si la máquina virtual puede empezar examinando la consola serie de Azure o intentando conectarse a la máquina virtual.

  4. Si falta la partición /boot completa u otro contenido importante y no se puede recuperar, se recomienda restaurar la máquina virtual desde una copia de seguridad. Para más información, consulte Restauración de datos de máquina virtual de Azure en Azure Portal.

Consulte las secciones siguientes para obtener errores detallados, posibles causas y soluciones.

Nota

En los comandos mencionados en las secciones siguientes, reemplace por /dev/sdX el dispositivo de disco del sistema operativo (SO) correspondiente.

Error: sistema de archivos desconocido

En la captura de pantalla siguiente se muestra el mensaje de error:

Captura de pantalla del error desconocido del sistema de archivos grub.

Este error puede estar asociado a uno de los siguientes problemas:

  • Daños en el sistema de archivos /boot.

    Para resolver este problema, siga los pasos descritos en Corregir daños en el sistema de archivos /boot.

  • El cargador de arranque grub apunta a un disco o partición no válidos.

    Para resolver este problema, vuelva a instalar GRUB y vuelva a generar el archivo de configuración de GRUB.

  • Problemas de tabla de particiones de disco del sistema operativo causados por un error humano.

    Para resolver estos problemas, siga los pasos descritos en Error: No hay ninguna partición con recomendaciones para volver a crear la partición /boot si falta o se crea incorrectamente.

Corregir daños en el sistema de archivos /boot

  1. Compruebe si se creó una máquina virtual de rescate o reparación. Si no se creó, siga el paso 1 en Solución de problemas de rescate de GRUB sin conexión para crear la máquina virtual.

  2. Consulte Solución de errores de daños en el sistema de archivos en Azure Linux para resolver los problemas de daños en la partición /boot correspondiente.

  3. Vaya al paso 3 en Solución de problemas de rescate de GRUB sin conexión para intercambiar el disco del sistema operativo.

Reinstalar GRUB y volver a generar el archivo de configuración de GRUB

  1. Compruebe si se creó una máquina virtual de rescate o reparación. Si no se creó, siga el paso 1 en Solución de problemas de rescate de GRUB sin conexión para crear la máquina virtual. Monte todos los sistemas de archivos necesarios, incluidos / y /boot en la máquina virtual de rescate/reparación y, a continuación, escriba el entorno chroot .

  2. Vuelva a instalar GRUB y vuelva a generar el archivo de configuración de GRUB correspondiente mediante uno de los siguientes comandos:

    • Máquinas virtuales Linux RHEL/CentOS/Oracle 7.x/8.x sin UEFI (basada en BIOS- Gen1)

      grub2-install /dev/sdX
      grub2-mkconfig -o /boot/grub2/grub.cfg
      sed -i 's/hd2/hd0/g' /boot/grub2/grub.cfg
      
    • Máquinas virtuales Linux RHEL/CentOS/Oracle 7.x/8.x con UEFI (Gen2)

      yum reinstall grub2-efi-x64 shim-x64
      grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
      sed -i 's/hd2/hd0/g' /boot/efi/EFI/redhat/grub.cfg
      

      Si la máquina virtual ejecuta CentOS, reemplace por redhat centos en la ruta de acceso absoluta del archivo grub.cfg /boot/efi/EFI/centos/grub.cfg.

    • SLES 12/15 Gen1 y Gen2

      grub2-install /dev/sdX
      grub2-mkconfig -o /boot/grub2/grub.cfg
      sed -i 's/hd2/hd0/g' /boot/grub2/grub.cfg
      
    • Ubuntu 18.04/20.04

      grub-install /dev/sdX
      update-grub
      
  3. Vaya al paso 3 en Solución de problemas de rescate de GRUB sin conexión para intercambiar el disco del sistema operativo.

Error 15: Archivo no encontrado

En la captura de pantalla siguiente se muestra el mensaje de error:

Captura de pantalla del archivo 15 de error 15 de grub no encontrado.

Para resolver el problema, siga estos pasos:

  1. Compruebe si se creó una máquina virtual de rescate o reparación. Si no se creó, siga el paso 1 en Solución de problemas de rescate de GRUB sin conexión para crear la máquina virtual. Monte todos los sistemas de archivos necesarios, incluidos / y /boot en la máquina virtual de rescate/reparación y, a continuación, escriba el entorno chroot .

  2. Inspeccione el contenido del sistema de archivos /boot y determine lo que falta.

  3. Si falta el archivo de configuración de GRUB, vuelva a instalar GRUB y vuelva a generar el archivo de configuración de GRUB.

  4. Compruebe que los permisos de archivo en el sistema de archivos /boot sean correctos. Puede comparar los permisos mediante otra máquina virtual que ejecuta la misma versión de Linux.

  5. Si falta la partición /boot completa u otro contenido importante y no se puede recuperar, se recomienda restaurar la máquina virtual desde una copia de seguridad. Para más información, consulte Restauración de datos de máquina virtual de Azure en Azure Portal.

  6. Una vez resuelto el problema, vaya al paso 3 en Solución de problemas de rescate de GRUB sin conexión para intercambiar el disco del sistema operativo.

Error: no se encontró el archivo '/boot/grub2/i386-pc/normal.mod'

En la captura de pantalla siguiente se muestra el mensaje de error:

Captura de pantalla del error de grub normal.mod no encontrado.

  1. Compruebe si se creó una máquina virtual de rescate o reparación. Si no se creó, siga el paso 1 en Solución de problemas de rescate de GRUB sin conexión para crear uno. Monte todos los sistemas de archivos necesarios, incluidos / y /boot en la máquina virtual de rescate/reparación y, a continuación, escriba el entorno chroot .

  2. Si no puede montar el sistema de archivos /boot debido a un error dañado, corrija los daños del sistema de archivos /boot.

  3. Cuando se encuentre dentro de chroot, compruebe el contenido en el directorio /boot/grub2/i386-pc . Si falta el contenido, copie el contenido de /usr/lib/grub/i386-pc. Para ello, utilice los siguientes comandos:

    ls -l /boot/grub2/i386-pc
    cp -rp /usr/lib/grub/i386-pc /boot/grub2
    
  4. Si el contenido de la /boot partición está vacío, use los siguientes comandos para volver a crearlo:

    Nota

    Los pasos siguientes se aplican a las máquinas virtuales Linux RHEL/CentOS/Oracle 7.x/8.x sin UEFI (basadas en BIOS - Gen1).

    1. En el proceso chroot, vuelva a instalar el grub. Reemplace /dev/sd[X] en consecuencia por la copia correspondiente del disco del sistema operativo conectado a la máquina virtual de reparación o rescate:

      grub2-install /dev/sd[X]
      
    2. Asegúrese de que /etc/resolv.conf tiene una entrada DNS válida para resolver el nombre del repositorio:

      cat /etc/resolv.conf
      
    3. Vuelva a instalar el kernel:

      yum reinstall $(rpm -qa | grep -i kernel)
      
    4. Cree el archivo grub.cfg :

      grub2-mkconfig -o /boot/grub2/grub.cfg
      sed -i 's/hd2/hd0/g' /boot/grub2/grub.cfg
      
  5. Continúe con el paso 3 en Solución de problemas de rescate de GRUB sin conexión para intercambiar el disco del sistema operativo.

Error: ninguna partición de este tipo

En la captura de pantalla siguiente se muestra el mensaje de error:

Captura de pantalla del error de grub no es tal partición.

Este error se produce en una máquina virtual basada en RHEL (Red Hat, Oracle Linux, CentOS) en uno de los escenarios siguientes:

  • La partición /boot se elimina por error.
  • La partición /boot se vuelve a crear mediante el uso de los sectores inicial y final incorrectos.

Solución: Volver a crear la partición /boot

Si falta la partición /boot, vuelva a crearla siguiendo estos pasos:

  1. Compruebe si se creó una máquina virtual de rescate o reparación. Si no se creó, siga el paso 1 en Solución de problemas de rescate de GRUB sin conexión para crear la máquina virtual.

  2. Identifique si la tabla de particiones se crea como el tipo dos o GPT mediante el siguiente comando:

    sudo fdisk -l /dev/sdX
    
    • Tabla de particiones dos

      Captura de pantalla que muestra el arranque con la tabla de particiones de dos tipos.

    • Tabla de particiones de GPT

      Captura de pantalla que muestra el arranque con la tabla de particiones de tipo GPT.

  3. Si la tabla de particiones tiene dos como tipo de tabla de partición, vuelva a crear /boot partition en dos sistemas. Si la tabla de particiones tiene GPT como tipo de tabla de partición, vuelva a crear /boot partition en sistemas GPT.

  4. Asegúrese de que el cargador de arranque grub está instalado mediante el disco adecuado. Puede seguir los pasos descritos en Reinstalar GRUB y volver a generar el archivo de configuración de GRUB para instalarlo y configurarlo.

  5. Continúe con el paso 3 en Solución de problemas de rescate de GRUB sin conexión para intercambiar el disco del sistema operativo.

Volver a crear la partición /boot en dos sistemas

  1. Vuelva a crear la partición /boot mediante el comando siguiente:

    sudo fdisk /dev/sdX
    

    Use los valores predeterminados en los sectores First y Last , y el tipo de partición (83). Asegúrese de que la tabla de particiones /boot está marcada como de arranque mediante la a opción de la fdisk herramienta, como se muestra en la salida siguiente:

    sudo fdisk /dev/sdc
    
    The device presents a logical sector size that is smaller than
    the physical sector size. Aligning to a physical sector (or optimal
    I/O) size boundary is recommended, or performance may be impacted.
    Welcome to fdisk (util-linux 2.23.2).
    
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    Command (m for help): n
    Partition type:
       p   primary (1 primary, 0 extended, 3 free)
       e   extended
    Select (default p): p
    Partition number (1,3,4, default 1): 1
    First sector (2048-134217727, default 2048):
    Using default value 2048
    Last sector, +sectors or +size{K,M,G} (2048-2099199, default 2099199):
    Using default value 2099199
    Partition 1 of type Linux and of size 1 GiB is set
    
    Command (m for help): t
    Partition number (1,2, default 2): 1
    Hex code (type L to list all codes): 83
    Changed type of partition 'Linux' to 'Linux'
    
    Command (m for help): a
    Partition number (1,2, default 2): 1
    
    Command (m for help): p
    
    Disk /dev/sdc: 68.7 GB, 68719476736 bytes, 134217728 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disk label type: dos
    Disk identifier: 0x000b7179
    
    Device Boot      Start         End      Blocks   Id  System
    /dev/sdc1   *        2048     2099199     1048576   83  Linux
    /dev/sdc2         2099200   134217727    66059264   8e  Linux LVM
    
    Command (m for help): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    
  2. Después de volver a crear la partición /boot que falta, compruebe si se detecta el sistema de archivos /boot. Debería poder ver una entrada para /dev/sdX1 (falta la partición /boot).

    sudo blkid /dev/sdX1
    
    sudo blkid /dev/sdc1
    /dev/sdc1: UUID="<UUID>" TYPE="ext4"
    
  3. Si el sistema de archivos /boot no está visible en blkid después de volver a crear la partición, significa que los datos /boot ya no existen. Debe volver a crear el sistema de archivos /boot (mediante el mismo UUID y el mismo formato del sistema de archivos que se encuentra en la entrada /etcetera/fstab /boot) y, a continuación , restaurar su contenido a partir de una copia de seguridad.

Volver a crear la partición /boot en sistemas GPT

  1. Vuelva a crear la partición /boot mediante el comando siguiente:

    sudo gdisk /dev/sdX
    

    Use los valores predeterminados en los sectores First y Last , y el tipo de partición (8300), como se muestra en la salida siguiente:

    sudo gdisk /dev/sdc
    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): n
    Partition number (1-128, default 1): 1
    First sector (34-134217694, default = 1026048) or {+-}size{KMGTP}:
    Last sector (1026048-2050047, default = 2050047) or {+-}size{KMGTP}:
    Current type is 'Linux filesystem'
    Hex code or GUID (L to show codes, Enter = 8300):
    Changed type of partition to 'Linux filesystem'
    
    Command (? for help): p
    Disk /dev/sdc: 134217728 sectors, 64.0 GiB
    Model: Virtual Disk
    Sector size (logical/physical): 512/4096 bytes
    Disk identifier (GUID): 6D915856-445A-4513-97E4-C55F2E1AD6C0
    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 134217694
    Partitions will be aligned on 2048-sector boundaries
    Total free space is 6076 sectors (3.0 MiB)
    
    Number  Start (sector)    End (sector)  Size       Code  Name
       1         1026048         2050047   500.0 MiB   8300  Linux filesystem
       2         2050048       134215679   63.0 GiB    8E00
      14            2048           10239   4.0 MiB     EF02
      15           10240         1024000   495.0 MiB   EF00  EFI System Partition
    
    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/sdc.
    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.
    
  2. Compruebe si el sistema de archivos /boot lo detecta mediante el comando siguiente:

    sudo blkid /dev/sdX1
    

    Debería poder ver una entrada para /dev/sdX1 (falta la partición /boot).

    sudo blkid /dev/sdc1
    /dev/sdc1: UUID="<UUID>" BLOCK_SIZE="4096" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="<PARTUUID>"
    
  3. Si el sistema de archivos /boot no está visible después de volver a crear la partición, significa que los datos /boot ya no existen. Debe volver a crear el sistema de archivos /boot (mediante el mismo UUID que se encuentra en la entrada /etcetera/fstab /boot) y, a continuación , restaurar su contenido desde una copia de seguridad.

Error: no se encontró el símbolo "grub_efi_get_secure_boot"

En la captura de pantalla siguiente se muestra el mensaje de error:

Captura de pantalla del error de grub

La versión del kernel de Linux 4.12.14 (que se usa en SLES 12 SP5) no admite la opción de arranque seguro. Por lo tanto, si el arranque seguro está habilitado durante la implementación de la máquina virtual (es decir, el campo Tipo de seguridad se establece en Máquinas virtuales de inicio seguro), la máquina virtual genera el error de arranque seguro a través de la consola al intentar empezar con esta versión del kernel de SUSE en una imagen de máquina virtual de Gen2.

Solución

Para resolver el error de arranque, siga estos pasos:

  1. Compruebe si se creó una máquina virtual de rescate o reparación. Si no se creó, siga el paso 1 en Solución de problemas de rescate de GRUB sin conexión para crear la máquina virtual. Monte todos los sistemas de archivos necesarios, incluidos / y /boot, y escriba el entorno chroot .

  2. Ejecute el siguiente comando de YaST en el entorno chroot:

    yast2 bootloader
    
  3. Desactive la opción "x" de la opción Habilitar compatibilidad con arranque seguro y, a continuación, seleccione F10 para guardar el cambio.

    Captura de pantalla de la configuración del cargador de arranque de YaST2 en la consola de SUSE.

  4. Siga el paso 3 en Solución de problemas de rescate de GRUB sin conexión para intercambiar el disco del sistema operativo.

Otros errores de rescate de GRUB

En la captura de pantalla siguiente se muestra el mensaje de error:

Captura de pantalla de otro problema de rescate de grub.

Este tipo de error se desencadena en uno de los escenarios siguientes:

  • Falta el archivo de configuración de GRUB.
  • Se usa la configuración incorrecta de GRUB.
  • Falta la partición /boot o su contenido.

Para solucionar el error, siga estos pasos:

  1. Compruebe si se creó una máquina virtual de rescate o reparación. Si no se creó, siga el paso 1 en Solución de problemas de rescate de GRUB sin conexión para crear la máquina virtual. Monte todos los sistemas de archivos necesarios, incluidos / y /boot, y escriba el entorno chroot .

  2. Asegúrese de que el archivo de configuración /etcetera/default/grub está configurado. Las imágenes de Linux de Azure aprobadas ya tienen las configuraciones necesarias. Vea los siguientes artículos para más información:

  3. Vuelva a instalar GRUB y vuelva a generar el archivo de configuración de GRUB.

    Nota

    Si el archivo que falta es /boot/grub/menu.lst, este error es para versiones anteriores del sistema operativo (RHEL 6.x, Centos 6.x y Ubuntu 14.04). Los comandos variarán porque la versión 1 de GRUB se usa en esos sistemas en su lugar. La versión 1 de GRUB no se trata en este artículo.

  4. Si falta toda la partición /boot, siga los pasos descritos en Error: ninguna partición de este tipo.

  5. Una vez resuelto el problema, vaya al paso 3 en Solución de problemas de rescate de GRUB sin conexión para intercambiar el disco del sistema operativo.

Pasos siguientes

Si el error de arranque específico no es un problema de rescate de GRUB, consulte Solución de errores de arranque de Azure Linux Virtual Machines para obtener más opciones de solución de problemas.

Aviso de declinación de responsabilidades sobre la información de terceros

Los productos de otros fabricantes que se mencionan en este artículo han sido creados por compañías independientes de Microsoft. Microsoft no ofrece ninguna garantía, ya sea implícita o de otro tipo, sobre la confiabilidad o el rendimiento de dichos productos.

Declinación de responsabilidades de contacto de terceros

Microsoft proporciona la información de contacto de terceros para ayudarle a encontrar información adicional sobre este tema. Esta información de contacto puede cambiar sin previo aviso. Microsoft no garantiza la precisión de la información de contacto de terceros.

Ponte en contacto con nosotros para obtener ayuda

Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.