Comandos básicos de Proxmox: gestión de LXC y VMs vía CLI
Como comenté en mi post sobre por qué elegí Proxmox, prefiero gestionar la infraestructura vía CLI en lugar de depender de la interfaz web. Aquí van los comandos esenciales que uso día a día en Proxmox VE.
Gestión de contenedores LXC con pct
El comando pct es la herramienta nativa para gestionar contenedores LXC en Proxmox.
Listar contenedores
pct list
Muestra todos los contenedores con su ID, estado, nombre y dirección IP. Lo primero que ejecuto cuando no recuerdo qué tengo corriendo.
Gestionar plantillas LXC
Las plantillas son las imágenes base para crear contenedores LXC. Proxmox VE usa el comando pveam (Proxmox VE Appliance Manager) para gestionar el catálogo.
Listar plantillas disponibles
Muestra las plantillas descargadas en un almacenamiento específico:
pveam list local
pveam list local-lvm
Actualizar catálogo de plantillas
Descarga la lista más reciente de plantillas disponibles desde los repositorios de Proxmox:
pveam update
Descargar nuevas plantillas
Descarga una plantilla concreta a un almacenamiento:
pveam download local debian-12-standard_12.0-1_amd64.tar.zst
pveam download local ubuntu-22.04-standard_22.04-1_amd64.tar.zst
Ver plantillas descargadas
Las plantillas se guardan en /var/lib/vz/template/cache/:
ls -lh /var/lib/vz/template/cache/
Crear un contenedor LXC
pct create 100 \
--template local:vztmpl/debian-12-standard_12.0-1_amd64.tar.zst \
--storage local-lvm \
--hostname servidor-web \
--cores 2 \
--memory 2048 \
--swap 512 \
--rootfs local-lvm:8 \
--net0 name=eth0,bridge=vmbr0,ip=192.168.1.100/24,gw=192.168.1.1
Iniciar y detener contenedores
pct start 100
pct stop 100
pct shutdown 100
Entrar en un contenedor
pct enter 100
Equivalente a lxc-attach. Te da acceso directo al shell del contenedor.
Clonar un contenedor
pct clone 100 101 --hostname servidor-web-copia
Eliminar un contenedor
pct stop 100
pct destroy 100
Configuración y snapshots
pct config 100
pct snapshot 100 pre-actualizacion
pct delsnapshot 100 pre-actualizacion
pct listsnapshot 100
Modificar recursos de LXC
Ajusta CPU, memoria, swap o almacenamiento de un contenedor existente. Algunos cambios requieren reiniciar el LXC:
# Modificar número de cores (requiere reinicio)
pct set 100 --cores 4
# Modificar memoria RAM (en MB, requiere reinicio)
pct set 100 --memory 4096
# Modificar swap (en MB, requiere reinicio)
pct set 100 --swap 1024
# Redimensionar el disco raíz (rootfs, requiere parar el LXC)
pct stop 100
pct resize 100 rootfs 16G
pct start 100
⚠️ Advertencias al redimensionar discos:
- Aumentar disco: Generalmente seguro, pero verifica que el almacenamiento (LVM, ZFS, etc.) tenga espacio suficiente. Proxmox VE hace
resize2fsautomáticamente si el sistema de archivos lo soporta. - Reducir disco: Peligroso. Nunca reduzcas el disco por debajo del espacio usado. Verifica primero:
Si el disco está casi lleno, la reducción corromperá el sistema de archivos. Reduce primero el contenido dentro del LXC, luego haz shrink del filesystem manualmente antes de usarpct exec 100 -- df -h /pct resize. - Problemas con LVM: Como conté en mi post de Jellyfin, intenté usar
lvreduce/lvextendmanualmente y no fui capaz. La interfaz web de Proxmox hace elresize2fsautomáticamente y es más fiable. Si usas CLI, ejecutae2fsckyresize2fsmanualmente antes de tocar el LV.
Reiniciar un contenedor LXC
pct reboot 100
Asignar o modificar IP y puerta de enlace
pct set 100 --net0 name=eth0,bridge=vmbr0,ip=192.168.1.100/24,gw=192.168.1.1
Para aplicar los cambios de red, reinicia el contenedor:
pct reboot 100
Configurar DNS
pct set 100 --nameserver 8.8.8.8 --searchdomain local
También puedes editar el archivo de DNS dentro del contenedor:
pct enter 100
nano /etc/resolv.conf
Ejecutar comandos en LXC sin entrar
pct exec 100 -- apt update && apt upgrade -y
pct exec 100 -- systemctl status nginx
El comando pct exec ejecuta el comando dentro del contenedor y devuelve la salida sin abrir un shell interactivo.
Montar discos y directorios con bind mount
Para compartir discos o directorios del host Proxmox con un LXC usamos bind mounts. Es preferible a NFS para evitar problemas con inotify, como el que me afectó en la instalación de Jellyfin (detallado en este post). ⚠️ Nota personal: Tuve problemas con montajes NFS en uno de mis discos. inotify no propagaba eventos de archivos nuevos, lo que impedía que Jellyfin detectara contenido automáticamente. Si usas NFS como origen, ten en cuenta esta limitación de los sistemas de archivos de red.
Añadir un bind mount
Detén el LXC antes de modificar los montajes:
pct stop 100
Añade el bind mount con pct set. Primero asegúrate de que la ruta en el host Proxmox esté montada y accesible:
# Ejemplo: montar un disco en el host primero
mkdir -p /mnt/discos/media
mount /dev/sdb1 /mnt/discos/media
Luego configura el bind mount:
pct set 100 \
--mp0 /mnt/discos/media,mp=/mnt/media,ro=0 \
--mp1 /mnt/discos/backups,mp=/mnt/backups,ro=1
mp0,mp1: Identificadores únicos de los puntos de montaje (puedes añadir tantos como necesites)/mnt/discos/media: Ruta absoluta en el host Proxmox (debe existir y estar montada)mp=/mnt/media: Ruta dentro del LXC donde se montará el directorioro=0: Modo lectura-escritura (1para solo lectura) Arranca el LXC:
pct start 100
Gestionar bind mounts existentes
Para listar todos los bind mounts de un LXC:
pct config 100 | grep ^mp
Para eliminar un bind mount (detén el LXC primero):
pct stop 100
pct set 100 --delete mp0
pct start 100
Gestión de máquinas virtuales con qm
El comando qm gestiona las VMs de Proxmox (basadas en QEMU/KVM).
Listar máquinas virtuales
qm list
Crear una VM
qm create 200 \
--name servidor-linux \
--cores 4 \
--memory 4096 \
--net0 virtio,bridge=vmbr0 \
--scsi0 local-lvm:32 \
--ide2 local:iso/ubuntu-22.04.iso,media=cdrom \
--boot order=ide2,scsi0 \
--serial0 socket
Iniciar y detener VMs
qm start 200
qm stop 200
qm shutdown 200
qm reset 200
Entrar en una VM vía console
qm terminal 200
O usando VNC:
qm vncproxy 200
Clonar una VM
qm clone 200 201 --name servidor-linux-copia --full
Snapshots en VMs
qm snapshot 200 antes-cambios
qm rollback 200 antes-cambios
qm delsnapshot 200 antes-cambios
Configuración de una VM
qm config 200
qm set 200 --memory 8192
qm set 200 --cores 6
Modificar recursos de VMs
Para VMs, los cambios de CPU y memoria se aplican modificando la configuración. Algunos requieren apagar la VM:
# Modificar número de cores (requiere apagar la VM)
qm stop 200
qm set 200 --cores 8
qm start 200
# Modificar memoria RAM (requiere apagar la VM si no usa hotplug)
qm set 200 --memory 8192
# Añadir o ampliar disco SCSI/SATA
qm set 200 --scsi1 local-lvm:32
# Redimensionar un disco existente (requiere que la VM esté apagada)
qm stop 200
qm resize 200 scsi0 +16G
qm start 200
⚠️ Advertencias al redimensionar discos de VMs:
- Aumentar disco: Después de ampliar el disco por CLI tienes que entrar en la VM y extender el sistema de archivos manualmente (
fdisk/parted+resize2fsen Linux, o “Extender volumen” en Windows Disk Management). - Reducir disco: Muy arriesgado. Haz backup antes. Reduce primero el sistema de archivos dentro de la VM, luego apaga la VM y usa
qm resizecon valor menor. Si te equivocas, corromperás la VM. - Hotplug: Si tienes configurado CPU/Memory hotplug en la VM, algunos cambios se aplican sin apagar, pero no todos los sistemas operativos lo soportan bien.
Montar discos en VMs (virtio-fs)
Las VMs no pueden acceder directamente a carpetas del host como los LXC. La forma moderna de hacerlo es virtio-fs:
# Añadir un directorio compartido via virtio-fs
qm set 200 --virtiofs0 /mnt/discos/media,tag=media
Dentro de la VM Linux, monta el recurso compartido:
mkdir -p /mnt/media
mount -t virtiofs media /mnt/media
Para montaje persistente en la VM, añade a /etc/fstab:
media /mnt/media virtiofs defaults 0 0
⚠️ Nota: virtio-fs requiere kernel Linux 4.19+ y soporte en QEMU. Para Windows, usa recursos compartidos SMB/CIFS en su lugar.
Comandos del sistema Proxmox
Estado del cluster y nodos
pvecm status
pvecm nodes
Actualizar Proxmox
apt update && apt dist-upgrade -y
Reiniciar servicios
systemctl restart pvedaemon
systemctl restart pve-cluster
systemctl status pveproxy
Gestión de almacenamiento
pvesm status
pvesm list local-lvm
Backups con vzdump
vzdump 100 --compress zstd --storage local --mode snapshot
vzdump 200 --compress zstd --storage local --mode stop
Mi flujo de trabajo habitual
Es siempre el mismo, con pequeñas variaciones:
- Crear contenedor:
pct createcon los recursos necesarios - Configurar red: IP estática en la creación o después con
pct set - Entrar y configurar:
pct enterpara instalar servicios - Snapshot antes de cambios:
pct snapshotantes de cualquier actualización importante - Backup periódico:
vzdumpprogramado en cron
Comparativa rápida: pct vs qm
| Acción | LXC (pct) | VM (qm) |
|---|---|---|
| Listar | pct list | qm list |
| Crear | pct create | qm create |
| Iniciar | pct start | qm start |
| Entrar | pct enter | qm terminal |
| Snapshot | pct snapshot | qm snapshot |
| Config | pct config | qm config |
| Redimensionar disco | pct resize | qm resize |
Consejos prácticos
- IDs únicos: Rangos separados (100-199 para LXC, 200+ para VMs) para no mezclar
- Nombres descriptivos:
--hostnameclaro para identificar el servicio de un vistazo - Snapshot antes de tocar: Siempre. Sin excepción antes de actualizaciones importantes
- IPs estáticas con rangos: Asígnalas en la creación para evitar conflictos DHCP. Yo uso rangos de 10 IPs por tipo de dispositivo:
192.168.1.0-9: Hardware de red (router, switches, AP)192.168.1.10-19: Nodos Proxmox192.168.1.20-29: Reservado para expansión192.168.1.30-39: Workers con scripts personalizados192.168.1.40-49: Bases de datos192.168.1.50-59: Aplicaciones de red (ej. AdGuard Home en .53 porque el puerto DNS es 53, fácil de recordar)192.168.1.60-69: Servidores web y proxies192.168.1.70-79: Media servers (Jellyfin, Plex, etc.)192.168.1.80+: VMs varias Encuentra un método que te funcione y no lo cambies.
- Backups regulares: Automatiza
vzdumpcon el cron del sistema. Lo que no tiene backup no existe.
Preguntas frecuentes
¿Puedo usar pct y qm desde otro equipo?
Sí, puedes usar SSH para conectarte al nodo de Proxmox y ejecutar los comandos remotamente.
¿Los snapshots consumen mucho espacio?
Los snapshots LXC son ligeros (copy-on-write), pero las VMs pueden consumir más dependiendo del modo de snapshot.
¿Qué pasa si olvido el ID de un contenedor?
Usa pct list para ver todos con su ID, nombre y estado.
¿Cómo puedo montar un disco NFS en lugar de bind mount?
Aunque es posible, no lo recomiendo para servicios que necesiten detectar archivos nuevos automáticamente (como Jellyfin) porque NFS no propaga eventos inotify. Usa bind mount directo del host.
Compártelo si te ha resultado útil. ¿Usas Proxmox para gestionar tu infraestructura? ¿Qué otros comandos no pueden faltarte? Cuéntame en los comentarios o escríbeme. Y… hasta aquí por hoy!
Artículos relacionados
Mi decisión de usar Proxmox: virtualización seria para Home Lab
Explico por qué elegí Proxmox como plataforma de virtualización para mi Home Lab sobre ESXi, Hyper-V o Docker standalone. Te muestro cómo estructuro servicios en LXC ligeros para AdGuard Home, Nginx Proxy Manager y Workers, y VMs para cargas con Docker como Home Assistant. Incluye comparativa de opciones y por qué evito Docker dentro de LXC.
Racks y mini racks para Home Lab: guía de compra completa
Guía completa sobre racks y mini racks para tu Home Lab según espacio y presupuesto. Compara mini racks de escritorio (2-6U), racks de pared (6-12U), racks de 12-18U y racks completos de 42U. Incluye opciones para Mini PCs y SBCs, comparativas de modelos y dónde comprar.
AdGuard Home: tu propio bloqueador de publicidad y el DNS
AdGuard Home es un bloqueador de publicidad y rastreadores a nivel de red que funciona como DNS interceptivo. Protege todos los dispositivos sin instalar nada en cada uno, bloqueando publicidad, trackers, phishing y contenido adulto. Usa listas como EasyList y permite añadir tus propias para bloquear redes sociales y TikTok. Corre ligero en LXC con 512MB RAM.