Table des matières

Proxmox9

upgrade 8 to 9

https://pve.proxmox.com/wiki/Upgrade_from_8_to_9

Config ZFS

Pour pouvoir faire des snapshot de vos VM

https://forum.proxmox.com/threads/zfs-and-snapshots-again.132104/

Il n’est pas nécessaire de créer un dataset supplémentaire, on peut utiliser le zp0 (ou le data) créé par défaut.
Mais je laisse la commande pour info.

proxmox9:~# zfs list
NAME       USED  AVAIL  REFER  MOUNTPOINT
data      96.0G   288G    96K  none
data/zd0  95.9G   288G  95.9G  /var/lib/vz

Dans proxmox, cliquez sur datacenter aller dans le menu Storage cliquer sur Add / ZFS

Choisissez votre dataset, content = Disk Image, bien cocher la case Thin provision → OK

Ensuite, cliquez sur votre VM, cliquez sur Hardware, sélectionnez votre Hard Disk, cliquez sur le menu Disk Action puis Move Storage

Choisissez votre dataset et voilà ! L’option “Créer des snapshosts” est maintenant disponible

proxmox9:~# zfs list
NAME                 USED  AVAIL  REFER  MOUNTPOINT
data                 102G   281G    96K  none
data/vm-120-disk-0  6.32G   281G  6.32G  -
data/zd0            95.9G   281G  95.9G  /var/lib/vz

Ajouter de l'espace disque à chaud

Voici une table de partition classique d’une VM

root@debian:~# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda      8:0    0   10G  0 disk
├─sda1   8:1    0  9,4G  0 part /
├─sda2   8:2    0    1K  0 part
└─sda5   8:5    0  583M  0 part [SWAP]
sr0     11:0    1  783M  0 rom

df -h /dev/sda1
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
/dev/sda1          9,2G    1,1G  7,7G  13% /

On a un disque de 10Go et une partition de 9.4Go que l’on veut augmenter de 2Go.

On augmente la taille du disque dans proxmox

Menu Hardware on clique sur Hard Disk puis on clic en haut dans le menu sur Disk Action puis Resize

J’ai ajouté 2Go au disque, on le retrouve bien directement ici sur la taille du disque, mais rien n’a changé sur les partitions.

root@debian:~# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda      8:0    0   12G  0 disk
├─sda1   8:1    0  9,4G  0 part /
├─sda2   8:2    0    1K  0 part
└─sda5   8:5    0  583M  0 part [SWAP]
sr0     11:0    1  783M  0 rom

df -h /dev/sda1
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
/dev/sda1          9,2G    1,1G  7,7G  13% /

Maintenant on installe ce paquet

apt install cloud-guest-utils

Et on va augmenter la taille de notre partition sda1

growpart /dev/sda 1
NOCHANGE: partition 1 could only be grown by 2046 [fudge=2048]

Ok la partition a augmenter doit se trouver à la fin du disque, car ici, il n’y a pas d’espace disponible entre sda1 et sda2

On peut déplacer les partitions avec gparted, même si lsblk montre les partitions dans l’ordres de leur nom, du moment que sda1 est physiquement à la fin du disk, ça marchera.

Une fois le growpart exécuté avec succès, utiliser la commande suivante

resize2fs /dev/sda1

Constatez avec un df -h que tout est ok

Problème de backup

J’ai eu ce problème sur le backup d’un LXC

INFO: starting first sync /proc/3224260/root/ to /var/tmp/vzdumptmp3498328_150
ERROR: rsync: [receiver] write failed on "/var/tmp/vzdumptmp3498328_150/var/log/journal/b4d4726a5f8b4fc88c6c226650ca0668/system@f30e550852f241da980f73b64033da35-000000000074f9ae-000640a1a2cf98a9.journal": No space left on device (28)
ERROR: rsync error: error in file IO (code 11) at receiver.c(381) [receiver=3.2.7]
ERROR: rsync: [sender] write error: Broken pipe (32)
ERROR: Backup of VM 150 failed - command 'rsync --stats -h -X -A --numeric-ids -aH --delete --no-whole-file --sparse --one-file-system --relative '--exclude=/tmp/?*' '--exclude=/var/tmp/?*' '--exclude=/var/run/?*.pid' /proc/3224260/root//./ /var/tmp/vzdumptmp3498328_150' failed: exit code 11
INFO: Failed at 2025-10-22 04:07:46

Il s’avère que proxmox fait une copie dans le répertoire temporaire par défaut qui est /var/tmp
Sauf que ce répertoire se trouve sur la partition système qui n’est pas très grande.

Pour résoudre le problème, il faut définir à la main le répertoire temporaire dans /etc/vzdump.conf

tmpdir: /var/lib/vz/tmp

LXC

Quelques commandes

pct list

Faire un checkdisk

pct fsck <vmid>

Ajouter 2G

pct resize <vmid> rootfs +2G
e2fsck -f -y /var/lib/vz/images/150/vm-150-disk-0.raw
e2fsck -p /var/lib/vz/images/150/vm-150-disk-0.raw

resize2fs /var/lib/vz/images/150/vm-150-disk-0.raw

Qemu / KVM

Quelques commandes

Pour avoir la config d’une VM (identique au fichier /etc/pve/qemu-server/<vmid>.conf )

qm config <vmid>

Voir plus → https://pve.proxmox.com/pve-docs/qm.1.html

Dans le cas de TrueNAS qui sort l’erreur

Disks have duplicate serial numbers: None (sda, sdb)

Il faut modifier le fichier /etc/pve/qemu-server/<vmid>.conf

repérer les lignes

