La macchina virtuale Linux viene avviata nel salvataggio GRUB

Si applica a: ✔️ macchine virtuali di Linux

Nota

CentOS a cui si fa riferimento in questo articolo è una distribuzione Linux e raggiungerà End Of Life (EOL). Valutare le proprie esigenze e pianificare di conseguenza. Per altre informazioni, vedere Indicazioni sulla fine della vita di CentOS.

Questo articolo illustra più condizioni che causano problemi di salvataggio GRUB e fornisce indicazioni per la risoluzione dei problemi.

Durante il processo di avvio, il caricatore di avvio tenta di individuare il kernel Linux e di distribuire il controllo di avvio. Se non è possibile eseguire questo handoff, la macchina virtuale entra in una console di salvataggio GRUB. Il prompt della console di ripristino GRUB non viene visualizzato nel log della console seriale di Azure, ma può essere visualizzato nello screenshot della diagnostica di avvio di Azure.

Identificare il problema di salvataggio grub

Visualizzare uno screenshot della diagnostica di avvio nella pagina diagnostica di avvio della macchina virtuale del portale di Azure. Questo screenshot consente di diagnosticare il problema di salvataggio GRUB e di determinare se un errore di avvio causa il problema.

Il testo seguente è un esempio di un problema di salvataggio GRUB:

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

Risolvere il problema di salvataggio GRUB offline

  1. Per risolvere un problema di salvataggio GRUB, è necessaria una macchina virtuale di ripristino.To troubleshoot a GRUB rescue, a rescue/repair VM is required. Usare i comandi di ripristino della macchina virtuale per creare una macchina virtuale di ripristino con una copia del disco del sistema operativo della macchina virtuale interessata collegato. Montare la copia dei file system del sistema operativo nella macchina virtuale di ripristino usando chroot.

    Nota

    In alternativa, è possibile creare manualmente una macchina virtuale di ripristino usando il portale di Azure. Per altre informazioni, vedere Risolvere i problemi di una macchina virtuale Linux collegando il disco del sistema operativo a una macchina virtuale di ripristino usando il portale di Azure.

  2. Identificare il problema di salvataggio grub. Quando si verifica uno dei seguenti problemi di salvataggio GRUB, passare alla sezione corrispondente per risolverlo:

  3. Dopo aver risolto il problema di salvataggio GRUB, eseguire le azioni seguenti:

    1. Smontare la copia dei file system dalla macchina virtuale di ripristino/ripristino.

    2. Eseguire il az vm repair restore comando per scambiare il disco del sistema operativo riparato con il disco del sistema operativo originale della macchina virtuale. Per altre informazioni, vedere Passaggio 5 in Ripristinare una macchina virtuale Linux usando i comandi di ripristino della macchina virtuale di Azure.

    3. Controllare se la macchina virtuale può iniziare esaminando la console seriale di Azure o provando a connettersi alla macchina virtuale.

  4. Se l'intera partizione /boot o altri contenuti importanti mancano e non possono essere ripristinati, è consigliabile ripristinare la macchina virtuale da un backup. Per altre informazioni, vedere Come ripristinare i dati delle macchine virtuali di Azure in portale di Azure.

Per informazioni dettagliate su errori, possibili cause e soluzioni, vedere le sezioni seguenti.

Nota

Nei comandi indicati nelle sezioni seguenti sostituire /dev/sdX con il dispositivo disco del sistema operativo corrispondente.

Errore: file system sconosciuto

Lo screenshot seguente mostra il messaggio di errore:

Screenshot dell'errore del file system sconosciuto grub.

Questo errore potrebbe essere associato a uno dei problemi seguenti:

Correzione del danneggiamento del file system di avvio

  1. Controllare se è stata creata una macchina virtuale di ripristino/ripristino. Se non è stato creato, seguire il passaggio 1 in Risolvere il problema di ripristino GRUB offline per creare la macchina virtuale.

  2. Vedere Risolvere gli errori di danneggiamento del file system in Azure Linux per risolvere i problemi di danneggiamento nella partizione /boot corrispondente.

  3. Andare al passaggio 3 in Risolvere il problema di ripristino grub offline per scambiare il disco del sistema operativo.

