Problema
En entornos con Proxmox es frecuente crear contenedores LXC con discos más grandes de lo necesario. Cuando la necesidad de espacio disminuye, la única forma de “encoger” el disco es recrear el contenedor o restaurarlo desde una copia de seguridad con un tamaño diferente. La interfaz web de Proxmox no expone una opción para cambiar el tamaño del disco durante la restauración, lo que obliga a recurrir a la línea de comandos. El reto consiste en restaurar el LXC desde Proxmox Backup Server (PBS) sin perder la configuración y, al mismo tiempo, asignarle un disco más pequeño.
Causa
- Diseño de LXC: Los discos de los contenedores se definen en la configuración (
rootfs) y, una vez creados, Proxmox no permite reducir su tamaño porque el backend de almacenamiento (ZFS, LVM, directory) no soporta shrink nativo sin riesgos de corrupción. - Interfaz web limitada: El wizard de restauración solo replica la configuración original del backup, por lo que el tamaño del disco queda idéntico al del snapshot.
- Falta de documentación consolidada: La mayoría de los artículos cubren la expansión de discos, pero rara vez explican el proceso inverso usando
pct restore.
Solución
Restaurar el contenedor desde PBS mediante pct restore y sobrescribir la definición del disco en la configuración antes de iniciar el contenedor. El flujo genérico es:
-
Identificar el backup
Usapvebackupo la API de PBS para listar los snapshots disponibles y obtener elbackup-id(por ejemplo,vzdump-lxc-101-2024_05_12-10_30_00.tar.lzo). -
Crear una configuración temporal
Copia la configuración original del contenedor (/etc/pve/lxc/101.conf) a un archivo temporal. -
Editar la línea
rootfs
Cambiarootfs: local-lvm:vm-101-disk-0,size=20Gpor el nuevo tamaño deseado, por ejemplosize=8G. -
Ejecutar
pct restorecon la opción--force
El flag--forcepermite sobrescribir una configuración existente (útil si el ID ya está reservado). -
Ajustar el sistema de archivos interno
Después de iniciar el contenedor, verifica que el filesystem dentro del LXC refleje el nuevo tamaño. En la mayoría de los casos, el backend (LVM, ZFS) ya habrá creado el volumen con el tamaño indicado, por lo que no es necesario redimensionar el FS. Si usasdirectorycomo storage, ejecutaresize2fso el equivalente dentro del contenedor.
Paso a paso
-
Listar backups
pvebackup list <storage-id>Busca la entrada que corresponde al contenedor que quieres restaurar y anota el nombre del archivo.
-
Crear contenedor vacío (opcional)
Si el ID está libre, puedes saltarte este paso. Si ya existe y quieres reutilizarlo, elimina primero el contenedor:
pct destroy 101 --purge -
Restaurar con nuevo tamaño
pct restore 101 /mnt/pbs-backup/vzdump-lxc-101-2024_05_12-10_30_00.tar.lzo \ --storage local-lvm \ --force \ --rootfs local-lvm:8G101es el ID del contenedor.--storageindica el pool donde se creará el disco.--rootfssobrescribe el tamaño especificado en el backup.
-
Iniciar y validar
pct start 101 pct exec 101 -- df -h /El comando
dfdebe mostrar aproximadamente 8 GB de espacio total. -
Ajustes post‑restauración
- Revisa que los paquetes y servicios críticos arrancan sin errores.
- Si el contenedor usa
snapshotsinternos, verifica que la configuración delxc.mount.entrysigue siendo válida.
Cuándo aplicar esta solución
- Necesitas reducir el tamaño del disco y el backup contiene una configuración con un disco mayor.
- El contenedor está en producción y no puedes permitirte una reinstalación completa.
- El storage backend soporta creación de volúmenes con tamaños arbitrarios (LVM, ZFS, directory).
- No hay dependencias externas que requieran el ID original del contenedor (por ejemplo, firewalls que referencian la IP estática del LXC).
No es adecuada cuando:
- El backup está corrupto o incompleto.
- El contenedor depende de volúmenes externos que no forman parte del backup.
- El storage es
btrfscon subvolúmenes que no permiten shrink sin recrear.
Código
# 1. Listar backups en el storage PBS
pvebackup list pbs-storage
# 2. (Opcional) Eliminar contenedor existente
pct destroy 101 --purge
# 3. Restaurar con tamaño de disco reducido
pct restore 101 /mnt/pbs-storage/vzdump-lxc-101-2024_05_12-10_30_00.tar.lzo \
--storage local-lvm \
--force \
--rootfs local-lvm:8G
# 4. Iniciar y comprobar espacio
pct start 101
pct exec 101 -- df -h /
Verificación
- Espacio del disco:
pct exec 101 -- df -h /debe mostrar el tamaño especificado (p.ej. 8 G). - Estado del contenedor:
pct status 101debe devolverrunning. - Logs de arranque:
journalctl -u [email protected]opct console 101para detectar errores de montaje. - Integridad de datos: Ejecuta una verificación rápida de los servicios críticos (web, base de datos) dentro del contenedor.
Si alguno de estos pasos falla, revierte con pct destroy 101 y repite la restauración ajustando el tamaño o el storage.
Notas adicionales
- Backup incremental: Si usas backups incrementales, el primer
pct restoredebe ser del snapshot base; los incrementales se aplican automáticamente. - Snapshots LXC: Después de la restauración, crea un snapshot inmediato (
pct snapshot 101 pre‑shrink) para volver rápidamente al estado actual en caso de error. - Almacenamiento mixto: Cuando el backup proviene de un pool
localy deseas restaurar enlocal-lvm, el flag--storagegestiona la migración sin pasos intermedios. - Automatización: Incluye este flujo en scripts de Ansible o Terraform para que el proceso sea reproducible en clústers de alta disponibilidad.
Con este método puedes reducir el tamaño de los discos de tus contenedores LXC sin perder la configuración ni los datos, manteniendo la operatividad de tus entornos Proxmox.