[Raspberry Pi 3] Créer un raid logiciel puis faire un nas

 

Créer un raid logiciel puis faire un nas sur Raspberry Pi 3
Article original Publié le : 05 avril 2020
Mise a jour le : 06 avril 2020

 

En cette période de confinement je m’amuse avec mon Raspberry Pi.
et pourquoi pas faire un NAS pour partager des fichiers avec tous les devices.

Il faut pas grand chose, 2 disques (externe ou interne+boîtier) et un Raspberry

Modèle: Seagate Barracuda
Nombre: 2
Volumétrie: 1GO chacun (utiliser des disques de meme taille)
Type : SATA II
Format: 3,5 pouce (interne)
Baie disques Inateck (FD2005) -> https://www.amazon.fr/Inateck-Station-daccueil-Capacit%C3%A9-Compatible/dp/B06XYJSR8B

 

J’opte pour du raid 1, plus sécure quand a la perte d’un disque

Pour rappel
Raid 0
Minimum: 2 disques
Avantage: Performance
Inconvénient: La panne d’un des deux disques entraîne la perte de toutes les données de la baie.

Raid 1
Minimum: 2 disques
Avantage: Redondance
Inconvénient: les disques se répliquent, on perd donc la moitié de l’espace disque sur la totalité.

Il existe d’autres raid 5,10,50 … mais restons modeste, on parle de deux disques !

 

 

Préparation de l’environnement

  • Mise a jour du système
$ sudo apt update && sudo apt upgrade

 

  • Installation de quelques outils
$ sudo apt install vim

 

  • Installation des paquets nécessaires
$ sudo apt install mdadm samba samba-common cifs-utils

/!\ Si l’erreur ci dessous se produit, faire un sudo apt-get update et relancer la l’installation du paquet

E: Impossible de récupérer http://raspbian.raspberrypi.org/raspbian/pool/main/g/gnutls28/libgnutls-dane0_3.6.7-4+deb10u2_armhf.deb  404  Not Found [IP : 93.93.128.193 80]
E: Impossible de récupérer certaines archives, peut-être devrez-vous lancer apt-get update ou essayer avec --fix-missing ?

 

 

Ajout des disques

  • Raccorder les 2 disques au Raspberry Pi

Avec la commande dmesg on voit que les deux disques sont bien reconnus, sda et sdb

$ dmesg

 

lsblk permet de lister tous les devices
Nous retrouvons les deux disques durs sda et sdb,
ainsi que la carte sd qui se nomme mmcblk0 et ces 2 partitions mmcblk0p1 (/boot) et mmcblk0p2 (/)

$ lsblk

 

 

Création du Raid

  • Utilisation du binaire mdadm 
$ sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda /dev/sdb
mdadm: /dev/sda appears to be part of a raid array:
       level=raid1 devices=2 ctime=Sun Apr  5 13:06:31 2020
mdadm: partition table exists on /dev/sda but will be lost or
       meaningless after creating array
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
mdadm: /dev/sdb appears to be part of a raid array:
       level=raid1 devices=2 ctime=Sun Apr  5 13:06:31 2020
mdadm: partition table exists on /dev/sdb but will be lost or
       meaningless after creating array

 

Valider la création du raid

Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

Dans le détail
/dev/md0 : volume raid
level=1 : type de raid
raid-devices=2 : nombres de périphériques
/dev/sda /dev/sdb : disque 0 et 1

 

Pour voir l’état de la synchronisation du raid

$ cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb[1] sda[0]
      976630464 blocks super 1.2 [2/2] [UU]
      [>....................]  resync =  1.5% (14787904/976630464) finish=1148.9min speed=13952K/sec
      bitmap: 8/8 pages [32KB], 65536KB chunk

unused devices:

La synchro prend du temps en fonction de la volumétrie, cela n’empêche pas de formater les disques et de les utiliser.
On peut voir la ligne resync qu’il est a 1.5% avec une estimation de fin a 1148 minutes et une vitesse de 13952K/sec !

 

Pour une vue plus détaillé sur l’état du raid, on y voit le statut active, resyncing

