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:
dev
: parametri per dispositivi specifici collegati alla macchina.fs
: configurazione del filesystem (quote e inode, ad esempio).- kernel: configurazione specifica del kernel.
net
: configurazione di rete.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
:

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

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:

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/