De mi Manual de Proxmox VE 4.x: Incremento del espacio en disco en el almacenamiento local interno del hipervisor Proxmox VE

Saludos nuevamente.

En este post voy a describir el proceso de incremento del espacio libre en el almacenamiento local de un nodo Proxmox VE. Puede que para muchos resulte un poco complejo, pero cuando se domina dicho proceso, puede resultar muy fácil su ejecución. Ah, claro está que también se debe tener cierto dominio del trabajo con LVM (particiones , volúmenes físicos, grupo de volúmenes y volúmenes lógicos).

Espero les resulte interesante:

Incremento del espacio en disco en el almacenamiento local interno del hipervisor Proxmox VE

En un epígrafe anterior hable sobre el tema de la personalización lógica del tamaño del disco duro donde se alojaría el sistema operativo de Proxmox VE con toda su estructura, una facilidad que se incluyó desde la versión 3.4.

Hablé, además, del hecho de que Proxmox VE 4.0 está basado en Debian 8.0 y del nuevo esquema de particionado que usa.

Ahora bien, puede darse el caso en que se agote el espacio libre del almacenamiento local del hipervisor por varias causas: muchos respaldos de máquinas virtuales, una gran cantidad de ellas y/o contenedores, plantillas de máquinas virtuales y/o contenedores, imágenes de CD/DVD de instalación de múltiples sistemas operativos, etc.

A muchos administradores les ha sucedido esto (yo incluido), pero si tenemos disponibilidad de discos duros para añadir al hipervisor Proxmox VE, afortunadamente, tendremos la solución del problema. Con una serie de comandos propios de GNU/Linux (trabajo con LVM y particiones ext3/ext4), mucha paciencia y concentración obtendremos el resultado deseado, que es el incremento del tamaño del espacio libre en el almacenamiento local del hipervisor.

Esquema de particionado de Proxmox VE

Como también mencioné en uno de los epígrafes anteriores, la estructura de particionado de Proxmox VE consiste en cuatro particiones: una con sistema de archivos del tipo ext4 donde se aloja la información del cargador de arranque y que se monta en el subdirectorio /boot, y una partición de tipo LVM donde se aloja el sistema operativo de Proxmox VE en tres volúmenes lógicos: pve-root, pve-swap y pve-data.

Más detalladamente:

  • pve-root: En este volumen lógico se guarda todo el sistema operativo subyacente de Proxmox VE más todo el aparataje propio del funcionamiento de las herramientas que usa dicho hipervisor para realizar las labores de virtualización

 

Montado en la partición / (raíz) y donde se pueden encontrar archivos de configuración de GNU/Linux y servicios, datos adicionales, cuentas de usuario, archivos de registro de eventos (logs), aplicaciones y sus librerías de enlace dinámico asociadas, etc.

  • pve-swap: Este volumen lógico se utiliza como memoria de intercambio del sistema operativo GNU/Linux subyacente

 

Normalmente cuando la cantidad de memoria RAM física es pequeña, Proxmox VE establece como mínimo para la memoria swap el doble de dicha cantidad. Ahora bien, cuando la RAM supera los 4 GB, le asigna la misma cantidad.

NOTA: Estos valores son con los que he trabajado hasta el momento, por lo tanto, esto que pongo aquí es basado en mi experiencia con diferentes tipos de servidores y estaciones de trabajo adaptadas como servidores.

  • pve-data: En este volumen lógico se guarda todo lo referente a las máquinas virtuales y contenedores, es donde está ubicado el almacenamiento local del hipervisor

 

Montado en la partición /var/lib/vz. Desde el punto de vista de la funcionalidad propia de Proxmox VE, esta es la partición más importante. Es donde se almacenan varios elementos vitales, los cuales son:

  • Archivos de respaldo de máquinas virtuales y/o contenedores
  • Archivos de imágenes de discos duros de las máquinas virtuales y/o contenedores
  • Plantillas de máquinas virtuales y/o contenedores, así como imágenes de CD/DVD de instalación de sistemas operativos

 

Esta es la partición más propensa a llenarse debido al gran espacio que ocupan varios de estos archivos antes mencionados.

La ventaja de esta estructura es, precisamente, su sencillez dado que uno se puede concentrar en lo que realmente le interesa, en este caso, el tercer volumen lógico: pve-data.

Aumentando el espacio libre del almacenamiento local del hipervisor Proxmox VE

He aquí el plato fuerte de este epígrafe, donde explicaré lo más detalladamente posible los pasos a seguir para aumentar el tamaño del espacio libre del almacenamiento local del hipervisor Proxmox VE. Puede que inicialmente este proceso sea tedioso, pero una vez uno logra dominarlo, se vuelve algo rutinario

Como ejemplo tomaré el mismo hipervisor con el que he hecho las pruebas. El mismo tiene un disco de 160 GB y le añadiré otro de 320 GB para describir el proceso que viene a continuación.

Los pasos a seguir para realizar este proceso son los siguientes:

1.- Insertar el nuevo disco duro

NOTA IMPORTANTE: Por favor, que a nadie se le ocurra hacer esto con el hipervisor encendido creyendo en la onda esa de añadir o quitar el disco duro en caliente.

