Capitolo 8. Avvio e configurazione di un sistema Linux

Sommario

8.1. Processo di avvio di Linux
8.2. Processo di init
8.3. Configurazione del sistema tramite /etc/sysconfig

Estratto

L'avvio di un sistema Linux coinvolge svariati componenti. In questo capitolo vengono illustrati i principi di base e vengono evidenziati i componenti coinvolti. Vengono inoltre descritti il concetto di runlevel e la configurazione del sistema SUSE tramite sysconfig.


8.1. Processo di avvio di Linux

Il processo di avvio di Linux comprende varie fasi ognuna delle quali è rappresentata da un componente diverso. Di seguito viene brevemente riepilogato il processo di avvio e vengono indicati i principali componenti coinvolti.

  1. BIOS.  Quando il computer viene accesso, il BIOS inizializza lo schermo e la tastiera e controlla la memoria principale. Durante questa prima fase il computer non accede a supporti di memorizzazione di massa. Dopo di che, vengono caricate dai valori CMOS le informazioni riguardanti la data e l'ora correnti nonché le periferiche più importanti. Quando vengono riconosciuti il primo disco rigido e la relativa geometria, il controllo del sistema passa dal BIOS al boot loader.

  2. Boot loader.  Il primo settore di dati fisico da 512 byte del primo disco rigido viene caricato nella memoria principale e il controllo viene assunto dal boot loader che risiede all'inizio di questo settore. La parte restante del processo di avvio dipende dai comandi eseguiti dal boot loader. Di conseguenza, i primi 512 byte nel primo disco rigido vengono denominati MBR (Master Boot Record). Il boot loader passa quindi il controllo al sistema operativo effettivo, in questo caso il kernel Linux. Per ulteriori informazioni su GRUB, il boot loader di Linux, vedere il Capitolo 9, Boot Loader.

  3. Kernel e initramfs.  Per passare il controllo del sistema, il boot loader carica in memoria sia il kernel che un file system iniziale basato sulla RAM (initramfs). Il contenuto del file system initramfs può essere utilizzato direttamente dal kernel. Il file system initramfs contiene un piccolo file eseguibile, denominato init, che gestisce il montaggio del file system radice effettivo. Nelle versioni precedenti di SUSE Linux questi task erano gestiti rispettivamente da initrd e linuxrc. Per ulteriori informazioni su initramfs, fare riferimento alla Sezione 8.1.1, "File system initramfs".

  4. Esecuzione di init su initramfs.  Questo programma esegue tutte le operazioni necessarie per montare il file system radice appropriato, ad esempio fornisce le funzionalità del kernel per il file system necessario e i driver di periferica per i controller della memorizzazione di massa. Dopo che il file system radice è stato rilevato, viene sottoposto a un controllo degli errori e quindi viene montato. Se queste operazioni hanno esito positivo, initramfs viene ripulito e quindi viene eseguito il programma init sul file system radice. Per ulteriori informazioni su init, fare riferimento alla Sezione 8.1.2, "Esecuzione di init su initramfs". Per ulteriori informazioni su udev, vedere il Capitolo 12, Gestione dei dispositivi dinamici del kernel con udev.

  5. init.  Il programma init gestisce l'effettivo avvio del sistema attraverso svariati livelli che forniscono funzionalità diverse. Per una descrizione di init, vedere la Sezione 8.2, "Processo di init".

8.1.1. File system initramfs

initramfs è un file system di piccole dimensioni che il kernel può caricare in un disco RAM. Fornisce un ambiente Linux minimo che consente di eseguire programmi prima che venga montato il file system radice effettivo. Questo ambiente Linux minimo viene caricato in memoria dalle routine del BIOS e non prevede requisiti hardware specifici a parte una quantità di memoria sufficiente. initramfs deve sempre fornire un file eseguibile denominato init per l'esecuzione del programma init effettivo sul file system radice affinché il processo di avvio possa proseguire.

Prima che il file system radice effettivo possa essere montato e il sistema operativo effettivo possa essere avviato, il kernel deve caricare i driver corrispondenti per accedere al dispositivo in cui si trova il file system radice. Questi driver possono includere driver speciali per determinati tipi di unità disco rigido o persino driver di rete per l'accesso a un file system di rete. I moduli necessari per il file system radice possono essere caricati tramite l'esecuzione di init su initramfs. Dopo il caricamento dei moduli, udev fornisce a initramf i dispositivi necessari. initramfs è disponibile durante l'intero processo di avvio. In questo modo è possibile gestire tutti gli eventi HotPlug generati durante l'avvio.

