Herramientas de usuario

Herramientas del sitio


informatica:sistemas_operativos:linux:proxmox_ve

¡Esta es una revisión vieja del documento!


Proxmox VE

Entorno de virtualización de servidores de código abierto. Está en distribuciones GNU/Linux basadas en Debian con una versión modificada del kernel y permite el despliegue y la gestión de máquinas virtuales y contenedores todo desde una interfaz web muy completa.

Las notas se centran en la versión 9

Proxmox VE es un hipervisor tipo 1 (bare-metal), es decir, se instala directamente sobre el hardware del servidor. Alternativa libre a VMware ESXi o Hyper-V, pero con muchísimas funciones incluidas sin pagar licencias.

Proxmox VE = Debian + KVM + LXC + gestión web

Casos de uso

  • Montar servidores virtualizados
  • Crear laboratorios (Linux, Windows, firewalls, etc.)
  • Consolidar varios servicios en un solo servidor físico
  • Clusters de alta disponibilidad
  • Backups y snapshots fáciles

Qué es y qué no es Proxmox

Proxmox VE sí es:

  • Un hipervisor bare-metal
  • Una alternativa libre a VMware ESXi o Hyper-V
  • Una plataforma para VMs y contenedores LXC

Proxmox VE no es:

  • Docker o Kubernetes
  • Un NAS (aunque pueda usar ZFS)
  • Un proveedor de cloud público

Conceptos en Proxmox

Máquinas virtuales

Una máquina virtual o VM (Virtual Machine) es un ordenador completo virtual:

  • Tiene su propio kernel
  • Arranca con BIOS/UEFI
  • Corre su propio sistema operativo

En Proxmox usa KVM/QEMU.

Ventajas de las VMs

  • Aislamiento fuerte
  • Soportan cualquier SO
  • Más seguras
  • Snapshot del SO completo

Desventajas

  • Más consumo de RAM
  • Arranque más lento
  • Overhead mayor

LXC (Contenedor)

Un contenedor es:

  • Un sistema Linux aislado
  • Comparte el kernel del host
  • No arranca como un PC (no hay BIOS)

Es muy ligero.

Ventajas de LXC:

  • Consume muy poca RAM
  • Arranque casi instantáneo
  • Ideal para muchos servicios pequeños
  • Rendimiento casi nativo

Desventajas:

  • Solo Linux
  • Menor aislamiento
  • No ideal para sistemas críticos de seguridad

Almacenamiento

Proxmox organiza el almacenamiento en un nodo de la siguiente manera:

                Nodo Proxmox (pve)
                       │
           ┌───────────┴───────────┐
           │                       │
       Storage: local (pve)     Storage: local-lvm (pve)
           │                       │
   ┌───────┴─────────┐        ┌────┴─────┐
   │       │         │        │          │
 ISOs  Plantillas  Backups  Discos VM  Snapshots
         CTs                  (Máquinas virtuales)
  • Nodo Proxmox (pve): tu servidor físico con Proxmox instalado.
  • local (pve): almacenamiento basado en sistema de archivos (/var/lib/vz, por defecto). Ideal para archivos:
    • ISOs
    • Plantillas de contenedores (CT)
    • Backups
  • local-lvm (pve): almacenamiento basado en LVM. Ideal para discos de VM:
    • Discos de máquinas virtuales
    • Snapshots a nivel de bloque

Consejos:

  • Si quieres un contenedor ligero, puedes usar local directamente.
  • Si creas una VM con discos grandes, selecciona local-lvm para mejor rendimiento.

Otra forma de representar:

                 🖥️ Nodo Proxmox (pve)
                           │
           ┌───────────────┴───────────────┐
           │                               │
   📁 local (pve)                     💽 local-lvm (pve)
   (Filesystem /var/lib/vz)           (LVM / bloque)
           │                               │
 ┌─────────┼──────────┐              ┌─────┼─────────┐
 │         │          │              │               │
📀 ISOs  📦 Plantillas  💾 Backups   🖥️ VM Discos   ⏺️ Snapshots
   (Instalación)    (CT templates)             (raw/LVM)

Preparar medio de instalación

Tras descargar la ISO, esa imagen puede ser grabada en un CD/DVD o pendrive USB.

En caso de optar por instalarlo en un pendrive USB, se puede utilizar Rufus en Windows o el comando dd en Linux.

