Orgullosamente escrito sin IA 🙂
Desde hace un tiempo tengo esto como un servidor en casa:

Esto funciona como un NAS (network attached storage).
¿Qué hace? Me permite poder guardar cosas en el disco externo (3 TB) y acceder a ellas remotamente, aprovechando el internet fijo y sin pagar servicios cloud a nadie 🙂
Al momento el Raspberry está funcionando bien, y el CPU lleva usándose poco:

Problema
El sistema operativo está instalado en una microSD. Esta es la forma favorita de ponerle almacenamiento: fácil de conseguir, de instalar y barata.

A pesar de que la memoria que usé funcionó por un largo tiempo, se ha ido quedando corta. Para un NAS donde solo obtengo archivos ocasionalmente funciona bien, pero eventualmente fui instalando más cosas:
- Un servidor Jellyfin para ver series/películas
- Smokeping, para monitorizar los pings hacia otros puntos LaOtraRed
- speedtest-tracker, para monitorizar la velocidad de Internet y verificar que estoy recibiendo el servicio por el que estoy pagando.
- Un caché local de repositorios Linux
No es mucho xD ya que la mayoría de lo que uso está en LaOtraRed, pero la escritura constante ya va desgastando al microSD (que tiene una duración mucho menor a la de un SSD convencional). Pensé en mover todo al disco externo ya conectado, pero un HDD puede ser bastante lento para este tipo de uso.
Posibles soluciones
Lo más obvio es migrar a un SSD. Esto es fácil, solo debes conseguir un SSD y un adaptador que lo haga compatible con USB3.
Desde el Raspberry Pi 4 es posible bootear sin microSD y solo por USB (en la versión 3 el soporte era esporádico), y para eso debemos tener el firmware actualizado:

Luego de eso conecté el SSD. Esto fue un fracaso, más que nada porque ya tenía el HDD conectado. Esto generó errores en dmesg y pude intuir que el Raspberry Pi no podía darle energía a ambos al mismo tiempo.
No era compatible, por tanto cancelé la idea y la dejé así por casi un año.
Descargar ese consumo a otra parte
El concepto de traspasar la carga (offload) es interesante. En Linux lo veo mucho cuando se busca implementar mecanismos que traten de evitar «caminos costosos».
Por ejemplo: si tienes un router Gigabit, probablemente el switch integrado switchee 1Gbps sin problemas en una red local, pero la velocidad para el enrutado + NAT + firewall (esencial en un router que sale a Internet) está limitado a mucho menos que eso. Y es porque todo lo que maneja eso, la infraestructura de firewall en Linux, es un «camino costoso» y complejo.
Para ser más eficiente, Linux implementa offload de dos maneras:
- Software Flow Offload: si el firewall ya permitió por ejemplo, negociar una conexión TCP, no tiene sentido seguir evaluando filtros para los paquetes de datos que siguen en esa conexión, que sabemos ya están autorizados para ingresar.
Cuando descargas algo pesado, SFO hace que estos paquetes de datos se salten mucho del «camino costoso» y puedan pasar más rápido en mayor cantidad. Es compatible con cualquier hardware que corra Linux. - Hardware Flow Offload: A pesar de que SFO ahorra camino, sigue yendo hacia el CPU y procesándose en el kernel. HFO va un paso más allá: hace que el mismo SoC del router (chip) haga el enrutado + NAT usando un procesador especial. De esta manera, todo ese tráfico pesado nunca toca Linux y pasa por el router a la mayor velocidad posible.
Claro, esto solo funciona si tienes un chip con soporte de enrutado en capa 3 por hardware.
Sé que USB en los Raspberrys no son diferentes que los de una PC, y sería bueno encontrar alguna manera de hacer «offload» de esa carga energética a otra parte.
Un Hub USB
Casi siempre he usado hubs baratos, y los resultados fueron horribles si trataba de usarlos para algo que no sea uso convencional: dejaban de funcionar, ocasionalmente corrompían datos o su «entrada de energía independiente» devolvía 5V al cable que va hacia el Raspberry, amenazando con quemarlo. Todo hasta que llegó este Cudy UH407:

Lo compré de la Calatayud y era para aprovechar el puerto USB-C de mi laptop, puerto que apenas uso. No recuerdo cuando costó.
Lo interesante: este hub viene con Power Delivery Passthrough: puedes conectarlo a tu laptop, y conectando un cargador al hub, este alimentará el hub y tu laptop también. Queda muy bonito cuando todos los periféricos de tu escritorio están conectados al hub y de ahí a tu laptop usando un solo cable, sin nada más.
Bueno, ya que este puerto PD carga el hub… nos servirá para una Raspberry?
Detour: alimentar una Raspberry por Power Delivery Passthrough
Se puede armar algo como esto:

¡Resulta que funciona! Casi nadie hace esto 😉 Para hacerlo necesitas estos requisitos:
- Una Raspberry Pi 4 con versión de hardware 1.2+, las anteriores tienen un bug de hardware en la placa y no soportan PD bien. Probé con otra placa que es una 1.1 y no funcionó 🙁
- Tener la configuración
dtoverlay=dwc2,dr_mode=hosten /boot/firmware/config.txt - Un kernel Linux 6.6+ o superior
Funciona, pero el puerto USB-C de la Raspberry es solo USB2. No es suficiente para usarlo con el SSD, pero aún así lo escribo ya que a alguien le puede servir.
El setup perfecto

El Raspberry no puede mandar energía por USB que supere cierto límite, incluso si tienes un adaptador que pueda darle más de 3 amperios. Para hacerlo hay que ponerse a soldar (no recomendable), o mejor, usar un hub de esta manera.
Con un adaptador USB-C hembra a USB normal, ahora el hub puede ser usado. Conecté dos discos duros ahí (uno más de lo previsto) y alimenté todo eso con un cargador Cudy CH20, que por 50 Bs más me da 5V 3A para disponer con comodidad 😀

Ahí se ve todo funcional. Las 3 unidades se reconocen sin problema 😀
Alternativas
Ojo que fui a comprar otros modelos y traté de replicar esto con un Cudy UH405 (más barato, con PD y un solo puerto USB3 mas dos USB2). No funcionó, cada vez que le llega primero energía por PD este se bloquea y no enumera los aparatos USB que tiene conectados.
El UH407 no tiene este problema, ¡muy bien por el team que programó su firmware!
Próximamente
El adaptador de SSD NVMe a USB que usé. Existe uno que creo es el mejor (buena velocidad, bajo consumo, buena compatibilidad y bajas temperaturas) y comentaré cómo conseguirlo y configurarlo.









































