GNU/Linux >> Linux Esercitazione >  >> Cent OS

CentOS / RHEL 7:processo di avvio

È importante comprendere il processo di avvio di Linux per risolvere i problemi di avvio. Questi sono i passaggi di alto livello nel processo di avvio. Devi essere a conoscenza dei file coinvolti nel processo di avvio perché gli errori in questi file possono causare problemi di avvio.

Se si verifica un problema durante l'avvio, è necessario identificare in quale fase del processo di avvio si trova il problema in modo da poter intraprendere l'azione appropriata per risolverlo.

Introduzione di systemd

sistema di sistema è il nuovo gestore di sistema e servizio in CentOS/RHEL 7. È retrocompatibile con gli script di inizializzazione SysV utilizzati dalle versioni precedenti di RedHat Linux, incluso RHEL 6. Sostituisce Upstart come sistema di inizializzazione predefinito.

I passaggi seguenti riepilogano come avviene la procedura di avvio in RHEL/CentOS 7.

  1. Il BIOS del computer esegue il POST.
  2. BIOS legge l'MBR per il bootloader.
  3. Il bootloader GRUB 2 carica l'immagine del kernel vmlinuz.
  4. GRUB 2 estrae il contenuto dell'immagine initramfs.
  5. Il kernel carica i moduli del driver da initramfs.
  6. Il kernel avvia il primo processo del sistema, systemd.
  7. Il processo systemd prende il sopravvento. Esso:
    • Legge i file di configurazione dalla directory /etc/systemd
    • Legge il file collegato da /etc/systemd/system/default.target
    • Porta il sistema allo stato definito dalla destinazione del sistema
    • Esegue /etc/rc.local

1. POST (Autotest all'accensione)

Dal firmware di sistema, che può essere la moderna Universal Extended Firmware Interface (UEFI ) o il classico Basic Input Output System (BIOS ), viene eseguito il POST (Power-On Self-Test) e viene inizializzato l'hardware necessario per avviare il sistema.

2. Selezione del dispositivo di avvio (con MBR)

– Master Boot Record (MBR) sono i primi 512 byte dell'unità di avvio che vengono letti in memoria dal BIOS.
– I successivi 64 byte contengono la tabella delle partizioni per il disco. Gli ultimi due byte sono il "Numero magico" utilizzato per il rilevamento degli errori.

– MBR rileva il dispositivo di avvio e carica il caricatore di avvio GRUB2 in memoria e trasferisce il controllo su di esso.

3. Caricamento del boot loader (GRUB2)

– Il programma bootloader predefinito utilizzato su RHEL 7 è GRUB 2. GRUB sta per GRand Unified Bootloader . GRUB 2 sostituisce il vecchio bootloader GRUB chiamato anche GRUB legacy.
– Il file di configurazione di GRUB 2 si trova in /boot/grub2/grub.cfg (non modificare questo file direttamente).

– Le impostazioni di configurazione del menu di GRUB 2 sono prese da /etc/default/grub durante la generazione di grub.cfg.
– Esempio di file /etc/default/grub :

# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel/swap crashkernel=auto rd.lvm.lv=rhel/root rhgb quiet net.ifnames=0"
GRUB_DISABLE_RECOVERY="true"

– Se vengono apportate modifiche a uno di questi parametri, è necessario eseguire grub2-mkconfig per rigenerare il file /boot/grub2/grub.cfg.

# grub2-mkconfig –o /boot/grub2/grub.cfg

– GRUB2 ricerca il file immagine del kernel compresso chiamato anche vmlinuz nella directory /boot.
– GRUB2 carica il file immagine del kernel vmlinuz in memoria ed estrae il contenuto del file immagine initramfs in un file system temporaneo basato sulla memoria (tmpfs).
– Il disco RAM iniziale (initrd) è un file system di root iniziale che viene montato prima del file system di root reale.

initramfs
– Il compito del file system RAM iniziale consiste nel precaricare i moduli del dispositivo a blocchi, ad esempio per IDE, SCSI o RAID, in modo che sia possibile accedere al file system radice, su cui normalmente risiedono quei moduli, e montato.
– L'initramfs è legato al kernel e il kernel monta questo initramfs come parte di un processo di avvio in due fasi.
– L'utilità dracut crea initramfs ogni volta che viene installato un nuovo kernel.
– Usa il comando lsinitrd per visualizzare il contenuto dell'immagine creata da dracut:

# lsinitrd | less

4. Caricamento del kernel

– Il kernel avvia il processo systemd con un ID processo pari a 1 (PID 1).

– Carica anche i moduli driver necessari dall'immagine initrd.
– Il boot loader (GRUB2) può presentare un menu di avvio all'utente o può essere configurato per avviare automaticamente un sistema operativo predefinito.
– Per load Linux, il kernel viene caricato insieme a initramfs. initramfs contiene moduli del kernel per tutto l'hardware necessario per l'avvio, nonché gli script iniziali necessari per procedere alla fase successiva dell'avvio.
– In RHEL 7, initramfs contiene un sistema operativo completo (che può essere utilizzato per la risoluzione dei problemi).

5. Avvio di systemd

– Il kernel avvia il processo systemd con un ID processo pari a 1 (PID 1).

root          1      0  0 02:10 ?        00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 23

– systemd è il primo processo che viene avviato dopo l'avvio del sistema ed è il processo finale in esecuzione all'arresto del sistema.
– Controlla le fasi finali dell'avvio e prepara il sistema per l'uso. Velocizza anche l'avvio caricando i servizi contemporaneamente.
– systemd legge il file collegato da /etc/systemd/system/default.target (ad esempio, /usr/lib/systemd/system/multi-user.target) per determinare la destinazione di sistema predefinita (equivalente al livello di esecuzione). Il file di destinazione del sistema definisce i servizi avviati da systemd.
– systemd consente di gestire vari tipi di unità su un sistema, inclusi servizi (nome.servizio) e destinazioni (nome.destinazione), dispositivi (nome.dispositivo) , punti di montaggio del file system (nome.montaggio) e socket (nome.socket).

Confronto tra i livelli di esecuzione SysV e le unità target

Livello di esecuzione Unità target Descrizione
0 runlevel0.target, poweroff.target Spegni e spegni
1 runlevel1.target, rescue.target Imposta una shell di ripristino
2,3,4 runlevel[234].target, multiutente.target Imposta una shell multiutente non grafica
5 runlevel5.target, graphical.target Imposta una shell grafica multiutente
6 runlevel6.target, reboot.target Spegni e riavvia il sistema

systemd porta il sistema allo stato definito dalla destinazione del sistema, eseguendo attività di inizializzazione del sistema quali:
1. Impostazione del nome host
2. Inizializzazione della rete
3. Inizializzazione di SELinux in base alla sua configurazione
4. Stampa di un banner di benvenuto
5. Inizializzazione dell'hardware di sistema in base agli argomenti di avvio del kernel
6. Montaggio dei file system, inclusi i file system virtuali come il file system /proc
7. Pulizia delle directory in /var
8. Inizio dello scambio

Visualizza unità target predefinita/attuale

Utilizzare il comando seguente per visualizzare l'unità di destinazione utilizzata per impostazione predefinita:

# systemctl get-default
graphical.target

Il obiettivo.grafico l'unità di destinazione indica che il sistema è in esecuzione in uno stato grafico multiutente. Questo è simile all'esecuzione del livello 5 in un sistema di inizializzazione SysV. Puoi verificarlo utilizzando il vecchio comando runlevel :

# runlevel
N 5

L'unità di destinazione predefinita è rappresentata da /etc/systemd/system/default.target file. Questo file è un collegamento simbolico all'unità di destinazione predefinita corrente. Ad esempio :

# ls -lrt /etc/systemd/system/default.target
lrwxrwxrwx. 1 root root 36 Sep 23 20:01 /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target

Cambia l'unità target predefinita

Utilizzare il comando seguente per modificare l'unità di destinazione predefinita (ad esempio, per modificare l'unità predefinita in multi-user.target):

