Marcos Ramírez BETA
Terminal de Linux mostrando comandos pct y qm de Proxmox para gestión de contenedores y máquinas virtuales

Comandos básicos de Proxmox: gestión de LXC y VMs vía CLI

· ⏱ 10+ min lectura

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 resize2fs automáticamente si el sistema de archivos lo soporta.
  • Reducir disco: Peligroso. Nunca reduzcas el disco por debajo del espacio usado. Verifica primero:
    pct exec 100 -- df -h /
    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 usar pct resize.
  • Problemas con LVM: Como conté en mi post de Jellyfin, intenté usar lvreduce/lvextend manualmente y no fui capaz. La interfaz web de Proxmox hace el resize2fs automáticamente y es más fiable. Si usas CLI, ejecuta e2fsck y resize2fs manualmente 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 directorio
  • ro=0: Modo lectura-escritura (1 para 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 + resize2fs en 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 resize con 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:

  1. Crear contenedor: pct create con los recursos necesarios
  2. Configurar red: IP estática en la creación o después con pct set
  3. Entrar y configurar: pct enter para instalar servicios
  4. Snapshot antes de cambios: pct snapshot antes de cualquier actualización importante
  5. Backup periódico: vzdump programado en cron

Comparativa rápida: pct vs qm

AcciónLXC (pct)VM (qm)
Listarpct listqm list
Crearpct createqm create
Iniciarpct startqm start
Entrarpct enterqm terminal
Snapshotpct snapshotqm snapshot
Configpct configqm config
Redimensionar discopct resizeqm resize

Consejos prácticos

  • IDs únicos: Rangos separados (100-199 para LXC, 200+ para VMs) para no mezclar
  • Nombres descriptivos: --hostname claro 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 Proxmox
    • 192.168.1.20-29: Reservado para expansión
    • 192.168.1.30-39: Workers con scripts personalizados
    • 192.168.1.40-49: Bases de datos
    • 192.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 proxies
    • 192.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 vzdump con 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

Interfaz de Proxmox VE mostrando máquinas virtuales y contenedores, representando la virtualización híbrida

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.

05:30 5 min Marcos Ramírez Lucía
Logo de AdGuard Home bloqueando anuncios

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.

06:30 7 min Marcos Ramírez Lucía