RSS
Blog LPI

LPIC-1: Linux Loading

Gennaio 22, 2019 - di Fabian Thorns

Nel mese di ottobre 2018 LPI ha aggiornato LPIC-1 alla versione 5.0 e Linux Essentials alla versione 1.6. In questa serie di blog esamineremo le principali modifiche introdotte da questi aggiornamenti. Oggi, iniziamo con una panoramica dei modi per il load del kernel di Linux.

L'Obiettivo 101.2 Copre il BIOS tradizionale. La nuova versione aggiunge un nuovo UEFI o firmware. Inoltre l'Obiettivo 104.1 ora include GPT oltre alle tabelle di partizione MBR. Sebbene il firmware (BIOS vs. UEFI) e le tabelle delle partizioni (MBR rispetto a GPT) siano concetti tecnicamente differenti, sono strettamente correlati quando si tratta di avviare il kernel Linux.

Quando un computer si avvia, deve caricare un sistema operativo. Ciò che sembra banale coinvolge invece diversi componenti. Dopo che il firmware ha configurato l'hardware, il bootloader carica il kernel del sistema operativo dal disco rigido che viene quindi avviato per avviare il sistema operativo effettivo. La posizione esatta del bootloader e il meccanismo per individuarlo e avviarlo variano a seconda del firmware e del tipo di tabella delle partizioni. Per il resto di questo post, assumiamo che venga utilizzato il boot loader GRUB 2.

Tradizionalmente, i dischi rigidi contengono una tabella di partizione del record di avvio principale (MBR). L'MBR riserva uno spazio che contiene il bootloader. Il BIOS può trovare questo spazio perché risiede in una posizione fissa sul disco. Tuttavia, questo spazio è troppo piccolo per la maggior parte dei bootloader, motivo per cui solo una parte iniziale del bootloader è memorizzata nell'MBR. GRUB, ad esempio, memorizza il suo cosiddetto boot.img qui, solo per caricare il resto del bootloader da un'altra posizione.

Un MBR tradizionale lascia uno spazio tra la fine dell'MBR e l'inizio della prima partizione. Su un disco MBR, GRUB utilizza questo spazio per archiviarne la copia core.img. Questo codice è finalmente in grado di accedere a /boot/ della partizione, dove GRUB carica moduli aggiuntivi, il kernel Linux e l'immagine initramfs.

Le tabelle di partizione GUID, GPT in breve, hanno una struttura diversa che supporta partizioni più numerose e più grandi. Tuttavia, non contiene più un divario di partizione, quindi GRUB non può utilizzare questo spazio per archiviarne il contenuto core.img. Invece, si aspetta una piccola partizione con la partizione di boot di tipo BIOS (EF02). Questa partizione non contiene un file system, ma è usata direttamente da grub-install per caricare core.img. Quando si avvia il sistema utilizzando BIOS e GPT legacy, GRUB viene caricato dall'MBR, carica core.img dalla partizione di avvio del BIOS e quindi legge i componenti rimanenti dalla partizione contenente /boot/.

UEFI è un tipo di firmware che può caricare ed eseguire estensioni. Il kernel di Linux può essere compilato per essere un'estensione del genere, proprio come il bootloader GRUB. Le estensioni sono memorizzate nella partizione del sistema EFI, ESP. Questa partizione è identificata dal tipo di partizione EFI System (0xEF00) e in genere contiene un file system FAT. È esplicitamente menzionato nell' l'Obiettivo 102.1.

In Linux, questa partizione viene solitamente caricata su / Boot / efi /. Questa partizione può contenere binari EFI per più sistemi operativi o bootloader. grub-install può creare una directory per GRUB sull'ESP. La directory / Boot / efi / EFI / linux / potrebbe, per esempio, contenere il file grubx64.efi. Se viene utilizzato secure boot, sono necessari alcuni file aggiuntivi. Questi file vengono eseguiti dal firmware per avviare GRUB.

UEFI offre una shell interattiva che supporta la navigazione attraverso il file system della partizione EFI e l'esecuzione di binari EFI. Per facilitare l'avvio, UEFI può memorizzare le impostazioni di uno o più sistemi operativi che possono essere avviati direttamente senza utilizzare la shell EFI. Queste impostazioni possono essere modificate da Linux usando il comando efibootmgr, che è coperto da LPIC-2. Se vuoi impararne tutti i dettagli Il blog di Adam Williamson su EFI Partitions è altamente consigliato.

L'installazione di un bootloader dipende dal firmware utilizzato. Per un BIOS legacy, è necessaria una tabella delle partizioni MBR o un GPT che contenga una partizione GRUB. In entrambi i casi, il boot.img parte di GRUB è installato in una posizione fissa sul disco rigido. core.img viene caricato o dal gap divario della partizione dopo l'MBR o dalla partizione GRUB su un disco GPT. Wikipedia lo illustra piuttosto bene. UEFI invece avvia il binario GRUB EFI, insieme alle estensioni aggiuntive richieste per supportare l'avvio sicuro, dall'ESP. In ogni caso, GRUB è ora in grado di accedere alla partizione /boot/ per caricare ulteriori moduli GRUB, il kernel Linux e initramfs.

Poiché tutti questi concetti sono rilevanti per LPIC-1, è necessario provare a configurare manualmente tutti e tre questi scenari utilizzando fdisk or gdisk e grub-install. Fate riferimento alla documentazione della propria distribuzione per i passaggi esatti, per i pacchetti che è necessario installare e per come generare un file di configurazione di GRUB. Potreste utilizzare una macchina virtuale per avere alcuni dischi rigidi per i vostri esperimenti.

Una volta avviato il kernel di Linux e initramfs, viene utilizzato un sistema init come systemd. La prossima settimana esamineremo alcuni concetti avanzati di systemd che sono stati aggiunti alla nuova versione di LPIC-1.

Post precedente | Prossimo post

Informazioni su Fabian Thorns:

Fabian Thorns

Fabian Thorns is the Director of Certification Development at Linux Professional Institute, LPI. He is M.Sc. Business Information Systems, a regular speaker at open source events and the author of numerous articles and books. Fabian has been part of the exam development team since 2010. Connect with him on LinkedIn, XING or via email (fthorns at lpi.org).

Grazie per l'aggiornamento. La scrittura è utile.

Intuitivo per un utente Linux novizio. Anche una migliore visione di EUFI e GPT rispetto a MBR.

Stavo seguendo il tuo blog ed eseguivo "La directory / boot / efi / EFI / linux / potrebbe, per esempio, contenere il file grubx64.efi". Sulla mia distro tuttavia (Ubuntu18LTS) il file si trova in / boot / efi / EFI / ubuntu / È sicuro dire che un percorso generale sarebbe / boot / efi / EFI / <distro_name>? Grazie.