En caso de usar Rufus, cuando nos advierta de que ha detectado la ISO de Proxmox como una Hybrid ISO, debemos elegir el modo DD.

Poner captura de esta advertencia

En caso de estar en Linux y optar por el comando dd, con permisos de administrador tecleamos:

dd bs=1M conv=fdatasync if=/ruta/imagen/proxmox.iso of=/dev/ABC

Donde /dev/ABC es el dispositivo que identifica el pendrive USB (/dev/sdc, /dev/sdd…)

Con el medio de instalación preparado, lo metemos en el servidor donde vayamos a instalar Proxmox y nos aseguramos de arrancar desde este medio (ya sea mediante un selector de arranque o modificando el orden de arranque en la BIOS/UEFI)

Instalación

Durante la instalación podemos personalizar el uso que Proxmox hará del disco donde vayamos a instalarlo:

  • hdsize: tamaño (en GB) a usar del disco. Lo normal es poner el tamaño total del disco, pero si no lo hacemos, el resto quedará sin particionar (por si lo queremos usar en un futuro para otras particiones).
  • swapsize: tamaño máximo (en GB) de la memoria de intercambio.
  • maxroot: tamaño máximo (en GB) de la partición root (donde se instalará el sistema). Máximo hdsize/4.
  • minfree: tamaño mínimo libre (en GB) para root.
  • maxvz: tamaño máximo (en GB) para la partición de datos.

Proxmox hace la siguiente cuenta: maxvz = hdsize - maxroot - swapsize - minfree

Ejemplo con un disco de 32 GB:

  • hdsize: 32 GB
  • swapsize: 2 GB
  • maxroot: 20 GB
  • minfree: 0
  • maxvz: (en blanco)

Tras instalarse, Proxmox ocupa ¿?¿?

El instalador crea un grupo de volúmenes (VG) llamado pve y los volúmenes lógicos (LV) root, data y swap. Podemos personalizar el tamaño de estos volúmenes:

Si lo dejamos todo por defecto (sin asignar espacio concreto), tomando de ejemplo un disco de 500 GB:

# vgdisplay
  --- Volume group ---
  VG Name               pve
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  7
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <465.26 GiB
  PE Size               4.00 MiB
  Total PE              119106
  Alloc PE / Size       115011 / 449.26 GiB
  Free  PE / Size       4095 / <16.00 GiB
  VG UUID               RGCV1F-8q0g-N8eV-2F7O-mimm-XfBp-IHdjp0

root@klein:~# lvdisplay
  --- Logical volume ---
  LV Path                /dev/pve/swap
  LV Name                swap
  VG Name                pve
  LV UUID                UQnlWe-m6rR-m6xX-jTfV-Cewe-A2By-XIfNw9
  LV Write Access        read/write
  LV Creation host, time proxmox, 2022-02-11 11:15:24 +0100
  LV Status              available
  # open                 2
  LV Size                8.00 GiB
  Current LE             2048
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/pve/root
  LV Name                root
  VG Name                pve
  LV UUID                KaqGI5-Z2ZN-wkce-Yn3y-RVuB-jzzD-QAO8ey
  LV Write Access        read/write
  LV Creation host, time proxmox, 2022-02-11 11:15:24 +0100
  LV Status              available
  # open                 1
  LV Size                96.00 GiB
  Current LE             24576
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

  --- Logical volume ---
  LV Name                data
  VG Name                pve
  LV UUID                gGiM97-L2Wx-UbwL-PNYd-bAK7-w5Uw-7EEqHA
  LV Write Access        read/write
  LV Creation host, time proxmox, 2022-02-11 11:15:32 +0100
  LV Pool metadata       data_tmeta
  LV Pool data           data_tdata
  LV Status              available
  # open                 0
  LV Size                <338.36 GiB
  Allocated pool data    0.00%
  Allocated metadata     0.50%
  Current LE             86619
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:4

Por tanto:

  • swap: 8 GB (memoria de intercambio)
  • root: 96 GB (sistema y máquinas virtuales que vayamos creando)
  • data: 338 GB (copias de seguridad de máquinas)

El almacenamiento “local” por defecto está localizado bajo /var/lib/vz/. “local-lvm” no es un directorio de almacenamiento sino un thin-lvm

Si, con el ejemplo de disco de 500 GB, establecemos un valor de 300 en minfree, nos quedaría:



Si, con el ejemplo de disco de 500 GB, establecemos un valor de 240 GB en maxvz, nos quedaría:

