systemd-journald est conçu pour archiver puis supprimer les vieux journaux (logs) selon une politique d'occupation de l'espace de stockage. Pour une politique basée sur le temps, lire ici.
Par défaut, il prend le minimum entre 10 % de la taille du système de fichiers (SystemMaxUse) et 85 % (SystemKeepFree), dans la limite de 4 Go soit min( min(10 % ; 4 Go) ; min(85 % ; 4 Go) ). 85 % car SystemKeepFree calcule ce qui doit rester libre, alors que SystemMaxUse calcule la taille maximale du journal. Les deux ne sont pas comparables directement, donc on harmonise : si 15 % doivent rester libre, 85 % peuvent être occupés et se comparent aux 10 % de SystemMaxUse.
Si la valeur de SystemKeepFree est dépassée dès le démarrage de journald, alors le plafond sera l'espace restant.
Évidemment, si tu sépares / et /var dans des systèmes de fichiers différents, journald prend en compte la taille de /var.
SystemMaxFileSize définit la taille maximale d'un fichier journal. Par défaut, 1/8e de SystemMaxUse. SystemMaxFiles définit le nombre parallèle de journaux. 100 par défaut.
L'occupation du stockage se mesure avec :
journalctl --disk-usage
et/ou
du -hs /var/log/journal
et/ou, en version prise de tête inutile :
journalctl -u systemd-journald -o json | jq 'select(.JOURNAL_PATH | test("/var/log/journal"))' 2>/dev/null | jq -s '.[-1].CURRENT_USE_PRETTY'
.
Sur tous mes systèmes Debian GNU/Linux 11 (bullseye), SystemKeepFree est calculé automatiquement pour 5 % du système de fichiers, pas 15 % comme le dit la doc'.
On peut voir ça avec :
journalctl -u systemd-journald -x
et/ou
journalctl -u systemd-journald -o json | jq 'select(.JOURNAL_PATH | test("/var/log/journal"))' 2>/dev/null | jq -s '.[-1] | .MAX_USE_PRETTY,.DISK_KEEP_FREE_PRETTY'
.Le manuel (man
) livré par Debian dit 15 %. La configuration n'est pas surchargée dans aucun des chemins donnés par la doc' de journald (on peut également vérifier avec systemd-analyze cat-config systemd/journald.conf | grep -e 'SystemMaxUse' -e 'SystemKeepFree'
). Donc, a priori, Debian change ça à la compilation. 5 %, ce n'est pas déconnant, ça correspond à l'espace réservé pour root sur un système de fichiers ext, mais ça serait mieux de l'annoncer.
Sur l'un de mes systèmes Debian GNU/Linux, une station de travail, journald dépasse la limite qu'il cale sur SystemMaxUse. Toutes les commandes permettant de mesurer l'occupation disque le montrent, y compris du
.
Dès son démarrage, il consigne que le journal dépasse la limite, mais ne prend aucune action correctrice.
Lors du démarrage, il restait, et il reste 40 % de libre sur le système de fichiers /var, donc on n'est pas dans l'hypothèse d'un dépassement de SystemKeepFree (et, toute façon, la limite a été calée sur SystemMaxUse).
J'ai 8 fichiers journaux dont 7 archives, donc il ne s'agit pas d'un unique journal courant volumineux impossible à supprimer (seuls les archives peuvent l'être). Sa taille, comme celle des journaux archivés est inférieure à SystemMaxFileSize.
Après un journalctl --rotate
, qui demande d'archiver les journaux courants, je repasse sous la limite. Donc, a priori, journald s'impose la limite au moment de l'archivage, donc la limite est SystemMaxUse + SystemMaxFileSize (source), soit, par défaut, SystemMaxUse + (1/8)*SystemMaxUse.
Je constate également qu'il y a deux journaux dans /var/log/journal : system et user-1000. Et, d'après mes observations sur mon système, chaque fragment (archive + courant) peut grossir jusqu'à 1/8e de SystemMaxFileSize, donc, forcément, ça peut dépasser SystemMaxUse
Merci Johndescs du coup de main pour démêler tout ça.