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
1 |
$ sudo apt update && sudo apt upgrade |
- Installation de quelques outils
1 |
$ sudo apt install vim |
- Installation des paquets nécessaires
1 |
$ 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
1 2 |
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
1 |
$ 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 (/)
1 |
$ lsblk |
Création du Raid
- Utilisation du binaire mdadm
1 |
$ sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda /dev/sdb |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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
1 |
Continue creating array? y |
1 2 |
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
1 |
$ cat /proc/mdstat |
1 2 3 4 5 6 7 |
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
1 |
$ sudo mdadm -D /dev/md0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
/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
1 |
$ sudo mkfs.ext4 -F /dev/md0 |
1 2 3 4 5 6 7 8 9 10 11 12 |
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
1 |
$ sudo mkdir -p /mnt/disk_raid1 |
1 |
$ sudo mount /dev/md0 /mnt/disk_raid1/ |
Vérifier avec disk free l’apparition du point de montage et sa volumétrie
1 |
$ df -h | grep /disk_raid1 |
1 |
/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
1 |
$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf |
1 |
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
1 |
$ sudo update-initramfs -u |
Enfin il faut ajouter le raid au fstab pour que celui ci soit monté automatique au démarrage
1 |
$ echo '/dev/md0 /mnt/disk_raid1 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab |
1 |
/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
1 |
$ sudo addgroup grp_raid1 |
1 2 |
Ajout du groupe « grp_raid1 » (GID 1002)... Fait. |
1 |
$ sudo adduser bef grp_raid1 |
1 2 3 |
Ajout de l'utilisateur « bef » au groupe « grp_raid1 »... Adding user bef to group grp_raid1 Fait. |
1 |
$ sudo chown root:grp_raid1 /mnt/disk_raid1 |
1 |
$ 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
1 |
$ sudo mkdir /mnt/disk_raid1/mon_partage |
1 |
$ sudo chmod 775 /mnt/disk_raid1/mon_partage |
1 |
$ sudo chown root:grp_raid1 /mnt/disk_raid1/mon_partage |
On vérifie
1 |
$ ls -l /mnt/disk_raid1/ |
1 2 3 |
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
1 |
$ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.save |
1 |
$ sudo vim /etc/samba/smb.conf |
1 2 3 4 5 6 7 8 |
[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
1 |
$ 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
1 |
$ sudo useradd compte_windows |
1 |
$ sudo adduser compte_windows grp_raid1 |
1 |
$ sudo smbpasswd -a compte_windows |
1 2 3 |
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 (:-))
1 |
$ sudo mdadm -D /dev/md0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
/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 : <strong>clean</strong> 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.
puis lancer la commande suivante
Vérifier les process en cours
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”
|
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?”
puis
Pour relancer la raid, et le resync
ou
Verifier le status
Si celui a le status resync=PENDING lancer la commande
Re-verifier le status
Enfin remonter le point de montage pour rendre le partage re-accessible
|
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
Bonsoir,
super tuto qui donne envie d’essayer ! Quelques questions me viennent a l’esprit :
– Si la SD du rasp vient a tomber en panne, comment se comporte le Raid logiciel ? Ce raid devient inutilisable ou il y a une méthode pour reconstruire tout ?
– aussi c’est comment en terme de performance en copier coller ?
– Peut on lire les données des disques qui sont en raid sur un autre raspberry ?
Alexandre
Bonjour,
Il est possible de reconstruire le raid, j’avais une ébauche d’article mais faute de temps je suis passé a autre chose
Entre temps j’ai recyclé les disques et ma SD pour un autre projet du coup j’ai fait un tuto sur la récupération des données quand on a plus d’accès au raid
https://it.izero.fr/windowslinux-recuperer-les-donnees-dun-disque-en-raid-avec-testdisk/
Du coup je n’ai pas la réponse au autres questions
Bonsoir BEF
Merci beaucoup pour ce tuto.
Pas de problème jusqu’à la création d’un utilisateur
sudo adduser Daniel grp_raid1 retourne adduser : L’utilisateur “Daniel” n’existe pas
une idée ?
Merci beaucoup
Daniel
Bonjour,
l’utilisateur Daniel ne semble pas avoir été crée
attention au majuscule, Linux est sensible a la case
pour vérifier, regarder dans /etc/password avec un grep
cat /etc/passwd | grep daniel
ou
cat /etc/passwd | grep Daniel
ou aussi faire un id
id daniel
ou id Daniel
Bonjour, nickel votre tuto, l’installation s’est fait sans problème. J’aurais juste une question de noob, comment fais t’on pour avoir l’activité en réel des transferts sur la raspberry comme vous le montrez dans votre tuto. Merci encore
Bonjour,
je sais plus trop, la commande mdstat permet de voir l’état de la synchro
cat /proc/mdstat
commande du tuto:
$ sudo mdadm –create /dev/md0 –level=1 –raid-devices=2 /dev/sda /dev/sdb
commande dans le man
mdadm –create /dev/md0 –level=1 –raid-devices=2 /dev/hd[ac]1
du coup c’est /dev/sda et sdb ou /dev/sda1 et sdb1 qu’il faut indiquer?
Bonjour
ça doit être une typo
Comme dit la doc, il faut préciser les partitions, /dev/sda1, /dev/sda2 …
Bonjour,
En cas de Crash d’un disque, il suffit de le remplacer et la synchronisation s’effectue automatiquement? ou faut-il relancer le raid et le resync? ou autre?
Merci d’avance et félicitation pour le tuto ultra complet!
Yoann
Hello
je n’ai pas souvenir pour ce type de raid, je suis sur une autre techno je ne l’utilise plus
Voici un article qui traite de la resynchro manuelle si besoin.
https://www.thomas-krenn.com/en/wiki/Mdadm_recovery_and_resync