Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| linux:proxmox9 [26-03-2026 16:22] – [Problème avec le service named] edmc73 | linux: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**, | Ensuite, cliquez sur votre VM, cliquez sur **Hardware**, | ||
| Ligne 45: | Ligne 45: | ||
| </ | </ | ||
| + | Pour créer des LXC sur ZFS, il faut que **data** soit monté | ||
| + | zfs set mountpoint=/ | ||
| + | < | ||
| + | proxmox9:~# zfs list | ||
| + | NAME | ||
| + | data | ||
| + | data/ | ||
| + | data/ | ||
| + | </ | ||
| + | |||
| + | ==== Optimisation ==== | ||
| + | |||
| + | === fstrim === | ||
| + | Quand on supprime des données dans une VM ou un LXC, l' | ||
| + | |||
| + | == Pour les VM (KVM/QEMU) == | ||
| + | |||
| + | Activez l' | ||
| + | |||
| + | Dans la VM, assurez-vous d' | ||
| + | |||
| + | 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 | ||
| + | |||
| + | **Attention** : tout ceci ne fonctionne que pour les VM. Sur l' | ||
| + | |||
| + | == Pour les LXC == | ||
| + | |||
| + | Un LXC partage le noyau de l' | ||
| + | |||
| + | Le trim se lance **depuis l' | ||
| + | pct fstrim < | ||
| + | |||
| + | Elle traite la racine du conteneur et ses points de montage (sauf les bind mounts et les montages en lecture seule). L' | ||
| + | |||
| + | Cela ne sert que si le disque du LXC est sur un stockage **LVM-thin** ('' | ||
| + | pct config < | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | Voir l' | ||
| + | lvs | ||
| + | |||
| + | Lancer à la main sur tous les LXC en marche | ||
| + | < | ||
| + | for id in $(pct list | awk ' | ||
| + | echo "CT $id"; pct fstrim $id | ||
| + | done | ||
| + | </ | ||
| + | |||
| + | Pour le lancer tous les jours, créez un script ''/ | ||
| + | < | ||
| + | #!/bin/bash | ||
| + | # Lance pct fstrim sur chaque CT en cours d' | ||
| + | rc=0 | ||
| + | for id in $(pct list | awk ' | ||
| + | echo "CT $id :" | ||
| + | timeout 600 pct fstrim " | ||
| + | done | ||
| + | exit $rc | ||
| + | </ | ||
| + | |||
| + | Le service ''/ | ||
| + | < | ||
| + | [Unit] | ||
| + | Description=fstrim de tous les LXC en cours d' | ||
| + | |||
| + | [Service] | ||
| + | Type=oneshot | ||
| + | ExecStart=/ | ||
| + | Nice=10 | ||
| + | IOSchedulingClass=idle | ||
| + | </ | ||
| + | |||
| + | Et le timer ''/ | ||
| + | < | ||
| + | [Unit] | ||
| + | Description=fstrim quotidien des LXC | ||
| + | |||
| + | [Timer] | ||
| + | OnCalendar=*-*-* 12:00 | ||
| + | RandomizedDelaySec=15min | ||
| + | Persistent=true | ||
| + | |||
| + | [Install] | ||
| + | WantedBy=timers.target | ||
| + | </ | ||
| + | |||
| + | 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 '' | ||
| + | |||
| + | Exemple réel sur un hyperviseur en LVM-thin, après un premier passage sur 14 LXC qui n' | ||
| + | |||
| + | ^ 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' | ||
| + | |||
| + | === 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 '' | ||
| + | |||
| + | Activez la compression sur votre pool | ||
| + | zfs set compression=zstd data | ||
| + | |||
| + | < | ||
| + | NAME PROPERTY | ||
| + | data compression | ||
| + | data/ | ||
| + | data/ | ||
| + | data/ | ||
| + | data/ | ||
| + | data/ | ||
| + | data/ | ||
| + | data/ | ||
| + | data/ | ||
| + | data/ | ||
| + | |||
| + | </ | ||
| + | Le volume '' | ||
| + | |||
| + | 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/ | ||
| + | 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' | ===== Ajouter de l' | ||
| Ligne 434: | Ligne 596: | ||
| </ | </ | ||
| + | ou un peu plus radical | ||
| + | < | ||
| + | # Désactivation des profils problématiques | ||
| + | ln -s / | ||
| + | ln -s / | ||
| + | |||
| + | # Application immédiate | ||
| + | apparmor_parser -R / | ||
| + | apparmor_parser -R / | ||
| + | |||
| + | # Redémarrage des services | ||
| + | systemctl restart named ntpd | ||
| + | </ | ||
| + | |||
| + | Désactiver l'ipv6 dans bind (named) | ||
| + | |||
| + | Solution (Forcer IPv4 pour BIND) : | ||
| + | |||
| + | Modifiez / | ||
| + | |||
| + | OPTIONS=" | ||
| + | systemctl restart named | ||
| + | |||
| + | Ne pas oublier la règle firewall pour bind | ||
| + | iptables -A INPUT -p udp --sport 123 -j ACCEPT | ||