Reinstallare GRUB e rigenerare il file di configurazione GRUB

  1. Controllare se è stata creata una macchina virtuale di ripristino/ripristino. Se non è stato creato, seguire il passaggio 1 in Risolvere il problema di ripristino GRUB offline per creare la macchina virtuale. Montare tutti i file system necessari, inclusi / e /boot nella macchina virtuale di ripristino e quindi immettere l'ambiente chroot .

  2. Reinstallare GRUB e rigenerare il file di configurazione GRUB corrispondente usando uno dei comandi seguenti:

    • Macchine virtuali RHEL/CentOS/Oracle 7.x/8.x Linux senza UEFI (basato su BIOS - Gen1)

      grub2-install /dev/sdX
      grub2-mkconfig -o /boot/grub2/grub.cfg
      sed -i 's/hd2/hd0/g' /boot/grub2/grub.cfg
      
    • Macchine virtuali RHEL/CentOS/Oracle 7.x/8.x Linux 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
      

      Se la macchina virtuale esegue CentOS, sostituire redhat con centos nel file grub.cfg percorso assoluto /boot/efi/EFI/centos/grub.cfg.

    • SLES 12/15 Gen1 e 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. Andare al passaggio 3 in Risolvere il problema di ripristino grub offline per scambiare il disco del sistema operativo.

Errore 15: File non trovato

Lo screenshot seguente mostra il messaggio di errore:

Screenshot del file grub error 15 non trovato.

Per risolvere il problema, seguire questa procedura:

  1. Controllare se è stata creata una macchina virtuale di ripristino/ripristino. Se non è stato creato, seguire il passaggio 1 in Risolvere il problema di ripristino GRUB offline per creare la macchina virtuale. Montare tutti i file system necessari, inclusi / e /boot nella macchina virtuale di ripristino e quindi immettere l'ambiente chroot .

  2. Esaminare il contenuto del file system /boot e determinare cosa manca.

  3. Se il file di configurazione GRUB manca, reinstallare GRUB e rigenerare il file di configurazione GRUB.

  4. Verificare che le autorizzazioni per i file nel file system /boot siano OK. È possibile confrontare le autorizzazioni usando un'altra macchina virtuale che esegue la stessa versione di Linux.

  5. Se l'intera partizione /boot o altri contenuti importanti mancano e non possono essere ripristinati, è consigliabile ripristinare la macchina virtuale da un backup. Per altre informazioni, vedere Come ripristinare i dati delle macchine virtuali di Azure in portale di Azure.

  6. Dopo aver risolto il problema, andare al passaggio 3 in Risolvere il problema di ripristino GRUB offline per scambiare il disco del sistema operativo.

Errore: file '/boot/grub2/i386-pc/normal.mod' non trovato

Lo screenshot seguente mostra il messaggio di errore:

Screenshot dell'errore grub normal.mod non trovato.

  1. Controllare se è stata creata una macchina virtuale di ripristino/ripristino. Se non è stato creato, seguire il passaggio 1 in Risolvere il problema di salvataggio GRUB offline per crearne uno. Montare tutti i file system necessari, inclusi / e /boot nella macchina virtuale di ripristino e quindi immettere l'ambiente chroot .

  2. Se non è possibile montare il file system /boot a causa di un errore di danneggiamento, correggere il danneggiamento del file system /boot.

  3. Quando ci si trova all'interno di chroot, verificare il contenuto nella directory /boot/grub2/i386-pc . Se il contenuto non è presente, copiare il contenuto da /usr/lib/grub/i386-pc. A tale scopo, usare i comandi seguenti:

    ls -l /boot/grub2/i386-pc
    cp -rp /usr/lib/grub/i386-pc /boot/grub2
    
  4. Se il contenuto della /boot partizione è vuoto, usare i comandi seguenti per ricrearlo:

    Nota

    I passaggi seguenti si applicano alle macchine virtuali Linux RHEL/CentOS/Oracle 7.x/8.x senza UEFI (BIOS basato su Gen1).

    1. Nel processo chroot reinstallare il grub. Sostituire /dev/sd[X] di conseguenza con la copia corrispondente del disco del sistema operativo collegato alla macchina virtuale di ripristino/ripristino:

      grub2-install /dev/sd[X]
      
    2. Assicurarsi di /etc/resolv.conf disporre di una voce DNS valida per risolvere il nome del repository:

      cat /etc/resolv.conf
      
    3. Reinstallare il kernel:

      yum reinstall $(rpm -qa | grep -i kernel)
      
    4. Creare il file grub.cfg :

      grub2-mkconfig -o /boot/grub2/grub.cfg
      sed -i 's/hd2/hd0/g' /boot/grub2/grub.cfg
      
  5. Procedere con il passaggio 3 in Risolvere il problema di ripristino GRUB offline per scambiare il disco del sistema operativo.