# systemctl set-default multi-user.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.

Si noti che il collegamento simbolico default.target è cambiato e ora punta all'unità multi-user.target:

# ls -lrt /etc/systemd/system/default.target
lrwxrwxrwx. 1 root root 41 Sep 24 11:58 /etc/systemd/system/default.target -> /usr/lib/systemd/system/multi-user.target

La tabella seguente riassume dove è configurata una fase specifica e cosa puoi fare per risolvere i problemi in caso di problemi.

Fase di avvio Configurazione
POST Configurazione hardware (F2, ESC, F10 o altro tasto)
Seleziona dispositivo avviabile Configurazione BIOS/UEFI o menu di avvio hardware
Caricamento del boot loader installazione di grub2 e modifiche a /etc/defaults/grub
Caricamento del kernel Modifiche alla configurazione di GRUB e /etc/dracut.conf
avvio di /sbin/init Compilato in initramfs
Elaborazione di initrd.target Compilato in initramfs
Passa al filesystem di root /etc/fstab
Eseguire la destinazione predefinita /etc/systemd/system/default.target
CentOS / RHEL 7:Guida per principianti a systemd
CentOS / RHEL 7:Guida per principianti a target systemd (sostituzione dei livelli di esecuzione init di SysV)


Cent OS
  1. Modalità utente singolo in CentOS 7 / RHEL 7

  2. Installa Skype sul sistema CentOS 7 - Processo passo dopo passo?

  3. Impossibile avviare il sistema operativo Linux con Auditd (CentOS/RHEL)

  4. Come disabilitare ACPI in CentOS/RHEL 7

  5. Come eseguire il debug del processo di avvio di sistema in CentOS/RHEL 7 e 8

Come installare Cockpit su CentOS 8 / RHEL 8

Configura il server FreeIPA su CentOS 7 / RHEL 7 – Un sistema di gestione delle identità

Come avviare in modalità utente singolo in CentOS 8 / RHEL 8

CentOS / RHEL 7:come modificare la verbosità dei log di debug durante l'avvio

CentOS / RHEL 7:come avviare in modalità di ripristino dal DVD/ISO di installazione

CentOS / RHEL 5:come avviare in modalità di ripristino