====== 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 Ajouter 2G pct resize 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/.conf ) qm config 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/.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 * Create : Linux Bridge Name: vmbr1 IPv4/CIDR : 192.168.0.1/24 Gateway (IPv4) : (vide) Bridge ports: (vide) * Apply Configuration 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: 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: 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 * Node * VM / LXC ==== 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 * Direction: in * Action: ACCEPT * Interface: vmbr0 * Protocol: tcp * Dest. Port.: 8006 * Enable: x * Direction: in * Action: ACCEPT * Interface: vmbr0 * Macro: Ping * Enable: x 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