#!/usr/bin/env bash # Amplia la swap en caliente, sin reiniciar y sin tocar particiones. # # Por que: el portatil tiene 62 GB de RAM y 976 MiB de swap en la particion # nvme0n1p3. Ese reparto es de una maquina con 2 GB de RAM, no con 62. La swap # se llena (96% medido) y aunque hoy no cause nada —comprobado: si=4 so=0 KB/s, # 43 GB de RAM disponible, ninguna fuga— no queda colchon para cuando algo pida # memoria de golpe. # # Lo que NO arregla: nada de lo que se notaba. La pantalla que pedia contraseña # era el candado de JARVIS, no el sistema. Esto es higiene, no una reparacion. # # Se ejecuta con sudo y no hace falta reiniciar: `swapon` activa el fichero al # momento y la linea del fstab solo sirve para el proximo arranque. # # sudo bash ampliar_swap.sh [tamaño] # por defecto 16G set -euo pipefail TAM=${1:-16G} FICHERO=/swapfile [ "$(id -u)" -eq 0 ] || { echo "hay que ejecutarlo con sudo" >&2; exit 1; } if swapon --show=NAME --noheadings 2>/dev/null | grep -qx "$FICHERO"; then echo "$FICHERO ya esta activo; nada que hacer." swapon --show exit 0 fi echo "1. creando $FICHERO de $TAM" # fallocate va bien en ext4; en btrfs haria falta otra receta (chattr +C y # sin compresion), pero la raiz de esta maquina es ext4. fallocate -l "$TAM" "$FICHERO" 2>/dev/null || dd if=/dev/zero of="$FICHERO" bs=1M count=$((${TAM%G} * 1024)) status=none chmod 600 "$FICHERO" # solo root: si no, mkswap se niega y con razon echo "2. formateando" mkswap "$FICHERO" >/dev/null echo "3. activando (aqui ya esta funcionando, sin reiniciar)" swapon "$FICHERO" echo "4. dejandolo puesto para el proximo arranque" grep -q "^$FICHERO " /etc/fstab || echo "$FICHERO none swap sw 0 0" >> /etc/fstab # Con 62 GB de RAM no tiene sentido apartar paginas al disco con la alegria de # swappiness=60: se baja a 10 para que la swap sea un seguro y no una costumbre. echo "5. bajando swappiness de $(cat /proc/sys/vm/swappiness) a 10" sysctl -q vm.swappiness=10 echo "vm.swappiness=10" > /etc/sysctl.d/99-jarvis-swappiness.conf echo swapon --show free -h | head -3