$ sudo mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun Apr  5 15:42:10 2020
        Raid Level : raid1
        Array Size : 976630464 (931.39 GiB 1000.07 GB)
     Used Dev Size : 976630464 (931.39 GiB 1000.07 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Sun Apr  5 16:23:30 2020
             State : active, resyncing
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : bitmap

     Resync Status : 3% complete

              Name : srv-test.izero.fr:0  (local to host srv-test.izero.fr)
              UUID : abc21849:066ec396:598fc588:813fc137
            Events : 1598

    Number   Major   Minor   RaidDevice State
       0       8        0        0      active sync   /dev/sda
       1       8       16        1      active sync   /dev/sdb

 

 

Création et montage du système de fichiers

  • Utilisation du binaire mkfs

Il faut maintenant créer le système de fichiers avec la commande mkfs.
il y a différents types de formats, ext2, ext3, ext4, swap, fat, ReiserFS …
Pour la comparaison voir https://doc.ubuntu-fr.org/systeme_de_fichiers#comparaison_de_systemes_de_fichiers

$ sudo mkfs.ext4 -F /dev/md0
mke2fs 1.44.5 (15-Dec-2018)
Creating filesystem with 244157616 4k blocks and 61046784 inodes
Filesystem UUID: 1a44d986-5997-4216-8821-593a14bca6d0
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000, 214990848

Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done

 

Puis créer le point de montage et monter le

$ sudo mkdir -p /mnt/disk_raid1
$ sudo mount /dev/md0 /mnt/disk_raid1/

 

Vérifier avec disk free l’apparition du point de montage et sa volumétrie

$ df -h | grep /disk_raid1
/dev/md0           916G     77M  870G   1% /mnt/disk_raid1

 

Pour finir il faut configurer le fichier mdadm.conf pour qu’il analyse le raid automatiquement au démarrage

$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
ARRAY /dev/md0 metadata=1.2 name=srv-test.izero.fr:0 UUID=abc21849:066ec396:598fc588:813fc137

 

Pour monter et rendre accessible le raid pendant le processus de démarrage, lancer la commande

$ sudo update-initramfs -u

 

Enfin il faut ajouter le raid au fstab pour que celui ci soit monté automatique au démarrage

$ echo '/dev/md0 /mnt/disk_raid1 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab
/dev/md0 /mnt/disk_raid1 ext4 defaults,nofail,discard 0 0

 

 

Permissions et droits

  • Créez un groupe qui aura accès au device disk_raid1, ajouter y les utilisateurs autorisés, affiner les droits
$ sudo addgroup grp_raid1
Ajout du groupe « grp_raid1 » (GID 1002)...
Fait.
$ sudo adduser bef grp_raid1
Ajout de l'utilisateur « bef » au groupe « grp_raid1 »...
Adding user bef to group grp_raid1
Fait.
$ sudo chown root:grp_raid1 /mnt/disk_raid1
$ sudo chmod 775 /mnt/disk_raid1

La création du raid est terminé, il faut attendre la fin de la synchronisation
Si celle ci est coupé, voir en bas de cet article dans resync.

 

Création du partage Samba

  • Configuration de Samba

Il faut d’abord créer le répertoire de partage sur le point de montage, puis affiner et donner les droits du groupe grp_raid1

$ sudo mkdir /mnt/disk_raid1/mon_partage
$ sudo chmod 775 /mnt/disk_raid1/mon_partage
$ sudo chown root:grp_raid1 /mnt/disk_raid1/mon_partage

 

On vérifie

$ ls -l /mnt/disk_raid1/
total 20
drwx------ 2 root root      16384 avril  5 16:02 lost+found
drwxrwxr-x 2 root grp_raid1  4096 avril  5 22:18 mon_partage

 

Faire une sauvegarde du fichier original avant toute modif, puis éditer smb.conf et ajouter en fin de ligne la définition de partage suivante

$ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.save
$ sudo vim /etc/samba/smb.conf
[mon_partage]
   path=/mnt/disk_raid1/mon_partage
   browseable=Yes
   writeable=Yes
   only guest=no
   create mask=0775
   directory mask=0775
   public=no

 

Recharger Samba

$ sudo systemctl reload smbd.service

 

Créer le(s) utilisateur(s) a pouvoir accéder au partage Samba et ajouter le(s) dans le groupe grp_raid1

$ sudo useradd compte_windows
$ sudo adduser compte_windows grp_raid1
$ sudo smbpasswd -a compte_windows
New SMB password:
Retype new SMB password:
Added user compte_windows.

Il faut également sété le mot pour le user system bef ( smbpasswd -a) pour qu’il puisse accéder au partage Samba indépendamment du point de montage.

 

Monter le volume depuis une machine Windows

  • Connecter un lecteur réseau

Sur Windows 10 par exemple, clic droit sur poste de travail/connecter un lecteur réseau
Si pas de serveur dns, utiliser l’ip ou renseigner le fichier hosts ..

Il faut un compte valide pour accéder au partage puisque dans smb.conf on a sété no a only guest

 

Le partage est accessible, la création/l’édition fonctionne dans les 2 sens

 

 

UPDATE 06/04/2020: 19h plus tard, le raid est optimal (:-))