Primero que todo, cerciorarse que el equipo esté completamente apagado (yo que soy paranoico, apago el interruptor de la fuente y quito también el cable de la corriente, y luego descargo cualquier corriente estática que tenga en el cuerpo agarrando algo metálico que esté a tierra durante 30 segundos) y añadir el nuevo disco duro en el orden correspondiente en los slots de la placa base. Luego reiniciar el equipo.

NOTA: En la Wiki de Proxmox VE dicen que se debe ubicar en el slot SATA con el número más alto, pero hay que tener cuidado con el orden en que se ubican los discos.

Normalmente el primer disco (muchas veces el único durante mucho tiempo) del hipervisor generalmente se nombra sda. A medida que se monten los discos en el orden correspondiente se les asignará sdb, sdc, sdd, y así sucesivamente. Si se viola el orden de ubicación de los discos en los slots SATA, se pueden obtener errores indeseados a la hora del reconocimiento de los mismos por el sistema de archivos.

Los antiguos discos IDE se nombraban hda, hdb, hdc, y así sucesivamente.

Bueno, volviendo al tema, ahora hay que ver si el nuevo disco fue reconocido por el sistema ejecutando el siguiente comando:

root@prx4-c0-1-drbd8:~# dmesg | grep “] Attached SCSI disk”

[    1.744228] sd 2:0:1:0: [sdb] Attached SCSI disk

[    1.808542] sd 2:0:0:0: [sda] Attached SCSI disk

root@prx4-c0-1-drbd8:~#

O también con este comando:

root@prx4-c0-1-drbd8:~# dmesg | grep “[h,s]d[a,b]” | grep ” logical blocks: “

[    1.739347] sd 2:0:0:0: [sda] 335544320 512-byte logical blocks: (171 GB/160 GiB)

[    1.741978] sd 2:0:1:0: [sdb] 671088640 512-byte logical blocks: (343 GB/320 GiB)

root@prx4-c0-1-drbd8:~#

Así se puede ver que el nuevo disco ha sido reconocido por el sistema operativo, por lo tanto, todo está listo para el siguiente paso.

2.- Preparar el nuevo disco duro

En este punto lo primero que hay que hacer es ver si el nuevo disco está virgen. En caso de que lo esté, es solamente crear la partición correspondiente (o sea, ir al paso 2.2). Si tiene datos previos, obligatoriamente hay que limpiarlo.

2.1.- Limpiar el disco duro (eliminar todas las particiones que tenga)

Para realizar este paso podemos utilizar la herramienta fdisk, que para el segundo disco duro sería así:

root@prx4-c0-1-drbd8:~# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.25.2).

Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.

 

 

Command (m for help): p

Disk /dev/sdb: 320 GiB, 343597383680 bytes, 671088640 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x19e2079e

 

Device     Boot Start       End   Sectors  Size Id Type

/dev/sdb1        2048 671088639 671086592  320G 83 Linux

 

 

Command (m for help): d

Selected partition 1

Partition 1 has been deleted.

 

Command (m for help): w

The partition table has been altered.

Calling ioctl() to re-read partition table.

Syncing disks.

 

root@prx4-c0-1-drbd8:~#

 

Como se vió en el comando anterior, el disco duro tenía una sola partición que ocupaba todo el espacio, la cual fue eliminada.

 

Seguidamente ejecutamos nuevamente el comando fdisk para ver el estado del disco duro después del borrado de la partición:

 

root@prx4-c0-1-drbd8:~# fdisk /dev/sdb

 

Welcome to fdisk (util-linux 2.25.2).

Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.

 

 

Command (m for help): p

Disk /dev/sdb: 320 GiB, 343597383680 bytes, 671088640 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x19e2079e

 

 

 

Command (m for help): q

 

root@prx4-c0-1-drbd8:~#

Ya aquí se ve que el disco está limpio y listo para crearle una nueva partición.

2.2.- Crear una nueva partición LVM en el nuevo disco duro

Para ello hay que ejecutar nuevamente el comando fdisk, pero con otra secuencia de opciones:

root@prx4-c0-1-drbd8:~# fdisk /dev/sdb

 

Welcome to fdisk (util-linux 2.25.2).

Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.

 

 

Command (m for help): p

Disk /dev/sdb: 320 GiB, 343597383680 bytes, 671088640 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x19e2079e

 

 

 

Command (m for help): n

Partition type

p   primary (0 primary, 0 extended, 4 free)

e   extended (container for logical partitions)

Select (default p): p

Partition number (1-4, default 1): 1

First sector (2048-671088639, default 2048):

Last sector, +sectors or +size{K,M,G,T,P} (2048-671088639, default 671088639):

 

Created a new partition 1 of type ‘Linux’ and of size 320 GiB.

 

Command (m for help): t

Selected partition 1

Hex code (type L to list all codes): L

 

0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris

1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-

2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-