Errore: nessuna partizione di questo tipo

Lo screenshot seguente mostra il messaggio di errore:

Screenshot dell'errore grub senza una partizione di questo tipo.

Questo errore si verifica in una macchina virtuale basata su RHEL (Red Hat, Oracle Linux, CentOS) in uno degli scenari seguenti:

  • La partizione /boot viene eliminata per errore.
  • La partizione /boot viene ricreata usando i settori di inizio e fine errati.

Soluzione: Ricreare la partizione /boot

Se la partizione /boot non è presente, ricrearla seguendo questa procedura:

  1. Controllare se è stata creata una macchina virtuale di ripristino/ripristino. Se non è stato creato, seguire il passaggio 1 in Risolvere il problema di ripristino GRUB offline per creare la macchina virtuale.

  2. Identificare se la tabella di partizione viene creata come dos o tipo GPT usando il comando seguente:

    sudo fdisk -l /dev/sdX
    
    • Tabella delle partizioni Dos

      Screenshot che mostra l'avvio con dos type partition table.

    • Tabella di partizione GPT

      Screenshot che mostra l'avvio con la tabella di partizione del tipo GPT.

  3. Se la tabella di partizione ha lo stesso tipo di tabella di partizione, ricreare la partizione /boot nei sistemi dos. Se la tabella di partizione ha GPT come tipo di tabella di partizione, ricreare la partizione /boot nei sistemi GPT.

  4. Assicurarsi che il caricatore di avvio GRUB sia installato usando il disco appropriato. È possibile seguire la procedura descritta in Reinstallare GRUB e rigenerare il file di configurazione GRUB per installarlo e configurarlo.

  5. Procedere con il passaggio 3 in Risolvere il problema di ripristino GRUB offline per scambiare il disco del sistema operativo.

Ricreare la partizione /boot nei sistemi Dos

  1. Ricreare la partizione /boot usando il comando seguente:

    sudo fdisk /dev/sdX
    

    Usare i valori predefiniti nei settori First e Last e nel tipo di partizione (83). Assicurarsi che la tabella /boot partition sia contrassegnata come avviabile usando l'opzione a nello fdisk strumento, come illustrato nell'output seguente:

    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. Dopo aver ricreato la partizione /boot mancante, verificare se il file system /boot è stato rilevato. Dovrebbe essere possibile visualizzare una voce per /dev/sdX1 (la partizione /boot mancante).

    sudo blkid /dev/sdX1
    
    sudo blkid /dev/sdc1
    /dev/sdc1: UUID="<UUID>" TYPE="ext4"
    
  3. Se il file system /boot non è visibile in blkid dopo la ricreazione della partizione, significa che i dati /boot non esistono più. È necessario ricreare il file system /boot (usando lo stesso UUID e lo stesso formato del file system presente nella voce /etc/fstab /boot) e quindi ripristinarne il contenuto da un backup.

Ricreare la partizione /boot nei sistemi GPT

  1. Ricreare la partizione /boot usando il comando seguente:

    sudo gdisk /dev/sdX
    

    Usare i valori predefiniti nei settori First e Last e il tipo di partizione (8300), come illustrato nell'output seguente:

    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. Verificare se il file system /boot viene rilevato dal sistema usando il comando seguente:

    sudo blkid /dev/sdX1
    

    Dovrebbe essere possibile visualizzare una voce per /dev/sdX1 (la partizione /boot mancante).

    sudo blkid /dev/sdc1
    /dev/sdc1: UUID="<UUID>" BLOCK_SIZE="4096" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="<PARTUUID>"
    
  3. Se il file system /boot non è visibile dopo la ricreazione della partizione, significa che i dati /boot non esistono più. È necessario ricreare il file system /boot (usando lo stesso UUID presente nella voce /etc/fstab /boot) e quindi ripristinarne il contenuto da un backup.

