Herramientas
🛠️

Scripts para Proxmox

Scripts útiles para administración y automatización de Proxmox.

Scripts útiles para administración, automatización y monitoreo de Proxmox VE. Ejecútalos en tu host Proxmox o vía SSH.

📋 Listar Todas las VMs y Contenedores con Estado

Vista general rápida de cada VM y CT, incluyendo estado, CPU, memoria y tiempo de actividad.

#!/bin/bash
# pve-status — Show all VMs and CTs with resource usage
echo "ID       NAME                 STATUS    CPU%   MEM(MB)  UPTIME"
echo "-------- -------------------- --------- ----- --------- ----------"
qm list 2>/dev/null | tail -n +2 | while read vm; do
  vmid=$(echo $vm | awk '{print $1}')
  name=$(echo $vm | awk '{print $2}')
  status=$(echo $vm | awk '{print $3}')
  if [ "$status" = "running" ]; then
    cpu=$(qm agent $vmid get-osinfo 2>/dev/null | grep -c . || echo "N/A")
    mem=$(qm status $vmid --verbose 2>/dev/null | grep maxmem | awk '{printf "%.0f", $2/1048576}')
    uptime=$(qm status $vmid --verbose 2>/dev/null | grep uptime | awk '{print $2}')
    printf "%-8s %-20s %-9s %-5s %-8s %s\n" "$vmid" "${name:0:20}" "$status" "$cpu" "$mem" "${uptime}s"
  else
    printf "%-8s %-20s %-9s %-5s %-8s %s\n" "$vmid" "${name:0:20}" "$status" "-" "-" "-"
  fi
done

💾 Respaldar Todas las VMs a PBS

Ejecuta trabajos de Proxmox Backup Server para todas las VMs en ejecución. Agrega a cron para respaldos diarios.

#!/bin/bash
# pve-backup-all — Backup all VMs with PBS
STORAGE="pbs-local"
MODE="snapshot"
COMPRESS="zstd"

echo "Starting backup of all VMs to $STORAGE..."
for vmid in $(qm list | tail -n +2 | awk '{print $1}'); do
  echo "  Backing up VM $vmid..."
  vzdump $vmid --storage $STORAGE --mode $MODE --compress $COMPRESS --quiet 1
done
echo "Done. Check /var/log/vzdump/ for details."

🔄 Actualizar Todos los Contenedores LXC

Ejecuta apt update && apt upgrade dentro de cada contenedor LXC en ejecución.

#!/bin/bash
# pve-update-containers — Update all running LXCs
for ctid in $(pct list | tail -n +2 | awk '{print $1}'); do
  status=$(pct status $ctid | awk '{print $2}')
  if [ "$status" = "running" ]; then
    echo "Updating CT $ctid..."
    pct exec $ctid -- bash -c "apt update && apt upgrade -y && apt autoremove -y"
  fi
done
echo "All containers updated."

📊 Resumen de Recursos de Proxmox

Estadísticas de CPU, memoria, almacenamiento y E/S para el host Proxmox.

#!/bin/bash
# pve-resources — Host resource overview
echo "=== CPU ==="
grep -c ^processor /proc/cpuinfo | xargs echo "Cores:"
uptime | awk -F'load average:' '{print "Load:" $2}'

echo -e "\n=== MEMORY ==="
free -h | grep -E '^Mem|^Swap'

echo -e "\n=== STORAGE ==="
df -h / /var/lib/vz 2>/dev/null | grep -v ^Filesystem

echo -e "\n=== ZFS POOLS ==="
zpool list 2>/dev/null || echo "No ZFS pools"

echo -e "\n=== RUNNING VMs/CTs ==="
qm list | grep running | wc -l | xargs echo "VMs running:"
pct list | grep running | wc -l | xargs echo "CTs running:"

🔍 Buscar VM por MAC o IP

Localiza qué VM o contenedor posee una dirección MAC o IP específica.

#!/bin/bash
# pve-find — Find VM/CT by MAC or IP
if [ -z "$1" ]; then
  echo "Usage: pve-find <mac|ip>"
  exit 1
fi

echo "Searching for '$1'..."
for vmid in $(qm list | tail -n +2 | awk '{print $1}'); do
  qm config $vmid 2>/dev/null | grep -qi "$1" && echo "  VM $vmid: $(qm config $vmid | grep name | awk '{print $2}')"
done
for ctid in $(pct list | tail -n +2 | awk '{print $1}'); do
  pct config $ctid 2>/dev/null | grep -qi "$1" && echo "  CT $ctid: $(pct config $ctid | grep hostname | awk '{print $2}')"
done

💡 Instalación

# Save scripts to /usr/local/bin and make executable
sudo cp pve-* /usr/local/bin/
sudo chmod +x /usr/local/bin/pve-*
# Optionally add a cron job for daily backups
echo "0 2 * * * /usr/local/bin/pve-backup-all" | crontab -