Come modificare i parametri di runtime del kernel in modo persistente e non persistente

Nella Parte 13 di questa serie LFCS (Linux Foundation Certified Sysadmin) abbiamo spiegato come utilizzare GRUB per modificare il comportamento del sistema passando opzioni al kernel durante il processo di avvio in corso.

Allo stesso modo, è possibile utilizzare la riga di comando in un sistema Linux in esecuzione per modificare determinati parametri del kernel in tempo di esecuzione come modifica temporanea o permanente mediante la modifica di un file di configurazione.

In questo modo, è possibile abilitare o disabilitare i parametri del kernel al volo senza troppa difficoltà quando è necessario a causa di un cambiamento richiesto nel modo in cui ci si aspetta che il sistema operi.

Introduzione al Filesystem /proc

La specifica più recente dello Standard della Gerarchia del Filesystem indica che /proc rappresenta il metodo predefinito per gestire le informazioni sui processi e sul sistema, nonché altre informazioni sul kernel e sulla memoria. In particolare, /proc/sys è dove è possibile trovare tutte le informazioni su dispositivi, driver e alcune funzionalità del kernel.

La struttura interna effettiva di /proc/sys dipende pesantemente dal kernel utilizzato, ma è probabile che all’interno si trovino le seguenti directory. A loro volta, ciascuna di esse conterrà altre sottodirectory in cui sono mantenuti i valori per ciascuna categoria di parametro:

  1. dev: parametri per dispositivi specifici collegati alla macchina.
  2. fs: configurazione del filesystem (quote e inode, ad esempio).
  3. kernel: configurazione specifica del kernel.
  4. net: configurazione di rete.
  5. vm: utilizzo della memoria virtuale del kernel.

Per modificare i parametri del kernel in esecuzione, utilizzeremo il comando sysctl. Il numero esatto di parametri che possono essere modificati può essere visualizzato con:

# sysctl -a | wc -l

Se desideri visualizzare l’elenco completo dei parametri del kernel, basta eseguire:

# sysctl -a 

Poiché l’output del comando sopra sarà costituito DA MOLTE righe, possiamo utilizzare un pipeline seguito da less per ispezionarlo più attentamente:

# sysctl -a | less

Diamo un’occhiata alle prime righe. Si noti che i primi caratteri in ciascuna riga corrispondono ai nomi delle directory all’interno di /proc/sys:

Understand Linux /proc Filesystem

Ad esempio, la riga evidenziata:

dev.cdrom.info = drive name:        	sr0

indica che sr0 è un alias per il lettore ottico. In altre parole, così il kernel “vede” quel dispositivo e utilizza quel nome per riferirsi ad esso.

Nella sezione seguente spiegheremo come modificare altri “più importanti” parametri del kernel in esecuzione su Linux.

Come Cambiare o Modificare i Parametri del Kernel in Esecuzione su Linux

Basandoci su quanto abbiamo spiegato finora, è facile vedere che il nome di un parametro corrisponde alla struttura delle directory all’interno di /proc/sys dove può essere trovato.

Ad esempio:

dev.cdrom.autoclose → /proc/sys/dev/cdrom/autoclose
net.ipv4.ip_forward → /proc/sys/net/ipv4/ip_forward

Controlla i Parametri del Kernel di Linux

Detto ciò, possiamo visualizzare il valore di un particolare parametro del kernel Linux utilizzando sia sysctl seguito dal nome del parametro o leggendo il file associato:

# sysctl dev.cdrom.autoclose
# cat /proc/sys/dev/cdrom/autoclose
# sysctl net.ipv4.ip_forward
# cat /proc/sys/net/ipv4/ip_forward
Check Linux Kernel Parameters

Impostare o modificare i parametri del kernel Linux

Per impostare il valore di un parametro del kernel possiamo anche utilizzare sysctl, ma utilizzando l’opzione -w seguita dal nome del parametro, il segno uguale e il valore desiderato.

