Summary
Proxmox is what you use when you want a proper hypervisor and don’t want to pay VMware prices. It combines KVM full virtualization with LXC containers under one web interface, and the fact that it’s free (with optional enterprise support) makes it the obvious choice for homelab setups. You get snapshots, clustering, live migration, and ZFS storage out of the box — no license negotiations required.
Key concepts
- KVM (Kernel-based Virtual Machine): Full virtualization for running complete operating systems
- LXC (Linux Containers): Lightweight OS-level virtualization for Linux systems
- ZFS/LVM storage: Advanced storage management with snapshots and replication
- High Availability (HA): Automatic VM failover in cluster configurations
- Backup and restore: Built-in backup solutions with Proxmox Backup Server
- Clustering: Multiple Proxmox nodes working as a single system
Details
Installation and initial setup
System requirements:
- 64-bit CPU with virtualization extensions (Intel VT-x or AMD-V)
- Minimum 2GB RAM (8GB+ recommended)
- Storage for host OS and VM/container data
- Network interface(s)
Installation:
# Download ISO from proxmox.com/downloads
# Boot from ISO and follow installer
# Access web interface: https://proxmox-ip:8006Post-installation:
# Update system
apt update && apt full-upgrade
# Remove enterprise repository (if not subscribed)
rm /etc/apt/sources.list.d/pve-enterprise.list
# Add no-subscription repository
echo "deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
# Update again
apt updateWeb interface management
Access points:
- Web UI:
https://proxmox-ip:8006 - Default credentials:
rootwith installation password - Shell access via web terminal or SSH
Navigation:
- Datacenter → Cluster-wide settings and overview
- Node → Individual server management
- VM/CT → Virtual machine or container management
Virtual machine management
Creating VMs via CLI:
# Create VM
qm create 100 --name ubuntu-vm --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0
# Import disk image
qm importdisk 100 ubuntu-22.04.qcow2 local-lvm
# Attach disk to VM
qm set 100 --scsi0 local-lvm:vm-100-disk-0
# Set boot order
qm set 100 --boot order=scsi0
# Start VM
qm start 100
# Stop VM
qm stop 100
# List all VMs
qm list
# Show VM config
qm config 100
# Delete VM
qm destroy 100VM operations:
# Clone VM
qm clone 100 101 --name cloned-vm
# Create snapshot
qm snapshot 100 pre-update
# Rollback snapshot
qm rollback 100 pre-update
# Delete snapshot
qm delsnapshot 100 pre-update
# Migrate VM to another node
qm migrate 100 node2
# Resize disk
qm resize 100 scsi0 +10GContainer (LXC) management
Creating containers:
# Download container template
pveam update
pveam available
pveam download local ubuntu-22.04-standard_22.04-1_amd64.tar.zst
# Create container
pct create 200 local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst \
--hostname web-server \
--memory 1024 \
--cores 2 \
--net0 name=eth0,bridge=vmbr0,ip=dhcp
# Start container
pct start 200
# Enter container
pct enter 200
# List containers
pct list
# Stop container
pct stop 200
# Delete container
pct destroy 200Container operations:
# Create snapshot
pct snapshot 200 backup-point
# Restore snapshot
pct rollback 200 backup-point
# Clone container
pct clone 200 201 --hostname cloned-container
# Resize container disk
pct resize 200 rootfs +5G
# Execute command in container
pct exec 200 -- apt updateStorage management
Storage types:
- Directory: Simple directory-based storage
- LVM: Logical Volume Manager
- LVM-thin: Thin provisioned LVM
- ZFS: Advanced filesystem with snapshots and compression
- NFS: Network File System
- CIFS/SMB: Windows file shares
- iSCSI: Block-level storage over network
Storage commands:
# List storage
pvesm status
# Add NFS storage
pvesm add nfs nfs-storage --server 192.168.1.10 --export /mnt/nfs
# Add directory storage
pvesm add dir backup-storage --path /mnt/backups
# Scan storage
pvesm scan nfs 192.168.1.10
# Remove storage
pvesm remove storage-nameZFS management:
# Create ZFS pool
zpool create tank /dev/sdb
# List pools
zpool list
# Check pool status
zpool status
# Create dataset
zfs create tank/vms
# Enable compression
zfs set compression=lz4 tank/vms
# Create snapshot
zfs snapshot tank/vms@backup1
# List snapshots
zfs list -t snapshotNetworking
Network configuration:
# Edit network config
nano /etc/network/interfaces
# Apply network changes
ifreload -a
# View network config
cat /etc/network/interfacesBridge configuration example:
auto vmbr0
iface vmbr0 inet static
address 192.168.1.10/24
gateway 192.168.1.1
bridge-ports enp1s0
bridge-stp off
bridge-fd 0
# VLAN-aware bridge
auto vmbr1
iface vmbr1 inet manual
bridge-ports enp2s0
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes
bridge-vids 2-4094
Firewall management:
# Enable firewall
pvesh set /cluster/firewall/options --enable 1
# Configure via web UI: Datacenter → Firewall
# Or edit files: /etc/pve/firewall/Backup and restore
Backup commands:
# Backup VM
vzdump 100 --compress zstd --mode snapshot --storage backup-storage
# Backup all VMs
vzdump --all --compress zstd --mode snapshot --storage backup-storage
# List backups
ls -lh /var/lib/vz/dump/
# Restore from backup
qmrestore /var/lib/vz/dump/vzdump-qemu-100-*.vma.zst 100
# Delete old backups (keep last 3)
vzdump 100 --remove 1 --maxfiles 3Backup modes:
- snapshot: Live backup using VM snapshots (best for most cases)
- suspend: Suspend VM, backup, resume
- stop: Stop VM, backup, restart
Clustering
Create cluster:
# On first node
pvecm create cluster-name
# Get join information
pvecm status
# On additional nodes
pvecm add 192.168.1.10
# View cluster status
pvecm nodes
pvecm status
# Remove node from cluster
pvecm delnode node-nameCluster features:
- Shared configuration across nodes
- Live migration of VMs between nodes
- High availability (automatic failover)
- Distributed storage with Ceph
High Availability (HA)
Enable HA:
# Add VM to HA group (via web UI or CLI)
ha-manager add vm:100
# Set HA parameters
ha-manager set vm:100 --state started --group ha-group1
# View HA status
ha-manager status
# Remove from HA
ha-manager remove vm:100Command-line tools reference
System:
pveversion # Show Proxmox version
pvesh # Proxmox VE Shell (API access)
journalctl -u pve* # View Proxmox logs
systemctl status pve* # Check Proxmox servicesMonitoring:
pvesh get /nodes/nodename/status # Node status
pvesh get /cluster/resources # Cluster resources
top # System resources
htop # Interactive process viewerExamples
Quick VM deployment:
# Download cloud image
wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img
# Create VM
qm create 100 --name ubuntu-cloud --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0
# Import and attach disk
qm importdisk 100 jammy-server-cloudimg-amd64.img local-lvm
qm set 100 --scsi0 local-lvm:vm-100-disk-0 --boot order=scsi0
# Add cloud-init
qm set 100 --ide2 local-lvm:cloudinit
qm set 100 --serial0 socket --vga serial0
qm set 100 --ipconfig0 ip=dhcp
# Start VM
qm start 100Automated backup script:
#!/bin/bash
# Backup all VMs with zstd compression
vzdump --all --compress zstd --mode snapshot --storage backup-storage --remove 1 --maxfiles 7VM template creation:
# Create and configure VM
qm create 9000 --name template --memory 2048 --cores 2
# Convert to template
qm template 9000
# Clone from template
qm clone 9000 100 --name new-vm --fullBulk container creation:
#!/bin/bash
for i in {1..5}; do
pct create $((200+i)) local:vztmpl/ubuntu-22.04-standard.tar.zst \
--hostname web-$i \
--memory 1024 \
--cores 1 \
--net0 name=eth0,bridge=vmbr0,ip=dhcp
pct start $((200+i))
doneLXC containers are often overlooked in favor of VMs, but for lightweight Linux services they’re significantly more efficient — worth using whenever you don’t need full OS isolation.
Resources
- Proxmox VE Documentation
- Proxmox VE Wiki
- Proxmox Community Forum
- Proxmox VE on Reddit
- Learn Linux TV - Proxmox Tutorials
- TechnoTim - Proxmox Guides
- Proxmox Helper Scripts