La macchina virtuale Linux si avvia al salvataggio di 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 esamina diverse condizioni che causano problemi di salvataggio di GRUB e fornisce indicazioni per la risoluzione dei problemi.
Durante il processo di avvio, il caricatore di avvio prova a individuare il kernel Linux e consegnerà il controllo di avvio. Se questo trasferimento non può essere eseguito, la macchina virtuale (VM) entra n una console di ripristino di GRUB. Il prompt della console di ripristino di GRUB non viene visualizzato nel log della console seriale di Azure, ma può essere visualizzato nella schermata della diagnostica di avvio di Azure.
Identifica il problema di salvataggio di GRUB
Visualizzare una schermata di diagnostica di avvio nella pagina della macchina virtuale Diagnostica di avvio nel Portale di Azure. Questa schermata aiuterà a diagnosticare il problema di ripristino di GRUB e determinare se un errore di avvio causa il problema.
Ecco un esempio di un problema di salvataggio di GRUB:
error: file '/boot/grub2/i386-pc/normal.mod' not found.
Entering rescue mode...
grub rescue>
Risolvi i problemi di salvataggio di GRUB offline
Per risolvere un problema di salvataggio di GRUB, è necessaria una VM di salvataggio/riparazione. Utilizza i comandi di riparazione vm per creare una VM di riparazione a cui è collegata una copia del disco del sistema operativo della VM interessata. Montare la copia dei file system del sistema operativo nella macchina virtuale di ripristino utilizzando chroot.
Nota
In alternativa, è possibile creare manualmente una macchina virtuale di salvataggio 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 tramite il portale di Azure.
Identificare il problema di salvataggio di GRUB. Quando incontri uno dei seguenti problemi di salvataggio di GRUB, vai alla sezione corrispondente per risolverlo:
Dopo che il problema di salvataggio di GRUB è stato risolto, eseguire le seguenti azioni:
Smontare la copia dei file system dalla macchina virtuale di salvataggio/ripristino.
Eseguire il comando
az vm repair restore
per scambiare il disco del sistema operativo ripristinato con il disco del sistema operativo originale della macchina virtuale. Per altre informazioni, vedere il passaggio 5 in Riparare una macchina virtuale Linux usando i comandi di riparazione della macchina virtuale di Azure.Verificare se la macchina virtuale è in grado di avviarsi dando un'occhiata alla console seriale di Azure o provando a connettersi alla macchina virtuale.
Se l'intera
/boot
partizione o altri contenuti importanti mancano e non possono essere ripristinati, è consigliabile ripristinare la macchina virtuale da un backup. Per ulteriori informazioni, vedere Come ripristinare i dati delle macchine virtuali di Azure nel portale di Azure.
Vedere le sezioni seguenti per errori dettagliati, possibili cause e soluzioni.
Nota
Nei comandi menzionati nelle sezioni seguenti, sostituire /dev/sdX
con il dispositivo disco del sistema operativo (OS) corrispondente.
Reinstallare GRUB e rigenerare il file di configurazione GRUB usando ripristino automatico linux di Azure
Gli script di ripristino automatico di Azure Linux (ALAR) fanno parte dell'estensione di ripristino della macchina virtuale descritta in Usare il ripristino automatico di Linux di Azure (ALAR) per correggere una macchina virtuale Linux. ALAR illustra l'automazione di più scenari di riparazione, inclusi i problemi di salvataggio grub.
Gli script ALAR usano l'estensione repair-button
di ripristino per risolvere i problemi grub specificando --button-command grubfix
per le macchine virtuali di prima generazione o --button-command efifix
per le macchine virtuali di seconda generazione. Questo parametro attiva il ripristino automatico. Implementare i comandi seguenti per automatizzare la correzione di errori GRUB comuni reinstallando GRUB e rigenerando il file di configurazione corrispondente:
Macchine virtuali Linux senza UEFI (basato su BIOS - Gen1):
az extension add -n vm-repair az extension update -n vm-repair az vm repair repair-button --button-command 'grubfix' --verbose $RGNAME --name $VMNAME
Macchine virtuali Linux con UEFI (Gen2):
az extension add -n vm-repair az extension update -n vm-repair az vm repair repair-button --button-command 'efifix' --verbose $RGNAME --name $VMNAME
Importante
Sostituire di conseguenza il nome $RGNAME
del gruppo di risorse e il nome $VMNAME
della macchina virtuale.
Lo script della macchina virtuale di ripristino, insieme allo script ALAR, crea temporaneamente un gruppo di risorse, una macchina virtuale di ripristino e una copia del disco del sistema operativo della macchina virtuale interessata. Reinstalla GRUB, rigenera il file di configurazione GRUB corrispondente e quindi scambia il disco del sistema operativo interrotto della macchina virtuale con il disco fisso copiato. Infine, lo repair-button
script elimina automaticamente il gruppo di risorse contenente la macchina virtuale di ripristino temporanea.
Reinstallare GRUB e rigenerare manualmente il file di configurazione GRUB
Verificare se è stata creata una macchina virtuale di salvataggio/ripristino. In caso contrario, seguire il passaggio 1 in Risoluzione dei problemi di salvataggio di GRUB offline per creare la macchina virtuale. Montare tutti i file system necessari, inclusi
/
e/boot
nella macchina virtuale di ripristino/ripristino, quindi immettere l'ambiente chroot .Reinstallare GRUB e rigenerare il file di configurazione GRUB corrispondente utilizzando uno dei seguenti comandi:
Macchine virtuali RHEL/CentOS/Oracle 7.x/8.x/9.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/9.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
concentos
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 Gen1 e Gen2
grub-install /dev/sdX update-grub
Andare al passaggio 3 in Risoluzione dei problemi di salvataggio di GRUB offline per scambiare il disco del sistema operativo.
Errore: file system sconosciuto
Lo screenshot seguente mostra il messaggio di errore:
Questo errore potrebbe essere associato a uno dei seguenti problemi:
/boot
danneggiamento del file system.Per risolvere questo problema, seguire la procedura descritta in Correggere il danneggiamento del file system /boot.
Il caricatore di avvio GRUB punta a un disco o a una partizione non valida.
Per risolvere questo problema, reinstallare GRUB e rigenerare manualmente il file di configurazione GRUB.
Problemi della tabella delle partizioni del disco del sistema operativo causati da un errore umano.
Per risolvere questi problemi, seguire la procedura descritta in Errore: Nessuna partizione di questo tipo per ricreare la
/boot
partizione se mancante o creata in modo non corretto.
Correggere il danneggiamento del file system /boot
Per correggere il /boot
danneggiamento del file system, seguire questa procedura:
Verificare se è stata creata una macchina virtuale di salvataggio/ripristino. In caso contrario, seguire il passaggio 1 in Risoluzione dei problemi di salvataggio di GRUB offline per creare la macchina virtuale.
Vedere Risolvere gli errori di danneggiamento del file system in Azure Linux per risolvere i problemi di danneggiamento nella partizione corrispondente
/boot
.Andare al passaggio 3 in Risoluzione dei problemi di salvataggio di GRUB offline per scambiare il disco del sistema operativo.
Errore 15: file non trovato
Lo screenshot seguente mostra il messaggio di errore:
Per risolvere il problema, seguire la procedura seguente:
Verificare se è stata creata una macchina virtuale di salvataggio/ripristino. In caso contrario, seguire il passaggio 1 in Risoluzione dei problemi di salvataggio di GRUB offline per creare la macchina virtuale. Montare tutti i file system necessari, inclusi
/
e/boot
nella macchina virtuale di ripristino/ripristino, quindi immettere l'ambiente chroot .Esaminare il contenuto del
/boot
file system e determinare cosa manca.Se il file di configurazione GRUB manca, reinstallare GRUB e rigenerare manualmente il file di configurazione GRUB.
Verificare che le autorizzazioni per i file nel
/boot
file system siano OK. È possibile confrontare le autorizzazioni usando un'altra macchina virtuale in esecuzione con la stessa versione di Linux.Se l'intera partizione /boot o altri contenuti importanti sono mancanti e non possono essere recuperati, si consiglia di ripristinare la macchina virtuale da un backup. Per ulteriori informazioni, vedere Come ripristinare i dati delle macchine virtuali di Azure nel portale di Azure.
Una volta risolto il problema, procedere al passaggio 3 in Risoluzione dei problemi di salvataggio di 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:
Verificare se è stata creata una macchina virtuale di salvataggio/ripristino. In caso contrario, seguire il passaggio 1 in Risoluzione dei problemi di salvataggio di GRUB offline per crearne una. Montare tutti i file system necessari, inclusi
/
e/boot
nella macchina virtuale di ripristino/ripristino, quindi immettere l'ambiente chroot .Se non è possibile montare il
/boot
file system a causa di un errore di danneggiamento, correggere il danneggiamento del file system /boot.Quando si trova all'interno di chroot, verificare il contenuto nella
/boot/grub2/i386-pc
directory. Se il contenuto non è presente, copiare il contenuto da/usr/lib/grub/i386-pc
. Per fare ciò, utilizzare i seguenti comandi:ls -l /boot/grub2/i386-pc cp -rp /usr/lib/grub/i386-pc /boot/grub2
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).
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]
Assicurarsi di
/etc/resolv.conf
disporre di una voce DNS valida per risolvere il nome del repository:cat /etc/resolv.conf
Reinstallare il kernel:
yum reinstall $(rpm -qa | grep -i kernel)
Creare il
grub.cfg
file:grub2-mkconfig -o /boot/grub2/grub.cfg sed -i 's/hd2/hd0/g' /boot/grub2/grub.cfg
Procedi con il passaggio 3 in Risoluzione dei problemi di salvataggio di GRUB offline per scambiare il disco del sistema operativo.
Errore: partizione non trovata
Lo screenshot seguente mostra il messaggio di errore:
Questo errore si verificherà con una macchina virtuale basata su RHEL (Red Hat, Oracle Linux, CentOS) in uno dei seguenti scenari:
- La
/boot
partizione viene eliminata per errore. - La
/boot
partizione viene ricreata utilizzando i settori di inizio e fine errati.
Soluzione: ricreare la partizione /boot
Se la /boot
partizione non è presente, ricrearla seguendo questa procedura:
Verificare se è stata creata una macchina virtuale di salvataggio/ripristino. In caso contrario, seguire il passaggio 1 in Risoluzione dei problemi di salvataggio di GRUB offline per creare la macchina virtuale.
Identificare se la tabella delle partizioni è stata creata come tipo dos o GPT utilizzando il seguente comando:
sudo fdisk -l /dev/sdX
Tabella partizioni DOS
Tabella delle partizioni GPT
Se la tabella delle partizioni ha come tipo DOS, creare la partizione /boot nei sistemi DOS. Se la tabella delle partizioni ha come tipo GPT, creare la partizione /boot nei sistemi GPT.
Assicurarsi che il caricatore d'avvio GRUB sia installato utilizzando il disco appropriato. È possibile seguire la procedura descritta in Reinstallare GRUB e rigenerare manualmente il file di configurazione GRUB per installarlo e configurarlo.
Procedi con il passaggio 3 in Risoluzione dei problemi di salvataggio di GRUB offline per scambiare il disco del sistema operativo.
Ricreare la partizione /boot nei sistemi DOS
Ricreare la
/boot
partizione da una macchina virtuale di ripristino/ripristino usando il comando seguente:sudo fdisk /dev/sdX
Utilizzare i valori predefiniti nei settori Primo e Ultimo e tipo di partizione (83). Assicurarsi che la tabella di
/boot
partizione sia contrassegnata come avviabile usando l'opzionea
nellofdisk
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.
Dopo aver ricreato la partizione mancante
/boot
, verificare se il/boot
file system viene rilevato. Dovrebbe essere visualizzata una voce per/dev/sdX1
(la partizione /boot mancante).sudo blkid /dev/sdX1
sudo blkid /dev/sdc1 /dev/sdc1: UUID="<UUID>" TYPE="ext4"
Se il
/boot
file system non è visibile inblkid
dopo la ricreazione della partizione, significa che i/boot
dati non esistono più. È necessario ricreare il/boot
file system (usando lo stesso formato UUID e file system presente nella voce) e quindi ripristinarne il/etc/fstab
/boot
contenuto da un backup.
Ricreare la partizione /boot nei sistemi GPT
Ricreare la
/boot
partizione da una macchina virtuale di ripristino/ripristino usando il comando seguente:sudo gdisk /dev/sdX
Utilizzare i valori predefiniti nei settori Primo e Ultimo e tipo di partizione (8300), come mostrato 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.
Controllare se il
/boot
file system viene rilevato dal sistema usando il comando seguente:sudo blkid /dev/sdX1
Dovrebbe essere possibile visualizzare una voce per
/dev/sdX1
(la partizione mancante/boot
).sudo blkid /dev/sdc1 /dev/sdc1: UUID="<UUID>" BLOCK_SIZE="4096" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="<PARTUUID>"
Se il
/boot
file system non è visibile dopo la ricreazione della partizione, ciò significa che i/boot
dati non esistono più. È necessario ricreare il/boot
file system (usando lo stesso UUID presente nella voce) e quindi ripristinarne il/etc/fstab
/boot
contenuto da un backup.
Errore: simbolo 'grub_efi_get_secure_boot' non trovato
Lo screenshot seguente mostra il messaggio di errore:
Il kernel Linux versione 4.12.14 (utilizzato 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 avviare usando questa versione del kernel SUSE in un'immagine di macchina virtuale di generazione 2.
Soluzione
Per risolvere questo errore, attenersi alla seguente procedura:
Verificare se è stata creata una macchina virtuale di salvataggio/ripristino. In caso contrario, seguire il passaggio 1 in Risoluzione dei problemi di salvataggio di GRUB offline per creare la macchina virtuale. Montare tutti i file system necessari, inclusi
/
e/boot
, e quindi immettere l'ambiente chroot .Nella console dei comandi, eseguire il seguente comando YaST:
yast2 bootloader
Deselezionare la "x" dall'opzione Abilita supporto di avvio protetto e quindi selezionare F10 per salvare la modifica.
Seguire il passaggio 3 in Risoluzione dei problemi di salvataggio di GRUB offline per scambiare il disco del sistema operativo.
Altri errori di salvataggio di GRUB
Lo screenshot seguente mostra il messaggio di errore:
Questo tipo di errore verrà attivato in uno dei seguenti scenari:
- Manca il file di configurazione di GRUB.
- È utilizzata la configurazione GRUB errata.
- La
/boot
partizione o il relativo contenuto non sono presenti.
Per risolvere questo errore, attenersi alla seguente procedura:
Verificare se è stata creata una macchina virtuale di salvataggio/ripristino. In caso contrario, seguire il passaggio 1 in Risoluzione dei problemi di salvataggio di GRUB offline per creare la macchina virtuale. Montare tutti i file system necessari, inclusi
/
e/boot
, e quindi immettere l'ambiente chroot .Assicurarsi che il
/etc/default/grub
file di configurazione sia configurato. Le immagini di Azure Linux approvate dispongono già delle configurazioni richieste. Per altre informazioni, vedere gli articoli seguenti:Reinstallare GRUB e rigenerare manualmente 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 saranno diversi perché questi sistemi utilizzano la versione 1 di GRUB. La versione 1 di GRUB non è trattata in questo articolo.Se l'intera
/boot
partizione non è presente, seguire la procedura descritta in Errore: nessuna partizione di questo tipo.Una volta risolto il problema, procedere al passaggio 3 in Risoluzione dei problemi di salvataggio di GRUB offline per scambiare il disco del sistema operativo.
Passaggi successivi
Se l'errore di avvio specifico non è un problema di ripristino di GRUB, fare riferimento a Risolvere gli errori di avvio di macchine virtuali Linux di Azure per ulteriori 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à di contatti di terze parti
Microsoft fornisce informazioni di contatto di terze parti per aiutarti a trovare ulteriori informazioni su questo argomento. Queste informazioni di contatto sono soggette a modifica 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.