Un altro metodo consiste nell’utilizzare echo per sovrascrivere il file associato al parametro. In altre parole, i seguenti metodi sono equivalenti per disabilitare la funzionalità di inoltro dei pacchetti nel nostro sistema (che, tra l’altro, dovrebbe essere il valore predefinito quando una casella non deve passare il traffico tra le reti):

# echo 0 > /proc/sys/net/ipv4/ip_forward
# sysctl -w net.ipv4.ip_forward=0

È importante notare che i parametri del kernel impostati utilizzando sysctl saranno applicati solo durante la sessione corrente e scompariranno quando il sistema verrà riavviato.

Per impostare questi valori in modo permanente, modificare /etc/sysctl.conf con i valori desiderati. Ad esempio, per disabilitare l’inoltro dei pacchetti in /etc/sysctl.conf assicurarsi che questa riga appaia nel file:

net.ipv4.ip_forward=0

Quindi eseguire il seguente comando per applicare le modifiche alla configurazione in esecuzione.

# sysctl -p

Altri esempi di importanti parametri del kernel in esecuzione sono:

fs.file-max specifica il numero massimo di gestori di file che il kernel può allocare per il sistema. A seconda dell’uso previsto del sistema (server web / database / file, per citarne alcuni), potresti voler modificare questo valore per soddisfare le esigenze del sistema.

Troppi file aperti error message at best, and may prevent the operating system to boot at the worst.

If per un errore innocente ti trovi in quest’ultima situazione, avvia in modalità utente singolo (come spiegato in Parte 13 – Configurare e Risolvere i Problemi del Caricatore di Avvio Linux Grub) e modifica /etc/sysctl.conf come indicato in precedenza. Per impostare la stessa restrizione su base utente, consulta Parte 14 – Monitorare e Impostare l’Utilizzo del Limite di Processi Linux di questa serie.

kernel.sysrq è utilizzato per abilitare il tasto SysRq sulla tua tastiera (noto anche come tasto di stampa) in modo da consentire a determinate combinazioni di tasti di invocare azioni di emergenza quando il sistema diventa non reattivo.

Il valore predefinito (16) indica che il sistema rispetterà la combinazione di tasti Alt+SysRq+tasto e eseguirà le azioni elencate nella documentazione sysrq.c trovata in kernel.org (dove il tasto è una lettera nell’intervallo b-z). Ad esempio, Alt+SysRq+b riavvierà il sistema in modo forzato (utilizza questo come extrema ratio se il tuo server non risponde).

Avviso! Non tentare di premere questa combinazione di tasti su una macchina virtuale perché potrebbe forzare il riavvio del sistema host!

Quando impostato su 1, net.ipv4.icmp_echo_ignore_all ignorerà le richieste di ping e le scarterà a livello del kernel. Questo è mostrato nell’immagine sottostante – nota come le richieste di ping vengano perse dopo aver impostato questo parametro del kernel:

Block Ping Requests in Linux

A better and easier way to set individual runtime parameters is using .conf files inside /etc/sysctl.d, grouping them by categories.

Ad esempio, anziché impostare net.ipv4.ip_forward=0 e net.ipv4.icmp_echo_ignore_all=1 in /etc/sysctl.conf, possiamo creare un nuovo file chiamato net.conf all’interno di /etc/sysctl.d:

# echo "net.ipv4.ip_forward=0" > /etc/sysctl.d/net.conf
# echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.d/net.conf

Se scegli di utilizzare questo approccio, non dimenticare di rimuovere le stesse righe da /etc/sysctl.conf.

Riepilogo

In questo articolo abbiamo spiegato come modificare i parametri del kernel in esecuzione, sia in modo persistente che non persistente, utilizzando sysctl, /etc/sysctl.conf, e file all’interno di /etc/sysctl.d.

Nella documentazione di sysctl puoi trovare ulteriori informazioni sul significato di più variabili. Quei file rappresentano la fonte più completa di documentazione sui parametri che possono essere impostati tramite sysctl.

Hai trovato utile questo articolo? Speriamo proprio di sì. Non esitare a farcelo sapere se hai domande o suggerimenti per migliorare.

Source:
https://www.tecmint.com/change-modify-linux-kernel-runtime-parameters/