Modificar la swap con bash script

Modificar la Swap con bash script en sistemas Linux – Uso y manejo.

Cuando instalamos una distribución Linux, como norma general se habilita una partición en el disco duro para la memoria Swap, también conocida como espacio de intercambio (si no es tu caso te recomiendo crearla manualmente). Esta memoria es específica, para no saturar la memoria RAM física del sistema.

Cuando los procesos en ejecución de Linux llenan la RAM hasta un valor predeterminado, nuestro sistema recurre a esta partición del disco (Swap) buscando más espacio. Esto está pensado para no saturar la RAM y, que nuestro sistema no sufra interrupciones o cuellos de botella hasta que logre liberar carga de la RAM.

Ver, liberar o configurar los valores de la Swap mediante comandos es tarea sencilla, pero te imaginas un script bash que lo haga todo por nosotros. Mi paisano Javier de Weblinus lo hace realidad y, como buen linuxero que es… lo ofrece a SoloLinux.es para masificar su difusión. Muchas gracias Javier, realmente interesante este script bash.

Bash Script

Bash Script

 

Modificar la Swap con bash script

El interesante script que hoy proponemos, nos ofrece un menú desde el cual podemos realizar importantes tareas relacionadas con la Swap. Pero antes de comenzar, debes recordar que el swappiness es un valor que nos permite ajustar el equilibrio entre la RAM y la Swap.

Presentamos el menú del script:

  1. Ver el estado de la RAM y la Swap
  2. Imprimir el swappiness actual
  3. Deshabilitar la Swap
  4. Habilitar la Swap
  5. Mover datos de la Swap a la RAM
  6. Modificar el swappiness para uso actual
  7. Modificar el swappiness para uso permanente

Imagen de ejemplo.

Menu del bash script

Menú del bash script

 

Como ves en la imagen de ejemplo, su utilidad está fuera de toda duda. Así que no perdamos más tiempo, creamos el script.

sudo nano scriptswap.sh

Copia y pega el código creado por Javier.

#!/bin/bash

# scriptswap.sh
# Script para gestionar el uso de la memoria swap del sistema.
# Creado por Francisco Javier Izquierdo Hidalgo.
# Licencia Pública General de GNU v2.
# Se distribuye SIN NINGUNA GARANTÍA, tampoco la implícita de -
# - COMERCIABILIDAD o APTITUD PARA UN PROPÓSITO EN PARTICULAR.
# Más detalles en GNU General Public License.

# Variables
estado=$(free -h)
valor=$(cat /proc/sys/vm/swappiness)

# Funciones

# Indicación de pausa de visualizacion
function pause(){
 local message="$@"
 echo
 [ -z $message ] && message="Presiona [Enter] para continuar..."
 read -p "$message" readEnterKey
}

# Mostrar un menu en pantalla
function show_menu(){
    date
    echo "------------------------------------------------------"
    echo "                   Menu Principal                     "
    echo "------------------------------------------------------"
    echo
    echo "1. Ver estado de uso de la RAM y Swap"
    echo "2. Ver valor de swapiness actual"
    echo "3. Deshabilitar el uso de la swap"
    echo "4. Habilitar el uso de la swap"
    echo "5. Trasladar datos de la swap a la RAM"
    echo "6. Modificar el valor de swappiness para la sesión"
    echo "7. Modificar valor de swapiness de forma persistente"
    echo "8. Salir"
}

# Mostrar mensaje de cabecera
function write_header(){
 local h="$@"
 echo "---------------------------------------------------------------"
 echo "     ${h}"
 echo "---------------------------------------------------------------"
}

# Ver estado de uso de RAM y Swap
function uso_memoria(){
write_header " Información del  uso de la memoria"
 echo "El uso de RAM y swap es:"
 echo
 echo "$estado"
 pause
}

# Ver valor de swapiness actual
function val_swappiness(){
write_header " Valor actual de swappiness"
 echo "El valor actual de swappines es:"
 cat /proc/sys/vm/swappiness
 pause
}

# Deshabilitar el uso de la swap
function swap_off(){
write_header " Deshabilitando el uso de la memoria swap"
 sudo swapoff -a
 sleep 3
 echo
 echo "Deshabilitado el uso de la swap"
uso_memoria
}

