Friant de toutes ces petites bêtes, cela fait des années que je teste beaucoup de solutions autour du Raspberry Pi.
Un sujet revient fréquemment dans mes essais : le stockage sur Raspberry. Une fausse bonne idée ?
L’occasion de revenir sur mon expérience sur divers besoins et technos utilisées autour du stockage sur Raspberry.
Intro
Qui n’a pas entendu parler depuis toutes ces années de l’existance des Raspberry Pi, des nombreux accessoires et boards ? Vraiment dans le monde de l’informatique embarqué ou des petits projets open-sources les Raspberry ont fait des heureux en masse.
J’ai eu l’occasion d’en avoir plusieurs modèles dans les mains : Pi B, Pi2, Pi4, Pi0, Pi0w…
A une période j’ai pas mal potassé la possibilité de faire un NAS avec le Raspberry, mais sa connectique de stockage a toujours été un problème. J’ai donc pas mal guetté/testé quelques solutions alternatives pour palier à ce souci. Mais était-ce franchement une bonne idée ?
L’architecture
Qu’on se le dise, un Raspberry, reste une micro-machine. On ne peut pas avoir dans une carte de cette taille un pci-express 4.0 et un threadripper. Il paraîtrait qu’on ne peut pas avoir le beurre, l’argent du beurre et la crémière ?
Le Raspberry à la base, c’est surtout une carte avec un CPU aux capacités “raisonnables”, un GPU relativement efficace pour l’affichage vidéo, et un minimum de connectique. Cette connectique externe, est stackée derrière un contrôleur USB 2.0.
Par exemple, pendant longtemps le peuple réclamait un port réseau Gb/s, oui mais avec un chip réseau en USB2.0 il pourra pas aller aussi loin. Certains l’ont eu fait (BananaPi), en embarquant un port Gb, forcement limité par le contrôleur USB 2.0 … mais permettait tout de même de dépasser les 300Mb/s haut la main.
Avec les années, et les progrès des processeurs ARM, la partie CPU s’est développée, ainsi que la taille de la RAM embarquée, mais la connectique a un peu trainé, avant au moins de passer sur un chipset supportant l’USB 3.0 sur le Pi4.
Le stockage, ne s’est basé que sur un port SD transformé par la suite en micro-SD, et il n’y a pas vraiment plus d’amélioration. Ce point est donc resté un peu en souffrance, mais peut-être le Pi n’est pas prévu pour ce genre d’usages ? Certaines cartes propriétaires en parallèle proposaient un port SATA. Youpi ! Mais là le sujet c’est le Raspberry.
On peut en cuisiner des choses sur un Raspberry !
Micro serveur (web, mail, ou autre), mediacenter, machine embarquée dans l’espace, vidéo surveillance, des projets à la pelle.
J’ai d’ailleurs l’usage d’un Pi0w et d’un Pi2 comme caméra de surveillance, que j’explique dans un autre post, et vraiment ça fait très bien le taf.
Mais le stockage, on en parle moins… Autant le Raspberry permet plein de projets autour de programmes qui exploitent le CPU, le GPU, mais pour le stockage c’est plus complexe.
L’absence d’un port SATA, ou même jusqu’au Raspberry Pi4 de ports USB 3.0 limitent pas mal l’usage de cet équipement pour faire du stockage. C’est dommage, pour faire un NAS les prérequis CPU/RAM n’ont pas besoin d’être élevés, et la taille du raspberry s’y porte vraiment.
Si vous avez déjà lu mes précédents articles, surtout sur le retour d’expérience sur l’auto-hébergement, vous allez remarquer qu’une de mes préoccupations fréquentes est de limiter la consommation électrique, et si possible l’acHAT de matériel neuf.
Et me voilà justement avec une pile de disques dur d’occasion, ayant chacun des uptimes variants de 5000 à 50000 heures de fonctionnement… Et encore bons. Et le Raspberry est un bon candidat pour avoir un serveur qui consomme pas trop :)
Y’a pas moyen de tricoter un truc et s’en servir de stockage “mort”, type archivage ? J’ai justement ce besoin…
Mais avec la connectique actuelle du Pi, s’il faut acheter des boitiers USB pour chacun, t’as pas fini, et des ports USB, il va en falloir.
Voici donc quelques solutions que j’ai testées…
Le Multiplier de port SATA
Hum… C’est une solution pour le stockage. Le truc c’est que je ne l’ai pas testée sur un Raspberry, qui n’a pas de port Sata, mais sur un bananaPi. Je ne vais donc pas faire de hors sujet, mais dans tous les cas : passez votre chemin !
Le but de ce genre de cartes est de démultiplier les canaux sata sur un seul port, sans surprise donc tout se limite à la bande passante du port initial, et les performances sont catastrophiques.
Cela ressemble à cela…
Le HAT “RADXA” QUAD SATA
Cette petite solution, quand elle est sortie, j’ai un peu sauté dessus, avec l’excitation d’un acarien au salon de la moquette. Elle paraissait prometteuse, mais sans vouloir spoiler j’ai un peu déchanté, au départ.
Cette carte est un HAT, qui s’installe sur le Pi4 (et uniquement le Pi4). Elle récupère tous les connecteurs du GPIO, et utilise un “câble rigide” utilisant les deux ports USB3.0 pour les renvoyer sur le HAT. Au passage, on perd donc l’utilisation du GPIO, et des deux ports USB3.0.
Ce HAT est composé de deux contrôleurs (pour la version QUAD) JMicron JMS561, gérant deux ports SATA chacuns. Ce contrôleur, gère aussi le RAID hardware. Chaque contrôleur est donc sur un port USB3.0 dédié.
On peut y connecter une alimentation 12V via une prise jack, ou via un “connecteur disquette” pour une alimentation PC classique (ce qui alimente le Pi aussi), mais on pourrait aussi utiliser l’alimentation du Pi en type C, mais uniquement si on utilise des disques 2,5", et surtout du SSD, sous peine d’avoir des coupures intempestives sur les disques.
Il y a aussi une connectique additionnelle pouvant aller sur une petite carte supplémentaire, comprenant un micro écran et un ventilateur de 40mm.
Les specs sont par ici : https://wiki.radxa.com/Dual_Quad_SATA_HAT
Dans mon cas j’y ai donc posé 4 disques 2,5" d’occasion, et une alimentation 12V 2.0A pour allumer le tout…
Deuxième chose, il faut savoir que le pi4 c’est un peu chaud sous le capot, donc le radxa donne un petit ventilateur et un micro radiateur à coller sur le cpu. J’ai changé le mien dès que j’ai pu, tellement bruyant ! Oubliez le NAS dans le salon sinon…
Par contre, il y’a très peu d’espace entre le Pi et le HAT, et de plus, un condensateur se trouve au mauvais endroit, au dessus du cpu, limitant encore plus l’espace disponible. C’est donc complexe de trouver un ventilo de CPU qui s’y loge.
On pourrait donc penser à mettre le HAT plus haut, oui mais non, car il faut le “pont” USB3 qui est fixe, ou alors le remplacer par un double câble male/male USB3.0.
Le ventilateur en haut du HAT est pratique, et le service python rockpi-sata gère sa vitesse, que l’on peut modifier dans un fichier de configuration. Je ne l’ai que peu utilisé, le mien a rendu l’âme dans les premiers jours d’essais. A notre soldat parti trop tôt.
Je l’ai remplacé par un ventilateur de 50mm, 3 pins également, qui fait moins de bruit au passage.
Prévoyez aussi une mise en veille automatique des disques, car 4 disques mécaniques à 5mm d’espace, au dessus du “Pi"thon de la fournaise, ça promet un beau barbecue.
Prérequis
Je pars donc d’un OS Debian 11.0, installé sur un SSD en USB (en USB2.0 puisque le HAT me prend tous les ports 3.0). Cela dit, le fonctionnement est 1000 fois meilleur qu’avec une carte SD qui aura une mauvaise latence, et des petits SSD de 60Go ne me manquent pas… (Le Pi4 peut booter sur USB depuis quelques temps).
Sans modifications, le HAT ne fonctionne pas out of the box. Ce n’est même pas une question de drivers, juste une question de switchs qu’il faut activer sur le GPIO pour donner l’alimentation électrique à la board.
Pour cela, radxa fourni un script à utiliser qui s’occupe d’installer le nécessaire et de rajouter un service systemd qui démarrera tout le joujou. Sinon, on peut le bricoler à la main :)
Script de rockpi
Je n’aime pas trop en général lancer un script venant du net en root sur une machine. Je vous invite donc à regarder son contenu.
Mais en gros :
- Le script initial regrade l’OS de la machine pour en récupérer un autre.
- Il va installer quelques paquets deb : python3-rpi.gpio python3-setuptools python3-pip python3-pil python3-spidev pigpio python3-pigpio
- Et quelques paquets pip : Adafruit-GPIO Adafruit-PureIO Adafruit-SSD1306
- Le service systemd
rockpi-sata
sera intallé, et lance tout le moulin en python pour démarrer/gérer la board en bricolant le GPIO. - La conf se trouve sous /etc/rockpi-sata.conf.
Dans cette conf vous pourrez changer la vitesse de ventilation, le rôle du bouton à côté de l’écran…
Tests
J’aurais aimé tester du RAID5, mais un disque 2,5” a décidé de mourrir…
On peut d’ailleurs voir la LED smart qui s’affiche sur la board (ce qui est très pratique !).
Je me retrouve donc avec 2 disques de 1To, et 2 de 500Gb. RAID1 donc pour mes tests. Histoire de comparer, j’ai aussi fait le test avec deux SSD de 240Go, histoire d’avoir un point de comparaison, et pouvoir pousser un peu au max ce que peut fournir ce HAT.
Je vais faire les tests suivants :
- Une lecture avec
hdparm
(hdparm -t
) - Une écriture d’un fichier de 4Go avec
dd
(dd bs=4M count=1024 status=progress if=/dev/zero of=/mnt/toto.dd
) - La lecture du fichier de 4Go ave
dd
(dd bs=4M count=1024 status=progress if=/mnt/toto.dd of=/dev/null
) - Une copie d’un fichier de 10Go via partage samba, au travers d’un réseau Gb/s
Je pourrais faire un test avec fio, qui donnerait des résultats plus détaillés, mais j’avoue ne pas l’avoir fait sur le moment… C’est balo.
A noter aussi que je fais les tests avec ce que j’ai sous la main, je n’ai pas la capacité de choisir spécifiquement des disques PMR…
Disques seuls
SSD :
Crucial CT275MX300SSD4 :
- Read (hdparm) : ~185Mo/s
- Read (dd 4Go) : ~173Mo/s
- Write (dd 4Go) : ~115Mo/s
Transcend TS256GSSD370 :
- Read (hdparm) : ~200Mo/s
- Read (dd 4Go) : ~246Mo/s
- Write (dd 4Go) : ~209Mo/s
HDD :
WDC WD10SPZX-22Z10T0 1To :
- Read (hdparm) : ~64Mo/s (oula ! Presque étonnant)
- Read (dd 4Go) : ~70Mo/s
- Write (dd 4Go) : ~60Mo/s
TOSHIBA MQ04ABF100 1To :
- Read (hdparm) : ~81Mo/s
- Read (dd 4Go) : ~80Mo/s
- Write (dd 4Go) : ~70Mo/s
ST500LM021-1KJ152 500Go :
- Read (hdparm) : ~92Mo/s
- Read (dd 4Go) : ~85Mo/s
- Write (dd 4Go) : ~80Mo/s
HGST HTS545050A7E680 500Go :
- Read (hdparm) : ~74Mo/s
- Read (dd 4Go) : ~80Mo/s
- Write (dd 4Go) : ~65Mo/s
Raid hardware
Je n’y avais pas prêté attention lorsque j’ai reçu cette board en 2020, mais le contrôleur gère le RAID hardware. Je ne suis pas spécialement fan des RAID Hardware lorsqu’il ne s’agit pas d’une vraie carte RAID de serveur, car c’est rapidement un coup à perdre ses datas si la carte RAID meurt et qu’on n’a pas un modèle similaire dans le coin.
Néanmoins, j’ai bien envie de voir ce que la carte peut produire !
J’ai trouvé un manager RAID
Il propose un shell avec quelques commandes simples.
JMS56X HW RAID Manager V8.0.0.1
(C) 2008~2011 JMicron Tech, Corp. Command Line Interface RAID Manager For JMS56X.
JMS56X>
Valid commands set are:
=======================
GC ------------------------------------- Get avail JMS56X
DC C[n] -------------------------------- Display controller info
SR C[n] -------------------------------- Show avail RAID info
SS C[n] -------------------------------- Show avail SATA info
SM C[n] D[n] --------------------------- Show disk S.M.A.R.T. info
CR C[n] D[0,..,2] R0|R1|JBOD ----------- Create RAID
DR C[n] R[n] --------------------------- Delete RAID
SF C[n] -------------------------------- Show firmware version
SA C[n] -------------------------------- Set alarm mute
GR C[n] R[n] --------------------------- Get rebuilding percentage
ID C[n] D[n] --------------------------- Identify disk
ST C[n] R[n] timer --------------------- Set standby timer
AS C[n] D[n] R[n] ---------------------- Add spare disk
DS C[n] D[n] R[n] ---------------------- Delete spare disk
EX ------------------------------------- Exit
Première chose à savoir, il y a deux contrôleurs dans la board. C0 et C1.
JMS56X>SS C0
Controller[0]
-- Sata[0]
------ ModelName = WDC WD10SPZX-22Z10T0
------ SerialNumber = WD-WXA1A483DPUU
------ FirmwareVer = 01.01A01
------ Capacity = 931 GB
------ PortType = RAID Disk
------ PortSpeed = Gen 3
------ Page0State = Hooked to PM
------ Page0RaidIdx = 0
------ Page0MbrIdx = 0
-- Sata[1]
------ ModelName = TOSHIBA MQ04ABF100
------ SerialNumber = 5986PCKPT
------ FirmwareVer = JU004C
------ Capacity = 931 GB
------ PortType = Hard Disk
------ PortSpeed = Gen 3
------ Page0State = Hooked to PM
------ Page0RaidIdx = 0
------ Page0MbrIdx = 0
JMS56X>SS C1
Controller[1]
-- Sata[0]
------ ModelName = ST500LM021-1KJ152
------ SerialNumber = W624NAS8
------ FirmwareVer = 0002YXM1
------ Capacity = 465 GB
------ PortType = RAID Disk
------ PortSpeed = Gen 3
------ Page0State = Hooked to PM
------ Page0RaidIdx = 0
------ Page0MbrIdx = 0
-- Sata[1]
------ ModelName = HGST HTS545050A7E680
------ SerialNumber = TE95113NGJ46YS
------ FirmwareVer = GG2OAE00
------ Capacity = 465 GB
------ PortType = Hard Disk
------ PortSpeed = Gen 3
------ Page0State = Hooked to PM
------ Page0RaidIdx = 0
------ Page0MbrIdx = 0
La première mauvaise nouvelle est que l’on ne peut pas mixer de RAID sur les différents contrôleurs. C’est donc RAID0/1/JBOD maximum.
On peut créer un RAID1 par exemple :
JMS56X> CR C0 D0,1 R1
Ceci fait disparaître les disques physiques sur linux, et apparaître à la place un disque virtuel étant le volume raid ; comportement logique donc.
Jai donc basiquement créé une partition, un volume ext4, et je fais quelques tests simples.
HDD
RAID1 500Go :
- Read (hdparm) : ~86Mo/s
- Read (dd 4Go) : ~85Mo/s
- Write (dd 4Go) : ~87Mo/s
- Write (samba) : ~49Mo/s
RAID1 1To :
- Read (hdparm) : ~134Mo/s
- Read (dd 4Go) : ~90Mo/s
- Write (dd 4Go) : ~95Mo/s
- Write (samba) : ~46Mo/s
C’est nettement correct ! Pour des 2,5" mécaniques je ne peux pas non plus demander l’everest. Mais en 2020, je n’étais pas du tout à ces valeurs (<30Mo/s).
Sans grande surprise pour la copie réseau, avec l’overhead de samba qui consomme pas mal de CPU (et que je peine à optimiser).
SSD
RAID1 :
- Read (hdparm) : ~175Mo/s
- Read (dd 4Go) : ~176Mo/s
- Write (dd 4Go) : ~189Mo/s
- Write (samba) : ~43Mo/s
Cela permet au moins de voir que ce sont bien les disques mécaniques qui souffrent (sans surprise).
Raid software
Par sécurité je préfère en général un RAID logiciel, bien que plus couteux en ressources, tels que le RAID mdadm. La consommation CPU en RAID1 reste assez faible, c’est surtout en RAID5.
J’en utilise depuis des années sur pas mal de machines et en suis vraiment satisfait. Le gros avantage c’est que n’importe quel linux pourra relire mes data si je crame la board ou le pi.
HDD
Je créé donc deux RAID1 mdadm pour chaque paire de disques de 500GB et 1TB.
mdadm -Cv --level=1 --raid-devices=2 /dev/md1 /dev/sdg1 /dev/sdi1
mdadm -Cv --level=1 --raid-devices=2 /dev/md2 /dev/sdf1 /dev/sdh1
Maintenant il faut laisser le temps à la reconstruction… Plutôt thé ou café ?
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [raid1]
md2 : active raid1 sdh1[1] sdf1[0]
976582656 blocks super 1.2 [2/2] [UU]
[=>...................] resync = 6.2% (60890880/976582656) finish=142.2min speed=107304K/sec
bitmap: 8/8 pages [32KB], 65536KB chunk
md1 : active raid1 sdi1[1] sdg1[0]
488208384 blocks super 1.2 [2/2] [UU]
[>....................] resync = 1.9% (9600000/488208384) finish=106.4min speed=74904K/sec
bitmap: 4/4 pages [16KB], 65536KB chunk
Une fois la synchronisation terminée (bien plus rapide que j’aurais imaginé), je refais les mêmes tests que précédemment :
RAID1 500Go :
- Read (hdparm) : ~82Mo/s
- Read (dd 4Go) : ~72Mo/s
- Write (dd 4Go) : ~77Mo/s
- Write (samba) : ~43Mo/s
RAID1 1To :
- Read (hdparm) : ~87Mo/s
- Read (dd 4Go) : ~78Mo/s
- Write (dd 4Go) : ~80Mo/s
- Write (samba) : ~43Mo/s
Sur la lecture il y a un écart sur les disques de 1To par rapport au RAID hard. J’ai refait le test plusieurs fois…
En écriture dd c’est un peu moins bon, mais quelque part il y a une surcouche logicielle de plus en passant par mdadm, je ne suis donc pas surpris d’avoir un peu de perte.
SSD
La synchro RAID MDADM est passée à 130Mo/s.
RAID1 :
- Read (hdparm) : ~181Mo/s
- Read (dd 4Go) : ~190Mo/s
- Write (dd 4Go) : ~142Mo/s
- Write (samba) : ~45Mo/s
Et la consommation électrique ?
Clairement, le pi4 est loin de ces ancêtres. Fut une époque où un chargeur 5V de 500mA faisait le boulot, mais ce n’est plus la même aujourd’hui.
Le pi4 seul consomme environ 4W. Mais en 5V. En branchant le HAT, ainsi que l’alimentation en 12V, ce n’est déjà plus la même :
- Alimentation seule : 7W (ouch !)
- Pi4 + HAT : 16W
- Pi4 + HAT + 4x 2,5" HDD : 33W en démarrage, 21W stable en idle
A noter qu’une alimentation même à vide, consomme toujours. Vous allez voir que c’est très variable selon la qualité de l’alimentation et sa puissance. Rien que brancher un wattmètre sur un PC Fixe éteint va vous faire peur.
Au final, 21W pour un “NAS”, ça reste raisonnable (votre box en consomme autant), mais pour un Pi je trouve que ce n’est pas négligeable.
Conclusion de cette board
Personnellement en refaisant les tests récemments, je partais très négatif. J’étais parti pour faire cet article en montrant que ce n’était pas utilisable…
Ma première expérience dessus avait été une déception totale, au prix de cette carte, des frais de ports, pour les débits finaux, c’était vraiment pas rentable et franchement inexploitable.
Il faut tout de même prévoir :
- 99$ pour le kit complet avec sa boite
- ou, 25$ le HAT, 9$ le top HAT, etc..
- les frais de ports !
- et la douane en cadeau
Le test actuel me plait mieux, et rend la solution convenable et fonctionnelle pour mon cas d’usage : de l’archivage. Mon but est de pousser certaines vidéos de montages, volumineuses, ou quelques données “mortes” sur un stockage ponctuellement allumé.
On pourrait aussi s’en servir pour des données un peu plus vivantes, si on n’a pas de critères trop hauts sur les débits.
Est-ce que pour autant je le conseillerais comme NAS ? Oui et non.
- Oui
- pour les geeks
- s’il vous faut absolument 4 disques 2,5", car un NAS a plus de 2 baies c’est plus le même budget.
- Non pour pas mal de raisons :
- Pour le commun des mortels, un NAS sera nettement plus simple à mettre en place, suivre et maintenir
- la performance, un NAS classique a bien plus de chance de faire mieux.
- le prix. Un pi c’est sympa. Mais il faut rajouter tellement d’accessoires que la note au final devient sacrement salée (la carte sd, l’alimentation, le boitier, le HAT, etc..). Est-ce que ça vaut la peine vis à vis du prix d’un NAS ?
- le suivi : j’ai malheureusement eu la mauvaise expérience de pas mal de constructeurs de boards (dont Radxa qui vend ce produit), qui sortent un produit, et le suivi derrière est casi nul. Si le hardware n’est pas géré nativement, c’est vite la galère, et on est bon pour gratter les forums du grand Internet pour trouver des indices.
- la dissipation thermique et le bruit associé : n’est clairement pas du tout optimisé sur ce produit.
Le boitier USB monodisque classique
C’est une solution que j’ai utilisée pendant des années ! Si le besoin n’est pas d’avoir de la volumétrie en masse, il y a toujours la solution d’avoir un ou deux disques externes classiques connectés en USB sur le Pi.
Perso, j’ai fait cela avec un disque dur de 1To branché sur un Pi2 via un boitier USB à bon marché (quelques ecus). Ok c’était de l’USB 2.0, mais dans mon cas, un simple besoin de backup distant, over VPN Wireguard.
Pour cela, le Pi est idéal, et surtout le pi2 :
- il a suffisamment de patate pour faire un peu de vpn
- suffisamment de mémoire de mémoire (même trop)
- il consomme très peu (ce qui n’est pas le cas des Pi3 et Pi4) : un chargeur 5V 1.5A suffit amplement pour un Pi2 et un disque mécanique en 2,5.
Je ne fais pas de tests car il n’y a pas réellement d’interêt de tester un monodisque en USB.
Conclusion de la conclusion ! :D
Est-ce qu’un Raspberry c’est bien pour un NAS au final ?
Franchement, oui, mais pour certaines conditions, selon moi :
- du stockage lent
- du stockage mort (archivage)
- du stockage avec un nombre de disques limités (1 ou 2), en USB 2 ou 3
C’est je pense parfait pour de l’accès à rapidité modérée, ou des projets de backups distants ou d’archivage.
Dans le cas d’un besoin d’accès à des données actives, ou qui nécessitent un peu de vélocité, hormi s’il y a de l’utilisation de SSD qui va compenser un peu la lenteur de la solution, je pense qu’il vaut mieux se tourner sur un NAS hardware plus classique.
Pour aller plus loin : quoi utiliser à la place du Pi ?
Entre le prix total des pièces (Pi, HAT, chargeur et tout le tralala)… le prix est assez élevé, pour avoir quelque chose que je considère “correct” à “passable”.
Est-ce qu’il ne vaut pas le coup d’utiliser une petite machine type “barebone” ?
Pour aussi utiliser ce genre de machines, je dirais que ça vaut le coup pour pas mal de raisons :
- on en trouve à tous les prix (pleins de modèles à 150€)
- la consommation est très faible sur certains modèles (le mien avec un SSD et un HDD meca 2,5" ne consomme que 9W en idle)
- les performances sont nettement meilleures
- la dissipation est souvent réellement passive ou avec un micro ventilo qui ne hurle pas dans le salon
- le packaging est automatique :p pas de bricolage de boitier à prévoir
- on peut très souvent caler HDD 2,5", en plus d’un petit M.2
Les hics :
- Dans un barebone de base, on oublie l’idée d’avoir plein de disques
- un peu plus encombrant qu’un Pi selon les modèles