domingo, 17 de marzo de 2013

"Prescindir" de la partición Swap

Prescindir de la partición Swap (la llamada memoria de intercambio), es relativamente fácil. Si tengo que elegir entre el particionamiento de un disco (pongamos por caso en 5 GB) para tal efecto o la asignación del mismo espacio dinámico en un simple archivo que actuará de la misma forma en el disco del sistema. Yo en este caso me quedo con la segunda opción por razones obvias (aunque algunos no les parecerá tanto).

Podemos utilizar dos métodos para prescindir del particionamiento de la Swap y crear manualmente un archivo dinámico de asignación a tal efecto. El primer método no es muy difícil, y el segundo es pan comido.

Para realizar el primero, lo primero (valga la redundancia) es saber que tamaño queremos asignar en kiloByte a ese archivo.
Supongamos que queremos asignarle 2GB a la memoria de intercambio. Entonces realizaremos la conversión:

(2 GB * 1024 MB) * 1024 kb = 2097152 kiloByte

Table de equivalencias:
1 Byte = 8 bits
1 kiloByte ( kb ) = 1.024 Bytes
1 megaByte (Mb) = 1 024 kb = 1.048.576 Bytes
1 gigaByte (Gb) = 1 024 Mb = 1.073.741.824 Bytes
1 teraByte (Tb) = 1 024 Gb = 1.099.511.627.776 Bytes
1 petaByte (Pb) = 1 024 Tb = 1.125.899.906.842.624 Bytes 

Método de conversión:
De Bits a Bytes, se divide entre 8
De Bytes a KB, se divide entre 1024
De KB a MB, se divide entre 1024
De MB a GB, se divide entre 1024
De GB a TB, se divide entre 1024 

Lógicamente, si lo queremos es hacerlo a la inversa, entonces tendremos que multiplicar.

Sigamos...
Para averiguar la Swap activa corremos este comando:
  • cat /proc/swaps
Tambien podemos utilizar para este menester este otro comando:
  • free
Ahora desactivamos la Swap activa desde el terminal con el siguiente comando:
  • sudo swapoff -a
Podemos mirar entonces en la pestaña Recursos del Monitor del Sistema para comprobar que ha desaparecido nuestra memoria Swap.


Nota: si quisiéramos volverla a activar pondríamos el siguiente: sudo swapon -a

Bueno sabiendo ya el tamaño que queremos darle, lo siguiente es asignar dicho espacio en un archivo a tal efecto. El nombre de ese archivo puede ser el que se quiera (al igual que la ruta) pero utilizaremos swapfl y la ubicación raíz, para mayor compresión e identificación. Para conseguir esto pondremos lo siguiente en un termial:
  • sudo dd if=/dev/zero of=/swapfl bs=1024 count=2097152
Como se puede apreciar el valor count=2097152 es la conversión de 2GB a KB que realizamos anteriormente.

Seguidamente construimos el archivo swapfl a tal efecto así:
  • sudo mkswap /swapfl
Por último activamos la Swap de este otro modo:
  • sudo swapon /swapfl
Podemos mirar nuevamente en la pestaña Recursos del Monitor del Sistema para comprobar que ha vuelto aparecer nuestra memoria Swap.

Si queremos entonces mantener esta situación, es decir prescindir de la Swap física, o más concretamente recuperar el espacio particionado hasta ahora a tal efecto y trabajar desde este momento con este sistema dinámico de Swap, no nos queda otra que editar el archivo:
  • sudo pluma /etc/fstab 
Buscamos la línea que haga referencia a la Swap, la cual por su parte hace referencia a la partición asignada hasta este momento. Ejemplo:

UUID=34f312e4-5ad2-43b0-8209-5ceac911bd5c    swap    swap    sw    0    0

La eliminamos o comentamos: 

#UUID=34f312e4-5ad2-43b0-8209-5ceac911bd5c    swap    swap    sw    0    0

Y añadimos esta otra:
/swapfl swap swap sw 0 0

Pues ya está. A partir de este momento la Swap estará ubicada en el archivo swap y funcionará tan bien de forma dinámica como con la Swap ubicada en una particion a parte.

Queda por explicar cómo recuperar ahora el espacio que hay particionado y que pertenecía a la Swap.
El proceder es bien sencillo. Arrancamos el sistema con cualquier Live CD, abrimos Gparted seleccionamos la partición a la que teníamos asignada la Swap y la eliminamos. Luego podemos redimensionar cualquiera de las particiones inmediatamente contiguas a ésta, para que adquiera ese espacio ahora sin utilizar. Hay que saber, que el redimensionamiento de una partición no es causa de perdida de datos.

