Community-Lösung

CasaOS-Journalprotokolle füllen die Festplatte: journald sicher begrenzen

A CasaOS server accumulated more than 5 GB of journal logs, prompting a manual journald size limit and questions about retention and alternate log locations.

Fazit: journald begrenzen, bevor die kleine CasaOS-Systemfestplatte voll ist

Das ursprüngliche CasaOS-System hatte mehr als 5 GB unter /var/log/journal. Die dauerhafte Lösung besteht nicht darin, Journaldateien manuell zu löschen. Legen Sie eine Größenobergrenze fest, bewahren Sie optional einen Mindestbestand an freiem Speicherplatz und bereinigen Sie einmalig alte archivierte Protokolle. Danach setzt journald die Richtlinie automatisch durch.

Journalgröße messen, bevor Sie Änderungen vornehmen

journalctl --disk-usage
du -sh /var/log/journal 2>/dev/null
df -h /var

Wenn Protokolle mehrere Gigabyte auf einer kleinen Startfestplatte belegen, legen Sie fest, wie viel aktuelle Historie Sie tatsächlich benötigen. Für einen Heimserver ist eine feste Obergrenze normalerweise berechenbarer, als die Standardwerte einen Prozentsatz des Dateisystems belegen zu lassen.

Größen- und Aufbewahrungslimits in journald.conf festlegen

[Journal]
SystemMaxUse=1G
SystemKeepFree=1G
MaxRetentionSec=14day

SystemMaxUse begrenzt den Speicherplatz für persistente Journale, während SystemKeepFree freien Speicherplatz für das übrige Betriebssystem bewahrt. MaxRetentionSec ist optional, wenn Sie zusätzlich eine zeitbasierte Obergrenze wünschen. Die Größenlimits von journald erläutern, wie diese Grenzen zusammenwirken.

Alte Protokolle einmal nach dem Festlegen der Richtlinie bereinigen

sudo journalctl --rotate
sudo journalctl --vacuum-size=1G

Durch das Bereinigen werden archivierte Journaldateien entfernt; die Konfiguration wird dadurch nicht ersetzt. Wenn Sie nur bereinigen und nie ein Limit festlegen, kann das Verzeichnis wieder wachsen. Die Bereinigungssteuerung von journalctl behandelt die unterstützten Bereinigungsbefehle.

Stoppen Sie journald nicht nur, um die Konfigurationsdatei zu ersetzen

Der Beitrag von 2024 stoppte den Dienst, entfernte die Konfiguration und kopierte eine Ersatzdatei. Das funktionierte, ist aber störender als nötig. Bearbeiten Sie die Datei sicher, bewahren Sie eine Sicherungskopie auf und starten Sie anschließend den Dienst neu:

sudo cp /etc/systemd/journald.conf /etc/systemd/journald.conf.bak
sudo nano /etc/systemd/journald.conf
sudo systemctl restart systemd-journald

Kann journald Protokolle auf einer anderen Festplatte speichern?

Nicht über einen einfachen beliebigen Pfad in journald.conf. Storage=persistent verwendet /var/log/journal; Storage=volatile verwendet /run/log/journal. Wenn Sie an anderer Stelle eine längere Aufbewahrung benötigen, leiten Sie die Protokolle an einen anderen Syslog-/Journal-Host weiter, statt kritische Systempfade unbedacht einzubinden.

Den Dienst finden, der übermäßig viele Protokolle erstellt

journalctl -p warning..alert --since "24 hours ago"
journalctl --since "24 hours ago" | tail -200
systemctl --failed

Ein Festplattenlimit schützt das Betriebssystem, behebt aber keinen Dienst, der denselben Fehler tausendfach protokolliert. Beheben Sie den gesprächigen Dienst, sobald das System wieder ausreichend freien Speicherplatz hat.

Wenn Sie einen Wechsel von einer älteren CasaOS-Installation zu einem serverähnlicheren Gerät in Betracht ziehen, bieten die ZimaBoard-2-Plattform und das ZimaOS-Backup einen sichereren Migrationskontext.

Verhindern, dass ein einzelner Dienst das Journal überflutet

Wenn ein Container oder Daemon dieselbe Warnung ununterbrochen ausgibt, begrenzen globale Speicherlimits lediglich den Schaden. Prüfen Sie die Einheiten mit den meisten Einträgen und beheben Sie anschließend die Ursache:

journalctl --since "1 hour ago" -o short-unix | tail -500
journalctl -u SERVICE_NAME --since "1 hour ago"

Für von systemd verwaltete Dienste können Protokollratenbegrenzungen pro Unit Spitzen reduzieren, ohne jedes zweite Systemprotokoll zu verwerfen. Verwenden Sie eine Ratenbegrenzung erst, wenn Sie verstanden haben, was unterdrückt wird; wiederholte Speicher-, Dateisystem- oder Netzwerkfehler können die Hinweise liefern, die Sie zur Behebung des zugrunde liegenden Problems benötigen.

FAQ

Wie groß sollte SystemMaxUse sein?

Es gibt keinen universell passenden Wert. Auf einer kleinen Systemfestplatte sind 500 MB bis 2 GB ein praktischer Ausgangsbereich, wenn Sie selten einen langen Protokollverlauf benötigen. Lassen Sie ausreichend freien Speicherplatz für Updates und Anwendungsmetadaten.

Löscht journalctl --vacuum-size aktuelle Protokolle?

Dabei werden archivierte Journaldateien entfernt, bis die Zielgröße annähernd erreicht ist. Rotieren Sie zuerst, wenn Sie das aktive Journal in den Archivbestand verschieben möchten.

Sollte ich logrotate für /var/log/journal verwenden?

Nein. Binäre Journaldateien werden von systemd-journald selbst verwaltet. Verwenden Sie die Größen- und Aufbewahrungseinstellungen von journald sowie die Bereinigungsvorgänge von journalctl.

Kann ich Protokolle auf einer anderen HDD speichern?

Ja, über eine Protokollweiterleitung oder einen gezielt eingerichteten Mount. journald bietet jedoch keine Einstellung für einen beliebigen benutzerdefinierten Pfad. Remote-Protokollierung ist in der Regel sicherer, als ein zentrales Verzeichnis des Betriebssystems zu verschieben.

Warum ist das Journal auf mehrere Gigabyte angewachsen?

Die Standardrichtlinie kann beträchtlichen Speicherplatz zulassen, und ein einziger gesprächiger Dienst kann schnell viele Einträge erzeugen. Prüfen Sie sowohl das konfigurierte Limit als auch den Dienst, der das Volumen verursacht.