root@klein:~# lvdisplay
  --- Logical volume ---
  LV Path                /dev/pve/swap
  LV Name                swap
  VG Name                pve
  LV UUID                QNuDkb-gkkB-eJV9-njGH-Tx1n-cYuS-Jllvs8
  LV Write Access        read/write
  LV Creation host, time proxmox, 2022-02-11 14:53:34 +0100
  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           253:0

  --- Logical volume ---
  LV Path                /dev/pve/root
  LV Name                root
  VG Name                pve
  LV UUID                DWApZI-elu9-Nat3-RzlJ-fi1v-y1T5-95qyBs
  LV Write Access        read/write
  LV Creation host, time proxmox, 2022-02-11 14:53:34 +0100
  LV Status              available
  # open                 1
  LV Size                96.00 GiB
  Current LE             24576
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

  --- Logical volume ---
  LV Name                data
  VG Name                pve
  LV UUID                e9YBDd-gckd-01Az-C9F5-Hb9d-d1Dk-CqJWA1
  LV Write Access        read/write
  LV Creation host, time proxmox, 2022-02-11 14:53:40 +0100
  LV Pool metadata       data_tmeta
  LV Pool data           data_tdata
  LV Status              available
  # open                 0
  LV Size                <245.00 GiB
  Allocated pool data    0.00%
  Allocated metadata     0.67%
  Current LE             62719
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:4

Si, con el ejemplo de disco de 500 GB, establecemos un valor de 250 GB en maxroot, nos quedaría:

root@klein:~# lvdisplay
  --- Logical volume ---
  LV Path                /dev/pve/swap
  LV Name                swap
  VG Name                pve
  LV UUID                jrCc81-u9Zg-z57E-A8Xp-sfg6-tl24-8C1Jd2
  LV Write Access        read/write
  LV Creation host, time proxmox, 2022-02-11 15:15:44 +0100
  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           253:0

  --- Logical volume ---
  LV Path                /dev/pve/root
  LV Name                root
  VG Name                pve
  LV UUID                BVYYst-7zSz-zIVw-VJdj-tyeD-qPPN-xB1iIn
  LV Write Access        read/write
  LV Creation host, time proxmox, 2022-02-11 15:15:44 +0100
  LV Status              available
  # open                 1
  LV Size                116.25 GiB
  Current LE             29760
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

  --- Logical volume ---
  LV Name                data
  VG Name                pve
  LV UUID                q451ZL-6a3H-nyNo-Pwf4-nykg-0g0E-xoKXOJ
  LV Write Access        read/write
  LV Creation host, time proxmox, 2022-02-11 15:15:51 +0100
  LV Pool metadata       data_tmeta
  LV Pool data           data_tdata
  LV Status              available
  # open                 0
  LV Size                <322.43 GiB
  Allocated pool data    0.00%
  Allocated metadata     0.52%
  Current LE             82542
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:4

Si, con el ejemplo de disco de 500 GB, establecemos un valor de 20 GB en maxroot y 222 GB para minfree, nos quedaría:

root@klein:~# lvdisplay
  --- Logical volume ---
  LV Path                /dev/pve/swap
  LV Name                swap
  VG Name                pve
  LV UUID                z4NBtg-bzqV-t4UE-YWI1-pd75-PMuW-BV8GMW
  LV Write Access        read/write
  LV Creation host, time proxmox, 2022-02-11 16:14:35 +0100
  LV Status              available
  # open                 2
  LV Size                8.00 GiB
  Current LE             2048
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/pve/root
  LV Name                root
  VG Name                pve
  LV UUID                eSurET-QqJq-dHhe-Qmmb-Zo7j-gVev-SKUhLZ
  LV Write Access        read/write
  LV Creation host, time proxmox, 2022-02-11 16:14:35 +0100
  LV Status              available
  # open                 1
  LV Size                20.00 GiB
  Current LE             5120
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

  --- Logical volume ---
  LV Name                data
  VG Name                pve
  LV UUID                EsZC56-c8TL-Yr5o-6fp2-INl4-qIEJ-PYn8vN
  LV Write Access        read/write
  LV Creation host, time proxmox, 2022-02-11 16:14:40 +0100
  LV Pool metadata       data_tmeta
  LV Pool data           data_tdata
  LV Status              available
  # open                 0
  LV Size                210.95 GiB
  Allocated pool data    0.00%
  Allocated metadata     0.77%
  Current LE             54004
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:4

