Cómo cambiar los parámetros de tiempo de ejecución del kernel de forma persistente y no persistente

En la Parte 13 de esta serie LFCS (Linux Foundation Certified Sysadmin) explicamos cómo usar GRUB para modificar el comportamiento del sistema al pasar opciones al kernel para el proceso de arranque en curso.

De manera similar, puedes utilizar la línea de comandos en un sistema Linux en ejecución para alterar ciertos parámetros del kernel en tiempo de ejecución como modificación única, o permanentemente editando un archivo de configuración.

Por lo tanto, se te permite habilitar o deshabilitar parámetros del kernel sobre la marcha sin mucha dificultad cuando sea necesario debido a un cambio requerido en la forma en que se espera que funcione el sistema.

Introducción al Sistema de Archivos /proc

La última especificación del Estándar de Jerarquía de Sistemas de Archivos indica que /proc representa el método predeterminado para manejar información de procesos y sistemas, así como otra información del kernel y de la memoria. En particular, /proc/sys es donde puedes encontrar toda la información sobre dispositivos, controladores y algunas características del kernel.

La estructura interna real de /proc/sys depende en gran medida del kernel que se esté utilizando, pero es probable que encuentres los siguientes directorios dentro. A su vez, cada uno de ellos contendrá otros subdirectorios donde se mantienen los valores para cada categoría de parámetros:

  1. dev: parámetros para dispositivos específicos conectados a la máquina.
  2. fs: configuración del sistema de archivos (cuotas e inodos, por ejemplo).
  3. kernel: configuración específica del núcleo.
  4. net: configuración de red.
  5. vm: uso de la memoria virtual del núcleo.

Para modificar los parámetros del kernel en tiempo de ejecución, usaremos el comando sysctl. El número exacto de parámetros que se pueden modificar se puede ver con:

# sysctl -a | wc -l

Si desea ver la lista completa de parámetros del kernel, simplemente haga:

# sysctl -a 

Dado que la salida del comando anterior consistirá en MUCHAS líneas, podemos usar un canal seguido de less para inspeccionarlo más cuidadosamente:

# sysctl -a | less

Echemos un vistazo a las primeras líneas. Tenga en cuenta que los primeros caracteres en cada línea coinciden con los nombres de los directorios dentro de /proc/sys:

Understand Linux /proc Filesystem

Por ejemplo, la línea resaltada:

dev.cdrom.info = drive name:        	sr0

indica que sr0 es un alias para la unidad óptica. En otras palabras, así es como el kernel “ve” esa unidad y usa ese nombre para referirse a ella.

En la siguiente sección explicaremos cómo cambiar otros parámetros del kernel “más importantes” en Linux.

Cómo Cambiar o Modificar Parámetros del Kernel de Linux

Basándonos en lo que hemos explicado hasta ahora, es fácil ver que el nombre de un parámetro coincide con la estructura de directorios dentro de /proc/sys donde se puede encontrar.

Por ejemplo:

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

Verificar Parámetros del Kernel de Linux

Dicho esto, podemos ver el valor de un parámetro particular del kernel de Linux utilizando tanto sysctl seguido del nombre del parámetro o leyendo el archivo asociado:

# 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

Configuración o Modificación de Parámetros del Kernel de Linux

Para establecer el valor de un parámetro del kernel también podemos usar sysctl, pero usando la opción -w seguido del nombre del parámetro, el signo igual y el valor deseado.

Otro método consiste en usar echo para sobrescribir el archivo asociado con el parámetro. En otras palabras, los siguientes métodos son equivalentes para deshabilitar la funcionalidad de reenvío de paquetes en nuestro sistema (lo cual, por cierto, debería ser el valor predeterminado cuando un equipo no debe pasar tráfico entre redes):

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

Es importante tener en cuenta que los parámetros del kernel que se establecen usando sysctl solo se aplicarán durante la sesión actual y desaparecerán cuando se reinicie el sistema.

Para establecer estos valores permanentemente, edite /etc/sysctl.conf con los valores deseados. Por ejemplo, para deshabilitar el reenvío de paquetes en /etc/sysctl.conf asegúrese de que esta línea aparezca en el archivo:

net.ipv4.ip_forward=0

Luego ejecute el siguiente comando para aplicar los cambios a la configuración en ejecución.

# sysctl -p

Otros ejemplos de parámetros importantes del kernel en tiempo de ejecución son:

fs.file-max especifica el número máximo de identificadores de archivo que el kernel puede asignar para el sistema. Dependiendo del uso previsto de su sistema (servidor web / base de datos / de archivos, por nombrar algunos ejemplos), es posible que desee cambiar este valor para satisfacer las necesidades del sistema.

De lo contrario, recibirá un mensaje de error de “Demasiados archivos abiertos” en el mejor de los casos, y puede evitar que el sistema operativo se inicie en el peor de los casos.

Si debido a un error inocente se encuentra en esta última situación, inicie en modo de usuario único (como se explica en Parte 13 – Configurar y solucionar problemas del cargador de arranque Linux Grub) y edite /etc/sysctl.conf según se indicó anteriormente. Para establecer la misma restricción por usuario, consulte Parte 14 – Monitorizar y establecer el uso límite de procesos de Linux de esta serie.

kernel.sysrq se utiliza para habilitar la tecla SysRq en su teclado (también conocida como tecla de captura de pantalla) para permitir que ciertas combinaciones de teclas invoquen acciones de emergencia cuando el sistema no responde.

El valor predeterminado (16) indica que el sistema respetará la combinación Alt+SysRq+tecla y realizará las acciones enumeradas en la documentación de sysrq.c que se encuentra en kernel.org (donde la tecla es una letra en el rango de b a z). Por ejemplo, Alt+SysRq+b reiniciará el sistema de forma forzada (use esto como último recurso si su servidor no responde).

¡Advertencia! No intente presionar esta combinación de teclas en una máquina virtual porque puede forzar que su sistema anfitrión se reinicie!

Cuando se establece en 1, net.ipv4.icmp_echo_ignore_all ignorará las solicitudes de ping y las descartará a nivel de kernel. Esto se muestra en la imagen a continuación, observe cómo las solicitudes de ping se pierden después de establecer este parámetro de 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.

Por ejemplo, en lugar de establecer net.ipv4.ip_forward=0 y net.ipv4.icmp_echo_ignore_all=1 en /etc/sysctl.conf, podemos crear un nuevo archivo llamado net.conf dentro de /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

Si opta por usar este enfoque, no olvide eliminar esas mismas líneas de /etc/sysctl.conf.

Resumen

En este artículo hemos explicado cómo modificar los parámetros de tiempo de ejecución del kernel, tanto de forma persistente como no persistente, usando sysctl, /etc/sysctl.conf y archivos dentro de /etc/sysctl.d.

En la documentación de sysctl puede encontrar más información sobre el significado de más variables. Esos archivos representan la fuente de documentación más completa sobre los parámetros que se pueden establecer a través de sysctl.

¿Encontró útil este artículo? Con seguridad esperamos que sí. No dude en hacernos saber si tiene alguna pregunta o sugerencia para mejorar.

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