Mastodon Media Storage eindämmen

Gestern hat sich meine Mastodon-Instanz verabschiedet. Die CPU-Last ging massiv nach oben und die Mastodon-Services gaben ihren Geist auf. Wie sich nach einiger Zeit herausstellte, lag es am Media Storage, der den gesamten Speicherplatz aufgefressen hatte.

Warnung: Bevor du irgendwelche Änderungen machst, speichere dir einen Snapshot, sofern deine Umgebung diese Möglichkeit bietet. Solltest du einen Fehler machen, oder die Situation verschlimmbessern, kannst du wieder zum Ausgangspunkt zurück.

Das Problem

Alle Medien, die in deinen Timelines aufscheinen, werden in den Cache geladen. Dadurch muss das Medium bei erneutem Aufruf nicht nochmal vom originalen Server geladen werden. Die Daten werden einfach vom lokalen Server geholt und das läuft auch super schnell.

Der Nachteil daran: Das braucht innerhalb kürzester Zeit sehr viel Speicherplatz., da diese Medien nicht wieder gelöscht werden.

Speicherbedarf & Datenlöschung

Im Mastodon Admin-Dashboard sieht man – unter anderem – eine schöne Übersicht des Speicherverbrauchs.

Ausschnitt aus dem Mastodon-Dashboard
Mastodon Dashboard Software- und Speicherübersicht

Daran kann man gut erkennen, wie sich der Speicherplatzverbrauch entwickelt.

Die nächsten Schritte zeigen, wie du auf deinem Linux-System Informationen beziehst und den Cache zurücksetzen kannst.

Stelle sicher, dass du per su - mastodon zum Mastodon-Benutzer und ins Verzeichnis home/mastodon/live wechselst.

Alle notwendigen Aufgaben können mit der Admin CLI tootctl erledigt werden. Die Dokumentation findest du hier.

Speicherplatz auflisten

RAILS_ENV=production bin/tootctl media usage

Damit bekommst du eine Übersicht der unterschiedlichen Medientypen und des jeweiligen Speicherbedarfs:

Auflistung der unterschiedlichen Mediatypen und des gesamten Speicherverbrauchs bzw. des Speicherverbrauchs der lokalen Benutzer
Mastodon Media Usage

Local steht hier für alle lokalen Accounts.

Speicherplatz freigeben

Hinweis: Mit dem Parameter --dry-run können Befehle als Trockenlauf ausgeführt werden. Das bedeutet, dass alles machen, nur die abschließende Ausführung nicht. So kann man sehen, was passieren würde, ohne ggf. Schaden anzurichten.

Mit nachfolgendem Aufruf wird das Löschen aller Media-Daten simuliert, die älter als 30 Tage sind.

RAILS_ENV=production bin/tootctl media remove --days 30 --dry-run

Das Ergebnis kann nun so aussehen:

Removed 62176 media attachments (approx. 76.1 GB) (DRY RUN)

Um den Befehl schlussendlich tatsächlich auszuführen, ist lediglich das --dry-run aus dem Befehl zu entfernen:

RAILS_ENV=production bin/tootctl media remove --days 30

Damit sind nun alle Medien, älter als 30 Tage, gelöscht.

Allerdings ist es nur die halbe Miete, da im Laufe der Zeit der Speicher wieder vollläuft. Es wäre also eine gute Sache, die Mediendateien regelmäßig zu entfernen.

Aber Achtung: Wenn Medien am originalen Server entfernt werden, können diese nicht mehr nachgeladen werden.

Cronjob anlegen

Mit crontab -e kann man die Cronjobs des eigenen Benutzers öffnen. In meinem Fall möchte ich alle zwei Tage den Cache prüfen und alles älter 30 Tage entfernen. Das kann mit folgendem Eintrag erledigt werden:

0 0 */2 * * RAILS_ENV=production bin/tootctl media remove --days 30

Per crontab -l kann nochmals überprüft werden, ob der Cronjob auch tatsächlich übernommen wurde.

Fertig.

Alternative

Wie ich erst danach sah, gibt es auch in der Administration ein entsprechendes Setting. Hier würde ich direkt nach der ersten Installation zumindest die Media cache retention period setzen.

Fediverse-Reaktionen

Kommentare

Likes

Neuveröffentlichungen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Falls du auf diesen Beitrag mit einem Artikel auf deiner eigenen Webseite geantwortet hast, kannst du hier die URL deines Beitrags eingeben. Dabei sollte es sich um die Permalink-URL handeln. Deine Antwort wird dann (möglicherweise nach der Moderation) auf dieser Seite angezeigt. Falls du deine Antwort aktualisieren oder entfernen möchtest, aktualisiere oder lösche deinen Beitrag auf deiner eigenen Webseite und gib die URL des Beitrags erneut ein. (Erfahre mehr über Webmentions.)