3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden C:  c6  DRDOS/sec (FAT-

4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx

5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data

6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .

7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility

8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt

9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access

a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O

b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor

c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs

e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT

f  W95 Ext’d (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/

10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b

11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor

12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor

14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary

16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS

17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE

18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto

1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep

1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT

1e  Hidden W95 FAT1 80  Old Minix

Hex code (type L to list all codes): 8e

Changed type of partition ‘Linux’ to ‘Linux LVM’.

 

Command (m for help): p

Disk /dev/sdb: 320 GiB, 343597383680 bytes, 671088640 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x19e2079e

 

Device     Boot Start       End   Sectors  Size Id Type

/dev/sdb1        2048 671088639 671086592  320G 8e Linux LVM

 

 

Command (m for help): w

The partition table has been altered.

Calling ioctl() to re-read partition table.

Syncing disks.

 

root@prx4-c0-1-drbd8:~#

Y así ya está lista la nueva partición LVM, la cual será añadida, primeramente al volumen físico, y luego al grupo de volúmenes nombrado “pve”.

3.- Chequear el estado actual de las particiones previo al cambio

Antes de pasar al plato fuerte, siempre es bueno chequear el estado de las cosas. La ventaja que tiene GNU/Linux es que dispone de varios comandos diferentes para ver el estado de los discos duros y particiones del sistema operativo. Entre estos comandos están los siguientes:

  • cat /etc/mtab
  • cat /etc/fstab
  • mount
  • df -k
  • pvdisplay
  • vgdisplay
  • lvdisplay

Todos ellos dan salidas diferentes, pero todas están relacionadas dado que o retornan apuntadores a dispositivos, nombres, tamaños, referencias, propiedades de discos o particiones, etc. Para que se tenga una idea, a continuación muestro la salida de cada uno:

Salida del comando cat /etc/mtab:

root@prx4-c0-1-drbd8:~# cat /etc/mtab

sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0

proc /proc proc rw,relatime 0 0

udev /dev devtmpfs rw,relatime,size=10240k,nr_inodes=381518,mode=755 0 0

devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0

tmpfs /run tmpfs rw,nosuid,relatime,size=616180k,mode=755 0 0

/dev/dm-0 / ext4 rw,relatime,errors=remount-ro,data=ordered 0 0

securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0

tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0

tmpfs /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k 0 0

tmpfs /sys/fs/cgroup tmpfs rw,mode=755 0 0

cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd 0 0

pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0

cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset,clone_children 0 0

cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpu,cpuacct 0 0

cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0

cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0

cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0

cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0

cgroup /sys/fs/cgroup/net_cls,net_prio cgroup rw,nosuid,nodev,noexec,relatime,net_cls,net_prio 0 0

cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event,release_agent=/run/cgmanager/agents/cgm-release-agent.perf_event 0 0

cgroup /sys/fs/cgroup/hugetlb cgroup rw,nosuid,nodev,noexec,relatime,hugetlb,release_agent=/run/cgmanager/agents/cgm-release-agent.hugetlb 0 0

systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=21,pgrp=1,timeout=300,minproto=5,maxproto=5,direct 0 0

mqueue /dev/mqueue mqueue rw,relatime 0 0

hugetlbfs /dev/hugepages hugetlbfs rw,relatime 0 0

debugfs /sys/kernel/debug debugfs rw,relatime 0 0

fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0

/dev/mapper/pve-data /var/lib/vz ext4 rw,relatime,data=ordered 0 0

rpc_pipefs /run/rpc_pipefs rpc_pipefs rw,relatime 0 0

cgmfs /run/cgmanager/fs tmpfs rw,relatime,size=100k,mode=755 0 0

tmpfs /run/lxcfs/controllers tmpfs rw,relatime,size=100k,mode=700 0 0

name=systemd /run/lxcfs/controllers/name=systemd cgroup rw,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd 0 0

cpuset /run/lxcfs/controllers/cpuset cgroup rw,relatime,cpuset,clone_children 0 0

cpu,cpuacct /run/lxcfs/controllers/cpu,cpuacct cgroup rw,relatime,cpu,cpuacct 0 0

blkio /run/lxcfs/controllers/blkio cgroup rw,relatime,blkio 0 0

memory /run/lxcfs/controllers/memory cgroup rw,relatime,memory 0 0

devices /run/lxcfs/controllers/devices cgroup rw,relatime,devices 0 0

freezer /run/lxcfs/controllers/freezer cgroup rw,relatime,freezer 0 0

net_cls,net_prio /run/lxcfs/controllers/net_cls,net_prio cgroup rw,relatime,net_cls,net_prio 0 0

perf_event /run/lxcfs/controllers/perf_event cgroup rw,relatime,perf_event,release_agent=/run/cgmanager/agents/cgm-release-agent.perf_event 0 0

hugetlb /run/lxcfs/controllers/hugetlb cgroup rw,relatime,hugetlb,release_agent=/run/cgmanager/agents/cgm-release-agent.hugetlb 0 0

lxcfs /var/lib/lxcfs fuse.lxcfs rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other 0 0

/dev/fuse /etc/pve fuse rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other 0 0

root@prx4-c0-1-drbd8:~#

Salida del comando cat /etc/fstab:

root@prx4-c0-1-drbd8:~# cat /etc/fstab

# <file system> <mount point> <type> <options> <dump> <pass>

/dev/pve/root / ext4 errors=remount-ro 0 1

/dev/pve/data /var/lib/vz ext4 defaults 0 1

/dev/pve/swap none swap sw 0 0

proc /proc proc defaults 0 0

root@prx4-c0-1-drbd8:~#

Salida del comando mount:

root@prx4-c0-1-drbd8:~# mount

sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)

proc on /proc type proc (rw,relatime)

udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=381518,mode=755)

devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)

tmpfs on /run type tmpfs (rw,nosuid,relatime,size=616180k,mode=755)