# Habilitar el uso de la swap
function swap_up(){
write_header " Habilitando el uso de la memoria swap"
 sudo swapon -a
 sleep 3
 echo
 echo "Habilitado el uso de la swap"
uso_memoria
}

# Trasladar datos de la Swap a RAM
function swap_on(){
write_header " Trasladando los datos de la swap a la RAM"
 sudo swapoff -a ; sudo swapon -a
 sleep 3
 echo
 echo "Trasladados los datos de la swap a la RAM con éxito"
 uso_memoria
}

# Modificar el valor swapiness en la sesión actual
function swappiness_ses(){
echo "                                                                   "
write_header "Vamos a modificar el valor swappiness para la sesión actual"
 echo "Cuanto menor sea este valor, más tardará el sistema en usar la swap"
 echo "Introduce el valor que te interese (entre 0 y 100)"
read n
 numero=$(echo $n | grep "^[0-9]*$")
        if [ $numero ]
   then
          sudo sysctl vm.swappiness=$n
          echo "El nuevo valor de swapiness es :"
    cat /proc/sys/vm/swappiness
        else
          echo "El valor debe ser numérico y estar en el rango 0-100"
          exit 1
        fi
 pause
}

# Modificar el valor swapiness de forma persistente
function swappiness_per(){
write_header " Vamos a modificar el valor swapiness de forma persistente"
 echo "Se requieren privilegios de sudo y los cambios se aplicarán tras un reinicio"
 echo "Cuanto mayor sea este valor, más tardará el sistema en usar la swap"
 echo "Introduce el valor que te interese (entre 0 y 100)"
read n
 numero=$(echo $n | grep "^[0-9]*$")
  if [ $numero ]
    then
           sudo write "vm.swappiness=$n"  >> /etc/sysctl.conf
           val_swappiness
        else
           echo "El valor debe ser numérico y estar en el rango 0-100"
        fi
# pause
}

# Obtener entrada por teclado y elegir opción
function read_input(){
 local c
 echo
 read -p "Elige una opción [ 1 - 8 ] " c
 case $c in
  1) uso_memoria ;;
  2) val_swappiness ;;
  3) swap_off  ;;
  4) swap_up ;;
  5) swap_on ;;
  6) swappiness_ses ;;
  7) swappiness_per ;;
  8) echo ; echo "    FINALIZADO EL PROGRAMA." ; echo ; echo " Vigila la estabilidad del sistema!" ; exit 0 ;;
  *)
   echo "Seleccione una sola opción entre 1 to 8."
   pause
 esac
}

# Programa principal
while true
do
 clear
  show_menu # mostrar memu
  read_input  # esperar la entrada del usuario
done

Una vez lo tengas listo, guarda el archivo y cierra el editor.

 

Puedes ejecutar el script con el siguiente comando.

sudo bash scriptswap.sh

Si lo prefieres, también puedes concederle permisos de ejecución y, lanzar la herramienta.

sudo chmod +x scriptswap.sh

./scriptswap.sh

Vemos un par de imágenes de ejemplo, para que te hagas una idea de lo sencillo que es usar el script. En la primera imagen vemos el valor actual Swappiness.

Valor actual Swappiness

Valor actual Swappiness

 

Nosotros lo bajamos a 20, pero solo para la sesión actual. Al reiniciar el sistema, el valor volverá a su estado predeterminado (en este caso 60).

Modificar el Swappiness

Modificar el Swappiness

 

Canales de Telegram: Canal SoloLinux – Canal SoloWordpress

Espero que este artículo te sea de utilidad, puedes ayudarnos a mantener el servidor con una donación (paypal), o también colaborar con el simple gesto de compartir nuestros artículos en tu sitio web, blog, foro o redes sociales.

Chat de SoloLinux en Telegram

 

4 Comentarios

  1. Axarlinux
    25/08/2021
    • Sergio G.B.
      25/08/2021
  2. Pier Gotta
    25/08/2021
    • Sergio G.B.
      25/08/2021

Agregar comentario

1 logo sololinux

Suscríbete a SoloLinux

Recibe todos los nuevos artículos es tu correo electrónico

You have Successfully Subscribed!

Ir al contenido