Se è necessario sostituire i componenti hardware (i dischi rigidi) in un sistema installato e il nuovo hardware richiede la presenza di driver diversi nel kernel in fase di avvio, occorre aggiornare initramfs. Questa operazione viene eseguita come per il predecessore di initramfs, initrd, tramite una chiamata di mkinitrd. Quando si chiama mkinitrd senza argomenti, viene creato un initramfs. Quando si chiama mkinitrd -R, viene creato un initrd. In SUSE Linux i moduli da caricare vengono specificati tramite la variabile INITRD_MODULES in /etc/sysconfig/kernel. Al termine dell'installazione, questa variabile viene impostata automaticamente sul valore corretto. I moduli vengono caricati nell'ordine esatto in cui appaiono in INITRD_MODULES. Questo aspetto assume particolare importanza quando vengono utilizzati più driver SCSI perché altrimenti i nomi dei dischi rigidi cambierebbero. Nonostante sarebbe sufficiente caricare solo i driver necessari per l'accesso al file system radice, vengono caricati tutti i driver SCSI necessari per l'installazione tramite initramfs o initrd perché un caricamento successivo potrebbe creare problemi.

[Important]aggiornamento di initramfs o initrd

Il boot loader carica initramfs o initrd allo stesso modo del kernel. Dopo l'aggiornamento di initramfs o initrd, non è necessario reinstallare GRUB perché GRUB cerca il file corretto nella directory durante l'avvio.

8.1.2. Esecuzione di init su initramfs

Lo scopo principale dell'esecuzione di init su initramfs è preparare il montaggio del file system radice effettivo e consentire di accedervi. In base alla configurazione del sistema, init esegue i task elencati di seguito.

Caricamento di moduli del kernel

In base alla configurazione hardware, potrebbero essere necessari driver particolari per accedere ai componenti hardware del computer, il più importante dei quali è il disco rigido. Per accedere al file system radice finale, il kernel deve caricare i driver del file system appropriati.

File di blocco speciali

Per ciascun modulo caricato, il kernel genera eventi del dispositivo. udev gestisce questi eventi e genera i file speciali necessari per il dispositivo in un file system RAM in /dev. Senza questi file speciali, il sistema non è accessibile.

Gestione della configurazione di RAID e LVM

Se il sistema in uso è stato configurato in modo da utilizzare RAID o LVM per memorizzare il file system radice, init imposta LVM o RAID per consentire il successivo accesso al file system radice. Per informazioni su RAID, vedere la Sezione 2.2, "Configurazione di RAID software". Per informazioni su LVM, vedere la Sezione 2.1, "Configurazione di LVM".

Gestione della configurazione della rete

Se il sistema in uso è stato configurato in modo da utilizzare un file system radice montato in rete tramite NFS, init deve verificare che vengano caricati i driver di rete appropriati e che siano impostati in modo da consentire l'accesso al file system radice.

Quando init viene chiamato durante l'avvio iniziale nell'ambito del processo di installazione, i task eseguiti non sono gli stessi descritti in precedenza:

Individuazione del supporto di installazione

Quando si avvia il processo di installazione, il computer carica dal supporto di installazione un kernel di installazione e un initrd speciale con il programma di installazione YaST. Il programma di installazione YaST, che viene eseguito in un file system RAM, deve essere a conoscenza dell'effettiva posizione in cui si trova il supporto di installazione in modo da potervi accedere e installare il sistema operativo.

Inizializzazione del riconoscimento dell'hardware e caricamento dei moduli del kernel appropriati

Come specificato nella Sezione 8.1.1, "File system initramfs", il processo di avvio ha inizio con un set minimo di driver utilizzabili con la maggior parte delle configurazioni hardware. Il programma init avvia un processo iniziale di scansione dell'hardware che determina il set di driver adeguato per la configurazione hardware disponibile. Questi valori vengono quindi scritti nella variabile INITRD_MODULES in /etc/sysconfig/kernel per consentire a qualsiasi processo di avvio successivo di utilizzare un initrd personalizzato o in un file /etc/sysconfig/hardware/hwconfig-*, se il dispositivo non è richiesto durante il processo di avvio. Durante il processo di installazione, init carica questo set di moduli.

Caricamento del sistema di installazione o del sistema di salvataggio

Immediatamente dopo il riconoscimento dell'hardware, il caricamento dei driver appropriati e la creazione dei file speciali per il dispositivo da parte di udev, init avvia il sistema di installazione, che contiene l'effettivo programma di installazione YaST, oppure il sistema di salvataggio.

Avvio di YaST

Infine, init avvia YaST, il quale a sua volta avvia l'installazione dei pacchetti e la configurazione del sistema.