En este último escenario, nos quedarían libres:

 vgdisplay | grep Free
  Free  PE / Size       56830 / 221.99 GiB

221.00 GiB para crear un nuevo volumen y dedicarlo a backups.

Proxmox en VirtualBox

Instalación

Desde VirtualBox 6.3 hay que activar la aceleración de virtualización anidada: ConfiguraciónSistemaProcesadorHabilitar VT-x/AMD-V anidado.

Si la opción no apareciese seleccionable, se puede activar desde línea de comandos con VBoxManage modifyvm nombre-maquina-virtual --nested-hw-virt on

Para el caso más sencillo, configura el adaptador de red como Adaptador puente. De esta manera, Proxmox es un equipo más en tu red local, igual que tu PC o tu móvil. Además, en la parte de Promiscuous Mode debemos elegir Permitir todo para que las interfaces virtuales puedan recibir tráfico DHCP (si optamos por esto).

Proxmox detectará la NIC virtual (enp0s3 o nic0), sin IP, y luego creará un bridge vmbr0 que es un switch virtual que conecta la NIC física con las VMs y contenedores. El bridge tendrá una IP y es la que nos permitirá acceder a la gestión de Proxmox (https://ip.servidor:8006)

Red

[ Router 192.168.0.1 ]
        |
   LAN 192.168.0.0/24
        |
[ VirtualBox (bridge) ]
        |
[ nic0 ]   ← NIC virtual
        |
[ vmbr0 ]  ← switch virtual + IP
        |
[ Proxmox Host 192.168.0.16 ]
        |
[ VMs / LXC ]

Con esa configuración, sin hacer nada más, funcionaría:

  • Acceso web a Proxmox
  • VMs accesibles desde tu LAN
  • Internet desde VMs
  • SSH entre máquinas
  • Laboratorio realista

Regla mental:

  • nic0 = tarjeta de red física
  • vmbr0 = switch virtual
  • IP siempre en el bridge

Si eso se cumple, Proxmox estará feliz :-)

PCI passthrough

Es posible hacer accesibles a las máquinas virtuales el hardware que esté conectado en puertos PCI, siendo el caso más interesante el de las tarjetas gráficas. De esa manera, podemos utilizar aceleración gráfica en las máquinas virtuales.

La placa base y la tarjeta gráfica deben soportar PCI passthrough, conocido también como IOMMU. Los sistemas Intel se refieren a esta característica como Intel VT-d mientras que en AMD es AMD IO-MMU (o AMD SVM).

Cuanta más memoria tenga la tarjeta gráfica, más memoria se podrá compartir con las máquinas virtuales.

Completar sección

Almacenamiento

Desde la versión 7 podemos descargar ISOs desde Internet. Si el almacenamiento permite archivos ISO, tendremos el botón Download from URL donde le indicaremos la URL de la ISO y un nombre del archivo (lo puede detectar automáticamente si pulsamos en Query URL)

El almacenamiento “local” por defecto de las máquinas virtuales es /var/lib/vz/images/<VMID>

Gestión gráfica

Una vez instalado, podemos acceder con el navegador a https://IP:8006. Desde ahí podemos:

  • Crear VMs y contenedores
  • Ver consumo de CPU/RAM
  • Configurar redes y discos
  • Hacer backups y restauraciones

Máquinas virtuales

Para la creación de una máquina virtual, además de decidir los recursos que tendrá, debemos tener disponibles los medios de instalación del sistema operativo.

En Proxmox, si vamos a Datacenter → Storage → ISO Images y pulsamos en Upload, podemos subir al servidor de Proxmox la ISO de instalación del sistema que queramos.

También tenemos otra posibilidad que es descargar la ISO desde Internet con el botón Download from URL.

Gestión en línea de comandos

Versión y software

pveversion

Ejemplo de salida:

pve-manager/7.1-10/6ddebafe (running kernel: 5.13.19-4-pve)

Si le añadimos la opción -v podemos ver la lista de programas relacionados con pve:

pveversion -v

Rendimiento

Para ver cómo de rápido es el sistema en el que tenemos instalado Proxmox:

pveperf

Ejemplo de salida:

