Quiero que mi computadora hiberne automáticamente cuando el UPS cambie a batería, por lo que necesito suficiente espacio de intercambio libre en cualquier momento. Pero si activo la partición de intercambio, incluso justo antes de la hibernación, puede estar ocupada por páginas de memoria.
La única solución que encontré es configurar /proc/sys/vm/swappiness
y 0
deshabilitar la paginación por completo. Pero no es la mejor opción.
¿Es posible especificar el uso máximo de intercambio en bytes?
Respuesta1
cat /proc/sys/vm/swappiness
0
Significa que se evitará el intercambio a menos que sea absolutamente necesario (la RAM esté llena). El intercambio toma valores entre 0-100
.
Para hacer que el cambio sea permanente, actualice /etc/sysctl.conf
y reinicie la máquina:
vm.swappiness = 10
No puede configurar el intercambio en bytes, pero swappines 10
significa que el intercambio se utilizará cuando la RAM esté llena al 90%. El tamaño del área de intercambio se proporciona durante la instalación del sistema; deberá cambiar el tamaño de las particiones para cambiar eso. La cantidad ocupada en el swap depende de los requisitos de asignación de RAM del software que estás ejecutando.
Respuesta2
La única solución que encontré es usar un swap.archivoque puedes crear en cualquier tamaño, digamos un par de gigabytes, y luego montarlo como tu área de intercambio.
head -c 2G /dev/urandom > your.filename
Puede modificar el código a continuación, lo que creará un archivo de intercambio cifrado utilizando una clave aleatoria. Por supuesto, necesitarás configurar la $filename
variable dondequiera que esté tu archivo de intercambio.
filename="????"
head -c 4k /dev/urandom | sha512sum | cryptsetup open --type plain $filename /dev/mapper/swap
cryptsetup status /dev/mapper/swap
mkswap /dev/mapper/swap
swapon /dev/mapper/swap
sysctl vm.swappiness=0
Editar: si desea que se pueda acceder al intercambio después del reinicio, simplemente reemplace la clave aleatoria con una clave conocida.