/dev/mapper/pve-root on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)

securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)

tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)

tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)

tmpfs on /sys/fs/cgroup type tmpfs (rw,mode=755)

cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)

pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)

cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset,clone_children)

cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)

cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)

cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)

cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)

cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)

cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)

cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event,release_agent=/run/cgmanager/agents/cgm-release-agent.perf_event)

cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb,release_agent=/run/cgmanager/agents/cgm-release-agent.hugetlb)

systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=21,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)

mqueue on /dev/mqueue type mqueue (rw,relatime)

hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)

debugfs on /sys/kernel/debug type debugfs (rw,relatime)

fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)

/dev/mapper/pve-data on /var/lib/vz type ext4 (rw,relatime,data=ordered)

rpc_pipefs on /run/rpc_pipefs type rpc_pipefs (rw,relatime)

cgmfs on /run/cgmanager/fs type tmpfs (rw,relatime,size=100k,mode=755)

tmpfs on /run/lxcfs/controllers type tmpfs (rw,relatime,size=100k,mode=700)

name=systemd on /run/lxcfs/controllers/name=systemd type cgroup (rw,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)

cpuset on /run/lxcfs/controllers/cpuset type cgroup (rw,relatime,cpuset,clone_children)

cpu,cpuacct on /run/lxcfs/controllers/cpu,cpuacct type cgroup (rw,relatime,cpu,cpuacct)

blkio on /run/lxcfs/controllers/blkio type cgroup (rw,relatime,blkio)

memory on /run/lxcfs/controllers/memory type cgroup (rw,relatime,memory)

devices on /run/lxcfs/controllers/devices type cgroup (rw,relatime,devices)

freezer on /run/lxcfs/controllers/freezer type cgroup (rw,relatime,freezer)

net_cls,net_prio on /run/lxcfs/controllers/net_cls,net_prio type cgroup (rw,relatime,net_cls,net_prio)

perf_event on /run/lxcfs/controllers/perf_event type cgroup (rw,relatime,perf_event,release_agent=/run/cgmanager/agents/cgm-release-agent.perf_event)

hugetlb on /run/lxcfs/controllers/hugetlb type cgroup (rw,relatime,hugetlb,release_agent=/run/cgmanager/agents/cgm-release-agent.hugetlb)

lxcfs on /var/lib/lxcfs type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)

/dev/fuse on /etc/pve type fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)

root@prx4-c0-1-drbd8:~#

Salida del comando df -k:

Este da la salida en bytes.

root@prx4-c0-1-drbd8:~# df -k

Filesystem           1K-blocks    Used Available Use% Mounted on

udev                     10240       0     10240   0% /dev

tmpfs                   616180    8592    607588   2% /run

/dev/dm-0             40895824 1275884  37519512   4% /

tmpfs                  1540448   24960   1515488   2% /dev/shm

tmpfs                     5120       0      5120   0% /run/lock

tmpfs                  1540448       0   1540448   0% /sys/fs/cgroup

/dev/mapper/pve-data 103210264 4655932  98537948   5% /var/lib/vz

cgmfs                      100       0       100   0% /run/cgmanager/fs

tmpfs                      100       0       100   0% /run/lxcfs/controllers

/dev/fuse                30720      12     30708   1% /etc/pve

root@prx4-c0-1-drbd8:~#

En mi caso prefiero el comando df –h, que da una salida un poco más cómoda:

root@prx4-c0-1-drbd8:~# df -h

Filesystem            Size  Used Avail Use% Mounted on

udev                   10M     0   10M   0% /dev

tmpfs                 602M  8.4M  594M   2% /run

/dev/dm-0              40G  1.3G   36G   4% /

tmpfs                 1.5G   25M  1.5G   2% /dev/shm

tmpfs                 5.0M     0  5.0M   0% /run/lock

tmpfs                 1.5G     0  1.5G   0% /sys/fs/cgroup

/dev/mapper/pve-data   99G  4.5G   94G   5% /var/lib/vz

cgmfs                 100K     0  100K   0% /run/cgmanager/fs

tmpfs                 100K     0  100K   0% /run/lxcfs/controllers

/dev/fuse              30M   12K   30M   1% /etc/pve

root@prx4-c0-1-drbd8:~#

Salida del comando pvdisplay:

root@prx4-c0-1-drbd8:~# pvdisplay

— Physical volume —

PV Name               /dev/sda3

VG Name               pve

PV Size               159.87 GiB / not usable 3.98 MiB

Allocatable           yes

PE Size               4.00 MiB

Total PE              40927

Free PE               4095

Allocated PE          36832

PV UUID               o2tX47-U6dd-RSZr-6ZdE-Hrh9-OL0m-bwwt32

 

root@prx4-c0-1-drbd8:~#

Salida del comando vgdisplay:

root@prx4-c0-1-drbd8:~# vgdisplay

— Volume group —

VG Name               pve

System ID

Format                lvm2

Metadata Areas        1

Metadata Sequence No  4

VG Access             read/write

VG Status             resizable

MAX LV                0

Cur LV                3

Open LV               3

Max PV                0

Cur PV                1

Act PV                1

VG Size               159.87 GiB

PE Size               4.00 MiB

Total PE              40927

Alloc PE / Size       36832 / 143.88 GiB

