Il est important de s'arrêter sur ce qu'on pourrait qualifier de (je mets des guillemets) “stratégie d'écritures et lectures” quand on a plusieurs disques. Le vrai terme est Raid.
Le Raid vise à remplir deux objectifs plus ou moins contraires :
–> Le premier Raid dont il faut avoir entendu parler est le Raid0. Il consiste à prendre deux disques et écrire des blocs de donnée en parallèle sur l'un et l'autre, sans redondance de donnée.
On ne perd donc pas de place de stockage, on écrit et lit deux fois plus vite… Mais si on perd un disque, on est baisé. À utiliser seulement quand on a besoin de performances mais qu'on se fout de ce qui est stocké.
–> Le Raid1 consiste lui en l'opposé : on écrit la même chose sur les deux disques. (Pas de dessin, c'est suffisamment simple pour que vous me compreniez directement :p ). Ici, on peut perdre un disque et le remplacer sans rien perdre et sans même devoir arrêter le service, pour peu que votre matériel soit haut de gamme. En revanche, en terme de capacité de lecture / écriture, vous ne gagnez rien, et la moitié de votre disque est occupé par de la redondance… Donc c'est pour quand on veux surtout pas perdre de donnée. On l'utilise par exemple sur les disques des Suns.
Je viens de vous présenter les deux extrêmes. La première remarque est qu'on peut les combiner à souhait, par exemple ( (Raid0 sur deux disques) et (Raid0 sur deux disques) ) en Raid1 donne le Raid10, un mixte entre les deux techniques. De même pour le Raid10 : ( (Raid1 sur deux disques) et (Raid1 sur deux disques) ) en Raid01.
La deuxième remarque est, comme vous vous en doutez, qu'il existe des solutions intermédiaires.
–> Le Raid5 consiste à prendre n disques, à écrire un certain volume de donnée sur (n-1) disques en parallèles et d'utiliser le nième pour la parité. On continue ainsi en changeant de disque de parité.
Les avantages : que des trucs assez cool : on lit très vite, on écrit un chouïa moins vite (calcul de la parité) mais on ne perd qu'un disque en redondance…
Du moins en théorie… Le Write hole est un problème couramment rencontré : si il y a une interruption, il peut devenir impossible de savoir lequel, entre les blocs de donnée, ou du bloc de parité a été écrit ou pas, ce qui viande la quasi-totalité des controlleurs Raid… Dur…
–> Le RaidZ ( je vais citer wikipédia ) évite le « trou d'écriture » (write hole) du RAID 5 par une règle de copie-sur-écriture : plutôt que d'écrire par dessus des anciennes données avec de nouvelles, il écrit les nouvelles données dans un nouvel emplacement puis réécrit le pointeur vers les nouvelles données. Cela évite les opérations de lire-modifier-écrire pour des petits enregistrements en ne faisant que des écritures full-strip. Des petits blocs sont écrits en miroir au lieu d'être protégés en parité, ce qui est possible car le système de fichiers est conscient de la sous-structure de stockage et peut allouer de l'espace supplémentaire si nécessaire (Ouf !!! ).
Donc en gros comme le Raid5 mais mieux! On utilise ça à MiNET sur le nas, Charybde et Scylla.
–> Le RaidZ2, c'est du RaidZ mais avec deux disques de redondances. Donc encore plus safe !!! Vous en entendrez parler bientôt.
Si votre curiosité a été réveillée par ce super (dis)court (!!! il est tard !!!) je vous laisse vous documenter sur le sujet :p
Un pool est une entité abstraite qui permet de contrôler des disques physiques. Cette abstraction permet alors d'utiliser un manager de volumes, qui présente au système de fichier un unique “disque”. Les systèmes de fichiers ne sont plus alors limités à un disque…
Pour monter des disques selon un certain raid, nous créerons donc simplement un pool.
Vous devrez au préalable avoir la liste des identifiants de vos disques… La commande format permet de l'avoir sous Solaris. Sous BSD vous êtes grand ^^
Voici comment mettre deux disques en Raid0:
zpool create nom_du_pool disk1 disk2
Voici comment obtenir deux disques en Raid1:
zpool create nom_du_pool mirror disk1 disk2
Et enfin voici comment obtenir cinq disques en RaidZ:
zpool create nom_du_pool raidZ disk1 disk2 disk3 disk4 disk5
On peut ensuite attacher des caches en lecture et en écriture, afin d'accélérer les performances d'un pool. Ces caches devront être des SSD.
Voici comment attacher un cache en lecture :
zpool add nom_du_pool cache id_ssd
Et en écriture :
zpool add nom_du_pool log id_ssd
On peut aussi réutiliser ce que l'on a déjà appris et mettre par exemple du cache en écriture en Raid1 (assez recommandé) :
zpool add nom_du_pool log mirror id_ssd1 id_ssd2