Da mit dem aktuellen Jessi Kernel 4.4.34+ bzw. 4.4.50+ eine Abfrage mit systemctl --version Ein (systemd 215) als aktiv zeigt, kann das journal nicht mit dem Schalter "--vacuum-size=100M" zb. auf 100 MB verkleinert werden. Das wird sich wohl erst mit der Version Stretch ändern. Für alle User die nicht sofort auf Stretch umsteigen wollen hier ein Vorschlag. Die Original Idee von meigrafd und Thomas mit dem Script varlog wird etwas erweitert und leicht verändert. http://www.forum-raspberrypi.de/Thread-tutorial-var-log-in-eine-art-ramdisk-auslagern-weitere-optimierungen-bezgl-logs?page=4&highlight=ramdisk Die Änderung: Im Start Zweig von varlog wird mit dem rsync Schalter --exclude "- *.journal" verhindert das ein system.journal aus /var/log_save/.. wieder nach /var/log/.. kopiert wird. Damit kann es in /var/log/.. keine system.journal~ Datei mehr geben. Es gibt nur das system.journal vom aktuellen Booten/Einschalten. Im Stop Zweig von varlog wird mit dem rsync Schalter --exclude "**~" --exclude "- user*" verhindert das ein möglicherweise Vorhandenes user-1000.journal bzw. system.journal~ wieder nach /var/log_save/.. kopiert wird. Die Erweiterung: Um eine Analyse der system.journal Dateien aus /var/log_save/.. zu erreichen wird der logrotate Mechanismus benutzt. Dazu wird der logrotate.timer und der logrotate.service sowie die Datei logrotate_varlog.conf benutzt. Die Datei logrotate_varlog.conf wurde erstellt um Probleme mit dem normalen logrotate Dienst in Jessi zu vermeiden. Ein Test ist möglich mit sudo /usr/sbin/logrotate -v /etc/logrotate_varlog.conf Zum Ablauf: sudo /usr/local/bin/varlog stop Kopiert alles von /var/log/ nach /var/log_save/ -- Ausser der "user-1000.journal" bzw. "system.journal~" Datei. sudo /usr/local/bin/varlog start Kopiert alles von /var/log_save/ nach /var/log/ -- Ausser der "system.journal" Datei. 2 Minuten nach jedem reboot/Einschalten wird vom logrotate.timer und dem logrotate.service Das system.journal aus /var/log_save/.. in das Verzeichnis /var/archive/ als system.journal.1.gz kopiert und gepackt. Im Moment werden die Dateien bis zur system.journal.7.gz behalten. Um die system.journal.x.gz Datei zu einer Analyse wieder auszupacken benuzte ich den sik Zweig von varlog sudo /usr/local/bin/varlog sik Das Script sik.sh zeigt alle system.journal.x.gz Dateien an, die ausgewählte Datei wird entpackt und mit journalctl --verify geprüft. Dann wird mit journalctl -p err die Datei system.journal auf Fehler und danch auf Vorkommen von "varlog\|journal" geprüft. Zum Schluss werden alle Einträge der aktuell ausgewählten system.journal Datei anzeigt. Wenn in /var/archive/ schon ein system.journal liegt wird das vom Script erkannt und nach Abfrage gelöscht. # --------------------------------------------------------------------------------------------------------------------------------- # # Ab hier das Tutorial. # Die Punkte 1 bis 11 sind Allgemeiner Natur für Kontrollen und wichtiger Prüfungen und sollten abgearbeitet werden. # Ab Punkt 12 erfolgt die Installation vom gesamten Paket mit allen Kontrollen. # --------------------------------------------------------------------------------------------------------------------------------- # 1. System Aktualisierung und Prüfen ob rsync installiert ist wenn nicht Install. sudo apt update sudo apt dist-upgrade type rsync sudo apt install rsync sudo reboot 2. Prüfen ob das Journal von systemd schon aktiv ist, es muss in /var/log/ den Ordner journal geben. ls -lah /var/log/ # drwxr-sr-x+ 3 root systemd-journal 4,0K Aug 4 2016 journal 3. Wenn in /var/log/ noch die syslog und messages Dateien liegen ist der alte rsyslog Dienst noch aktiv. Dieser kann entfernt werden. Zur Vorsicht das alte /var/log/ komplett zu sichern. sudo mkdir -p /var/log_old sudo cp -Rpu /var/log/* /var/log_old/ ls -la /var/log/ # -rw-r----- 1 root adm 76M Mai 15 20:17 messages # -rw-r----- 1 root adm 261M Mai 15 20:17 syslog 4. Dann werden die Werte für das system-journald auf sinnvolle Werte eingestellt. Dazu die Datei journald.conf öffnen und die 4 Einträge am Datei Ende einfügen. Die Werte sollten nach dem eigenen Bedarf eingestellt werden. sudo nano /etc/systemd/journald.conf SystemMaxUse=50M SystemKeepFree=5M SystemMaxFileSize=4M ForwardToSyslog=no # 5. ACHTUNG: Die folgenden drei Zeilen nur aufrufen wenn in /var/log/ noch KEIN Ordner journal vorhanden war. Nach dem systemctl restart Kommando wird ein Journal geschrieben. sudo mkdir -p /var/log/journal sudo systemd-tmpfiles --create --prefix /var/log/journal sudo systemctl restart systemd-journald 6. Nun kann der rsyslog Dienst entfernt und der user pi zur Gruppe systemd-journal hinzugefügt werden. sudo apt-get purge --remove rsyslog sudo adduser pi systemd-journal 7. Um /tmp ebenfalls nach tmpfs zu mounten, prüfen ob die Datei tmp.mount vorhanden ist wenn ja tmp.mount einschalten. ls -la /lib/systemd/system/tmp.mount less /lib/systemd/system/tmp.mount sudo systemctl enable tmp.mount sudo systemctl start tmp.mount systemctl status tmp.mount 8. Wenn der rsyslog lief können nach reboot bzw. halt die alten Dateien gelöscht werden. Dazu vorher von allen Ordnern/Dateien die Größe und den aktuellen Zeitstempel holen. Um sinnvolle Werte in die journald.conf einzutragen ist die Größe der Ordner hilfreich. ls -lah /var/log/ du -h /var/log/ 9. Nach dem reboot erste Kontrollen. Und das Löschen der nicht mehr benötigten Dateien in /var/log/ zb. messages usw. Jetzt kann auch der user pi das System Journal mit journalctl öffnen. sudo reboot df -Th | grep tmpfs sudo rm /var/log/messages sudo rm /var/log/syslog journalctl 10. Nach dem Löschen der alten rsyslog Dateien wird viel weniger Platz in /var/log/ benötigt. Dann kann es sinnvoll sein die /etc/journald.conf nochmal anzupassen. du -sh /var/log/ sudo nano /etc/systemd/journald.conf sudo systemctl restart systemd-journald 11. Wenn nach dem Löschen der alten Dateien in /var/log/ der Ordner journal fehlen sollte dann den Punkt 5. ausführen. # --------------------------------------------------------------------------------------------------------------------------------- # 12. Mit Filezilla die Datei varlog_aktuell.tar.gz auf den RasPi kopieren und auspacken. Diese Dateien sollten zu sehen sein. tar zxvf varlog_aktuell.tar.gz ls -la varlog_aktuell -rw-r--r-- 1 frank users 903 13. Mai 21:03 journald.conf -rw-r--r-- 1 frank users 253 13. Mai 21:23 logrotate.service -rw-r--r-- 1 frank users 181 13. Mai 21:23 logrotate.timer -rw-r--r-- 1 frank users 543 13. Mai 21:03 logrotate_varlog.conf -rwxr--r-- 1 frank users 2691 20. Mai 21:38 sik.sh -rwxr--r-- 1 frank users 903 23. Mai 20:58 varlog -rw-r--r-- 1 frank users 321 13. Mai 21:08 varlog.service 13. Dann werden die Rechte gesetzt und die Dateien an Ihren Platz verschoben. ACHTUNG: Diese Zeile in Datei logrotate_varlog.conf muss nach dem Verschieben auf den eigenen Ordner Namen aus /var/log/journal/... angepasst werden. /var/log_save/journal/.. Ordner/system.journal { sudo chown root:root varlog_aktuell/*.* sudo chown root:root varlog_aktuell/varlog cd varlog_aktuell sudo mv logrotate_varlog.conf /etc/ sudo mv logrotate.service /etc/systemd/system/ sudo mv logrotate.timer /etc/systemd/system/ sudo mv varlog.service /etc/systemd/system/ sudo mv sik.sh /usr/local/bin/ sudo mv varlog /usr/local/bin/ sudo nano /etc/logrotate_varlog.conf 14. Nun wird für den logrotate.service der Ordner /var/archive/ angelegt. Danach ist ein Trocken Test möglich. 2 Minuten nach jedem reboot/Einschalten wird vom logrotate.timer und dem logrotate.service Das system.journal aus /var/log_save/.. in das Verzeichnis /var/archive/ als system.journal.1.gz kopiert und gepackt. Im Moment werden die Dateien bis zur system.journal.7.gz im Ordner /var/archive/ behalten. Es muss nur der logrotate Timer aktiviert werden dieser benutzt dann den logrotate.service und in diesem logrotate.service steht ein "ExecStart=/usr/sbin/logrotate /etc/logrotate_varlog.conf" Mit dem "systemctl list-timers" erfolgt die Kontrolle des Timers sudo mkdir -p /var/archive/ #sudo /usr/sbin/logrotate -v /etc/logrotate_varlog.conf sudo /bin/systemctl enable logrotate.timer sudo /bin/systemctl start logrotate.timer systemctl status logrotate.timer systemctl list-timers # NEXT LEFT LAST PASSED UNIT ACTIVATES # n/a n/a Di 2017-05-16 21:50:31 CEST 1min 21s ago logrotate.timer logrotate.service 15. Erst jetzt wird der varlog.service Aktiviert !!! sudo /bin/systemctl enable varlog.service sudo /bin/systemctl start varlog.service systemctl status varlog.service 16. Hop oder Top /bin/systemctl reboot 17. Nach dem Einschalten bzw. dem reboot muss es dann so aussehen. In /var/log/journal/.../ das aktuelle Journal. In /var/log_save/journal/.../ das Journal bis zum reboot. In /var/archive/ noch nichts. Der Ordner /var/log/ muss als tmpfs gemounted sein. Der varlog-status muss fehlerfrei sein. Eine Kontrolle des aktuellen/laufenden Boots zeigt, dass die Reihenfolge wie erwünscht passt. Hier zB. wird der logrotate.service in 2 Sekunden vom logrotate.timer gestartet. ls -la /var/log/journal/.../ ls -la /var/log_save/journal/.../ ls -la /var/archive/ df -Th | grep tmpfs systemctl status varlog.service journalctl -b | grep "varlog\|journal" -i systemctl list-timers NEXT LEFT LAST PASSED UNIT ACTIVATES Mi 2017-05-17 20:55:29 CEST 2s left n/a n/a logrotate.timer logrotate.service 18. Nach dem der logrotate.service gelaufen ist liegt In /var/log/journal/.../ das aktuelle Journal. In /var/log_save/journal/.../ eine leere system.journal Datei. In /var/archive/ das gepackte .x.gz Journal aus /var/log_save/journal/.../ Die beiden folgenden logrotate status Meldungen sind so OK. systemctl status logrotate.timer ● logrotate.timer - Daily rotation of log files Loaded: loaded (/etc/systemd/system/logrotate.timer; enabled) Active: active (elapsed) since Mi 2017-05-17 20:53:43 CEST; 2min 45s ago Docs: man:logrotate(8) man:logrotate.conf(5) systemctl status logrotate.service ● logrotate.service - Rotate log files Loaded: loaded (/etc/systemd/system/logrotate.service; static) Active: inactive (dead) since Mi 2017-05-17 20:55:38 CEST; 59s ago Docs: man:logrotate(8) man:logrotate.conf(5) Process: 914 ExecStart=/usr/sbin/logrotate /etc/logrotate_varlog.conf (code=exited, status=0/SUCCESS) Main PID: 914 (code=exited, status=0/SUCCESS) 19. Um die system.journal.x.gz Datei zu einer Analyse wieder auszupacken benuzte ich den sik Zweig von varlog Das Script sik.sh zeigt alle system.journal.x.gz Dateien aus /var/archive/ an. Nach Eingabe der Datei Nr. zB. 1 für die aktuellste Datei wird die ausgewählte Datei wieder entpackt und mit journalctl --verify geprüft. Dann wird mit journalctl -p err die Datei auf Fehler und danch auf Vorkommen von "varlog\|journal" geprüft. Zum Schluss werden alle Einträge der aktuell ausgewählten system.journal Datei anzeigt. Wenn in /var/archive/ schon ein system.journal liegt wird das vom Script erkannt und nach Abfrage gelöscht. sudo /usr/local/bin/varlog sik