Free  PE / Size       4095 / 16.00 GiB

VG UUID               81SCsR-Y7hQ-qX3z-B8Ww-FqGV-gq2J-Sszs2Q

 

root@prx4-c0-1-drbd8:~#

En la salida anterior se ve que el grupo de volúmenes “pve” tiene aproximadamente 160 GB de tamaño total.

Salida del comando lvdisplay:

Nótese que en la salida de este comando se ve que existen 3 volúmenes lógicos. El último de ellos, /dev/pve/data, es el que se va a expandir para almacenar más datos.

root@prx4-c0-1-drbd8:~# lvdisplay

— Logical volume —

LV Path                /dev/pve/swap

LV Name                swap

VG Name                pve

LV UUID                Aa05Js-xzvz-w2Lt-I1q2-9z60-QGVS-7CLesW

LV Write Access        read/write

LV Creation host, time proxmox, 2015-12-13 19:43:49 -0500

LV Status              available

# open                 2

LV Size                4.00 GiB

Current LE             1024

Segments               1

Allocation             inherit

Read ahead sectors     auto

– currently set to     256

Block device           252:1

 

— Logical volume —

LV Path                /dev/pve/root

LV Name                root

VG Name                pve

LV UUID                UEgayk-3Ns0-G5Sn-5Pl9-feUq-M9Tw-knOnZu

LV Write Access        read/write

LV Creation host, time proxmox, 2015-12-13 19:43:49 -0500

LV Status              available

# open                 1

LV Size                39.75 GiB

Current LE             10176

Segments               1

Allocation             inherit

Read ahead sectors     auto

– currently set to     256

Block device           252:0

 

— Logical volume —

LV Path                /dev/pve/data

LV Name                data

VG Name                pve

LV UUID                yhktXr-vM9q-TtrU-rlEr-B7QF-hiuH-bHZhwp

LV Write Access        read/write

LV Creation host, time proxmox, 2015-12-13 19:43:49 -0500

LV Status              available

# open                 1

LV Size                100.12 GiB

Current LE             25632

Segments               1

Allocation             inherit

Read ahead sectors     auto

– currently set to     256

Block device           252:2

 

root@prx4-c0-1-drbd8:~#

El campo Current LE (que es el que está resaltado arriba) es la cantidad actual de extents lógicos (LE) disponibles en el volumen lógico en este momento, o sea, la cantidad de espacio libre en extents antes de la expansión.

A partir del siguiente paso se realizará la manipulación de la estructura de particiones LVM del hipervisor Proxmox VE.

4.- Crear la extensión en el volumen físico

Ahora corresponde el turno de añadir la nueva partición creada recientemente al grupo de volúmenes existente:

root@prx4-c0-1-drbd8:~# pvcreate /dev/sdb1

Physical volume “/dev/sdb1” successfully created

root@prx4-c0-1-drbd8:~#

Revisar el volumen físico para ver si se añadió la nueva partición:

root@prx4-c0-1-drbd8:~# pvdisplay

— Physical volume —

PV Name               /dev/sda3

VG Name               pve

PV Size               159.87 GiB / not usable 3.98 MiB

Allocatable           yes

PE Size               4.00 MiB

Total PE              40927

Free PE               4095

Allocated PE          36832

PV UUID               o2tX47-U6dd-RSZr-6ZdE-Hrh9-OL0m-bwwt32

 

“/dev/sdb1” is a new physical volume of “320.00 GiB”

— NEW Physical volume —

PV Name               /dev/sdb1

VG Name

PV Size               320.00 GiB

Allocatable           NO

PE Size               0

Total PE              0

Free PE               0

Allocated PE          0

PV UUID               hqT7mj-FqDf-mYkQ-mbfE-ZxGw-vsfY-YfHtdg

 

root@prx4-c0-1-drbd8:~#

En la salida anterior se ve que el nuevo volumen físico /dev/sdb1 aún no tiene aún un grupo de volúmenes asociado.

5.- Extender el grupo de volúmenes existente

Ahora hay que asociar el nuevo volumen físico al grupo de volúmenes “pve”. Para ello hay que ejecutar lo siguiente:

root@prx4-c0-1-drbd8:~# vgextend “pve” /dev/sdb1

Volume group “pve” successfully extended

root@prx4-c0-1-drbd8:~#

Revisar si todo está correcto:

root@prx4-c0-1-drbd8:~# vgdisplay

— Volume group —

VG Name               pve

System ID

Format                lvm2

Metadata Areas        2

Metadata Sequence No  5

VG Access             read/write

VG Status             resizable

MAX LV                0

Cur LV                3

Open LV               3

Max PV                0

Cur PV                2

Act PV                2

VG Size               479.87 GiB

PE Size               4.00 MiB

Total PE              122846

Alloc PE / Size       36832 / 143.88 GiB

Free  PE / Size       86014 / 335.99 GiB

VG UUID               81SCsR-Y7hQ-qX3z-B8Ww-FqGV-gq2J-Sszs2Q

 

root@prx4-c0-1-drbd8:~#

Después de estas operaciones, el grupo de volúmenes “pve” ahora tiene aproximadamente 480 GB de tamaño (primer resaltado), con lo que su espacio libre se incrementó a 360 GB aproximadamente (segundo resaltado).

 6.- Redimensionar el volumen lógico de interés “pve”

