El clip GIF de la danza de Rachel de “Friends” creció a cientos de gigabytes, sobrecargando las copias de seguridad de Discourse

El clip GIF de la danza de Rachel de “Friends” creció a cientos de gigabytes, sobrecargando las copias de seguridad de Discourse

2 hardware

Resumen breve

Discourse es una plataforma popular para discusiones en línea, con más de 22 000 comunidades.

Recientemente, al hacer una copia de seguridad del sitio, surgió un problema crítico: un archivo GIF (1,6 MB) fue copiado por los usuarios 246 173 veces, lo que superó el límite de enlaces duros en el sistema de archivos ext4 y provocó que el tamaño de la copia de seguridad creciera a 377 GB.

A continuación se detalla el análisis de la situación, las causas y las soluciones.

1. ¿Qué ocurrió?
ElementoDatosPlataformaDiscourseNúmero de comunidades>22 000Archivo‑problemaGIF “Rachel de Friends”, 1,6 MBCopias246 173 (enlaces duros)Límite ext4~65 000 enlaces duros por inodeTamaño final de la copia de seguridad377 GB
¿Por qué sucedió?
Discourse permite insertar emojis y archivos GIF en cualquier mensaje.

Al mover un archivo de un contexto a otro (por ejemplo, de un chat privado a una publicación pública), el sistema crea una nueva copia con un hash SHA‑1 aleatorio. Esto significa que, aunque el contenido sea idéntico, Discourse lo trata como un nuevo objeto.

Así, un GIF puede aparecer en decenas de miles de mensajes y chats privados – cada vez se genera un archivo distinto. Al final, 246 173 copias superaron el límite ext4, y el sistema empezó a crear nuevos archivos en lugar de enlaces duros, provocando la “pérdida” de 181 000 copias de seguridad.

2. Primera solución: agrupación por hash
Discourse intentó resolver el problema agrupando las cargas por SHA‑1:

1. Al hacer la copia de seguridad, todos los archivos se agruparon por hash idéntico.
2. Se cargaba solo la primera copia de cada grupo.
3. Para las demás se creaban enlaces duros.

Parecía elegante – pero no tenía en cuenta el límite ext4 sobre la cantidad de enlaces. Cuando se alcanzó el límite, el sistema automáticamente creó nuevos archivos en lugar de enlaces, y el tamaño de la copia de seguridad aumentó drásticamente.

3. Nueva solución: “cambio” al recibir EMLINK
Discourse desarrolló una estrategia más flexible:

1. Se crea un enlace duro al archivo como de costumbre.
2. Si el sistema de archivos devuelve el error EMLINK (límite de enlaces excedido), la siguiente copia se convierte en el archivo “principal”.
3. A partir de ese momento, los nuevos enlaces se crean nuevamente a esta nueva versión principal.

De este modo, cada vez que se supera el límite, se cambia al nuevo “archivo padre”, y el sistema sigue funcionando sin errores. Esta solución es compatible con cualquier sistema de archivos y no requiere configuración adicional.

4. Conclusiones
- Un GIF popular (el baile de Rachel de Friends) provocó un aumento del tamaño de la copia de seguridad a 377 GB.
- El límite ext4 de ~65 000 enlaces duros resultó ser un factor crítico.
- La primera solución con agrupación por hash no tuvo en cuenta las limitaciones del sistema de archivos, lo que llevó a la pérdida de datos.
- La nueva estrategia de “cambio” al recibir EMLINK permite gestionar correctamente una gran cantidad de copias y mantener la eficiencia de la copia de seguridad.

> *“Ahora sabemos que Jennifer Aniston puede realizar pruebas de estrés en la infraestructura,”* — comentó Discourse con ironía en su blog.

Comentarios (0)

Comparte tu opinión — por favor, sé amable y mantente en el tema.

Aún no hay comentarios. Deja un comentario y comparte tu opinión!

Para dejar un comentario, inicia sesión.

Inicia sesión para comentar