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:
- Respaldar (salvar) la máquina virtual
- Iniciar el servidor o estación de trabajo adaptada mediante un CD de Linux (SystemRescueCD, Debian Live, Ubuntu, etc.)
- Chequear el sistema de archivos dentro de /dev/mapper/pve-root (e2fsck)
- Redimensionar el sistema de archivos dentro de /dev/mapper/pve-root (resize2fs)
- Reducir el tamaño del volumen lógico /dev/mapper/pve-root (lvreduce)
- Extender (incrementar) el tamaño del volumen lógico /dev/mapper/pve-data (lvextend)
- Redimensionar el sistema de archivos dentro de /dev/mapper/pve-data (resize2fs)
- 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.
🙂






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.
Saludos, Carlos.
Primero que todo, gracias por su comentario.
Me alegra que hayas resuelto el problema. 😀 Cualquier otra cosa, acá estoy. 🙂
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?
Saludos, Carlos.
No das muchos detalles de tu estructura LVM. Recomiendo que me escribas al correo para ver eso bien. 🙂
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
Muchas gracias, gran trabajo.
Saludos, Mikel.
Primero que todo, gracias por su comentario…
Y gracias. Estamos para ayudar y tratar de contribuir en lo posible. 🙂
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
Saludos, Kaizerr.
No hay problema. Me alegra que hayas resuelto. 😀
Estamos para ayudar.
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
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. 🙁
cuando intendo hacer una salva me sale este error
que puedo hacer
INFO: starting new backup job: vzdump 101 –mode snapshot –remove 0 –compress gzip –node pve –storage local
INFO: Starting Backup of VM 101 (lxc)
INFO: status = running
INFO: CT Name: proxy.epltunas.alinet.cu
INFO: backup mode: snapshot
INFO: ionice priority: 7
INFO: create storage snapshot ‘vzdump’
Logical volume «snap_vm-101-disk-1_vzdump» created.
INFO: creating archive ‘/var/lib/vz/dump/vzdump-lxc-101-2018_01_15-10_23_47.tar.gz’
INFO: tar: ./var/spool/squid/swap.state: Cannot stat: Structure needs cleaning
INFO: tar: ./var/lib/samba/lock/msg.lock/229: Cannot stat: Structure needs cleaning
INFO: Total bytes written: 1452871680 (1.4GiB, 6.9MiB/s)
INFO: tar: Exiting with failure status due to previous errors
INFO: remove vzdump snapshot
Logical volume «snap_vm-101-disk-1_vzdump» successfully removed
ERROR: Backup of VM 101 failed – command ‘set -o pipefail && tar cpf – –totals –sparse –numeric-owner –acls –xattrs ‘–xattrs-include=user.*’ ‘–xattrs-include=security.capability’ ‘–warning=no-xattr-write’ –one-file-system ‘–warning=no-file-ignored’ ‘–directory=/var/lib/vz/dump/vzdump-lxc-101-2018_01_15-10_23_47.tmp’ ./etc/vzdump/pct.conf ‘–directory=/mnt/vzsnap0’ –no-anchored ‘–exclude=lost+found’ –anchored ‘–exclude=./tmp/?*’ ‘–exclude=./var/tmp/?*’ ‘–exclude=./var/run/?*.pid’ ./ | gzip >/var/lib/vz/dump/vzdump-lxc-101-2018_01_15-10_23_47.tar.dat’ failed: exit code 2
INFO: Backup job finished with errors
TASK ERROR: job errors
Saludos, Amalia.
Primero que todo, gracias por su comentario, además de alegrarme que una dama está en estos menesteres.
Sugiero que ese CT lo respalde no en modo snapshot, por el error que se ve, algunos procesos que están corriendo dentro de él están haciendo uso exclusivo de algunos archivos. Puede hacerlo en modo Stop, le llevará pocos segundos, claro, dependiendo del tamaño del CT y la parte ocupada.
Espero le sirva. 🙂
Bendiciones Honorable!!!
Un Saludo fraternal desde Colombia!
Damos gracias por la vida, por todos los poderes y por el amor de compartir el conocimiento para que los demás también logren avanzar en sus proyectos, también estuve buscando mucho como lograrlo y nada me funcionaba, encontraba mucha receta extraña y que no lograba lo que realmente se necesitaba. Lo acabo de implementar con un DD de 2TB y quede feliz porque estaba al 85%. Logrado en Proxmox-5.2.1.
Saludos, Johan.
Primero que todo, gracias por su comentario. Se agradece muchísimo.
Me alegra que haya resuelto el problema. 😀