Una vez que el grupo de volúmenes donde está el volumen lógico que se va a modificar tiene más espacio libre, toca el turno a incrementar el tamaño del volumen lógico pve-data.

Primeramente hay que ver el estado del mismo y si podemos incrementarlo mediante los comandos lvdisplay y pvdisplay, los cuales muestran las salidas siguientes:

root@prx4-c0-1-drbd8:~# lvdisplay /dev/mapper/pve-data

— Logical volume —

LV Path                /dev/pve/data

LV Name                data

VG Name                pve

LV UUID                yhktXr-vM9q-TtrU-rlEr-B7QF-hiuH-bHZhwp

LV Write Access        read/write

LV Creation host, time proxmox, 2015-12-13 19:43:49 -0500

LV Status              available

# open                 1

LV Size                100.12 GiB

Current LE             25632

Segments               1

Allocation             inherit

Read ahead sectors     auto

– currently set to     256

Block device           252:2

 

root@prx4-c0-1-drbd8:~#

 

root@prx4-c0-1-drbd8:~# pvdisplay /dev/sdb1

— Physical volume —

PV Name               /dev/sdb1

VG Name               pve

PV Size               320.00 GiB / not usable 3.00 MiB

Allocatable           yes

PE Size               4.00 MiB

Total PE              81919

Free PE               81919

Allocated PE          0

PV UUID               hqT7mj-FqDf-mYkQ-mbfE-ZxGw-vsfY-YfHtdg

 

root@prx4-c0-1-drbd8:~#

Los datos proveídos por las salidas anteriores dan los elementos suficientes para realizar la operación que viene a continuación. El valor del campo Current LE del volumen lógico /dev/pve/data en la primera salida, 25632, se le suma el valor del campo Free PE del volumen físico /dev/sdb1 en la segunda salida, 81919, obteniendo el valor final 107551, el cual será usando como valor del comando lvresize para redimensionar el tamaño del volumen lógico /dev/pve/data.

Entonces, ejecutando el comando al que acabo de hacer referencia, da el siguiente resultado:

root@prx4-c0-1-drbd8:~# lvresize -l 107551 /dev/mapper/pve-data

Size of logical volume pve/data changed from 100.12 GiB (25632 extents) to 420.12 GiB (107551 extents).

Logical volume data successfully resized

root@prx4-c0-1-drbd8:~#

Como se ve, el tamaño del volumen lógico /dev/pve/data se incrementó de 100.12 GB a 420.12 GB aproximadamente.

No obstante, es válido aclarar algunas cosas sobre el comando ejecutado anteriormente:

  • lvresize es utilizado sólo para redimensionar el tamaño de volúmenes lógicos
  • lvresize puede usarse también para o incrementar (expandir) o disminuir (achicar) el tamaño del sistema de archivos dentro de volúmenes lógicos
  • Siempre se recomienda desmontar primero el sistema de archivos dentro del volumen lógico antes de hacer cualquier tarea de redimensión
  • No está soportado el decremento del tamaño de volúmenes lógicos sin antes desmontar el sistema de archivos interno
  • Los sistemas de archivos alojados dentro de volúmenes lógicos pueden ser expandidos en modo online, en otras palabras, se pueden redimensionar sin desmontar cuando se trata solamente de incrementar el tamaño de la partición
  • Tanto LVM como ext3/ext4 soportan el redimensionado de sistemas de archivos después de haber sido creados con anterioridad

 

Por ejemplo:

lvresize -L+10G /dev/sys/scratch

resize2fs /dev/sys/scratch

  • Cuando se trata de achicar (shrinking) un sistema de archivos existente, es altamente recomendable copiar antes la información alojada en él tal y como esté (independientemente de lo que haya), luego desmontarlo y re-crearlo nuevamente

 

Por ejemplo:

rsync -avr /scratch /data/.

umount /scratch

lvresize -L-10G /dev/sys/scratch

mkfs.ext3 /dev/sys/scratch

7.- Actualizar el sistema de archivo alojado dentro del volumen lógico pve-data

En este punto, solamente el volumen lógico /dev/pve/data solamente muestra el incremento del espacio:

root@prx4-c0-1-drbd8:~# lvdisplay /dev/mapper/pve-data

— Logical volume —

LV Path                /dev/pve/data

LV Name                data

VG Name                pve

LV UUID                yhktXr-vM9q-TtrU-rlEr-B7QF-hiuH-bHZhwp

LV Write Access        read/write

LV Creation host, time proxmox, 2015-12-13 19:43:49 -0500

LV Status              available

# open                 1

LV Size                420.12 GiB

Current LE             107551

Segments               2

Allocation             inherit

Read ahead sectors     auto

– currently set to     256

Block device           252:2

 

root@prx4-c0-1-drbd8:~#

Porque aún el sistema de archivos que está alojado dentro de este volumen no refleja el cambio:

root@prx4-c0-1-drbd8:~# df -k

Filesystem           1K-blocks    Used Available Use% Mounted on

udev                     10240       0     10240   0% /dev

tmpfs                   616180    8592    607588   2% /run

/dev/dm-0             40895824 1275844  37519552   4% /

tmpfs                  1540448   24960   1515488   2% /dev/shm

tmpfs                     5120       0      5120   0% /run/lock

tmpfs                  1540448       0   1540448   0% /sys/fs/cgroup

