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