Warum sind Journald-Protokolldateien so groß?

Warum sind Journald-Protokolldateien so groß?

Wenn ich ein mache, journalctl --disk-usagesagt es etwas über300 MBGröße der Journaldateien, aber wenn ich mir den eigentlichen Text anschaue, journalctl | wc -cist es etwas über28 MB. Nun, journald verfügt über eine Komprimierung und selbst wenn man Metadaten wie Zeitstempel, UID, Nachrichten-Hash und ähnliches berücksichtigt, scheint es mir eine lächerliche Verschwendung von Speicherplatz zu sein.

Kann mir jemand sagen, warum die Journaldateien im Vergleich zum eigentlichen Text darin so groß sind?

Antwort1

Dafür gibt es zwei Gründe. Erstens gibt es, wie @Mella erwähnte, den Unterschied zwischen dem aktuellen Protokoll und allen Protokollen.

Zweitens man journalctlgibt es, wie in dokumentiert, eine Reihe von Ausgabeformaten. Sie haben die Größe des kompaktesten/am wenigsten detaillierten Formats gemessen. Um die maximale Anzahl an Daten im systemd-Journal anzuzeigen, verwenden Sie:

journactl --output=verbose

In meinem Fall gibt die kompakte Journalausgabe 32 Megabyte an Daten zurück, während mit 128 MB zurückgegeben --output=verboseund mit 152 MB gefunden werden journalctl --disk-usage, wobei sowohl aktive als auch archivierte Journale abgedeckt sind.

Lesen Sie nach, wie Sie bei Bedenken man journald.confden genutzten Speicherplatz begrenzen können .journald

Antwort2

  1. Sie sind riesig, weil es sich um eine Art Fehler handelt:

Wie angegebenstromaufwärtsund daher ist den Entwicklern von journald bekannt, dass das im Binärprotokoll verwendete Format (noch?) überhaupt nicht besonders toll ist.

  1. Sie sind riesig, weil vielleicht die Kompression nicht aktiviert ist

Es gibt auch eine Option mit /etc/systemd/journald.confdem Namen Compress=yes, die auf Ihrem System möglicherweise nicht aktiv ist, sodass effektiv keine Komprimierung stattfindet.

  1. Die Ausgabe archivierter Zeitschriften spielt hierbei keine Rolle.

Obwohl es im Prinzip richtig ist, dass Journald unterscheidet zwischenaktivUndarchiviertJournalprotokolle, dies ist eine irreführende Antwort auf die anderen Antworten, da darin man journalctleindeutig steht:

Die Ausgabe erfolgt aus allen zugänglichen Journaldateien, unabhängig davon, ob sie rotiert sind oder gerade geschrieben werden und ob sie zum System selbst gehören oder zugängliche Benutzerjournale sind.

Die anderen Antworten sind daher hier irreführend.

  1. Der Festplattenverbrauch von journalctl ist aufgrund einiger Maßnahmen zur Dateizuordnung, Fragmentierung und Beschädigungssicherung enorm (d. h. größer als bei einfachen Textdateien mit vergleichbarem Informationsgehalt, also Feldern).

„Probleme mit der Dateifragmentierung/-zuordnung“

Auf meiner Box journalctl --version == "systemd 239[...]"sind die Journaldateien, die die Daten enthalten, in Dateigrößen von einem Vielfachen von 8 MiB vorhanden. Als Folge davon ist die Journaldatei meines Systems 8 MiB groß, auch wenn nur ein Bruchteil (in einem Fall 56 KiB) der Daten tatsächlich darin gespeichert ist.

"Anti-Korruptionsproblem" Laut Poettering, einem der Entwickler von journaldund systemdin einem Fall, in dem eine Zeitschrift als durch korrumpiert angesehen wird journald, wird sie nicht "repariert", sondern so belassen, wie sie ist, um weitere Probleme zu vermeiden. (siehehttps://bugs.freedesktop.org/show_bug.cgi?id=64116#c3)

Dies bedeutet natürlich, dass die Wahrscheinlichkeit groß ist, dass sich in Ihrem Var-Protokoll unkomprimierte, fast leere Binärprotokolldateien befinden, wodurch es effektiv viel, viel größer wird als eine vernünftige Alternative im Klartext.

Antwort3

journalctlohne Parameter (mit deren Ausgabe Sie messen wc -c) werden nur Journaleinträge im aktiven Journal angezeigt (ich bin mir nicht spontan sicher, was einen Umschlag auslöst). journalctl --disk-usagewird der von den archivierten Journalen sowie dem aktiven Journal verwendete Speicherplatz angezeigt.

verwandte Informationen