Errore: simbolo 'grub_efi_get_secure_boot' non trovato

Lo screenshot seguente mostra il messaggio di errore:

Screenshot dell'errore grub 'grub_efi_get_secure_boot' non trovato.

La versione del kernel Linux 4.12.14 (usata in SLES 12 SP5) non supporta l'opzione Avvio protetto. Pertanto, se l'avvio protetto è abilitato durante la distribuzione della macchina virtuale, ovvero il campo Tipo di sicurezza è impostato su Macchine virtuali di avvio attendibili, la macchina virtuale genera l'errore di avvio protetto tramite la console quando si tenta di iniziare usando questa versione del kernel SUSE in un'immagine di macchina virtuale Gen2.

Soluzione

Per risolvere l'errore di avvio, seguire questa procedura:

  1. Controllare se è stata creata una macchina virtuale di ripristino/ripristino. Se non è stato creato, seguire il passaggio 1 in Risolvere il problema di ripristino GRUB offline per creare la macchina virtuale. Montare tutti i file system necessari, inclusi / e /boot, e quindi immettere l'ambiente chroot .

  2. Eseguire il comando YaST seguente nell'ambiente chroot:

    yast2 bootloader
    
  3. Deselezionare "x" dall'opzione Abilita supporto avvio protetto e quindi selezionare F10 per salvare la modifica.

    Screenshot delle impostazioni del caricatore di avvio YaST2 nella console SUSE.

  4. Seguire il passaggio 3 in Risolvere il problema di ripristino grub offline per scambiare il disco del sistema operativo.

Altri errori di salvataggio GRUB

Lo screenshot seguente mostra il messaggio di errore:

Screenshot di un altro problema di salvataggio grub.

Questo tipo di errore viene attivato in uno degli scenari seguenti:

  • Manca il file di configurazione GRUB.
  • Viene usata la configurazione GRUB errata.
  • La partizione /boot o il relativo contenuto sono mancanti.

Per risolvere questo errore, effettuare le operazioni seguenti:

  1. Controllare se è stata creata una macchina virtuale di ripristino/ripristino. Se non è stato creato, seguire il passaggio 1 in Risolvere il problema di ripristino GRUB offline per creare la macchina virtuale. Montare tutti i file system necessari, inclusi / e /boot, e quindi immettere l'ambiente chroot .

  2. Assicurarsi che il file di configurazione /etc/default/grub sia configurato. Le immagini Linux di Azure approvate hanno già le configurazioni necessarie. Per altre informazioni, vedere gli articoli seguenti:

  3. Reinstallare GRUB e rigenerare il file di configurazione GRUB.

    Nota

    Se il file mancante è /boot/grub/menu.lst, questo errore riguarda le versioni precedenti del sistema operativo (RHEL 6.x, Centos 6.x e Ubuntu 14.04). I comandi differiscono perché GRUB versione 1 viene invece usato in tali sistemi. GRUB versione 1 non è trattato in questo articolo.

  4. Se manca l'intera partizione /boot, seguire la procedura descritta in Errore: nessuna partizione di questo tipo.

  5. Dopo aver risolto il problema, andare al passaggio 3 in Risolvere il problema di ripristino GRUB offline per scambiare il disco del sistema operativo.

Passaggi successivi

Se l'errore di avvio specifico non è un problema di salvataggio GRUB, vedere Risolvere gli errori di avvio di Azure Linux Macchine virtuali per altre opzioni di risoluzione dei problemi.

Dichiarazione di non responsabilità sulle informazioni di terze parti

I prodotti di terzi citati in questo articolo sono prodotti da società indipendenti da Microsoft. Microsoft non rilascia alcuna garanzia implicita o esplicita relativa alle prestazioni o all'affidabilità di tali prodotti

Dichiarazione di non responsabilità dei contatti di terze parti

Microsoft fornisce informazioni di contatto di terze parti per contribuire a trovare informazioni aggiuntive su questo argomento. È possibile che tali informazioni di contatto vengano modificate senza preavviso. Microsoft non garantisce l'accuratezza delle informazioni di contatto di terze parti.

Contattaci per ricevere assistenza

In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.