Outils pour utilisateurs

Outils du site


linux:proxmox9 (lu 86544 fois)

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
linux:proxmox9 [26-03-2026 16:08] – [Migrer ces VM d'un proxmox à un autre] edmc73linux:proxmox9 [18-10-2026 10:29] (Version actuelle) – modification externe 127.0.0.1
Ligne 31: Ligne 31:
 Dans proxmox, cliquez sur **datacenter** aller dans le menu **Storage** cliquer sur **Add** / **ZFS** 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+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** Ensuite, cliquez sur votre VM, cliquez sur **Hardware**, sélectionnez votre **Hard Disk**, cliquez sur le menu **Disk Action** puis **Move Storage**
Ligne 45: Ligne 45:
 </code> </code>
  
 +Pour créer des LXC sur ZFS, il faut que **data** soit monté
 +  zfs set mountpoint=/data data
 +<code>
 +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
 +</code>
 +
 +==== Optimisation ====
 +
 +=== fstrim ===
 +Quand on supprime des données dans une VM ou un LXC, l'espace n'est pas rendu au stockage de l'hyperviseur tout seul. La commande ''fstrim'' sert à signaler les blocs libres pour que le stockage les récupère. Le fonctionnement est **différent pour les VM (KVM/QEMU) et pour les LXC**.
 +
 +== Pour les VM (KVM/QEMU) ==
 +
 +Activez l'option ''discard=on'' sur tous les disques de vos VM. Cette option est propre aux VM : c'est un réglage du disque virtuel, que QEMU transmet au stockage.
 +
 +Dans la 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
 +<code>
 +[Timer]
 +OnCalendar=
 +OnCalendar=daily
 +</code>
 +
 +
 +{{.:pasted:20260607-065503.png}}
 +
 +  systemctl daemon-reload
 +  systemctl restart fstrim.timer
 +
 +**Attention** : tout ceci ne fonctionne que pour les VM. Sur l'hyperviseur, le ''fstrim.timer'' ne s'occupe que des systèmes de fichiers de l'hôte et ne touche pas aux LXC.
 +
 +== Pour les LXC ==
 +
 +Un LXC partage le noyau de l'hôte et son système de fichiers est monté par l'hôte : il n'y a pas de disque virtuel, donc pas d'option ''discard=on''. Proxmox ne planifie rien non plus. Dans un LXC non privilégié, ''fstrim'' lancé de l'intérieur échoue (''FITRIM ioctl failed: Operation not permitted'').
 +
 +Le trim se lance **depuis l'hyperviseur**, avec la commande dédiée
 +  pct fstrim <vmid>
 +
 +Elle traite la racine du conteneur et ses points de montage (sauf les bind mounts et les montages en lecture seule). L'option ''%%--ignore-mountpoints%%'' limite le trim à la racine.
 +
 +Cela ne sert que si le disque du LXC est sur un stockage **LVM-thin** (''local-lvm''). Les volumes thin ne rendent pas l'espace libéré tant qu'on ne les trimme pas. Pour vérifier le stockage d'un LXC
 +  pct config <vmid> | grep rootfs
 +
 +  * ''local-lvm:...'' : le trim est utile
 +  * ''zfspool:subvol-...'' : inutile, ZFS libère l'espace tout de suite. La commande répond d'ailleurs ''the discard operation is not supported''
 +
 +Voir l'occupation réelle des volumes thin et du pool (colonne ''Data%'')
 +  lvs
 +
 +Lancer à la main sur tous les LXC en marche
 +<code>
 +for id in $(pct list | awk 'NR>1 && $2=="running"{print $1}'); do
 +    echo "CT $id"; pct fstrim $id
 +done
 +</code>
 +
 +Pour le lancer tous les jours, créez un script ''/usr/local/sbin/lxc-fstrim.sh'' (''chmod 755'')
 +<code>
 +#!/bin/bash
 +# Lance pct fstrim sur chaque CT en cours d'exécution ; code de sortie non nul si un CT échoue.
 +rc=0
 +for id in $(pct list | awk 'NR>1 && $2=="running"{print $1}'); do
 +    echo "CT $id :"
 +    timeout 600 pct fstrim "$id" || { echo "ÉCHEC fstrim CT $id" >&2; rc=1; }
 +done
 +exit $rc
 +</code>
 +
 +Le service ''/etc/systemd/system/lxc-fstrim.service''
 +<code>
 +[Unit]
 +Description=fstrim de tous les LXC en cours d'exécution (pct fstrim)
 +
 +[Service]
 +Type=oneshot
 +ExecStart=/usr/local/sbin/lxc-fstrim.sh
 +Nice=10
 +IOSchedulingClass=idle
 +</code>
 +
 +Et le timer ''/etc/systemd/system/lxc-fstrim.timer'', ici tous les jours à midi, en dehors de la fenêtre des sauvegardes
 +<code>
 +[Unit]
 +Description=fstrim quotidien des LXC
 +
 +[Timer]
 +OnCalendar=*-*-* 12:00
 +RandomizedDelaySec=15min
 +Persistent=true
 +
 +[Install]
 +WantedBy=timers.target
 +</code>
 +
 +Activer et tester
 +  systemctl daemon-reload
 +  systemctl enable --now lxc-fstrim.timer
 +  systemctl start lxc-fstrim.service
 +  journalctl -u lxc-fstrim.service
 +
 +Les LXC arrêtés ne sont pas trimmés (rien n'est libéré tant qu'ils sont arrêtés).
 +
 +== Gain de place ==
 +
 +Le chiffre affiché par ''fstrim'' (« X GiB trimmed ») n'est **pas** l'espace récupéré : c'est la quantité de blocs libres signalée. Le vrai gain se lit dans la colonne ''Data%'' de ''lvs'', avant et après.
 +
 +Exemple réel sur un hyperviseur en LVM-thin, après un premier passage sur 14 LXC qui n'avaient jamais été trimmés : le pool est passé de **67 % à 57 %**, soit environ **79 Go récupérés** sur un pool de 815 Go.
 +
 +^ LXC ^ Taille du disque ^ Occupé avant ^ Occupé après ^ Gain ^
 +| Jellyfin | 16 Go | 11,7 Go (73 %) | 7,9 Go (49 %) | ~3,8 Go |
 +| Vaultwarden | 20 Go | 10,4 Go (52 %) | 6,9 Go (35 %) | ~3,4 Go |
 +| Photon | 90 Go | 79,9 Go (89 %) | 46,2 Go (51 %) | ~33,6 Go |
 +
 +Les volumes thin affichaient un taux d'occupation bien plus élevé que leur contenu réel (par exemple un volume à 89 % alors que le système de fichiers était loin d'être plein), simplement parce que les blocs supprimés n'avaient jamais été rendus.
 +
 +=== 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 ===== ===== Ajouter de l'espace disque à chaud =====
Ligne 416: Ligne 578:
 </code> </code>
  
-===== Problème avec le service named =====+===== Problème avec apparmor =====
  
 Si vous avez ceci dans le journalctl Si vous avez ceci dans le journalctl
Ligne 423: Ligne 585:
 named: failed to connect to notification socket '/run/systemd/notify': permission denied 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(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> </code>
  
 Faire ceci Faire ceci
 <code> <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.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.named
-systemctl restart named+apparmor_parser -R /etc/apparmor.d/usr.sbin.ntpd 
 + 
 +# Redémarrage des services 
 +systemctl restart named ntpd
 </code> </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.1774541328.txt.gz · Dernière modification : de edmc73