scsi0: thin_provision:vm-212-disk-0,discard=on,iothread=1,size=32G
scsi1: thin_provision:vm-212-disk-1,iothread=1,size=5G

Et ajouter serial=12345

scsi0: thin_provision:vm-212-disk-0,discard=on,iothread=1,size=32G,serial=12345
scsi1: thin_provision:vm-212-disk-1,iothread=1,size=5G,serial=12346

Créer un sous réseau local

Créons un bridge qui définira notre réseau local

Menu: proxmox9 / System / Network

Name: vmbr1
IPv4/CIDR : 192.168.0.1/24
Gateway (IPv4) : (vide)
Bridge ports: (vide)
cat /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o vmbr0 -j MASQUERADE

Pour pérenniser cette config

vi /etc/sysctl.d/99-sysctl.conf (ou créer un fichier vide avec ce qui suit)
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

Créer un service avec systemd pour les règles de NAT

vi /etc/systemd/system/proxmox-nat.service
[Unit]
Description=Proxmox NAT Rules
After=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o vmbr0 -j MASQUERADE
ExecStop=/sbin/iptables -t nat -D POSTROUTING -s 192.168.0.0/24 -o vmbr0 -j MASQUERADE

[Install]
WantedBy=multi-user.target

Activez le service :

systemctl enable proxmox-nat.service
systemctl start proxmox-nat.service

Commandes utiles sur proxmox

ip a
3: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:00:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet xxx.xxx.xxx.xxx/24 scope global vmbr0
       valid_lft forever preferred_lft forever
    inet6 xxxx::xxx:xxxx:xxxx:xxxx/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
4: vmbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 56:0f:bd:5e:69:e8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.1/24 scope global vmbr1
       valid_lft forever preferred_lft forever
    inet6 xxxx::xxxx:xxxx:xxxx:xxxx/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever

ip route
default via xxx.xxx.xxx.1 dev vmbr0 proto kernel onlink 
xxx.xxx.xxx.0/24 dev vmbr0 proto kernel scope link src xxx.xxx.xxx.xxx
192.168.0.0/24 dev vmbr1 proto kernel scope link src 192.168.0.1 

ping -I vmbr0 google.fr
-> ça marche

ping -I vmbr1 google.fr
-> ça marche pas (normal)

ifup vmbr1
ip a show dev vmbr1

Si l’état de vmbr1 est UNKNOWN au lieu de UP, c’est normal si aucune VM n’est allumé et configuré sur vmbr1

Config réseau d'une VM

Au niveau hardware, le Network Device (net0) doit avoir le bridge configuré sur vmbr1

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug ens18
iface ens18 inet static
    address 192.168.0.10/24
    gateway 192.168.0.1
    # dns-* options are implemented by the resolvconf package, if installed
    dns-nameservers 213.186.33.99
    dns-search edmc.local
ip route
default via 192.168.0.1 dev ens18 onlink 
192.168.0.0/24 dev ens18 proto kernel scope link src 192.168.0.2

Firewall

Il y a 3 étages de firewall, dans l’ordre :

Datacenter

Avant d’activer le firewall dans l’interface web, ajoutez la règle suivante pour ne pas perdre l’accès à l’interface web

Puis, menu Datacenter / Firewall / Options : Firewall → Yes

Ces règles sont global à tous les nœuds et VM/LXC

Node

Sur le nœud, on peut ajouter par exemple l’accès à SSH

VM/LXC

Ajoutez les règles d’accès standard: HTTP/HTTPS

Migrer ces VM d'un proxmox à un autre

Imaginons un proxmox8 et un nouveau proxmox9. On veut migrer les VM du 8 vers le 9 en essayant de minimiser le temps de coupure.

On commence par copier un backup d’une VM avec un id 110

proxmox8# scp /var/lib/vz/dump/vzdump-qemu-110-2025_12_05-04_00_07.* mon.proxmox9.com:/var/lib/vz/dump/.

Ensuite, procédé à un rsync entre les disques des VM

proxmox# rsync /var/lib/vz/images/110/ mon.proxmox9.com:/var/lib/vz/images/110/

Si vous utilisez un pool ZFS pour stocker vos disques de VM, repérez le nom du pool de votre disque

proxmox9:~# zfs list
NAME                 USED  AVAIL  REFER  MOUNTPOINT
data                 131G   253G    96K  none
data/vm-110-disk-0  34.8G   253G  34.8G  -

et copiez via les commandes zfs

Faites d’abord un snapshot via l’interface proxmox ou via la commande

# À exécuter sur le serveur source
# création du snapshot
zfs snapshot data/vm-110-disk-0@migration

# envoi du snapshot
zfs send data/vm-110-disk-0@migration | ssh root@proxmox9 zfs recv -v data/vm-110-disk-new

Pour migrer ultérieurement seulement les modifications (beaucoup plus rapide), créez un nouveau snapshot (@migration2) et référencez le précédent (@migration) :

# Envoyer uniquement les changements entre les deux snapshots
zfs send -i data/vm-101-disk-0@migration data/vm-101-disk-0@migration2 | ssh root@proxmox9 zfs recv -v data/vm-110-disk-new

Une fois que le moment est bon, on va remplacé notre disque issue du backup par cette nouvelle copie et supprimer le snapshot

proxmox9:~# zfs list
NAME                  USED  AVAIL  REFER  MOUNTPOINT
data                  131G   253G    96K  none
data/vm-110-disk-0   34.8G   253G  34.8G  -
data/vm-110-disk-new 34.8G   253G  34.8G  -

zfs destroy data/vm-110-disk-0
zfs rename data/vm-110-disk-new data/vm-110-disk-0
zfs destroy data/vm-110-disk-0@migrate

Vous pouvez maintenant lancer votre VM