-
Créer un stockage en RAIDz sur FreeBSD
Pour la petite histoire, RAIDz est un système RAID basé sur le système de fichiers ZFS.. différent des RAID habituels.. raidz1 est équivalent à RAID5, raidz2 à RAID6, raidz3 est réservé aux paranoïques (gère la perte de jusqu'à 3 disques durs sur 5...
Un petit apparté : un disque HD de plusieurs To prend un certain temps à se reconstruire au sein d'un RAID (!)
Il était plutôt recommandé jusqu'à peu de faire des RAIDz3 avec des disques dont la capacité est supérieure à 4To car il peut arriver qu'un autre disque lâche durant la période de reconstruction... La triple redondance du RAIDz3 offre une garantie supplémentaire dans ce cas malheureux. Mais bonjour le coût/data... !!Un petit outil de calcul bien pratique : http://raidz-calculator.com/default.aspx
Ici, nous n'aborderons que la création d'un RAIDz avec des disques branchés en externe (en USB par exemple, ou dans une baie de brassage extérieure, l'OS restant installé sur un disque à partt), pas la création d'un RAIDz avec l'OS intégré dessus (ça, l'installateur de FreeBSD le gère très bien - mais ne dépassez pas 7 disques, où vous allez commencer à avoir des emmerdes).
Si SUN préconise de ne pas dépasser 9 disques par RAIDz (peu importe z, z2 ou z3), et si pas mal d'utilisateurs assemblent plusieurs RAIDz de 8 disques eux-mêmes remontés en un seul RAIDz derrière, il semble plus judicieux de ne pas dépasser 7 disques par RAIDz. Vous pouvez sans soucis faire des RAIDz de plusieurs "petits" RAIDz par la suite. A titre perso, je ne dépasse pas 5 disques par montage en RAIDz/RAIDz3 ou 6 disques en RAIDz2.Les disques durs (ou clefs USB pour s'entraîner) doivent avoir la même capacité, et être branchés AVANT démarrage de FreeBSD (ou HardenedBSD).
loguez-vous en root, puis
Si votre installation de FreeBSD a été faîte en UFS, alors vous devez d'abord ajouter :
sysrc zfs_enable=YES
service zfs start
Sinon, continuez directement :
Repérez vos disques branchéscamcontrol devlist
Nous prenons comme exemple 5 disques nommés : da0, da1, da2, da3, da4
S'ils sont montés, démontez-les avant de les formater.
Effacez-les méticuleusement :
dd if=/dev/zero of=/dev/da0 bs=4m status=progress
dd if=/dev/zero of=/dev/da1 bs=4m status=progress
dd if=/dev/zero of=/dev/da2 bs=4m status=progress
dd if=/dev/zero of=/dev/da3 bs=4m status=progress
dd if=/dev/zero of=/dev/da4 bs=4m status=progress
Créez la table GTP sur chacun :
gpart create -s GPT da0
gpart create -s GPT da1
gpart create -s GPT da2
gpart create -s GPT da3
gpart create -s GPT da4
Créez la partition ZFS :
gpart add -t freebsd-zfs da0
gpart add -t freebsd-zfs da1
gpart add -t freebsd-zfs da2
gpart add -t freebsd-zfs da3
gpart add -t freebsd-zfs da4
Créez le pool :
(pour un raidz2 ou raidz3.. précisez-le... ici on reste sur raidz pour l'exemple)zpool create storage raidz da0 da1 da2 da3 da4
Faîtes une copie et liez votre dossier utilisateurs dans le raidz pour permettre la création ultérieure d'utilisateurs directement dedans
zfs create storage/home
zfs set copies=2 storage/home
zfs set compression=gzip storage/home
cp -rp /home/* /storage/home
rm -rf /home /usr/home
Ne faîtes pas attention à ce que renvoie la ligne (device busy) et continuez
ln -s /storage/home /home
ln -s /storage/home /usr/home
echo 'daily_status_zfs_enable="YES"' >> /etc/periodic.conf
Votre raidz est créé
Pour vous assurer que tout fonctionne correctement :
zpool status -x
(ça doit vous renvoyer : all pools are healthy)
Si vous souhaitez voir le détail de chaque noeud :
zpool status
----------------------------------------------------------------------------
L'installation du serveur FTP ProFTPd via le script de configuration global fonctionne très bien
----------------------------------------------------------------------------
Que faire en cas de disque foireux ?
(zpool status -x vous indique que quelque chose cloche)
Pour cette situation, nous quittons le raid "storage" que nous avions créé plus haut
Votre raid s'appelle désormais "zroot". ("storage" était le nom du pool dans la procédure d'installation ci-dessus, nous en changeons pour faciliter la compréhension du remplacement avec des noms de disques de pool différents de ceux insérés - lorsque vous branchez un disque, il porte le nom que le système lui donne.. da0, da1 .. ada0 etc...).1) zpool status, pour récupérer le nom du disque pourri
zpool status
La liste des disques du pool s'affiche, et vous suspectez qu'il s'agît de da1p4.eli.. Dans mon exemple, je sais très bien lequel est foireux puisque j'ai arraché le disque en question et bousillé volontairement la partition dessus en l'effaçant.
NAME STATE READ WRITE CKSUM
zroot DEGRADED 0 0 0
radiz3-0 DEGRADED 0 0 0
da1p4.eli OFFLINE 20 40 0
da2p4.eli ONLINE 0 0 0
da3p4.eli ONLINE 0 0 0
da4p4.eli ONLINE 0 0 0
da5p4.eli ONLINE 0 0 0
2) Mettre le disque concerné "offline". Cette étape peut être assez longue.zpool offline zroot da1p4.eli
3) Débrancher le disque concerné et brancher le nouveau disque tout neuf à la place (ou le disque bousillé et ré-effacé pour ma part).
4) Lorsque vous insérez le nouveau disque, à l'écran, s'affiche le nouveau périphérique branché.
Dans notre exemple, il s'agît de da1.
Or da1 n'a pas le même nom que da1p4.eli (nom du disque dans le pool que nous avons retiré).
La commande "zpool replace" va devoir spécifier que l'on remplace da1p4.eli par da1.
Si le nom du disque à remplacer avait été le même (exemple da1), alors la commande aurait simplement été "zpool replace storage da1"5) Activez le remplacement du disque et la reconstruction du pool :
zpool replace zroot da1p4.eli da1
L'opération de "resilvering" va prendre beaucoup de temps.
Vous pouvez observer par un 'zpool status' qu'elle est en cours, et à quel pourcentage elle en est, une fois que le serveur vous aura rendu la main pour tapper la commande.zpool status
NAME STATE READ WRITE CKSUM
zroot DEGRADED 0 0 0
radiz3-0 DEGRADED 0 0 0
replacing-0 DEGRADED 0 0 0
da1p4.eli OFFLINE 0 0 0
da1 ONLINE 0 0 0 (resilvering)
da2p4.eli ONLINE 0 0 0
da3p4.eli ONLINE 0 0 0
da4p4.eli ONLINE 0 0 0
da5p4.eli ONLINE 0 0 07) Une fois la reconstruction terminée, on vérifie que tout va bien à nouveau
zpool status -x
----------------------------------------------------------------------------
Vérifier l'intégrité des données et réparer au cas où :
zpool scrub storage
zpool storage status
(vous verrez la ligne indiquant s'il y avait des erreurs et si elles ont été corrigées)
Tags : raidz, freebsd
-
Commentaires