🛠 Outils IT

Guide Proxmox Virtual Environment

1. Installation Proxmox VE

1.1 Télécharger l'ISO

Rendez-vous sur le site officiel de Proxmox pour télécharger la dernière version stable de l'ISO Proxmox VE. Le fichier fait environ 1,2 Go.

1.2 Créer une clé USB bootable

Utilisez un outil de création de clé USB bootable :

  • Rufus (Windows) : Sélectionnez l'ISO, choisissez le mode DD Image (important, pas ISO image), puis lancez l'écriture.
  • Etcher (Windows/Mac/Linux) : Sélectionnez l'ISO, choisissez la clé USB, lancez le flash.
  • Linux CLI : dd if=proxmox-ve_*.iso of=/dev/sdX bs=1M status=progress
Attention : Avec Rufus, utilisez impérativement le mode DD Image et non ISO Image, sinon la clé ne bootera pas correctement.

1.3 Installation pas à pas

  1. Bootez sur la clé USB (configurer le BIOS pour booter sur USB en premier)
  2. Sélectionnez "Install Proxmox VE (Graphical)"
  3. Acceptez la licence (AGPL v3)
  4. Sélectionnez le disque cible pour l'installation. Cliquez sur "Options" pour choisir le filesystem :
    • ext4 : classique, stable, rapide
    • xfs : bonnes performances pour gros fichiers
    • ZFS (RAID0, RAID1, RAIDZ...) : recommandé pour la sécurité des données, snapshots natifs
  5. Configurez le pays, le fuseau horaire et la disposition clavier
  6. Définissez le mot de passe root et l'adresse e-mail de l'administrateur
  7. Configurez le réseau : hostname (ex: srv-prox01.example.com), IP statique, gateway, DNS
  8. Vérifiez le récapitulatif et lancez l'installation
  9. Retirez la clé USB au reboot
Tip : Si vous prévoyez d'utiliser ZFS, choisissez-le dès l'installation. Convertir un système ext4 en ZFS après coup est très complexe.

1.4 Première connexion

Après le reboot, accédez à l'interface web :

https://192.168.1.10:8006

Connectez-vous avec l'utilisateur root et le mot de passe défini lors de l'installation. Le realm doit être PAM.

Info : Le certificat SSL est auto-signé. Votre navigateur affichera un avertissement de sécurité : c'est normal. Acceptez l'exception.

1.5 Supprimer le message de licence (No valid subscription)

Par défaut, Proxmox affiche un popup "No valid subscription" à chaque connexion. Pour le supprimer :

Ajouter le dépôt no-subscription

Créez le fichier /etc/apt/sources.list.d/pve-no-subscription.list :

# Depot Proxmox VE No-Subscription
# Remplacez "bookworm" par le nom de votre release Debian
deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription

Commenter le dépôt enterprise

Éditez /etc/apt/sources.list.d/pve-enterprise.list et commentez la ligne :

# deb https://enterprise.proxmox.com/debian/pve bookworm pve-enterprise

Mettre à jour le système

apt-get update && apt-get dist-upgrade -y
Tip : Pour supprimer le popup de souscription de l'interface web, vous pouvez éditer le fichier JS de l'interface. Cependant, cette modification sera écrasée à chaque mise à jour de pve-manager. La méthode recommandée est de simplement ignorer le popup.
Tip : Après l'installation, vérifiez que /etc/apt/sources.list contient bien les dépôts Debian standards :
deb http://deb.debian.org/debian bookworm main contrib
deb http://deb.debian.org/debian bookworm-updates main contrib
deb http://security.debian.org/debian-security bookworm-security main contrib

2. Configuration Réseau

2.1 Concepts fondamentaux

Le réseau sous Proxmox repose sur trois concepts principaux :

  • Bridge (vmbr0, vmbr1...) : Switch virtuel qui connecte les VM/containers au réseau physique. C'est l'équivalent d'un switch L2 logiciel. Chaque bridge est associé à un port physique ou un bond.
  • Bond (bond0, bond1...) : Agrégation de liens physiques pour la redondance et/ou l'augmentation de bande passante (LACP/802.3ad).
  • VLAN : Segmentation logique du réseau. Permet d'isoler le trafic sur un même bridge physique.
Schéma type : NIC physique (eno1) → Bond (bond0, optionnel) → Bridge (vmbr0) → VM/Container

2.2 Fichier de configuration

Toute la configuration réseau se trouve dans /etc/network/interfaces. C'est le fichier central à modifier.

2.3 Bridge simple (un seul NIC)

Configuration la plus courante pour un serveur avec une seule carte réseau :

auto lo
iface lo inet loopback

iface eno1 inet manual

auto vmbr0
iface vmbr0 inet static
    address 192.168.1.10/24
    gateway 192.168.1.1
    bridge-ports eno1
    bridge-stp off
    bridge-fd 0

