GIF‑klip s tancem Rachel z „Přátel“ se zvětšil na stovky gigabajtů a zničil záložní kopie Discourse
Krátké shrnutí
Discourse je populární platforma pro online diskuse, na které je nyní více než 22 000 komunit.
Nedávno při zálohování webu nastala kritická chyba: jeden GIF‑soubor (1,6 MB) byl zkopírován uživateli 246 173krát, což překročilo limit tvrdých odkazů v souborovém systému ext4 a vedlo k nárůstu velikosti zálohy na 377 GB.
Níže je podrobný rozbor situace, příčin a řešení.
1. Co se stalo?
ElementDataPlatformDiscoursePočet komunit>22 000Soubor‑problémGIF „Rachel z „Friends“, velikost 1,6 MBPočet kopií246 173 (tvrdé odkazy)Limit ext4~65 000 tvrdých odkazů na jeden inodeKonečná velikost zálohy377 GB
Proč se to stalo?
Discourse umožňuje vkládat emotikony a GIF‑soubory do libovolných zpráv.
Při přesunu souboru z jednoho kontextu do druhého (například z osobního chatu do veřejného příspěvku) systém vytvoří novou kopii s náhodným SHA‑1 hashem. To znamená, že i když je obsah identický, Discourse jej považuje za nový objekt.
Tím pádem se jeden GIF může objevit v desítkách tisíc zpráv a osobních chatech – pokaždé se generuje samostatný soubor. Výsledkem bylo, že 246 173 kopií překročilo limit ext4 a systém začal vytvářet nové soubory místo tvrdých odkazů, což vedlo k „ztrátě“ 181 000 záloh.
2. První řešení – hash‑sběr
Discourse nejprve zkusil problém vyřešit seskupováním stažení podle SHA‑1:
1. Při zálohování se všechny soubory shromažďovaly do skupin stejných hashů.
2. Stahovala se pouze první kopie ze každé skupiny.
3. Pro ostatní se vytvářely tvrdé odkazy.
To vypadalo elegantně – ale nezohledňovalo omezení ext4 na počet odkazů. Jakmile byl limit dosažen, systém automaticky vytvářel nové soubory místo odkazů a velikost zálohy prudce vzrostla.
3. Nové řešení – „přechod“ při chybě EMLINK
Discourse vyvinul flexibilnější strategii:
1. Vytvoří se tvrdý odkaz na soubor, jak obvykle.
2. Pokud souborový systém vrátí chybu EMLINK (limit odkazů překročen), následující kopie se stane „hlavním“ souborem.
3. Od té doby se nové odkazy opět vytvářejí na tuto novou hlavní verzi.
Tím pádem při každém překročení limitu dochází k přepnutí na nový “rodičovský” soubor a systém pokračuje bez chyb. Toto řešení je kompatibilní s jakýmkoli souborovým systémem a nevyžaduje další nastavení.
4. Závěry
- Jeden populární GIF (taneční pohyby Rachel z „Friends“) způsobil nárůst zálohování na 377 GB.
- Omezení ext4 na ~65 000 tvrdých odkazů se ukázalo jako kritický faktor.
- První řešení s hash‑sběrem nezohlednilo souborová omezení, což vedlo ke ztrátě dat.
- Nová strategie „přechodu“ při chybě EMLINK umožňuje správně spravovat velké množství kopií a zachovat efektivitu zálohování.
> *„Nyní víme, že Jennifer Aniston může provádět stresové testy infrastruktury,“* — s ironickým tónem poznamenala Discourse ve svém blogu.
Komentáře (0)
Podělte se o svůj názor — prosím, buďte slušní a držte se tématu.
Přihlaste se pro komentování