Ein GIF-Clip von Rachel aus „Friends“, die tanzt, wuchs auf mehrere hundert Gigabyte an und zerstörte die Backup-Kopien von Discourse

Ein GIF-Clip von Rachel aus „Friends“, die tanzt, wuchs auf mehrere hundert Gigabyte an und zerstörte die Backup-Kopien von Discourse

2 hardware

Kurzfassung

Discourse ist eine beliebte Plattform für Online-Diskussionen, auf der derzeit mehr als 22 000 Communities aktiv sind.

Bei einer letzten Sicherung des Systems trat ein kritisches Problem auf: Eine GIF-Datei (1,6 MB) wurde von Benutzern 246 173 Mal kopiert, was das Limit an harten Links im ext4-Dateisystem überschritt und die Größe der Sicherung auf 377 GB anwuchs.

Nachfolgend eine detaillierte Analyse der Situation, Ursachen und Lösungen.

1. Was ist passiert?
ElementDatenPlattformDiscourseAnzahl Communities>22 000Datei‑ProblemGIF „Rachel aus Friends“, Größe 1,6 MBAnzahl Kopien246 173 (harde Links)Limit ext4~65 000 harte Links pro InodeEndgültige Sicherungsgröße377 GB
Warum ist das passiert?
Discourse erlaubt es, Emojis und GIF-Dateien in beliebigen Beiträgen einzufügen.

Beim Verschieben einer Datei von einem Kontext in einen anderen (z. B. aus einem privaten Chat in einen öffentlichen Beitrag) erstellt das System eine neue Kopie mit einem zufälligen SHA‑1-Hash. Das bedeutet, dass selbst bei identischem Inhalt Discourse die Datei als neues Objekt behandelt.

Damit kann ein GIF in Zehntausenden von Beiträgen und privaten Chats erscheinen – jedes Mal wird eine separate Datei erzeugt. Am Ende führten 246 173 Kopien das ext4-Limit übersteigt, sodass das System neue Dateien anstelle harten Links erstellte, was zu einer „Verlust“ von 181 000 Sicherungskopien führte.

2. Erste Lösung – Hash‑Konsolidierung
Discourse versuchte zunächst, das Problem durch Gruppieren der Uploads nach SHA‑1 zu lösen:

1. Beim Backup wurden alle Dateien in Gruppen gleicher Hashes zusammengefasst.
2. Nur die erste Kopie jeder Gruppe wurde geladen.
3. Für die übrigen wurden harte Links erstellt.

Das sah elegant aus – berücksichtigte jedoch nicht das ext4-Limit an Links. Sobald das Limit erreicht war, erstellte das System automatisch neue Dateien statt Links, und die Backup-Größe stieg stark an.

3. Neue Lösung – „Switch“ bei EMLINK‑Fehler
Discourse entwickelte eine flexiblere Strategie:

1. Es wird wie gewohnt ein harter Link zur Datei erstellt.
2. Wenn das Dateisystem den Fehler EMLINK (Limit überschritten) zurückgibt, wird die nächste Kopie zum „Basis“-Datei.
3. Ab diesem Zeitpunkt werden neue Links wieder zu dieser neuen Basisversion erstellt.

Damit wechselt bei jedem Überschreiten des Limits auf eine neue „Eltern“-Datei um und das System bleibt fehlerfrei. Diese Lösung ist mit jeder Dateisystem kompatibel und erfordert keine zusätzliche Konfiguration.

4. Ergebnisse und Erkenntnisse
- Ein beliebtes GIF (Rachels Tanz aus Friends) führte zu einer Sicherungsgröße von 377 GB.
- Das ext4-Limit von ~65 000 harten Links erwies sich als kritischer Faktor.
- Die erste Hash‑Konsolidierung berücksichtigte die Dateisystembeschränkungen nicht, was zum Datenverlust führte.
- Die neue EMLINK‑Switch‑Strategie ermöglicht eine korrekte Handhabung großer Kopienzahlen und erhält die Effizienz der Sicherung.

> „Jetzt wissen wir, dass Jennifer Aniston in der Lage ist, die Infrastruktur zu stressen“, — ironisch bemerkte Discourse in seinem Blog.

Kommentare (0)

Teile deine Meinung — bitte bleib höflich und beim Thema.

Noch keine Kommentare. Hinterlasse einen Kommentar und teile deine Meinung!

Um einen Kommentar zu hinterlassen, melde dich bitte an.

Zum Kommentieren anmelden