La Raspberry Pi 3 es un minúsculo ordenador con el que se pueden hacer muchas cosas interesanets.
Aun a pesar de la limitada potencia de la Raspberry Pi 3, en muchos casos el cuello de botella no es la CPU, ni la GPU ni la RAM sino la velocidad del almacenamiento externo. El acceso a “disco”.
Las únicas opciones para conectar un disco a estas placas es pinchar una MicroSD, un Pendrive USB o un disco externo USB.
El “disco de arranque” de una de estas placas será habitualmente una tarjeta MicroSD. Las tarjetas MicroSD no son en absoluto adecuadas para este uso y flojean especialmente en velocidad de escritura.
Para sobrellevar ese problema veo 3 pasos a seguir:
- Utilizar la MicroSD más rápida que puedas conseguir
- Intentar reducir el volumen de escrituras en disco
- Intentar repartir las escrituras entre varios discos (el objeto de este artículo)
Utilizar la MicroSD más rápida que puedas conseguir
La diferencia de rendimiento entre los múltiples modelos de tarjetas MicroSD es abismal, como se puede ver análisis de rendimiento como este. Para disco donde estará el sistema operativo prestaría especial atención al rendimiento de escritura aleatoria.
De entre las que salen bien paradas ahí yo le conseguido bien de precio estas dos:
- Samsung Evo+ 32GB
- Sandisk Ultra 16GB
Una vez hemos conseguido una tarjeta decente, el siguiente paso sería:
Intentar reducir el volumen de escrituras en disco
Dependiendo de lo que estemos haciendo podemos intentar reducir la cantidad de cosas que se registran en los logs, afinar los ajustes de programas como servidores SQL, etc.
En mi caso lo único que he hecho es que /tmp esté en un ramdisk añadiendo esta linea a /etc/fstab
:
tmpfs /tmp tmpfs defaults 0 0
Dependiendo de nuestro uso podremos ser más agresivos. Por ejemplo dirigir los logs a un disco RAM eliminaría muchas pequeñas escrituras… pero lo logs desaparecerían al apagarse el equipo.
Intentar repartir las escrituras entre varios discos
Y por fin llegamos al pequeño truco que quería comentar.
En la imagen de arriba aparece un pequeño servidor doméstico con una Raspberry Pi 3. En ella tengo instalado nginx, php, PostgreSQL y alguna cosilla más.
Tras empezar a utilizarlo me encotré con que cada cierto tiempo las aplicaciones web dejaban de responder durante unos segundos.
Utilizando los comandos iostat
e iotop
pude ver que había bastante carga de escritura en disco especialmente provocada por PostgreSQL.
El único disco del sistema era la tarjeta MicroSD que servía para el sistema, las aplicaciones, los logs, la base de datos, etc.
La solución en mi caso fue muy sencilla y efectiva: además de la MicroSD dejé conectado un pendrive USB permantentemente e intenté dividir la carga de escritura entre los dos almacenamientos.
Para ello configuré PostgreSQL para llevar la carpeta con las bases de datos al pendrive, mientras que el sistema y el resto de las cosas permanecían en la MicroSD.
Simplemente con eso desaparecieron los problemas.
Un pequeño extra: copias de seguridad
Tener dos discos en el servidor me ha permitido programarlo para que cada noche haga:
- backup de los datos en la MicroSD al Pendrive USB
- backup de los datos en el Pendrive USB a la MicroSD
De esa manera en caso de que uno de los dos falle se podrá recuperar el sistema a partir de los datos en el otro.