Summary
Proxmox VE is an open-source virtualization platform that combines KVM hypervisor and LXC containers with a web-based management interface. It’s ideal for homelab environments, providing enterprise-grade features without licensing costs.
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))
doneResources
- Proxmox VE Documentation
- Proxmox VE Wiki
- Proxmox Community Forum
- Proxmox VE on Reddit
- Learn Linux TV - Proxmox Tutorials
- TechnoTim - Proxmox Guides
- Proxmox Helper Scripts