$ sudo mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun Apr  5 15:42:10 2020
        Raid Level : raid1
        Array Size : 976630464 (931.39 GiB 1000.07 GB)
     Used Dev Size : 976630464 (931.39 GiB 1000.07 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Mon Apr  6 23:17:56 2020
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : bitmap

              Name : srv-test.izero.fr:0  (local to host srv-test.izero.fr)
              UUID : abc21849:066ec396:598fc588:813fc137
            Events : 30338

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sda
       1       8       32        1      active sync   /dev/sdb

 

 

Divers

Pour aller plus loin quelques tips trouvés sur différents sites

Surveillance du raid

Dans le fichier mdadm.conf adapter la fonction MAILADDR pour recevoir une alerte en cas de défaillance, il faut bien sur avoir configurer exim4 ou postfix.

$ sudo vim /etc/mdadm/mdadm.conf
MAILADDR monadresse_mail@domaine.tld

puis lancer la commande suivante

$ sudo mdadm --monitor --mail=monadresse_mail@domaine.tld --syslog --delay=300 /dev/md0 --daemonise

 

Vérifier les process en cours

$ ps faux | grep mdadm
bef 2985 0.0 0.0 7364 568 pts/0 S+ 20:06 0:00 \_ grep --color=auto mdadm
root 869 0.0 0.1 2612 1820 ? Ss 15:34 0:00 /sbin/mdadm --monitor --scan
root 1529 0.0 0.1 2612 1728 ? Ss 16:38 0:00 mdadm --monitor --mail=mon_mail@domaine.tld --syslog --delay=300 /dev/md0 --daemonise

 

Réception d’une alerte

J’ai éteint la baie de disque et j’ai reçu une alerte par mail “Fail event on /dev/md0”

This is an automatically generated mail message from mdadm
running on srv-test.izero.fr

A Fail event had been detected on md device /dev/md0.

It could be related to component device /dev/sdb.

Faithfully yours, etc.

P.S. The /proc/mdstat file currently contains the following:

Personalities : [raid1]
md0 : active raid1 sdb[1](F) sda[0]
      976630464 blocks super 1.2 [2/1] [U_]
      [=======>.............]  resync = 36.4% (356343616/976630464) finish=763.1min speed=13546K/sec
      bitmap: 6/8 pages [24KB], 65536KB chunk

unused devices:

 

Pour stopper le raid proprement / reprendre la synchronisation
Il faut d’abord demonter le point de montage sinon il il aura une erreur de ce type
“mdadm: Cannot get exclusive access to /dev/md0:Perhaps a running process, mounted filesystem or active volume group?”

$ sudo umount /mnt/disk_raid1

puis

$ sudo mdadm --stop /dev/md0

 

Pour relancer la raid, et le resync

$ sudo mdadm --assemble /dev/md0 /dev/sda /dev/sdb

ou

$ sudo mdadm --assemble --run --force --update=resync /dev/md0 /dev/sda /dev/sdb

 

Verifier le status

$ cat /proc/mdstat

Si celui a le status resync=PENDING lancer la commande

$ sudo mdadm --readwrite /dev/md0

 

Re-verifier le status

$ cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 sda[0] sdb[1]
      976630464 blocks super 1.2 [2/2] [UU]
      [=======>.............]  resync = 38.6% (377923584/976630464) finish=711.7min speed=14018K/sec
      bitmap: 6/8 pages [24KB], 65536KB chunk

unused devices:

 

Enfin remonter le point de montage  pour rendre le partage re-accessible

$ sudo mount -a

 

 

Source

https://wiki.debian-fr.xyz/Raid_logiciel_(mdadm)

https://www.digitalocean.com/community/tutorials/how-to-create-raid-arrays-with-mdadm-on-ubuntu-16-04

https://debian-facile.org/doc:install:supprimer-un-raid-logiciel

https://framacloud.org/fr/echange-de-graines/debloquer-un-raid-coince-en-resyncpending.html

 

 

Rating: 5.0/5. From 2 votes.
Please wait...

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.