/dev/mapper/pve-data 103210264 4655932  98537948   5% /var/lib/vz

cgmfs                      100       0       100   0% /run/cgmanager/fs

tmpfs                      100       0       100   0% /run/lxcfs/controllers

/dev/fuse                30720      12     30708   1% /etc/pve

root@prx4-c0-1-drbd8:~#

 

root@prx4-c0-1-drbd8:~# df -h

Filesystem            Size  Used Avail Use% Mounted on

udev                   10M     0   10M   0% /dev

tmpfs                 602M  8.4M  594M   2% /run

/dev/dm-0              40G  1.3G   36G   4% /

tmpfs                 1.5G   25M  1.5G   2% /dev/shm

tmpfs                 5.0M     0  5.0M   0% /run/lock

tmpfs                 1.5G     0  1.5G   0% /sys/fs/cgroup

/dev/mapper/pve-data   99G  4.5G   94G   5% /var/lib/vz

cgmfs                 100K     0  100K   0% /run/cgmanager/fs

tmpfs                 100K     0  100K   0% /run/lxcfs/controllers

/dev/fuse              30M   12K   30M   1% /etc/pve

root@prx4-c0-1-drbd8:~#

O sea, aún conserva el tamaño de 100 GB aproximadamente. Por lo tanto, hay que ajustar su tamaño al del volumen lógico en donde está alojado mediante el comando siguente:

root@prx4-c0-1-drbd8:~# resize2fs /dev/mapper/pve-data

resize2fs 1.42.12 (29-Aug-2014)

Filesystem at /dev/mapper/pve-data is mounted on /var/lib/vz; on-line resizing required

old_desc_blocks = 7, new_desc_blocks = 27

The filesystem on /dev/mapper/pve-data is now 110132224 (4k) blocks long.

 

root@prx4-c0-1-drbd8:~#

NOTA: En la salida anterior, la última línea puede tardar un poco en aparecer. Esto está en dependencia del tamaño físico del disco nuevo o de la partición nueva.

Si se ejecuta el comando dmesg, en sus últimas líneas aparece lo siguiente:

root@prx4-c0-1-drbd8:~# dmesg

(…)

[  714.269152]  sdb: sdb1

[10604.656967] EXT4-fs (dm-2): resizing filesystem from 26247168 to 110132224 blocks

[10604.934539] EXT4-fs (dm-2): resized filesystem to 110132224

root@prx4-c0-1-drbd8:~#

8.- Chequear que todo el proceso se haya completado exitosamente

Para ver si el proceso se realizó exitosamente, basta con ejecutar comandos que muestren el tamaño de las particiones. Por ejemplo:

root@prx4-c0-1-drbd8:~# df -k

Filesystem           1K-blocks    Used Available Use% Mounted on

udev                     10240       0     10240   0% /dev

tmpfs                   616180    8592    607588   2% /run

/dev/dm-0             40895824 1275764  37519632   4% /

tmpfs                  1540448   24960   1515488   2% /dev/shm

tmpfs                     5120       0      5120   0% /run/lock

tmpfs                  1540448       0   1540448   0% /sys/fs/cgroup

/dev/mapper/pve-data 433485592 4666696 428802512   2% /var/lib/vz

cgmfs                      100       0       100   0% /run/cgmanager/fs

tmpfs                      100       0       100   0% /run/lxcfs/controllers

/dev/fuse                30720      12     30708   1% /etc/pve

root@prx4-c0-1-drbd8:~#

 

root@prx4-c0-1-drbd8:~# df -h

Filesystem            Size  Used Avail Use% Mounted on

udev                   10M     0   10M   0% /dev

tmpfs                 602M  8.4M  594M   2% /run

/dev/dm-0              40G  1.3G   36G   4% /

tmpfs                 1.5G   25M  1.5G   2% /dev/shm

tmpfs                 5.0M     0  5.0M   0% /run/lock

tmpfs                 1.5G     0  1.5G   0% /sys/fs/cgroup

/dev/mapper/pve-data  414G  4.5G  409G   2% /var/lib/vz

cgmfs                 100K     0  100K   0% /run/cgmanager/fs

tmpfs                 100K     0  100K   0% /run/lxcfs/controllers

/dev/fuse              30M   12K   30M   1% /etc/pve

root@prx4-c0-1-drbd8:~#

Como se ve en las salidas anteriores, el tamaño del volumen lógico /dev/pve/data pasó a ser de aproximadamente 100 GB a 414 GB. 🙂

Y estos son los pasos a seguir para el incremento del espacio libre en el almacenamiento local del hipervisor Proxmox VE, los cuales son aplicables a cualquier estructura de particiones donde intervenga LVM, ya sea en un disco duro físico o virtual.

Aumentando el espacio libre del almacenamiento local del hipervisor Proxmox VE reduciendo el tamaño de un volumen lógico existente

Antes de finalizar, me gustaría también hablar someramente sobre otra variante: reducir el tamaño de un volumen lógico (/dev/mapper/pve-root, por ejemplo) para agrandar el tamaño del almacenamiento local (/dev/mapper/pve-data).

Que se dé esta posibilidad es muy, muy remota, pero puede suceder; y antes de hacerlo de manera real, yo recomiendo hacer estas pruebas, o en un Debian simple, o en un hipervisor Proxmox VE virgen.

