Lo scopo di questo post è spiegare come configurare i parametri del kernel sui sistemi Red Hat (RHEL/CentOS) e Oracle Linux (OL) utilizzando l'utilità sysctl. L'utilità sysctl (/sbin/sysctl) consente agli utenti (con privilegi) di interrogare e modificare i parametri del kernel durante il runtime. L'utilità è comune alla maggior parte delle distribuzioni Linux, tuttavia possono esistere sottili differenze tra le distribuzioni, ad es. RHEL/OL e SuSE. I parametri che possono essere visualizzati/modificati sono quelli esposti tramite il filesystem procfs /proc/sys. La notazione punto(“.”) viene utilizzata durante l'impostazione in un file di configurazione.
Interrogazione di un parametro del kernel specifico
Per eseguire una query su un valore di parametro del kernel denominato, eseguire l'utilità sysctl con '-n ' o nessun argomento, ad es.:
# sysctl kernel.shmmax kernel.shmmax = 68719476736
# sysctl -n kernel.shmmax 68719476736
Nell'esempio sopra, il parametro kernel.shmmax si riferisce a /proc/sys/kernel/shmmax es.:
# cat /proc/sys/kernel/shmmax 68719476736
Interrogazione di tutti i parametri del kernel
Per interrogare tutti i valori dei parametri del kernel, esegui l'utilità systctl con '-a ‘ argomento es.:
# sysctl -a | more kernel.sched_child_runs_first = 0 kernel.sched_min_granularity_ns = 4000000 kernel.sched_latency_ns = 20000000 kernel.sched_wakeup_granularity_ns = 4000000 kernel.sched_tunable_scaling = 1
Puoi grep per un parametro del kernel specifico nell'output sopra. Usa le espressioni regolari per filtrare un gruppo di parametri del kernel. Ad esempio,
# sysctl -a | grep ^kernel.s[h,e]m kernel.shmmax = 68719476736 kernel.shmall = 4294967296 kernel.shmmni = 4096 kernel.shm_rmid_forced = 0 kernel.sem = 250 32000 100 128
Impostazione immediata (non persistente) dei parametri del kernel
Per impostare un valore di parametro sysctl immediatamente (non persistente) utilizzare sysctl -w comando. Ad esempio:
# sysctl -w kernel.sysrq=0 kernel.sysrq = 0
Il parametro che accetta più valori dovrebbe avere i valori racchiusi tra virgolette. Ad esempio, per impostare net.ipv4.ip_local_port_range su 1025-65535:
# sysctl -w net.ipv4.ip_local_port_range="1025 65535"
In alternativa, è possibile eseguire l'eco dei valori direttamente nel file procfs che rappresenta un parametro sysctl. Ad esempio:
# echo 1 > /proc/sys/net/ipv4/ip_forward # echo "1025 65535" > /proc/sys/net/ipv4/ip_local_port_range
Impostazione dei parametri del kernel in modo persistente
I valori dei parametri del kernel modificati utilizzando il metodo "systctl -w" sono volatili, ovvero persi al riavvio del server. Il file di configurazione dell'utilità sysctl, /etc/sysctl.conf , deve essere utilizzato per archiviare in modo permanente i valori dei parametri del kernel non predefiniti. Il file viene analizzato all'avvio del server e i valori all'interno vengono utilizzati per configurare il kernel. La sintassi richiesta per configurare i parametri del kernel usando il file /etc/sysctl.conf segue la notazione component.parameter=value ad es. kernel.shmmax =33554432.
Sintassi
# vi /etc/sysctl.conf [component].[parameter]=[value]
Di seguito è riportato un file di esempio /etc/sysctl.conf:
# grep -v ^# /etc/sysctl.conf net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 ....
Oltre a utilizzare il metodo 'systctl -w' per modificare i parametri del kernel, è anche possibile modificare i parametri aggiungendoli al file /etc/sysctl.conf, quindi analizzando il file utilizzando l'utilità sysctl con '-p ‘ argomento es.:
# sysctl -n kernel.ctrl-alt-del 0
# echo "kernel.ctrl-alt-del=1" >> /etc/sysctl.conf
# sysctl -p kernel.ctrl-alt-del = 1
La modifica dei parametri del kernel aggiungendoli al file /etc/sysctl.conf non solo li imposta (sysctl -p), ma garantisce anche la persistenza dei valori modificati dopo il riavvio del server.
Impostazione dei parametri del kernel in modo persistente in CentOS/RHEL 7
L'approccio per impostare i parametri del kernel in CentOS/RHEL 7 è leggermente diverso rispetto alla versione precedente. Crea un nuovo file conf in /etc/sysctl.d/ directory. I nomi dei file assumono il formato /etc/sysctl.d/[nome].conf. I file nella directory /etc/sysctl.d/ vengono analizzati in ordine, quindi si consiglia di anteporre al nome del file un numero che indica l'ordine in cui si desidera che i file vengano analizzati. Ad esempio, /etc/sysctl.d/ 01-custom.conf:
# cat /etc/sysctl.d/01-custom.conf net.ipv4.ip_forward=1 net.ipv4.ip_local_port_range="1025 65535"
Per fare in modo che il sistema applichi immediatamente i valori in un file /etc/sysctl.d nuovo/aggiornato, eseguire sysctl -p [nomefile]:
# sysctl -p /etc/sysctl.d/01-custom.conf