PU BOGOMIPS:      40042.48
REGEX/SECOND:      2331444
HD SIZE:           19.52 GB (/dev/mapper/pve-root)
BUFFERED READS:    493.30 MB/sec
AVERAGE SEEK TIME: 0.05 ms
FSYNCS/SECOND:     504.13
DNS EXT:           59.75 ms
DNS INT:           27.63 ms (local)

Contenedores

Proxmox VE está pensado para gestionar todo desde la línea de comandos usando la herramienta pct (Proxmox Container Toolkit) para LXC.

Suponiendo que tenemos un contenedor con identificador 100:

Acción Comando
Listar todos los contenedores pct list
Mostrar información de un contenedor pct config 101
Iniciar contenedor pct start 101
Parar contenedor pct stop 101
Reiniciar contenedor pct reboot 101
Entrar en la consola del contenedor pct console 101
Ejecutar un comando dentro del contenedor pct exec 101 -- <comando>
Crear snapshot pct snapshot 101 <nombre>
Listar snapshots pct listsnapshot 101
Restaurar snapshot pct rollback 101 <nombre>
Clonar contenedor pct clone 101 <nuevoID> --name <nombre>
Crear un contenedor nuevo pct create <ID> <plantilla> --storage <STORAGE> --hostname <NOMBRE>
Eliminar contenedor pct destroy 101

Máquinas virtuales

En Proxmox las máquinas virtuales (VM) se gestionan con la herramienta qm (Qemu/KVM Manager). Te hago un resumen completo y práctico de los comandos básicos.

Suponiendo que tenemos una máquina con identificador 100:

Acción Comando
Listar las máquinas virtuales qm list
Iniciar una máquina virtual qm start 100
Apagar de forma limpia qm shutdown 100
Apagado forzoso qm stop 100
Reiniciar qm reset 100
Conectarse a la consola de QEMU (modo monitor) qm monitor 100
Terminal tipo serial qm terminal 100
Conectar a la VM como si fuera la pantalla del host qm console 100
Eliminar una máquina virtual qm destroy 100

Crear una máquina virtual:

qm create <VMID> --name <nombre> --memory <MB> --cores <número> --net0 virtio,bridge=vmbr0 --bootdisk scsi0 --scsihw virtio-scsi-pci --ide2 <storage>:cloudinit
  • VMID → ID único de la VM (por ejemplo 100)
  • memory → RAM en MB
  • cores → número de CPU
  • net0 → interfaz de red conectada al bridge vmbr0
  • bootdisk → disco principal
  • cloudinit → si quieres automatizar la instalación

Para instalar desde ISO, usar –cdrom <storage>:iso/<imagen>.iso

Ejemplo mínimo:

qm create 100 --name vm-test --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0 --cdrom local:iso/debian-12.iso --scsihw virtio-scsi-pci --bootdisk scsi0

Resolución de problemas

Comandos:

pveversion -v

Muestra información sobre los paquetes de Proxmox VE

Información de configuración de una máquina virtual:

qm config <VMID>

Ejemplo:

m config 100
agent: 1
boot: order=ide0;ide2;ide1
cores: 2
ide0: vm:100/vm-100-disk-0.qcow2,cache=writeback,discard=on,size=32G
ide1: isos:iso/virtio-win.iso,media=cdrom,size=543390K
ide2: isos:iso/Win10_21H1_Spanish_x64.iso,media=cdrom
machine: pc-i440fx-6.1
memory: 4096
meta: creation-qemu=6.1.0,ctime=1636485464
name: w10pro
net0: e1000=66:39:AE:17:91:E1,bridge=vmbr0,firewall=1
numa: 0
ostype: win10
scsihw: virtio-scsi-pci
smbios1: uuid=a371025a-24d9-4f26-bddb-04783f8cd5b5
sockets: 1
vga: virtio
vmgenid: 2ce608d5-0482-4201-a68d-9f0c5edb1d52

Creación de máquinas virtuales

Windows 11

Para obtener el mejor rendimiento, se usarán los drivers VirtIO durante la instalación de Windows.

