En esta ocasión os traigo el dolor de cabeza de todo administrador de Mastodon: el espacio en disco.

Con las últimas oleadas tras el maltrato a los trabajadores de la res social del pájaro azul, muchos usuarios han decidido probar el Fediverso y se han registrado en muchos nodos de Mastodon.

Cuando se genera una oleada tan grande como éstas últimas, se crea mucho más cache, más ficheros, más tráfico, más peticiones a otros nodos, más peticiones a tu nodo... La cosa se complica y para evitar que todo vaya tan lento se guardan muchos ficheros en el servidor.

Pero hay una serie de comandos que permiten limpiar todos esos ficheros, limpiar caché, eliminar ficheros que ya no se utilizan, etc.

Los comandos para liberar espacio

Vamos directos a explicar los comandos que suelo ejecutar en mi nodo de Mastodon, este es el matenimiento que hago de vez en cuando o cuando zabbix me chiva que quedan 20% de espacio libre de disco.

🚨
Los comandos a continuación se escribirán como si el comando tootctl estuviera en /bin/, si no es tu caso, deberás de ejecutar el comando con la ruta completa ./live/bin/tootctl.

media remove

Este comando permite eliminar las copias en caché local de archivos adjuntos de medios de otros servidores. Para más información aquí.

RAILS_ENV=production tootctl media remove

También podemos indicar la antigüedad que deben de tener los archivos adjuntos con --days=N antes de que se eliminen. Por defecto este valor es de 7.

RAILS_ENV=production tootctl media remove --days=4

preview_cards remove

Este otro comando sirve para eliminar las vista previa de las miniaturas de las tarjetas. Para más información aquí.

RAILS_ENV=production tootctl preview_cards remove

Como en el anterior comando, también podemos utilizar la opción --days=N.

RAILS_ENV=production tootctl preview_cards remove --days=3

cache recount

Con este otro, actualizamos los contadores almacenados en cache del TYPE contando los registros a los que se hace referencia desde cero. En cuanto al TYPE pueden ser accounts o statuses.

Esta tarea puede tardar dependiendo del tamaño de la base de datos y actualizaremos los contadores para los seguidores de nuestra cuenta, las personas a quien seguimos, así como el contador de impulso y favorito de los toots. Para más información aquí.

RAILS_ENV=production tootctl cache recount accounts

statuses remove

Para poder eliminar los estados no referenciados de la base de datos, como los estados que provienen de retransmisiones o de usuarios que ya no son seguidos por ninguna cuenta local o que no han recibido ninguna respuesta ni interactuado con ellos, podemos usar el siguiente comando:

RAILS_ENV=production statuses remove

Este procedimiento consume mucha CPU ya que necesita crear índices en la base de datos adicionales antes de comenzar y luego los elimina. Por lo que se recomienda realizarlo en algún momento del día de poca actividad. Para más información aquí.

Como otros comandos, también podemos usar la opción --days=N.

cache clear

Este comando es sencillo, limpia la cache en el servidor. Para más información aquí.

RAILS_ENV=production tootctl cache clear

media remove-orphans

Otra operación lenta pero que es muy recomendable hacer. Con este otro comando lo que hacemos es buscar archivos que no pertenecen adjuntos en medios existentes y los elimina (por ejemplo, una imagen que se ha descargado de un toot y ese toot ha sido eliminado). Para más información aquí.

📢
Si estás utilizando algún proveedor de almacenamiento externo de Object Storage, ten en cuenta que estos servicios cobran por las solicitudes de API, por lo que puede ser costoso.
RAILS_ENV=production tootctl media remove-orphans

emoji purge

Este comando elimina los emojis configurados en el servidor, pero tiene una opción que nos interesa mucho para liberar espacio --remote-only. Esta opción elimina los emojis federados con otros nodos y que se han descargado en el servidor. Para más información aquí.

RAILS_ENV=production tootctl emoji purge --remote-only

accounts cull

En la base de datos se guardan todas las cuentas remotas que tiene contacto cualquier de los usuarios del nodo. Con este comando podemos eliminar las cuentas remotas que ya no existen.

Lo hace consultando cada cuenta remota en la base de datos para determinar si todavía existen en el servidor de origen y, si no es así, la elimina de la base de datos.

Para las cuentas que han tenido actividad confirmada en la última semana se excluyen de este proceso, por si el servidor está caído. Para más información aquí.

RAILS_ENV=production tootctl accounts cull

Conclusión

En principio con estos comandos eliminaremos gigas y gigas de datos que no sirven de mucho y así podremos liberar espacio. Existen otros comandos interesantes y para ello te recomiendo revisarlo en la Documentación Oficial de Mastodon.