• 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és

    camcontrol 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                0

    7) 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 Tags : ,
  • Commentaires

    Aucun commentaire pour le moment

    Suivre le flux RSS des commentaires


    Ajouter un commentaire

    Nom / Pseudo :

    E-mail (facultatif) :

    Site Web (facultatif) :

    Commentaire :