La definición de requisitos de una máquina virtual puede ser una tarea tan sencilla de hacer como susceptible de modificaciones posteriores. En este caso, vamos a ver como ampliar la swap a una máquina virtual sin reiniciar el sistema operativo.
SWAP: Un poco de literatura
Si has llegado a este artículo es porque sabes que es la swap o memoria de intercambio. Pero por si acaso hago un pequeño resumen.
Al final, la memoria RAM física de un ordenador es finita. Para salvar este límite los sistemas operativos crean en disco un segundo nivel de memoria llamado de intercambio o swap.
Evidentemente este nivel es mas lento, pero te permite pasar programas desde la RAM a la swap cuando no estás haciendo uso de ellos, si necesitas memoria para otros programas que si está usando. Cuando vuelvas a necesitar algo que está en swap tu sistema operativo volverá a subirlo a RAM y listo.
La swap no es más que un pequeño truco que usan los sistemas operativos para disponer de más memoria. Normalmente está memoria swap debería usarse solo cuando tú sistema está falto de RAM. Aunque esto no es siempre así…
Ampliando la swap en caliente
Vamos a partir de una máquina virtual con 4 GB de swap. Estos 4 GB están ubicados en una partición LVM actualmente. En mi caso, no quiero ampliar por problemas de rendimiento sino por requisitos en la instalación de un software. Además, esta es solo una forma de las múltiples que hay para conseguir este objetivo.
Comprobación de configuración actual swap
En primer lugar, lo mejor es comprobar la configuración actual de swap con el comando swapon -s
[root@linux-mv ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 4194300 0 -2
Preparar el nuevo espacio
Lo siguiente es preparar el nuevo espacio para alojar la nueva memoria de intercambio. En mi caso, he añadido un nuevo disco virtual a mi máquina virtual de VirtualBox que ha sido reconocido como /dev/sdc
. (El procedimiento de añadir un nuevo disco virtual y descubrirlo en la mv lo puedes encontrar en múltiples sitios de Internet.)
Una vez asignado el nuevo disco, hay que prepararlo para usarlo como memoria swap.
Lo primero será hacer una partición LVM con fdisk
usando todo el disco, aunque el tamaño es a gusto del consumidor.
[root@linux-vm ~]# fdisk /dev/sdc
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x190a4313.
The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.
Command (m for help): p
Disk /dev/sdc: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: dos
Disk identifier: 0x190a4313
Device Boot Start End Blocks Id System
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-20971519, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519):
Using default value 20971519
Partition 1 of type Linux and of size 10 GiB is set
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
Con el comando partprobe
hacemos que el kernel actualice la información de particiones y tenga en cuenta la nueva. Los mensajes del dispositivo /dev/sr0
pueden obviarse.
[root@linux-vm ~]# partprobe
Warning: Unable to open /dev/sr0 read-write (Read-only file system). /dev/sr0 has been opened read-only.
Ahora con lvdiskscan
comprobaremos que efectivamente nuestro sistema reconoce la nueva partición y está lista para ser usada con LVM.
[root@linux-vm ~]# lvmdiskscan
/dev/vg_so/lv_raiz [ <10.00 GiB]
/dev/sda1 [ 512.00 MiB]
/dev/vg_so/lv_swap [ 4.00 GiB]
/dev/sda2 [ <40.49 GiB] LVM physical volume
/dev/vg_almacen/lv_almacen [ <20.00 GiB]
/dev/vg_so/lv_home [ 6.00 GiB]
/dev/vg_so/lv_opt [ 6.00 GiB]
/dev/vg_so/lv_tmp [ 5.00 GiB]
/dev/vg_so/lv_var [ 8.00 GiB]
/dev/sdb [ 20.00 GiB] LVM physical volume
/dev/sdc1 [ <10.00 GiB]
7 disks
2 partitions
1 LVM physical volume whole disk
1 LVM physical volume
En este punto ya podemos pasar a crear todos los elementos de LVM donde alojaremos nuestra nueva swap. Lo primero es crear el Physical Volume sobre nuestra partición con pvcreate
y comprobarlo con pvs
.
[root@linux-vm ~]# pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created.
[root@linux-vm ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 vg_so lvm2 a-- 40.49g 4.00m
/dev/sdb vg_almacen lvm2 a-- <20.00g 0
/dev/sdc1 lvm2 --- <10.00g <10.00g
Posteriormente, añadiremos el PV creado al Volume Group existente para el sistema operativo donde tenemos actualmente el volumen de swap. Si lo prefieres puedes crear un VG nuevo solo para la nueva swap. Pero en este caso usaremos el existente para el sistema operativo. Así que primero se ampliará el VG con vgextend
y después se comprobará la ampliación con vgs
.
[root@linux-vm ~]# vgextend vg_so /dev/sdc1
Volume group "vg_so" successfully extended
[root@linux-vm ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg_almacen 1 1 0 wz--n- <20.00g 0
vg_so 2 6 0 wz--n- <40.49g 10.00g
Deshabilitar swap para redimensionar
En este ejemplo veremos cómo ampliar el volumen de swap actual. Se podría generar una nueva swap2 y tener ambas activadas a la vez, o descartar la antigua y solo usar la nueva. Pero, en este caso lo que haremos será ampliar el espacio de intercambio anterior con el espacio del nuevo disco para acabar con una única memoria swap con el total del espacio.
Para esto, lo primero ha hacer es deshabilitar las swap actual para poder redimensionarla. Al hacer esta operación todo lo que está en swap pasará a memoria RAM. Así que es recomendable realizar este paso cuando el consumo de memoria RAM no esté en su punto más elevado. En cualquier caso, deberías asegurarte antes de que tienes suficiente memoria con free -m
por ejemplo.
[root@linux-vm ~]# swapoff -v /dev/vg_so/lv_swap
swapoff /dev/vg_so/lv_swap
Para comprobar que efectivamente se ha deshabilitado se puede hacer así:
[root@linux-vm ~]# swapon -s
Redimensionar swap
Una vez que nuestra memoria de intercambio está inactiva, podemos proceder a ampliar el volumen lógico con el espacio del nuevo disco y su nueva partición /dev/sdc1
con lvresize
. Aunque antes y después comprobaremos el tamaño del volumen de swap con lvs
para ir revisando como se ejecuta la ampliación.
La ampliación la vamos a hacer añadiendo 8 GB. Pero puedes hacerla por el tamaño total si obvias el +8G
o simplemente por la cantidad que desees, siempre que tengas espacio disponible en el VG.
[root@linux-vm ~]# lvs /dev/vg_so/lv_swap
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_swap vg_so -wi-a----- 4.00g
[root@linux-vm ~]# lvresize /dev/vg_so/lv_swap -L +8G /dev/sdc1
Size of logical volume vg_so/lv_swap changed from 4.00 GiB (1024 extents) to 12.00 GiB (3072 extents).
Logical volume vg_so/lv_swap successfully resized.
[root@linux-vm ~]# lvs /dev/vg_so/lv_swap
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_swap vg_so -wi-a----- 12.00g
[root@linux-vm ~]# mkswap /dev/vg_so/lv_swap
mkswap: /dev/vg_so/lv_swap: warning: wiping old swap signature.
Setting up swapspace version 1, size = 12582908 KiB
no label, UUID=6d710bbb-6efb-586e-955c-235e83ef7d29
Activación de swap ampliada
Como ya tenemos nuestra memoria swap ampliada a 12 GB, solo queda reactivarla con swapon
. En el ejemplo usamos parametrización para activar todas las disponibles, pero se podría modificar el comando para activar una swap en específico si tuvieras mas de una.
[root@linux-vm ~]# swapon -va
swapon /dev/mapper/vg_so-lv_swap
swapon: /dev/mapper/vg_so-lv_swap: found swap signature: version 1, page-size 4, same byte order
swapon: /dev/mapper/vg_so-lv_swap: pagesize=4096, swapsize=12884901888, devsize=12884901888
Para finalizar, ya solo queda comprobar que la swap ampliada esta activa y tiene el nuevo tamaño con swapon -s
. Así como revisar el estado de la memoria con free
.
[root@linux-vm ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 12582908 0 -2
[root@linux-vm ~]# free -m
total used free shared buff/cache available
Mem: 10005 4819 4993 8 192 3496
Swap: 12287 0 12287
Enlaces de interés
Artículo anterior Artículo siguiente