Configuración de la máquina virtual:

  • Guest OS: “Microsoft Windows 11/2022”
  • En la pestaña System, habilitar Qemu Agent
  • Disco duro virtual:
    • Bus: SCSI
    • Controladora: VirtIO SCSI
    • Caché: “Write back” (“No cache” es más seguro, pero también más lento
    • Marcar “Discard” para un uso óptimo del espacio del disco (TRIM).
  • Red: VirtIO (paravirtualized)

Para los drivers VirtIO, subimos la ISO que podemos obtener desde aquí.

En la configuración de la máquina virtual, añadimos un lector de CD (“Add → CD/DVD drive”) con el bus “IDE” y el número 0.

Comenzamos la instalación de Windows. En la opción avanzada de instalación, elegimos Cargar controladores y cargamos (buscando en la ISO de los drivers de VirtIO):

  • Disco duro: vioscsi\w11\amd64. Elegimos “Red Hat VirtIO SCSI pass-through controller”

Una vez instalado Windows, desde el propio sistema operativo virtualizado instalamos el resto de drivers VirtIO automáticamente desde el ejecutable virtio-win-gt-x64.exe de la ISO.

Windows 10

Para obtener el mejor rendimiento, se usarán los drivers VirtIO durante la instalación de Windows.

Configuración de la máquina virtual:

  • Guest OS: “Microsoft Windows 10/2016/2019”
  • En la pestaña System, habilitar Qemu Agent
  • Disco duro virtual:
    • Bus: SCSI
    • Controladora: VirtIO SCSI
    • Caché: “Write back” (“No cache” es más seguro, pero también más lento
    • Marcar “Discard” para un uso óptimo del espacio del disco (TRIM).
  • Red: VirtIO (paravirtualized)

Para los drivers VirtIO, subimos la ISO que podemos obtener desde aquí.

En la configuración de la máquina virtual, añadimos un lector de CD (“Add → CD/DVD drive”) con el bus “IDE” y el número 3.

Comenzamos la instalación de Windows. En la opción avanzada de instalación, elegimos Cargar controladores y cargamos (buscando en la ISO de los drivers de VirtIO):

  • Disco duro: vioscsi\w10\amd64. Elegimos “Red Hat VirtIO SCSI pass-through controller”
  • Red: NetKVM\w10\amd64 y elegimos Redhat VirtIO Ethernet Adapter“
  • Memory Ballooning: Balloon\w10\amd64 y elegimos “VirtIO Balloon Driver”

Windows 7

Para obtener el mejor rendimiento, se usarán los drivers VirtIO durante la instalación de Windows.

Configuración de la máquina virtual:

  • Guest OS: “7/2008r2”
  • Disco duro virtual:
    • Bus: SCSI
    • Controladora: VirtIO SCSI
    • Caché: “Write back” (“No cache” es más seguro, pero también más lento)
  • Red: VirtIO (paravirtualized)

Para los drivers VirtIO, subimos la ISO que podemos obtener desde aquí.

En la configuración de la máquina virtual, añadimos un lector de CD (“Add → CD/DVD drive”) con el bus “IDE” y el número 3.

Comenzamos la instalación de Windows. En la opción avanzada de instalación, elegimos Cargar controlador y cargamos (buscando en la ISO de los drivers de VirtIO):

  • Disco duro: viostor\w7\amd64. Elegimos “Red Hat VirtIO SCSI controller”
  • Red: NetKVM\w7\amd64 y elegimos Redhat VirtIO Ethernet Adapter”
  • Memory Ballooning: Balloon\w7\amd64 y elegimos “VirtIO Balloon Driver”

Hypervisor dentro de hypervisor

Si queremos instalar otro hypervisor dentro de Proxmox es posible siempre y cuando el procesador soporte la virtualización anidada. Podemos averiguarlo ejecutando:

cat /sys/module/kvm_intel/parameters/nested

Si nos devuelve Y, podremos.

Cuando creemos la máquina virtual donde instalaremos el hypervisor tendremos que elegir una CPU de tipo host.

Añadir disco

Para añadir un nuevo disco a un servidor con Proxmox, una vez instalado, vamos a Datacenter → Nodo → Disks. Si aparece ahí, lo ha detectado correctamente. Ahora hay que crear una partición y formatearla:

fdisk /dev/sdb

Línea de comandos

Máquinas virtuales

Listar máquinas virtuales

qm list

Ejemplo de salida:

      VMID NAME                 STATUS     MEM(MB)    BOOTDISK(GB) PID
       100 debian11             stopped    2048              32.00 0
       101 win10                stopped    4096              64.00 0
       102 win11                stopped    8128              64.00 0

Configuración

Para ver la configuración de una máquina virtual:

qm config <ID_MV>

Donde ID_MV es el identificador de la máquina virtual. Por ejemplo:

qm config 100

Salida:

boot: order=scsi0;ide2;net0
cores: 1
description: * IP%3A `192.168.0.51`%0A* usuario%3A `debianita`%0A* root%3A `root`
ide2: isos:iso/debian-11.2.0-amd64-netinst.iso,media=cdrom
memory: 2048
meta: creation-qemu=6.1.0,ctime=1644606499
name: debian11
net0: virtio=A2:F0:8E:A1:B6:9F,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
scsi0: local-lvm:vm-100-disk-0,size=32G
scsihw: virtio-scsi-pci
smbios1: uuid=36799c55-d997-4658-ae45-c63cc67f9a42
sockets: 1
vmgenid: 01bbacf6-bc8b-4433-9e91-d5e5e5aa64b5

Apagar máquina virtual

Enviar señal de apagado a la máquina virtual:

qm shutdown <ID_MV>

Detener máquina virtual

A diferencia de shutdown el siguiente comando detiene inmediatamente la ejecución de la máquina virtual:

qm stop <ID_MV>

Suspender máquina virtual

qm suspend <ID_MV>

Arrancar máquina virtual

qm start <ID_MV>

Copia de seguridad de máquina virtual

vzdump 101 -compress lzo

101 es el identificador de la máquina virtual que queremos guardar.

Wake on LAN

Puede ser útil poder arrancar el servidor que tiene Proxmox desde la red mediante lo que se conoce como Wake on LAN. Esta característica debe estar soportado tanto por la placa base como por tarjeta de red. Suponiendo que lo soporta la placa, podemos verificar el soporte en la tarjeta de red instalando en el servidor Proxmox la herramienta ethtool y ejecutamos:

ethtool <INTERFAZ> | grep Wake-on

Ejemplo:

ethtool enp3s0 | grep Wake-on
	Supports Wake-on: pumbg
	Wake-on: d

Posibles desencadenadores de Wake-on:

  • d: deshabilitado
  • p: actividad PHY
  • u: actividad unicast
  • m: actividad multicast
  • b: actividad broadcast
  • a: actividad ARP
  • g: actividad de paquete mágico

El valor g es necesario para Wake on LAN, así que para habilitarlo:

ethtool -s enp3s0 wol g

UEFI en máquinas virtuales

Si necesitas trabajar con particiones UEFI, deberás usar una Máquina Virtual (VM), los contenedores LXC no lo soportan (son contenedores que comparten el kernel del host, no tienen su propio firmware ni proceso de arranque tradicional.)

A la hora de configurar una nueva máquina virtual, en la pestaña System:

  • BIOS: “OVMF (UEFI)”
  • EFI Storage: local-lvm (o el almacenamiento que tengamos).
  • Machine: q35 (recomendado para UEFI)
  • Add TPM: Opcional para Secure Boot

Podemos crear una máquina virtual para UEFI desde línea de comandos con:

# Crear VM con UEFI
qm create 100 \
  --name "vm-uefi-linux" \
  --memory 2048 \
  --cores 2 \
  --net0 virtio,bridge=vmbr0 \
  --bios ovmf \
  --machine q35 \
  --efidisk0 local-lvm:1,format=qcow2,efitype=4m,pre-enrolled-keys=0

En la instalación del sistema operativo en la nueva máquina virtual tendremos que hacer varios cambios en el disco virtual:

  • Crear tabla de particiones GPT
  • Crear partición ESP (EFI System Partition)
  • Instalar un gestor de arranque UEFI

Ejemplo dentro de una máquina virtual Linux:

# Dentro de la VM Linux
sudo gdisk /dev/vda
# Crear tabla GPT y particiones:
# 1. Partición ESP (500MB, tipo EF00)
# 2. Partición raíz
# 3. Partición swap (opcional)
 
# Formatear ESP
sudo mkfs.fat -F32 /dev/vda1
sudo mount /dev/vda1 /boot/efi

Ventajas

Las ventajas de usar VM en lugar de LXC para aprender UEFI:

  • Arranque real UEFI con OVMF (emulador UEFI open-source)
  • Puedes experimentar con:
    • Secure Boot
    • EFI System Partition (ESP)
    • Bootloaders UEFI (systemd-boot, GRUB UEFI, rEFInd)
    • Variables EFI
    • Aislamiento completo sin riesgo al host
    • Snapshots para experimentar sin miedo

Verificar arranque UEFI

En un sistema operativo Linux virtualizado en la máquina anterior:

# Verificar si el sistema arrancó en modo UEFI
ls /sys/firmware/efi/efivars  # Si existe, es UEFI
 
# Ver particiones EFI
sudo fdisk -l | grep EFI

Herramientas UEFI

En Debian:

apt install efibootmgr efivar

Podemos listar entradas de arranque UEFI con:

sudo efibootmgr -v

Snapshots

Las instantáneas o snapshots permiten guardar el estado de una máquina virtual en un determinado momento. Es como guardar una copia, pero sin requerir el mismo espacio en el disco. Además, es posible guardar múltiples estados de una misma máquina virtual.

En cualquier momento podemos regresar al estado en que estaba la máquina en una determinado momento gracias a las instantáneas.

Proxmox permite la realización de instantáneas “en caliente”, es decir, no es necesario detener la máquina virtual sino que se pueden hacer con ella en funcionamiento.

Creación

En el panel de la máquina virtual o contenedor LXC de nuestro interés, vamos al menú Snapshots y luego pulsamos el botón que pone Take Snapshot. Podemos dar un nombre y una descripción.

Desde la línea de comandos sería:

pct snapshot <IDENTIFICADOR_DEL_CCONTENEDOR> <NOMBRE_DE_LA_INSTANTANEA>

Restauración

Vamos al menú Snapshot de la máquina virtual o contenedor LXC y marcamos la instantánea que queremos restaurar. Al pulsar en Rollback, la máquina o contenedor volverá al estado exacto de la instantánea.

Desde la línea de comandos sería:

pct rollback <ID_CONTENEDOR> <NOMBRE_DE_LA_INSTANTÁNEA>

Clonación

La clonación permite crear un contenedor o máquina virtual completamente nueva a partir de la original. Útil para crear laboratorios duplicados, reproducir servicios…

Creación

Arriba a la derecha, pulsamos el botón More y luego Clone. En las máquinas virtuales tendremos dos tipos de clon:

  • Full Clone: copia todo el contenedor (más lento, ocupa más espacio).
  • Linked Clone: copia ligera que depende del original (ahorra espacio, pero si borras el original, el linked clone falla)

Backups

Proxmox permite realizar copias de seguridad de las máquinas virtuales. Las copias se realizan internamente con vzdump y son copias de la máquina al completo.

Ajustes y mantenimiento

Repositorios

Dentro del directorio /etc/apt/sources.list.d podemos encontrar los siguientes ficheros:

  • ceph.sources
  • debian.sources
  • pve-enterprise.sources

A partir de Debian 13 («Trixie»), el formato de los archivos de configuración de repositorios cambió a uno nuevo, basado en bloques de configuración por repo, llamado Deb822 (Deb822-style Format).

Por ejemplo, este es el contenido de debian.sources:

Types: deb
URIs: http://deb.debian.org/debian/
Suites: trixie trixie-updates
Components: main contrib non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

Types: deb
URIs: http://security.debian.org/debian-security/
Suites: trixie-security
Components: main contrib non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

Si no tenemos una suscripción, podemos deshabilitar los repositorios ceph.sources y pve-enterprise.sources

Types: deb
URIs: https://enterprise.proxmox.com/debian/pve
Suites: trixie
Components: pve-enterprise
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
Enabled: no

Si queremos añadir el repositorio de la versión comunitaria, creamos un fichero llamado proxmox.sources con el siguiente contenido:

Types: deb
URIs: http://download.proxmox.com/debian/pve
Suites: trixie
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg

Eliminar mensaje suscripción no válida

Al acceder a la administración (https://ip.del.servidor:8006) veremos el mensaje:

You do not have a valid subscription for this server. Please visit www.proxmox.com to get a list of available options

Podemos hacer que no se muestre si abrimos el fichero /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js y buscamos la línea:

    title: gettext('No valid subscription'),

Comentamos esta parte:

// if (res === null || res === undefined || !res || res
//    .data.status.toLowerCase() != 'active') {

Y añadimos en su lugar:

if (false) {

Reiniciamos el servicio web de Proxmox:

systemctl restart pveproxy.service

Estas modificaciones se pierden al actualizar Proxmox. Tras la actualización, habrá que volver a hacerlo.

Resolución de problemas

Recursos

informatica/sistemas_operativos/linux/proxmox_ve.1769791269.txt.gz · Última modificación: por tempwin