lpic/101/002_avviare_il_sistema.md

66 lines
4.2 KiB
Markdown
Raw Permalink Normal View History

2024-10-19 20:51:36 +02:00
## BIOS o UEFI
Il kernel viene caricato da un programma chiamato *bootloader*, a sua volta caricato da un firmware preinstallato come il BIOS o UEFI. Una volta caricato, il kernel continua il processo di avvio identificando e caricando l'hardware.
### BIOS
Il BIOS (*Basic Input/Output System*) e' un programma memorizzato in un chip di memoria non volatile collegato alla scheda madre.
I primi 440 byte nel primo dispositivo di archiviazione - seguendo l'ordine definito nel BIOS - sono il primo stadio del bootloader (*bootstrap*). I primi 512 byte di *ogni* dispositivo di archiviazione sono denominati *MBR* e contengono la tabella delle partizioni.
I passaggi per l'avvio di un sistema dotato di BIOS sono:
- Il processo POST (*power-on self-test*) identifica semplici guasti hardware
- Il BIOS attiva i componenti di base per caricare il sitema
- Il BIOS carica il primo stadio del bootloader dall'MBR (i primi 440 byte nel primo dispositivo di archiviazione)
- Il primo stadio del bootloader richiama il secondo, responsabile del caricamento del kernel.
### UEFI
UEFI (*Unified Extensible Firmware Interface*), e' sempre un firmware, come il BIOS, ma e' in grado di identificare le partizioni e leggere diversi filesystem. Inoltre non si basa sull'MBR, prendendo in considerazioni solo le impostazioni memorizzate nella sua memoria non volatile (NVRAM). Nella partizione *ESP* (*EFI System Partition*), di un *qualsiasi filesystem compatibile* (es. FAT32), sono contenuti dei programmi, chiamati *EFI applications*, che vengono eseguiti automaticamente o richiamati da un menu d'avvio. Una di queste applicazioni e' il bootloader.
I passaggi per l'avvio di un sistema con UEFI sono:
- Il processo POST (*power-on self-test*) identifica semplici guasti hardware
- UEFI attiva i componenti di base per caricare il sitema
- UEFI esegue l'applicazione predefinita memorizzata nel filesystem della partizione ESP. Di solito, il bootloader
- Il bootloader carica il kernel.
UEFI supporta una funzione chiamata **Secure Boot**, che consente l'esecuzione solo di applicazioni EFI firmate, ossia autorizzate dal produttore.
### Bootloader
Uno dei piu' utilizzati e' GRUB. Permette di passare dei parametri al kernel, seguendo il modello `option=value`.
Alcuni dei parametri:
- `init`: imposta un iniziatore di sistema alternativo, per esempio `init=/bin/bash`
- `systemd.unit`: imposta il *target* da attivare, per esempio: `systemd.unit=graphical/target`
- `mem`: imposta la qualità di RAM disponibile per il sistema
- `quiet`: nasconde i messaggi di avvio
- `root`: imposta la partizione di root
- `rootflags`: opzioni di mount per il filesystem di root
I parametri del kernel devono essere aggiunti al file `/etc/default/grub` alla riga `GRUB_CMDLINE_LINUX` per renderli persistenti.
Una volta che il sistema e' in esecuzione, i parametri usati per la sessione corrente sono visibili nel file:
```bash
cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-6.11.2-amd64 root=/dev/mapper/pc--vg-root ro systemd.show_status=1 quiet splash
```
## Inizializzazione del sistema
L'inizializzazione del SO inizia quando il bootloader carica il kernel nella RAM. Il kernel aprira' l'*initramfs* (*initial RAM filesystem*), un filesystem temporaneo usato durante il processo di avvio. Il suo scopo principale e' quello di fornire i moduli richiesti, in modo che il kernel possa accedere al filesystem root *reale* del SO.
Il kernel, non appena il filesystem root e' disponibile, montera' tutti i filesystem configurati in `/etc/fstab`, quindi eseguira' il primo programma, chiamato `init`, responsabile dell'esecuzione di tutti gli script e demoni di inizializzazione del sistema. Solo ora initramfs viene rimosso dalla RAM.
### Ispezionare l'inizializzazione
Tutti gli errori generano messaggi. Lo spazio di memoria in cui il kernel memorizza i suoi messaggi e' chiamato *kernel ring buffer*.
Un comando per visualizzare i messaggi del kernel e' `dmesg -T`. Nei sistemi che usano *systemd* e' possibile usare il comando `journalctl -k`. L'opzione `-D` puo' essere usata per leggere messaggi di registro al di fuori della cartella `/var/log/journal`.
I messaggi di log sono memorizzati in vari file all'interno della directory `/var/log/`.