Explications :

  • iface eno1 inet manual : l'interface physique n'a pas d'IP propre, elle est gérée par le bridge
  • bridge-ports eno1 : le bridge est rattaché à l'interface physique eno1
  • bridge-stp off : désactive le Spanning Tree Protocol (pas nécessaire en topologie simple)
  • bridge-fd 0 : forwarding delay à 0 (pas d'attente STP)

2.4 Bond (LACP/802.3ad) + Bridge

Pour la redondance et l'agrégation de bande passante avec deux NIC :

auto lo
iface lo inet loopback

iface eno1 inet manual

iface eno2 inet manual

auto bond0
iface bond0 inet manual
    bond-slaves eno1 eno2
    bond-miimon 100
    bond-mode 802.3ad
    bond-xmit-hash-policy layer3+4

auto vmbr0
iface vmbr0 inet static
    address 192.168.1.10/24
    gateway 192.168.1.1
    bridge-ports bond0
    bridge-stp off
    bridge-fd 0

Explications :

  • bond-slaves eno1 eno2 : les deux NIC qui forment le bond
  • bond-miimon 100 : vérifie le lien toutes les 100ms
  • bond-mode 802.3ad : LACP, nécessite que le switch soit configuré en LACP également
  • bond-xmit-hash-policy layer3+4 : répartition du trafic basée sur IP source/destination + port
Attention : Le mode 802.3ad (LACP) nécessite que le switch soit également configuré en LACP. Si le switch ne supporte pas LACP, utilisez bond-mode active-backup pour la redondance simple.
Tip : Modes de bond disponibles :
  • balance-rr (0) : round-robin, rarement utilisé
  • active-backup (1) : un seul lien actif, failover automatique. Ne nécessite aucune config switch
  • balance-xor (2) : hash-based
  • broadcast (3) : envoie sur tous les liens
  • 802.3ad (4) : LACP, le plus performant mais nécessite support switch
  • balance-tlb (5) : adaptive transmit load balancing
  • balance-alb (6) : adaptive load balancing

2.5 VLANs : Bridge VLAN-aware

Un bridge VLAN-aware permet de gérer plusieurs VLANs sur un seul bridge :

auto lo
iface lo inet loopback

iface eno1 inet manual

auto vmbr0
iface vmbr0 inet static
    address 192.168.1.10/24
    gateway 192.168.1.1
    bridge-ports eno1
    bridge-vlan-aware yes
    bridge-vids 2-4094
    bridge-stp off
    bridge-fd 0

Explications :

  • bridge-vlan-aware yes : active le mode VLAN-aware sur le bridge
  • bridge-vids 2-4094 : autorise tous les VLAN IDs (ajustez selon vos besoins)
  • Côté VM : dans la configuration réseau de la VM, spécifiez le VLAN tag (ex: VLAN 100)
Tip : Avec un bridge VLAN-aware, vous n'avez plus besoin de créer un bridge par VLAN. Un seul bridge suffit, chaque VM spécifie son tag VLAN. C'est la méthode recommandée.

Exemple avec sous-interfaces VLAN (méthode alternative)

Si vous préférez un bridge par VLAN (méthode legacy) :

auto vmbr0
iface vmbr0 inet static
    address 192.168.1.10/24
    gateway 192.168.1.1
    bridge-ports eno1
    bridge-stp off
    bridge-fd 0

auto eno1.100
iface eno1.100 inet manual

auto vmbr100
iface vmbr100 inet manual
    bridge-ports eno1.100
    bridge-stp off
    bridge-fd 0

2.6 Appliquer la configuration sans reboot

ifreload -a

Cette commande recharge la configuration réseau de manière non-disruptive (quand c'est possible).

Attention : ifreload -a peut couper la connexion si la configuration contient une erreur. Testez toujours avec un accès physique ou IPMI/iLO/iDRAC disponible.
Tip critique : Avant de modifier la configuration réseau à distance, assurez-vous TOUJOURS d'avoir :
  • Un accès IPMI / iLO / iDRAC fonctionnel
  • Ou un accès KVM-over-IP
  • Ou un cron qui restaure la config en cas de problème :
    # Restauration automatique apres 5 minutes
    cp /etc/network/interfaces.bak /etc/network/interfaces && ifreload -a
    Planifiez ce cron AVANT de faire vos modifications.

2.7 Diagnostic réseau

# Voir les bridges et leurs ports
brctl show

# Voir toutes les interfaces et IPs
ip a

# Voir la table de routage
ip route show

# Voir les connexions actives du bond
cat /proc/net/bonding/bond0

# Tester la connectivite
ping -c 4 192.168.1.1

# Verifier le VLAN tagging
bridge vlan show

# Capturer le trafic reseau
tcpdump -i vmbr0 -n port 80

3. Gestion des VM (Machines Virtuelles)

3.1 Créer une VM via le wizard web

  1. General : Node, VM ID (auto-incrémenté), Nom (ex: srv-web01)
  2. OS : Sélectionnez l'ISO, choisissez le type d'OS (Linux, Windows, etc.)
  3. System : BIOS (SeaBIOS ou OVMF/UEFI), contrôleur SCSI, Machine type (i440fx ou q35)
  4. Disks : Taille, stockage, format (qcow2, raw, vmdk), cache, discard
  5. CPU : Sockets, Cores, Type (host recommandé pour les performances)
  6. Memory : RAM fixe ou ballooning
  7. Network : Bridge (vmbr0), modèle (VirtIO recommandé), VLAN tag

3.2 BIOS vs UEFI (OVMF)

Critère SeaBIOS (Legacy) OVMF (UEFI)
Compatibilité Tous les OS OS récents uniquement
Secure Boot Non Oui
Disques > 2 To Non (MBR) Oui (GPT)
Windows 11 Non supporté Requis (TPM + Secure Boot)
Machine type i440fx q35 recommandé
Tip : Pour Windows 11, utilisez OVMF (UEFI) + q35 + TPM (ajouter un TPM v2.0 dans la configuration). Cochez également "Add EFI Disk" lors de la création.

3.3 Drivers VirtIO (Paravirtualisation)

Les drivers VirtIO offrent des performances nettement supérieures aux drivers émulés (IDE, e1000) :

  • Disque : VirtIO SCSI single (virtio-scsi-pci) — jusqu'à 3x plus rapide qu'IDE
  • Réseau : VirtIO (virtio-net-pci) — latence réduite, débit supérieur

Installation des guest agents

Linux :

apt install qemu-guest-agent
systemctl enable qemu-guest-agent
systemctl start qemu-guest-agent

Windows :

  1. Téléchargez l'ISO VirtIO drivers (disponible sur le site Proxmox ou Fedora)
  2. Montez l'ISO dans un lecteur CD/DVD virtuel de la VM
  3. Exécutez l'installateur virtio-win-guest-tools.exe
  4. Cela installe les drivers VirtIO + le QEMU Guest Agent + le Balloon driver
Attention (Windows) : Si vous créez une VM Windows avec un disque VirtIO SCSI dès le départ, Windows ne verra pas le disque pendant l'installation. Solution : ajoutez un second lecteur CD avec l'ISO VirtIO et chargez le driver vioscsi pendant l'installation de Windows.

3.4 Cloud-Init

Cloud-init permet de préconfigurer une VM (hostname, IP, clés SSH, user) au premier démarrage :

  1. Créez une VM à partir d'une image cloud (ex: Debian cloud image, Ubuntu cloud image)
  2. Ajoutez un lecteur Cloud-Init dans la configuration hardware
  3. Configurez les paramètres dans l'onglet Cloud-Init de la VM
  4. Convertissez la VM en template pour cloner rapidement
# Exemple : importer une image cloud et configurer cloud-init
qm create 9000 --name "template-debian12" --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0
qm importdisk 9000 debian-12-generic-amd64.qcow2 local-lvm
qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-0
qm set 9000 --ide2 local-lvm:cloudinit
qm set 9000 --boot c --bootdisk scsi0
qm set 9000 --serial0 socket --vga serial0
qm set 9000 --ipconfig0 ip=dhcp
qm set 9000 --ciuser admin
qm set 9000 --sshkeys ~/.ssh/authorized_keys
qm template 9000

3.5 Commandes CLI pour les VM

# Lister toutes les VM
qm list

# Creer une VM (basique)
qm create 100 --name srv-web01 --memory 4096 --cores 4 --net0 virtio,bridge=vmbr0

# Demarrer / Arreter / Redemarrer
qm start 100
qm stop 100
qm reboot 100
qm shutdown 100        # arret propre via guest agent

# Migrer une VM vers un autre noeud
qm migrate 100 srv-prox02

# Importer un disque
qm importdisk 100 image.qcow2 local-lvm

# Redimensionner un disque
qm resize 100 scsi0 +10G

# Voir la configuration d'une VM
qm config 100

# Modifier la configuration
qm set 100 --memory 8192
qm set 100 --cores 8

# Supprimer une VM
qm destroy 100 --purge
Tip : Utilisez qm shutdown au lieu de qm stop pour un arrêt propre. qm stop équivaut à couper le courant (risque de corruption des données).

4. Containers LXC

4.1 Templates

Proxmox utilise des templates pré-construits pour créer des containers :

# Mettre a jour la liste des templates
pveam update

# Lister les templates disponibles
pveam available

# Filtrer par distribution
pveam available | grep debian
pveam available | grep ubuntu

# Telecharger un template
pveam download local debian-12-standard_12.2-1_amd64.tar.zst

# Lister les templates telecharges
pveam list local

4.2 Créer un container

Via le wizard web : cliquez sur "Create CT" en haut à droite, remplissez les champs (hostname, mot de passe root, template, ressources, réseau).

Via la CLI :

# Creer un container
pct create 200 local:vztmpl/debian-12-standard_12.2-1_amd64.tar.zst \
    --hostname ct-web01 \
    --memory 2048 \
    --cores 2 \
    --rootfs local-lvm:8 \
    --net0 name=eth0,bridge=vmbr0,ip=192.168.1.20/24,gw=192.168.1.1 \
    --password "MotDePasseSecurise" \
    --unprivileged 1 \
    --features nesting=1

4.3 Privileged vs Unprivileged

Type Sécurité Compatibilité Usage
Unprivileged (recommandé) Haute (UID mapping) Quelques limitations Services web, apps, bases de données
Privileged Plus faible Complète NFS server, Docker in LXC, montages spéciaux
Tip : Privilégiez toujours les containers unprivileged. N'utilisez les privileged que si nécessaire (Docker in LXC, NFS, etc.). Activez le nesting (--features nesting=1) si vous comptez utiliser Docker dans le container.

4.4 Bind mounts

Les bind mounts permettent de monter un répertoire de l'hôte dans le container :

# Dans la configuration du container (/etc/pve/lxc/200.conf)
mp0: /mnt/data/shared,mp=/mnt/shared

# Ou via la CLI
pct set 200 -mp0 /mnt/data/shared,mp=/mnt/shared
Attention : Pour les containers unprivileged, les permissions UID/GID sont mappées. Le root (UID 0) du container correspond à l'UID 100000 sur l'hôte. Ajustez les permissions du répertoire hôte en conséquence :
chown -R 100000:100000 /mnt/data/shared

4.5 Commandes CLI pour les containers

# Lister les containers
pct list

# Demarrer / Arreter
pct start 200
pct stop 200
pct shutdown 200

# Entrer dans un container (shell)
pct enter 200

# Executer une commande dans un container
pct exec 200 -- apt update

# Voir la configuration
pct config 200

# Modifier la configuration
pct set 200 --memory 4096
pct set 200 --cores 4

# Supprimer un container
pct destroy 200 --purge

5. Stockage

5.1 Types de stockage

Type VM Disks CT Rootfs ISO Backups Snapshots Remarques
local (dir) Oui Oui Oui Oui Oui (qcow2) Répertoire local simple, par défaut /var/lib/vz
LVM Oui Oui Non Non Non Bonnes performances, pas de snapshots natifs
LVM-Thin Oui Oui Non Non Oui Thin provisioning + snapshots, installé par défaut
ZFS Oui Oui Non Non Oui Snapshots, compression, déduplication, checksums
NFS Oui Oui Oui Oui Oui (qcow2) Stockage réseau, partagé entre noeuds
CIFS/SMB Oui Oui Oui Oui Oui (qcow2) Partages Windows/Samba
iSCSI Oui Non Non Non Non SAN, bloc niveau
Ceph (RBD) Oui Oui Non Non Oui Distribué, hyper-convergent, haute dispo

5.2 ZFS

ZFS est un filesystem avancé offrant snapshots, compression, checksums et réparation automatique :

# Creer un pool ZFS en miroir (RAID1)
zpool create rpool mirror /dev/sda /dev/sdb

# Creer un pool RAIDZ1 (equivalent RAID5)
zpool create datapool raidz1 /dev/sda /dev/sdb /dev/sdc

# Voir l'etat du pool
zpool status
zpool list

# Activer la compression
zfs set compression=lz4 rpool

# Creer un dataset
zfs create rpool/data

# Snapshots
zfs snapshot rpool/data@backup-2024-01-15
zfs list -t snapshot
zfs rollback rpool/data@backup-2024-01-15
zfs destroy rpool/data@backup-2024-01-15

# Scrub (verification d'integrite)
zpool scrub rpool

# Voir la progression du scrub
zpool status rpool
Tip : Planifiez un zpool scrub hebdomadaire ou mensuel. Cela vérifie l'intégrité de toutes les données et répare les erreurs silencieuses (bit rot). Un cron typique :
# /etc/cron.d/zfs-scrub
0 2 * * 0 root /sbin/zpool scrub rpool
Attention : ZFS est gourmand en RAM. Comptez environ 1 Go de RAM par To de stockage pour le cache ARC. Sur un serveur avec 64 Go de RAM et 20 To de ZFS, ZFS peut utiliser jusqu'à 20 Go de RAM pour le cache (configurable avec zfs_arc_max).

5.3 Configuration stockage

Le fichier /etc/pve/storage.cfg contient la configuration de tous les stockages :

# Stockage local par defaut
dir: local
    path /var/lib/vz
    content iso,vztmpl,backup

# LVM-Thin (installe par defaut)
lvmthin: local-lvm
    thinpool data
    vgname pve
    content rootdir,images

# Exemple NFS
nfs: nas-backup
    export /volume1/proxmox-backup
    path /mnt/pve/nas-backup
    server 192.168.1.50
    content backup,iso,vztmpl

# Exemple CIFS/SMB
cifs: smb-share
    server 192.168.1.51
    share proxmox
    content backup,images
    username backup-user
    password XXXXXXXXXX

# Exemple ZFS
zfspool: zfs-data
    pool rpool/data
    content images,rootdir
    sparse 1

6. Sauvegardes (vzdump)

6.1 Modes de sauvegarde

Mode Downtime Cohérence Remarques
Snapshot Aucun Bonne (si guest agent) Recommandé. Sauvegarde à chaud, la VM continue de tourner
Suspend Court (RAM à copier) Bonne Suspend la VM, copie la RAM puis le disque
Stop Long Parfaite Arrête la VM complètement avant la sauvegarde
Tip : Le mode Snapshot est recommandé pour la production. Installez le qemu-guest-agent dans vos VM pour garantir la cohérence des données (il fait un freeze du filesystem avant le snapshot).

6.2 Planification via l'interface web

  1. Allez dans Datacenter > Backup
  2. Cliquez sur Add
  3. Configurez :
    • Storage : destination des sauvegardes
    • Schedule : planification (ex: tous les jours à 2h00)
    • Selection mode : All, Include, Exclude
    • Mode : Snapshot recommandé
    • Compression : zstd (rapide et bon ratio)
    • Retention : keep-daily, keep-weekly, keep-monthly
    • Mail to : notification par email

6.3 CLI vzdump

# Sauvegarde snapshot d'une VM avec compression zstd
vzdump 100 --mode snapshot --storage nas-backup --compress zstd

# Sauvegarde de plusieurs VM
vzdump 100 101 102 --mode snapshot --storage nas-backup --compress zstd

# Sauvegarde de toutes les VM/CT
vzdump --all --mode snapshot --storage nas-backup --compress zstd

# Sauvegarde avec notification email
vzdump 100 --mode snapshot --storage nas-backup --compress zstd --mailto admin@example.com

# Sauvegarde avec limite de bande passante (en KB/s)
vzdump 100 --mode snapshot --storage nas-backup --compress zstd --bwlimit 50000

6.4 Restauration

# Restaurer une VM
qmrestore /mnt/pve/nas-backup/dump/vzdump-qemu-100-2024_01_15-02_00_00.vma.zst 100

# Restaurer sur un ID different
qmrestore /mnt/pve/nas-backup/dump/vzdump-qemu-100-2024_01_15-02_00_00.vma.zst 150

# Restaurer vers un stockage specifique
qmrestore /mnt/pve/nas-backup/dump/vzdump-qemu-100-2024_01_15-02_00_00.vma.zst 150 --storage local-lvm

# Restaurer un container
pct restore 200 /mnt/pve/nas-backup/dump/vzdump-lxc-200-2024_01_15-02_00_00.tar.zst

# Restaurer un container sur un stockage different
pct restore 250 /mnt/pve/nas-backup/dump/vzdump-lxc-200-2024_01_15-02_00_00.tar.zst --storage local-lvm

6.5 Rétention

Configurez la politique de rétention pour éviter que le stockage ne se remplisse :

# Exemple de configuration de retention
# Garder les 7 dernieres sauvegardes quotidiennes
# Garder 4 sauvegardes hebdomadaires
# Garder 6 sauvegardes mensuelles

vzdump 100 --mode snapshot --storage nas-backup --compress zstd \
    --prune-backups keep-daily=7,keep-weekly=4,keep-monthly=6
Tip : La rétention peut également être configurée au niveau du stockage dans l'interface web (Datacenter > Storage > [votre stockage] > Backup Retention). Cela s'applique à toutes les sauvegardes sur ce stockage.
Attention : Surveillez TOUJOURS l'espace disque de votre stockage de sauvegarde. Un stockage plein peut faire échouer les sauvegardes silencieusement. Mettez en place des alertes (email, monitoring) sur l'espace disponible.

7. Duplication / Clonage

7.1 Clone complet vs Clone lié

Type Espace disque Indépendance Performance Usage
Clone complet (Full) Copie intégrale Totale Normale Production, VM indépendantes
Clone lié (Linked) Delta uniquement Dépend du parent Peut être plus lent Tests, dev, environnements temporaires

7.2 Clonage via l'interface

  1. Clic droit sur la VM > Clone
  2. Choisissez le mode (Full ou Linked)
  3. Spécifiez le nouveau VM ID, le nom, et le stockage cible
  4. Cliquez sur Clone

7.3 Clonage CLI

# Clone complet
qm clone 100 150 --name srv-web02 --full

# Clone complet vers un stockage different
qm clone 100 150 --name srv-web02 --full --storage local-lvm

# Clone lie (linked clone, depuis un template ou snapshot)
qm clone 9000 151 --name srv-dev01

# Lister les snapshots disponibles pour le clone lie
qm listsnapshot 100

7.4 Templates

Convertissez une VM en template pour la cloner rapidement :

# Convertir une VM en template (irreversible!)
qm template 9000

# Cloner depuis un template (linked clone par defaut, tres rapide)
qm clone 9000 200 --name srv-prod01
qm clone 9000 201 --name srv-prod02
qm clone 9000 202 --name srv-prod03
Tip : Avant de convertir en template, préparez la VM :
  • Installez le guest agent
  • Configurez cloud-init si vous voulez personnaliser chaque clone (IP, hostname, clés SSH)
  • Nettoyez la VM : supprimez les logs, videz /tmp, effacez l'historique SSH (rm /etc/ssh/ssh_host_* pour régénérer au reboot)
  • Generalisez : cloud-init clean ou sysprep (Windows)

7.5 Migration entre noeuds

# Migration offline (VM arretee)
qm migrate 100 srv-prox02

# Migration live (a chaud, VM en cours d'execution)
qm migrate 100 srv-prox02 --online

# Migration avec stockage local (replique le disque)
qm migrate 100 srv-prox02 --online --with-local-disks
Conditions pour la live migration :
  • Les deux noeuds doivent être dans le même cluster
  • Le stockage doit être partagé (NFS, Ceph, iSCSI) OU utiliser --with-local-disks
  • Le CPU du noeud cible doit être compatible (même famille ou type CPU "kvm64")
  • Suffisamment de RAM disponible sur le noeud cible

8. Cluster et Haute Disponibilité (HA)

8.1 Créer un cluster

# Sur le premier noeud (srv-prox01)
pvecm create mon-cluster

# Verifier la creation
pvecm status

8.2 Joindre un noeud au cluster

# Sur le noeud a ajouter (srv-prox02)
pvecm add 192.168.1.10    # IP du noeud existant (srv-prox01)

# Verifier
pvecm status
pvecm nodes
Attention : Avant de joindre un noeud au cluster :
  • Le noeud doit être une installation fraîche (pas de VM/CT existants)
  • Les noms d'hôtes doivent être différents et résolvables
  • Les horloges doivent être synchronisées (NTP)
  • Ne JAMAIS joindre un noeud qui contient déjà des VM/CT avec les mêmes IDs

8.3 Vérification du cluster

# Etat du cluster
pvecm status

# Liste des noeuds
pvecm nodes

# Etat Corosync
systemctl status corosync

# Logs Corosync
journalctl -u corosync -f

# Configuration Corosync
cat /etc/pve/corosync.conf

8.4 Haute Disponibilité (HA)

Le HA permet de redémarrer automatiquement une VM sur un autre noeud en cas de panne :

  1. Allez dans Datacenter > HA > Resources
  2. Cliquez sur Add
  3. Sélectionnez la VM/CT
  4. Définissez le groupe de préférence (quels noeuds peuvent héberger cette VM)
  5. Définissez l'état souhaité : started, stopped, ignored

Groupes HA

# Via l'interface : Datacenter > HA > Groups > Create
# Ou via la CLI :
ha-manager groupadd grp-web --nodes srv-prox01,srv-prox02 --nofailback 0
ha-manager add vm:100 --group grp-web --state started

8.5 Fencing

Le fencing est crucial pour le HA. Il permet d'isoler un noeud défaillant pour éviter les split-brain :

  • IPMI/iLO/iDRAC : redémarrage matériel à distance
  • Watchdog : un timer matériel qui reboot le noeud s'il ne répond plus. Proxmox utilise le watchdog software par défaut (softdog).
Tip : Pour un HA fiable en production, configurez un fencing matériel (IPMI). Le watchdog software est un filet de sécurité minimal. Un vrai fencing matériel garantit qu'un noeud mort est réellement redémarré.

8.6 Corosync

Corosync gère la communication inter-noeuds et le quorum. Le fichier de configuration est /etc/pve/corosync.conf :

# Exemple de corosync.conf (ne pas editer manuellement si possible)
logging {
  debug: off
  to_syslog: yes
}

nodelist {
  node {
    name: srv-prox01
    nodeid: 1
    quorum_votes: 1
    ring0_addr: 192.168.1.10
  }
  node {
    name: srv-prox02
    nodeid: 2
    quorum_votes: 1
    ring0_addr: 192.168.1.11
  }
  node {
    name: srv-prox03
    nodeid: 3
    quorum_votes: 1
    ring0_addr: 192.168.1.12
  }
}

quorum {
  provider: corosync_votequorum
}

totem {
  cluster_name: mon-cluster
  config_version: 3
  interface {
    linknumber: 0
  }
  ip_version: ipv4-6
  secauth: on
  version: 2
}
Tip : Pour un cluster de 2 noeuds, le quorum est problématique (il faut une majorité). Ajoutez un QDevice (un serveur léger tiers qui sert d'arbitre) pour maintenir le quorum même si un noeud tombe :
# Sur le serveur QDevice (un serveur Debian/Ubuntu leger)
apt install corosync-qnetd

# Sur les noeuds Proxmox
apt install corosync-qdevice
pvecm qdevice setup 192.168.1.100   # IP du QDevice

9. Tips de Dépannage

Règle d'or : Avant toute intervention, sauvegardez la VM/CT concernée et documentez l'état actuel. Prenez des screenshots de l'erreur et notez les commandes exécutées.

9.1 Noeud inaccessible dans le cluster

Si un noeud est tombé et le cluster perd le quorum :

# ATTENTION : seulement si le noeud est vraiment hors service
# et que vous avez besoin de continuer a travailler

# Forcer le quorum avec le nombre de noeuds attendus
pvecm expected 1

# Verifier l'etat
pvecm status

# Voir les noeuds
pvecm nodes
DANGER : Ne JAMAIS utiliser pvecm expected 1 sur un cluster actif multi-noeuds où les autres noeuds sont toujours en ligne. Cela peut provoquer un split-brain (les deux moitiés du cluster croient être le cluster principal).
Tip : Si le noeud revient en ligne mais n'est pas reconnu :
# Sur le noeud problematique
systemctl restart corosync
systemctl restart pve-cluster

# Si ca ne suffit pas, verifiez la connectivite
ping 192.168.1.10   # vers les autres noeuds
corosync-cfgtool -s   # statut des liens corosync

9.2 Interface web inaccessible

# Verifier le service pveproxy
systemctl status pveproxy

# Redemarrer pveproxy
systemctl restart pveproxy

# Verifier que le port 8006 est bien en ecoute
ss -tlnp | grep 8006

# Verifier le firewall (si active)
pve-firewall status
iptables -L -n | grep 8006

# Verifier les logs
journalctl -u pveproxy -n 50

# Si le certificat SSL pose probleme
pvecm updatecerts --force
systemctl restart pveproxy

# En dernier recours, redemarrer tous les services Proxmox
systemctl restart pvedaemon pveproxy pvestatd
Tip : Si pveproxy ne redmarre pas, vérifiez l'espace disque (df -h). Un filesystem /var plein empêche les services de démarrer. Nettoyez les anciens journaux si nécessaire :
journalctl --vacuum-size=500M
apt clean

9.3 VM qui ne démarre pas

# Verifier les logs de la VM
journalctl -u qemu-server@100 -n 100

# Voir les taches recentes
cat /var/log/pve/tasks/active

# Verifier la configuration de la VM
qm config 100

# Verifier que le stockage est accessible
pvesm status

# Verifier que le fichier disque existe
lvs                              # pour LVM
zfs list                         # pour ZFS
ls -la /var/lib/vz/images/100/   # pour stockage local dir

# Tester le demarrage en mode verbose
qm start 100 --debug

# Verifier les ressources disponibles
free -h         # RAM disponible
nproc           # nombre de CPU
Tip : Causes fréquentes d'échec de démarrage :
  • Pas assez de RAM disponible sur l'hôte
  • Disque VM introuvable (stockage démonté ou supprimé)
  • VM verrouillée (backup en cours, migration interrompue)
  • Conflit de ports (VNC, SPICE)
  • Configuration UEFI corrompue (disque EFI)

9.4 Disque VM verrouillé

# Verifier si la VM est verrouillee
qm config 100 | grep lock

# Deverrouiller
qm unlock 100

# Si ca ne fonctionne pas, verifier les fichiers de lock
ls -la /var/lock/qemu-server/
rm /var/lock/qemu-server/lock-100.conf   # EN DERNIER RECOURS

# Verifier s'il y a un processus QEMU qui tourne encore
ps aux | grep "100"
# Si oui, tuez-le proprement
kill -TERM <PID>
Attention : Ne supprimez les fichiers de lock manuellement qu'en dernier recours. Vérifiez d'abord qu'aucun processus (backup, migration, snapshot) n'est en cours sur cette VM.

9.5 Stockage plein

# Verifier l'espace disque global
df -h

# Verifier les pools ZFS
zpool list
zfs list

# Verifier LVM
lvs
vgs
pvs

# Trouver les fichiers les plus volumineux
du -sh /var/lib/vz/dump/*      # sauvegardes
du -sh /var/lib/vz/images/*    # images VM

# Nettoyer les sauvegardes obsoletes
# Via l'interface : Storage > [stockage] > Content > supprimer les anciens backups

# Nettoyer les logs systeme
journalctl --vacuum-size=500M
journalctl --vacuum-time=7d

# Nettoyer le cache APT
apt clean

# Si LVM-Thin est plein, verifier le thin pool
lvs -a | grep thin
# Le thin pool ne doit JAMAIS depasser 95%
CRITIQUE : Si un pool LVM-Thin atteint 100%, toutes les VM sont mises en pause. Surveillez proactivement avec :
# Verification du remplissage thin pool
lvs -o lv_name,data_percent pve/data
Mettez en place une alerte quand le remplissage dépasse 80%.

9.6 Problème réseau VM

# Verifier les bridges
brctl show

# Verifier les interfaces
ip a

# Verifier la configuration reseau de la VM
qm config 100 | grep net

# Verifier que le bridge a bien un port physique
bridge link show

# Tester la connectivite depuis l'hote
ping 192.168.1.1

# Tester depuis la VM (via la console VNC/SPICE)
# Dans la VM :
ip a
ip route show
ping 192.168.1.1

# Verifier les regles firewall Proxmox
pve-firewall status
pve-firewall localinfo

# Capturer le trafic sur le bridge pour debug
tcpdump -i vmbr0 -n host 192.168.1.20

# Verifier le VLAN tag si applicable
cat /etc/pve/qemu-server/100.conf | grep tag
Tip : Causes fréquentes de problème réseau VM :
  • Mauvais bridge sélectionné (vmbr0 vs vmbr1)
  • VLAN tag incorrect ou manquant
  • Firewall Proxmox bloqué (désactivez-le temporairement pour tester)
  • Driver réseau non VirtIO (e1000 a des limitations)
  • Conflit d'adresse IP
  • Pas de gateway configuré dans la VM

9.7 Backup qui échoue

# Verifier les logs vzdump
cat /var/log/vzdump/*.log
ls -la /var/log/vzdump/

# Verifier l'espace disque destination
df -h /mnt/pve/nas-backup/

# Verifier la connectivite au stockage distant
showmount -e 192.168.1.50   # NFS
mount | grep nas-backup      # point de montage

# Verifier les taches en cours
cat /var/log/pve/tasks/active

# Tester manuellement
vzdump 100 --mode snapshot --storage nas-backup --compress zstd

# Si la VM est verrouillee par un backup precedent echoue
qm unlock 100

# Verifier les permissions
ls -la /mnt/pve/nas-backup/dump/
Tip : Causes fréquentes d'échec de backup :
  • Espace insuffisant : la cause n°1. Vérifiez la destination
  • Stockage NFS déconnecté : vérifiez le montage et la connectivité
  • VM verrouillée : un backup précédent a crashé
  • Timeout : le freeze du guest agent prend trop de temps (base de données très active)
  • Permissions : l'utilisateur root n'a pas accès en écriture sur le stockage

9.8 Performances dégradées

# Vue globale de la charge
top
htop       # si installe

# Surveillance I/O disque
iotop -o   # montre uniquement les processus avec I/O active

# Messages systeme
dmesg | tail -50
dmesg -T | grep -i error

# Verifier les disques physiques
smartctl -a /dev/sda
smartctl -H /dev/sda   # resultat PASS/FAIL rapide

# Verifier les temperatures
sensors    # si lm-sensors est installe

# Verifier la RAM
free -h
cat /proc/meminfo

# Verifier l'utilisation CPU par VM
qm monitor 100 -c "info cpus"

# Verifier l'I/O des VM
cat /proc/diskstats
iostat -x 1 5

# Verifier le reseau
iftop -i vmbr0   # si installe
nload             # si installe
ethtool eno1      # vitesse du lien
Tip optimisation performances :
  • CPU : Utilisez le type CPU "host" pour les VM (pas "kvm64") sauf si vous faites de la live migration
  • Disque : Utilisez VirtIO SCSI + cache=writeback + IO thread pour les meilleures performances
  • Disque SSD : Activez "Discard" (TRIM) et "SSD emulation"
  • RAM : Désactivez le ballooning si vous avez assez de RAM
  • NUMA : Activez NUMA si le serveur a plusieurs sockets CPU
  • Hugepages : Activez pour les grosses VM (bases de données)

9.9 Mise à jour qui casse le système

# AVANT la mise a jour : prendre un snapshot ZFS de la partition root
zfs snapshot rpool/ROOT/pve-1@pre-update

# Mise a jour safe
apt-get update
apt-get dist-upgrade   # Lisez ce qui va etre installe AVANT de confirmer

# Si probleme apres la mise a jour, rollback ZFS
zfs rollback rpool/ROOT/pve-1@pre-update

# Si pas de ZFS, reinstallez le paquet problematique
apt-get install --reinstall proxmox-ve

# Verifier les logs de mise a jour
cat /var/log/apt/history.log
cat /var/log/apt/term.log
Tip : Avant une mise à jour majeure (ex: Proxmox 7 vers 8) :
  • Lisez les notes de version officielles complètement
  • Testez d'abord sur un noeud non critique
  • Sauvegardez TOUTES les VM/CT
  • Faites un snapshot ZFS de la partition root
  • Ayez un accès IPMI/iLO en cas de problème de boot
  • Prévoyez une fenêtre de maintenance

9.10 Certificat web expiré

# Regenerer les certificats du cluster
pvecm updatecerts --force

# Redemarrer pveproxy pour appliquer
systemctl restart pveproxy

# Verifier la date d'expiration du certificat
openssl x509 -in /etc/pve/local/pve-ssl.pem -noout -dates

# Si le certificat est un certificat Let's Encrypt configure via Proxmox
pvenode acme cert order

# Verifier la configuration ACME
pvenode config get

9.11 Récupérer l'accès si oubli du mot de passe root

  1. Redémarrez le serveur
  2. Dans le menu GRUB, appuyez sur e pour éditer l'entrée de boot
  3. Trouvez la ligne commençant par linux et ajoutez init=/bin/bash à la fin
  4. Appuyez sur Ctrl+X ou F10 pour booter
  5. Remontez le filesystem en lecture-écriture :
    mount -o remount,rw /
  6. Changez le mot de passe :
    passwd root
  7. Redémarrez :
    sync
    reboot -f
Tip : Configurez un utilisateur PVE secondaire avec les droits admin dès l'installation. Allez dans Datacenter > Permissions > Users pour créer un second compte administrateur. Si vous oubliez le mot de passe root, vous pourrez toujours vous connecter.

9.12 VM Windows lente

# Checklist optimisation Windows sur Proxmox :

# 1. Installer les drivers VirtIO (INDISPENSABLE)
#    - Montez l'ISO VirtIO dans la VM
#    - Executez virtio-win-guest-tools.exe

# 2. Configuration VM optimale pour Windows
qm set 100 --cpu host              # CPU type host
qm set 100 --scsihw virtio-scsi-single  # controleur VirtIO SCSI
qm set 100 --machine q35           # machine type q35
qm set 100 --bios ovmf             # UEFI
qm set 100 --balloon 0             # desactiver le ballooning pour les performances

# 3. Activer le IO thread sur chaque disque
# Dans /etc/pve/qemu-server/100.conf :
# scsi0: local-lvm:vm-100-disk-0,iothread=1,cache=writeback

# 4. Verifier dans la VM
#    - Guest Agent installe et fonctionnel
#    - Balloon driver installe
#    - VirtIO network driver installe
#    - Plan d'alimentation sur "Haute performance"
#    - Desactiver les mises a jour Windows pendant les heures de production
Tip performances Windows :
  • Utilisez VirtIO SCSI single comme contrôleur (pas IDE ou SATA)
  • Activez IO thread sur chaque disque pour paralléliser les I/O
  • Utilisez cache=writeback pour de meilleures performances (légèrement moins sûr en cas de coupure courant)
  • Activez Discard si le stockage est sur SSD
  • Ne pas surcharger en vCPU : donnez le nombre de cores réellement nécessaires
  • Donnez assez de RAM pour éviter le swap Windows

9.13 Snapshot qui bloque

# Lister les snapshots
qm listsnapshot 100

# Supprimer un snapshot bloque
qm delsnapshot 100 snap-name

# Forcer la suppression
qm delsnapshot 100 snap-name --force

# Si la VM est bloquee sur un snapshot
qm unlock 100

# Verifier l'etat interne
qm monitor 100 -c "info snapshots"

# En dernier recours : editer manuellement la config
# SAUVEGARDEZ AVANT !
cp /etc/pve/qemu-server/100.conf /root/100.conf.bak
nano /etc/pve/qemu-server/100.conf
# Supprimez les sections [snap-name] manuellement
Attention : Les snapshots ne sont PAS des sauvegardes. Un snapshot est lié au disque original. Si le disque est corrompu, le snapshot l'est aussi. Utilisez toujours vzdump pour les vraies sauvegardes.

9.14 Cluster quorum perdu

# Verifier le quorum
pvecm status | grep Quorum

# Si quorum perdu et AUCUN autre noeud n'est en ligne :
pvecm expected 1

# Si un noeud doit etre retire definitivement du cluster
# (sur un noeud fonctionnel avec quorum) :
pvecm delnode srv-prox03

# Verifier les votes
pvecm status

# Si le cluster est completement casse, en dernier recours :
# 1. Stoppez toutes les VM
# 2. Stoppez les services cluster
systemctl stop pve-cluster corosync
# 3. Demarrez le cluster en mode local
pmxcfs -l
# 4. Editez la configuration si necessaire
# 5. Reboot
DANGER : pvecm expected 1 ne doit être utilisé que si vous êtes CERTAIN que les autres noeuds sont définitivement hors ligne. Si un autre noeud est encore en ligne quelque part, vous aurez un split-brain qui peut entraîner des corruptions de données irréversibles.

9.15 Logs importants à connaître

# Logs systeme general
journalctl -xe

# Logs Proxmox specifiques
/var/log/pve/tasks/       # historique des taches
/var/log/vzdump/          # logs de sauvegarde
journalctl -u pvedaemon   # daemon principal
journalctl -u pveproxy    # interface web
journalctl -u pvestatd    # statistiques
journalctl -u corosync    # cluster
journalctl -u pve-ha-lrm  # HA local resource manager
journalctl -u pve-ha-crm  # HA cluster resource manager

# Logs QEMU par VM
journalctl -u qemu-server@100

# Logs syslog
tail -f /var/log/syslog
tail -f /var/log/daemon.log

10. Commandes Essentielles

10.1 Gestion des VM (qm)

CommandeDescription
qm listLister toutes les VM
qm create <vmid>Créer une VM
qm start <vmid>Démarrer une VM
qm stop <vmid>Arrêter une VM (couper courant)
qm shutdown <vmid>Arrêter une VM proprement (ACPI)
qm reboot <vmid>Redémarrer une VM
qm config <vmid>Voir la configuration
qm set <vmid> [options]Modifier la configuration
qm resize <vmid> <disk> <size>Redimensionner un disque
qm clone <vmid> <newid>Cloner une VM
qm template <vmid>Convertir en template
qm migrate <vmid> <node>Migrer vers un autre noeud
qm importdisk <vmid> <file> <storage>Importer un disque
qm unlock <vmid>Déverrouiller une VM
qm destroy <vmid> --purgeSupprimer une VM et ses disques
qm listsnapshot <vmid>Lister les snapshots
qm snapshot <vmid> <name>Créer un snapshot
qm rollback <vmid> <name>Restaurer un snapshot
qm delsnapshot <vmid> <name>Supprimer un snapshot

10.2 Gestion des Containers (pct)

CommandeDescription
pct listLister tous les containers
pct create <ctid> <template>Créer un container
pct start <ctid>Démarrer un container
pct stop <ctid>Arrêter un container
pct enter <ctid>Ouvrir un shell dans le container
pct exec <ctid> -- <cmd>Exécuter une commande
pct config <ctid>Voir la configuration
pct set <ctid> [options]Modifier la configuration
pct destroy <ctid> --purgeSupprimer un container
pct snapshot <ctid> <name>Créer un snapshot
pct rollback <ctid> <name>Restaurer un snapshot

10.3 Stockage et templates (pvesm / pveam)

CommandeDescription
pvesm statusVoir l'état de tous les stockages
pvesm list <storage>Lister le contenu d'un stockage
pvesm add <type> <name> [options]Ajouter un stockage
pvesm remove <name>Supprimer un stockage
pveam updateMettre à jour la liste des templates
pveam availableLister les templates disponibles
pveam download <storage> <template>Télécharger un template

10.4 Cluster (pvecm)

CommandeDescription
pvecm create <name>Créer un cluster
pvecm add <ip>Joindre un noeud au cluster
pvecm delnode <name>Retirer un noeud du cluster
pvecm statusÉtat du cluster
pvecm nodesLister les noeuds
pvecm expected <n>Forcer le quorum (urgence)
pvecm updatecerts --forceRegener les certificats

10.5 Sauvegarde (vzdump)

CommandeDescription
vzdump <vmid>Sauvegarder une VM/CT
vzdump <vmid> --mode snapshotSauvegarde à chaud
vzdump --allSauvegarder tout
qmrestore <file> <vmid>Restaurer une VM
pct restore <ctid> <file>Restaurer un container

10.6 Divers

CommandeDescription
pveversion -vVersion de Proxmox et des composants
pvenodeGestion du noeud local
pve-firewall statusÉtat du firewall Proxmox
systemctl restart pveproxyRedémarrer l'interface web
systemctl restart pvedaemonRedémarrer le daemon Proxmox
ha-manager statusÉtat de la haute disponibilité
ifreload -aRecharger la config réseau
Tip final : Créez des alias dans /root/.bashrc pour les commandes fréquentes :
alias vml='qm list'
alias ctl='pct list'
alias stor='pvesm status'
alias clust='pvecm status'
alias bk='vzdump --mode snapshot --compress zstd'