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


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

De manera similar, puede usar 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 una modificación de una sola vez, o editar permanentemente un archivo de configuración.

Por lo tanto, puede habilitar o deshabilitar los 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.

Introduciendo el sistema de archivos / proc

La última especificación del Estándar de Jerarquía del Sistema de Archivos indica que /proc representa el método predeterminado para manejar el proceso y la información del sistema, así como también otra información del kernel y la memoria. En particular, /proc/sys es donde puede 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 núcleo que se use, pero es probable que encuentre los siguientes directorios en su interior. A su vez, cada uno de ellos contendrá otros subdirectorios donde se mantienen los valores para cada categoría de parámetro:

  1. dev: parameters for specific devices connected to the machine.
  2. fs: filesystem configuration (quotas and inodes, for example).
  3. kernel: kernel-specific configuration.
  4. net: network configuration.
  5. vm: use of the kernel’s virtual memory.

Para modificar los parámetros de tiempo de ejecución del kernel 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 de Kernel, simplemente haga lo siguiente:

# sysctl -a 

Como la salida del comando anterior constará de MUCHAS líneas, podemos usar una tubería seguida de menos para inspeccionarla con más cuidado:

# sysctl -a | less

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

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 núcleo " ve " esa unidad y utiliza ese nombre para referirse a ella.

En la siguiente sección explicaremos cómo cambiar otros parámetros de tiempo de ejecución del kernel "más importantes" en Linux.

Cómo cambiar o modificar los parámetros del tiempo de ejecución del kernel de Linux

Según lo que hemos explicado hasta ahora, es fácil ver que el nombre de un parámetro coincide con la estructura del directorio 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

Dicho esto, podemos ver el valor de un parámetro de kernel de Linux en particular usando 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

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

Otro método consiste en utilizar echo para sobrescribir el archivo asociado con el parámetro. En otras palabras, los siguientes métodos son equivalentes a deshabilitar la funcionalidad de reenvío de paquetes en nuestro sistema (que, por cierto, debería ser el valor predeterminado cuando se supone que una caja no pasa tráfico entre las 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 configuran con sysctl solo se aplicarán durante la sesión actual y desaparecerán cuando se reinicie el sistema.

Para establecer estos valores de forma permanente, edite /etc/sysctl.conf con los valores deseados. Por ejemplo, para desactivar 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 tiempo de ejecución del kernel son:

fs.file-max especifica el número máximo de identificadores de archivos que el kernel puede asignar para el sistema. Dependiendo del uso previsto de su sistema (web/base de datos/servidor 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 " Demasiados archivos abiertos " en el mejor de los casos, y puede impedir que el sistema operativo se inicie en el peor.

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

kernel.sysrq se usa para habilitar la tecla SysRq en su teclado (también conocida como la tecla de pantalla de impresión) para permitir que ciertas combinaciones de teclas invocen acciones de emergencia cuando el sistema se ha vuelto insensible

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

rojo

Cuando se establece en 1 , net.ipv4.icmp_echo_ignore_all ignorará las solicitudes de ping y las colocará en el nivel del kernel. Esto se muestra en la siguiente imagen: observe cómo se pierden las solicitudes de ping después de configurar este parámetro del kernel:

Una forma mejor y más fácil de configurar parámetros de tiempo de ejecución individuales es mediante .conf archivos dentro de /etc/sysctl.d , agrupándolos por categorías.

Por ejemplo, en lugar de configurar 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 elige utilizar 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 persistentes como no persistentes, utilizando sysctl , /etc/sysctl.conf y los archivos dentro de /etc/sysctl.d .

En los documentos 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.

¿Te ha resultado útil este artículo? Seguramente esperamos que lo hayas hecho. No dude en hacernos saber si tiene alguna pregunta o sugerencia para mejorar.