El presente artículo más bien ha venido colación, a causa de un comentario que me hizo el usuario es3a2. Éste me comentó que había un proyecto a tal efecto (sustitución de la partición Swap), y ciertamente yo no lo conocía (¡se me deben estar escapando tantas cosas!) pero no tardé en conocerlo luego de saber de su existencia. Gracias es3a2 por la información.

La verdad que lo primero que me sorprendió es que no es un proyecto nada reciente del que yo no tuviera ni idea. A decir verdad , la Swap tampoco es algo de lo que me he preocupado mucho. Tampoco es que este proyecto ofrezca algo revolucionario, pero lo que si hace con tan sólo su instalación es ahorrarnos todos los pasos anteriormente explicados.
Por esto he querido empezar (por la que ya muchos conocemos) la forma manual de hacerlo. Para luego decir que gracias al proyecto Dphys-Swapfiley con tan solo la instalación de un paquete, realizará automáticamente y sin mediar nuestra intervención la creación del archivo dinámico Swap optimo.

Este paquete se encuentra en los repositorios.  Y es el segundo método de creación de una Swap dinámica. Para su instalación:
  • sudo apt-get install dphys-swapfile
Tengo que decir que (para aquellos que quieran aventurarse) hay una versión nueva en la rama Experimental de Debian. Yo es la que estoy utilizando.
El paquete anterior se encarga de instalar todo lo necesario para asignar, crear y activar la la memoria de intercambio dinámica.
Como digo, esta utilidad calcula por nosotros automáticamente en el momento de su instalación todo lo necesario para la creación del archivo Swap. Pero si queremos modificar algunos parámetros, como son, tamaño de asignación, ubicación, nombre, etc editaremos para este menester el siguiente archivo:
  • sudo pluma /sbin/dphys-swapfile
Las opciones más destacables y modificables de este archivo son la siguientes:
Ubicación del archivo de intercambio, esta es la opción predeterminada:
CONF_SWAPFILE=/var/swap 
Nota: En el caso de utilizar el programa Systemback para realizar puntos de restauración y Sistemas Live, es recomendable modificar esta ruta, como por ejemplo utilizar esta otra /swap ya que de lo contrario SystemBack tendrá problema para eliminar de su carpeta temporal de trabajo el archivo /var/swap.

Establecer el tamaño de valor absoluto, dejar vacía (por defecto), de este modo utilizará el valor de cálculo:
CONF_SWAPSIZE=

Establecer el tamaño del valor de cálculo, este tamaño es tantas veces la memoria RAM, y se adapta dinámicamente:
CONF_SWAPFACTOR=2

Limita el tamaño absoluto. Este límite máximo se puede configurar sin restricción alguna, pero hay que tener mucho cuidado en este caso con las particiones llenas:
CONF_MAXSWAP=2048


Algunos parámetros interesantes si utilizamos dphys-swapfile
Si por ejemplo queremos modificar los valores de archivo utilizado a tal efecto. Lo primeroque tenemos que hacer una vez modificado lo que se requiera es parar la memoria de intercambio que se está ejecutando;
  • sudo dphys-swapfile swapoff
o
  • sudo swapoff -a
Para que se activen los nuevos cambio:
  • sudo /etc/init.d/dphys-swapfile start
Si lo que queremos es parar momentáneamente la Swap:
  • sudo /etc/init.d/dphys-swapfile stop
Para volver a reanudar su funcionamiento
  • sudo dphys-swapfile swapon
Otra opción que tenemos que tener en consideración se utilice el método que se utilice, es qué uso (prioridad) de la memoria de intercambio queremos que se haga por parte del sistema.Ésta vine regulada por un porcentaje que va de 0 a 100.
- 0 (no se hará uso alguno de la memoria de intercambio)
- 100 (se hará el mayor uso posible de la memoria de intercambio)
El valor por defecto es 60
Para saber que valor tienes asignado tan sólo tienes que ejecutar este comando en un terminal:
  • cat /proc/sys/vm/swappiness
Para modificar el valor en vigor este otro este otro comando:
  • sudo sysctl -w vm.swappiness=(valor)
Ejemplo:
sudo sysctl -w vm.swappiness=90

Bueno pues ya estamos concluyendo.
Si el primer método te parece difícil, ahora no tienes escusa para decidirte a probar el segundo. Como puedes apreciar, utilices el particionado, el primero, o el segundo, el funcionamiento de la Swap es practicamente el mismo:


En cualquier caso tienes que tener en cuenta que la recuperación del espacio particionado que tenías asignado a la memoria de intercambio, tendrás que recuperarlo manualmente como se explicó en el primer método.

Más información:


No hay comentarios:

Publicar un comentario