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

De manera similar, puede usar la línea de comando en un sistema Linux en ejecución para alterar ciertos parámetros del kernel en tiempo de ejecución como una modificación única o permanentemente al editar 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.

Introducción al 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 la información del proceso y del sistema, así como otra información del núcleo y la memoria. Particularmente, /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 kernel que se utilice, 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 de cada categoría de parámetro:

  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 kernel.
  4. net: configuración de la red.
  5. vm: uso de la memoria virtual del kernel.

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

# sysctl -a 

Como la salida del comando anterior consistirá en MUCHAS líneas, podemos usar una canalización 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 /proc/sys:

Comprender el sistema de archivos /proc de Linux

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 sees esa unidad y usa ese nombre para referirse a ella.

En la siguiente sección explicaremos cómo cambiar otros more important Parámetros de tiempo de ejecución del núcleo en Linux.

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

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

Verifique los parámetros del kernel de Linux

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

Establecer o modificar los parámetros del kernel de Linux

Para establecer el valor de un parámetro del kernel también podemos usar sysctlpero usando el -w y seguido del 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 función de reenvío de paquetes en nuestro sistema (que, por cierto, debería ser el valor predeterminado cuando se supone que una casilla 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 núcleo que se establecen mediante sysctl solo se aplicará durante la sesión actual y desaparecerá cuando se reinicie el sistema.

Para establecer estos valores de forma permanente, edite /etc/sysctl.conf 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 de 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. Según el 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 Too many open files mensaje de error en el mejor de los casos, y puede evitar que el sistema operativo arranque 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 la Parte 13: Configurar y solucionar problemas del cargador de arranque Linux Grub) y edite /etc/sysctl.conf como se indicó anteriormente. Para establecer la misma restricción por usuario, consulte la Parte 14: Supervisar y establecer el uso del límite de procesos de Linux de esta serie.

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

El valor predeterminado (16) indica que el sistema respetará la Alt+SysRq+key y realice las acciones enumeradas en el sysrq.c documentación encontrada en kernel.org (donde key es una letra en el rango bz). Por ejemplo, Alt+SysRq+b reiniciará el sistema a la fuerza (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 el reinicio de su sistema host!

cuando se establece en 1, net.ipv4.icmp_echo_ignore_all ignorará las solicitudes de ping y las dejará en el nivel del núcleo. Esto se muestra en la imagen a continuación: observe cómo se pierden las solicitudes de ping después de configurar este parámetro del kernel:

Bloquear solicitudes de ping en Linux
Bloquear solicitudes de ping en Linux

Una forma mejor y más fácil de establecer parámetros de tiempo de ejecución individuales es usar .confestá dentro /etc/sysctl.dagrupándolos por categorías.

Por ejemplo, en lugar de establecer net.ipv4.ip_forward=0 y net.ipv4.icmp_echo_ignore_all=1 en /etc/sysctl.confpodemos crear un nuevo archivo llamado net.conf en el interior /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 ejecución del núcleo, tanto persistentes como no persistentes, utilizando sysctl, /etc/sysctl.confy archivos dentro /etc/sysctl.d.

En el sysctl docs 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 configurar a través de sysctl.

¿Encontraste útil este artículo? Seguramente esperamos que lo hayas hecho. No dude en hacérnoslo saber si tiene alguna pregunta o sugerencia para mejorar.