Outils pour utilisateurs

Outils du site


Panneau latéral

linux:proxmox9 (lu 24521 fois)

Ceci est une ancienne révision du document !


Proxmox9

Scripts utiles

https://community-scripts.github.io/ProxmoxVE/

Une fois un LXC installé, pour mettre à jour, ouvrer une console et tapez simplement la commande

update

upgrade 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 et Container (pour les LXC), 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

Pour créer des LXC sur ZFS, il faut que data soit monté

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

Optimisation

fstrim

Pour gagner de la place, activez l’option discard=on sur tous les disques de vos VM et LXC

Pour les VM, assurez-vous d’avoir installé le paquet fstrim (en principe installé par défaut)

Lancer à la main

fstrim -av

Le journal

journalctl -u fstrim.service

Par défaut, cette commande se lance une fois par semaine, mais c’est mieux une fois par jour

systemctl edit fstrim.timer

Collez ces 2 lignes

[Timer]
OnCalendar=
OnCalendar=daily

systemctl daemon-reload
systemctl restart fstrim.timer

compression

On peut aussi dire à zfs de compresser en live ses volumes

Lister et voir ce qui est compressé ou pas

zfs get compression

Par défaut il y aura du off’ qui signifie que rien n’est compressé. Activez la compression sur votre pool zfs set compression=zstd data <code> NAME PROPERTY VALUE SOURCE data compression zstd local data/subvol-100-disk-0 compression zstd inherited from data data/swap compression off local data/vm-110-disk-0 compression zstd inherited from data data/vm-110-disk-1 compression lz4 local data/vm-120-disk-0 compression zstd inherited from data data/vm-130-disk-0 compression zstd inherited from data data/vm-130-disk-1 compression lz4 local data/vm-140-disk-0 compression zstd inherited from data data/vm-140-disk-1 compression zstd inherited from data </code> Le volume data/swap n’hérite pas de la compression car sa source est local. Il faut éviter de compresser les volumes de swap. Si vous avez des disks dédié au swap sur vos VM, mettez une compressions plus légères comme le lz4 zfs set compression=lz4 data/vm-110-disk-1 Ces commandes ne lanceront pas la compression sur tout le disque mais uniquement aux nouvelles données. Pour compresser les disques existants sans repartir de zéro, vous devez forcer ZFS à réécrire les blocs. La méthode la plus simple et la plus sûre avec Proxmox consiste à déplacer le disque d’un stockage à un autre (puis à le remettre si nécessaire). Avec tout ça, j’ai gagné plus de 100Go sur 360Go de données ! ===== Ajouter de l’espace disque à chaud ===== Voici une table de partition classique d’une VM <code> 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% / </code> 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. <code> 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% / </code> 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 ==== Cas avec parted et btrfs ==== Forcer le rafraîchissement du disque echo 1 | sudo tee /sys/class/block/sda/device/rescan Agrandir la partition à 100% du disque parted /dev/sda resizepart 1 100% Étendre le système de fichiers Btrfs btrfs filesystem resize max / ===== Problème de backup ===== J’ai eu ce problème sur le backup d’un LXC <code> 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 </code> 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 Pour partager un répertoire entre l’hote et le LXC pct set 100 -mp0 /mon/dossier/hote,mp=/mnt/partage Explication des paramètres : * 100 : L’ID de ton container. * -mp0 : C’est le nom du point de montage (le premier s’appelle mp0, le suivant mp1, etc.). * /mon/dossier/hote : Le chemin réel sur ton Proxmox. Pas besoin de taille ici, il utilisera l’espace disponible sur ton disque hôte. * mp=/mnt/partage : L’endroit où le dossier apparaîtra à l’intérieur du container. Pour que le container ait les droits en écritures, changer le propriétaire sur l’hôte, pour root mettre 100000 sinon, pour un user avec ID 1000, mettez 101000 chown -R 100000:100000 /mon/dossier/hote ===== 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 ===== Pour la SWAP ===== Plutôt que de partitionner votre disque /dev/sda pour la swap, autant ajouter un disque dédié qu’on n’inclura pas dans la sauvegarde. Ajouter un disque avec les options suivantes : * Cache : Write back : Meilleur compromis performance/risque pour du volatile. * Discard : activé : si SSD * IO thread : activé : toujours le bon choix * Backup : désactivé : ne sera pas sauvegardé Sur votre vm, regardé si votre disque apparait avec fdisk -l En principe, c’est /dev/sdb, on va le formater pour la swap mkswap /dev/sdb Activation de la swap swapon /dev/sdb Ajouter dans fstab echo '/dev/sdb none swap sw 0 0’ » /etc/fstab Vérifier free -h ===== 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 <code> [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 </code> Activez le service : systemctl enable proxmox-nat.service systemctl start proxmox-nat.service ==== Commandes utiles sur proxmox ==== <code> 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 </code> 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 <code> # 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 </code> <code> 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 </code> ===== 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. Faite un backup d’une machine : * Sélectionnez la VM * Menu Backup * Bouton Backup Now Copiez le backup de la VM avec, par exemple, 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/. Restaurez la VM via l’interface Proxmox : * Sélectionnez le Storage qui est configuré pour les backup (par défaut local) * Menu Backup * Sélectionnez le backup et cliquez sur le bouton Restore Si les images disques ne sont pas sur un pool ZFS, vous pouvez essayé de synchroniser les dernières données via rsync 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 <code> proxmox9:~# zfs list NAME USED AVAIL REFER MOUNTPOINT data 131G 253G 96K none data/vm-110-disk-0 34.8G 253G 34.8G - </code> Et supprimons le zfs destroy data/vm-110-disk-0 Faites un snapshot via la commande <code> # À exécuter sur le serveur source # création du snapshot zfs snapshot data/vm-110-disk-0@migration # envoi du snapshot zfs send -v data/vm-110-disk-0@migration | ssh root@proxmox9 zfs recv -v data/vm-110-disk-0 </code> Pour migrer au dernier moment seulement les dernières modifications, il est conseillé d’éteindre la VM pour éviter des incohérences, puis créez un nouveau snapshot (@migration2).
Envoyez ensuite le dernier snapshot via les commandes suivantes : # Envoyer uniquement les changements entre les deux snapshots zfs send -v -i data/vm-101-disk-0@migration data/vm-101-disk-0@migration2 | ssh root@proxmox9 zfs recv -v data/vm-110-disk-0 Une fois que le moment est bon, il n’y a plus qu’à basculer vos ip failover si vous en avez ou basculer vos DNS et démarrer votre nouvelle VM. Vous pourrez ensuite supprimer vos 2 snapshots <code> proxmox9:~# zfs list -t all NAME USED AVAIL REFER MOUNTPOINT data 131G 253G 96K none data/vm-110-disk-0 34.8G 253G 34.8G - data/vm-110-disk-0@migration 30.2M - 34.8G - data/vm-110-disk-0@migration2 30.2M - 34.8G - zfs destroy data/vm-110-disk-0@migration zfs destroy data/vm-110-disk-0@migration2 </code> ===== Problème avec apparmor ===== Si vous avez ceci dans le journalctl <code> named: failed to connect to notification socket '/run/systemd/notify’: permission denied audit: type=1400 audit(1774541015.914:98363): apparmor=“DENIED” operation=“create” class=“net” info=“failed protocol match” error=-13 profile=“named” pid=96800 comm=“named” family=“unix” sock_type=“dgram” protocol=0 requested=“create” denied=“create” addr=none audit: type=1400 audit(1774542068.729:99069): apparmor=“ALLOWED” operation=“create” class=“net” info=“failed protocol match” error=-13 profile=“/usr/sbin/ntpd” pid=101611 comm=“ntpd” family=“unix” sock_type=“stream” protocol=0 requested=“create” denied=“create” addr=none </code> Faire ceci <code> apt update && apt install -y apparmor-utils aa-complain /usr/sbin/ntpd aa-complain /usr/sbin/named systemctl restart ntp named </code> ou un peu plus radical <code> # Désactivation des profils problématiques ln -s /etc/apparmor.d/usr.sbin.named /etc/apparmor.d/disable/ ln -s /etc/apparmor.d/usr.sbin.ntpd /etc/apparmor.d/disable/ # Application immédiate apparmor_parser -R /etc/apparmor.d/usr.sbin.named apparmor_parser -R /etc/apparmor.d/usr.sbin.ntpd # Redémarrage des services systemctl restart named ntpd </code> Désactiver l’ipv6 dans bind (named) Solution (Forcer IPv4 pour BIND) : Modifiez /etc/default/named (ou /etc/default/bind9) et ajoutez -4 aux options : OPTIONS=“-u bind -4” systemctl restart named Ne pas oublier la règle firewall pour bind iptables -A INPUT -p udp –sport 123 -j ACCEPT

linux/proxmox9.1780815844.txt.gz · Dernière modification : de edmc73