No voy a detallar los pasos a seguir, solamente los mencionaré y haré referencia al comando que se debe ejecutar. Estos son los pasos:

  1. Respaldar (salvar) la máquina virtual
  2. Iniciar el servidor o estación de trabajo adaptada mediante un CD de Linux (SystemRescueCD, Debian Live, Ubuntu, etc.)
  3. Chequear el sistema de archivos dentro de /dev/mapper/pve-root (e2fsck)
  4. Redimensionar el sistema de archivos dentro de /dev/mapper/pve-root (resize2fs)
  5. Reducir el tamaño del volumen lógico /dev/mapper/pve-root (lvreduce)
  6. Extender (incrementar) el tamaño del volumen lógico /dev/mapper/pve-data (lvextend)
  7. Redimensionar el sistema de archivos dentro de /dev/mapper/pve-data (resize2fs)
  8. Chequear que todo el proceso se haya completado exitosamente

 

En realidad la única diferencia con el proceso anterior es que en este se trabaja directamente sobre el mismo disco duro.

En el siguiente epígrafe se explica cómo realizar un redimensionado de estructuras de volúmenes LVM y/o sistemas de archivos luego de incrementar el tamaño del archivo de imagen de un disco duro de una máquina virtual o contenedor.

🙂

Acerca de Hector Suarez Planas

Es Licenciado en Ciencia de la Computación (3 de julio de 2002). Ha sido Administrador de Red en varias organizaciones, Programador y Analista de Sistemas. Actualmente se desempeña como Administrador de Red del Telecentro Tele Turquino de Santiago de Cuba. Tiene experiencia con sistemas Windows y GNU/Linux, Infraestructura de Redes (Cisco, AlliedTelesis, Netgear y HP ProCurve, Vyatta/VyOS), Servidores tanto físicos como virtuales (plataformas VMWare, Proxmox VE y Xen), Sistemas de Seguridad Informática (Snort/Suricata IDS, appliances AlienVault OSSIM), programador (Delphi, C++ Builder, Perl [poco], Python [algo]), entre otras cosas. Actualmente estoy incursionando en todo lo que tiene relación con Cloud Computing (OpenStack) y Centros de Datos. :-)
Esta entrada fue publicada en Proxmox VE. Guarda el enlace permanente.

11 respuestas a De mi Manual de Proxmox VE 4.x: Incremento del espacio en disco en el almacenamiento local interno del hipervisor Proxmox VE

  1. Carlos dijo:

    Gracias por el artículo. Por más que buscaba, no encontraba un tutorial que siguiendo cada paso pudiera hacerlo. En este caso si he conseguido añadir un segundo disco al almacenamiento local.

    • Hector Suarez Planas dijo:

      Saludos, Carlos.

      Primero que todo, gracias por su comentario.

      Me alegra que hayas resuelto el problema. 😀 Cualquier otra cosa, acá estoy. 🙂

      • Carlos dijo:

        Hola,
        He vuelto a instalar un Proxmox con 3 discos ssd.
        El caso es que he vuelto a seguir los pasos y en el paso de:
        pvcreate /dev/sdb1
        ……
        Esta es la salida:
        root@nodo1:~# vgextend pve /dev/sdb1
        Physical volume ‘/dev/sdb1’ is already in volume group ‘pve_old’
        Unable to add physical volume ‘/dev/sdb1’ to volume group ‘pve’.

        Y a partir de hay ya no sale la configuración.

        Cual es el motivo?

        • Hector Suarez Planas dijo:

          Saludos, Carlos.

          No das muchos detalles de tu estructura LVM. Recomiendo que me escribas al correo para ver eso bien. 🙂

  2. Luis Carlos dijo:

    Hola Héctor tengo instalado la versión 4.3 proxmox , quiero hacer salvas en local-lvm y no me deja , como puedo crear un directorio pero que sea con el espacio de ese directorio local-lvm, ya que este esta vacio. Gracias

  3. Mikel dijo:

    Muchas gracias, gran trabajo.

    • Hector Suarez Planas dijo:

      Saludos, Mikel.

      Primero que todo, gracias por su comentario…

      Y gracias. Estamos para ayudar y tratar de contribuir en lo posible. 🙂

  4. Kaizerr dijo:

    excelente hermano me ayudaste primera ves que hago este tipo de agregacion o extecion de espacio de disco con proxmo 3.4 saludo desde venezuela

  5. jacmel dijo:

    Hola Hector estoy fajado con lo siguiente, instale proxmox 5 en un servidor HP con un raid 5 en un solo disco logico de varios discos fisicos, lo que me pasa es que todo el espacio esta en local-lvm de tipo lvm-thin y no puedo crear nuevas CT pues el espacio loca esta lleno. Dime si puoedes ayudarme

    • Hector Suarez Planas dijo:

      Saludos, Jacmel.

      Primero que todo, decir que aún no estoy usando la versión 5 de Proxmox VE por lo reciente de su creación, y porque me gusta esperar un poco antes de cambiar de versión.

      En cuanto al RAID5, si los HDDs son de un buen espacio, debe tener una buena cantidad de espacio para los EVs. No entiendo por qué se le acaba muy rápido dicho espacio compuesto. No da muchos detalles, así que no puedo ayudarle como quisiera. 🙁

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *