Un NAS avec Raid 1 sur un Raspberry Pi (clés USB)

Ce tutoriel montre comment créer un serveur NAS RAID sur un Raspberry Pi à l'aide de lecteurs flash USB, de mdadm et pour que le lecteur s'affiche comme un dossier réseau normal sur un PC.

Ce tutoriel montre comment créer une matrice RAID Linux.

Pré-requis

un Raspberry Pi (si possible Raspberry Pi 4 avec 4GB de RAM) :avec son bloc d'alimentation micro-USBRaspbian installéet configurédes clés USB de la même taille et si possible du même fabricant.

Première étape

Mettez à jour le système et installez mdadm :

pi@framboise:~ $ sudo apt update
pi@framboise:~ $ sudo apt upgrade
pi@framboise:~ $ sudo apt install mdadm

Autres étapes

Configurer les lecteurs

Sur un PC,

Insérez l'une de vos clés USB (fermez toutes les fenêtres automatiques)Lancez Disques, sélectionnez le lecteur USB dans le panneau de gauche, cliquez sur l'icône d'engrenages :Sélectionnez Formater la partition... et Choisissez les options suivantes :Nom de volume : USB01Désactivez EffacerType: NTFSCliquez sur le bouton Suivant (en haut à droite) puis sur le bouton Formater dans la fenêtre d'alerteRépétez ce processus pour chaque clé USB à utiliser en incrémentant le nom : USB02, USB03, etc.Insérez vos clés USB dans votre Raspberry Pi, peu importe dans quelle prise USB.Trouvez les points de montage pour chaque lecteur :

pi@framboise:~ $ lsblk -f
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sda
└─sda1 ntfs USB01 2A32D9AE01C69BE5
sdb
└─sdb1 ntfs USB02 4B861C0D7BE397AD
...

Le plus souvent, ce sera : /dev/sda1, /dev/sdb1, /dev/sdc1 et /dev/sdd1

Configurer le RAID

Configurer un volume RAID-0

Entrez le code suivant pour configurer deux disques USB ou plus dans une matrice RAID-0 hautes performances en parallèle, en remplaçant --raid-devices=X par le nombre de disques que vous utilisez et /dev/sda1 /dev/sdb1 par vos points de montage :

pi@framboise:~ $ sudo mdadm --create --verbose /dev/md/vol1 --level=0 --raid-devices=2 /dev/sda1 /dev/sdb1

Si vous obtenez une erreur : “mdadm: RUN_ARRAY failed: Unknown error 524”, c'est un bogue dû au fait que les disques n'ont pas exactement la même taille pour RAID-0 ; ce bogue a été corrigé mais Raspbian n'a pas encore été mis à jour.
Avec 4 disques dans la matrice RAID-0, le code serait le suivant :

pi@framboise:~ $ sudo mdadm --create --verbose /dev/md/vol1 --level=0 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1

Configurer un volume RAID-1

Pour configurer une matrice RAID-1 redondante avec deux disques, entrez le code suivant :

pi@framboise:~ $ sudo mdadm --create --verbose /dev/md/vol1 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
mdadm: partition table exists on /dev/sda1
mdadm: partition table exists on /dev/sda1 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: partition table exists on /dev/sdb1
mdadm: partition table exists on /dev/sdb1 but will be lost or
meaningless after creating array
mdadm: size set to 262011904K
mdadm: automatically enabling write-intent bitmap on large array
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md/vol1 started.
pi@framboise:~ $

Configurer un volume RAID-4/5/6

Pour configurer un RAID-4 redondant, un RAID-5 avec trois disques ou une matrice RAID-6 avec quatre disques, utilisez le code suivant, en remplaçant --level=X par le niveau RAID souhaité :

pi@framboise:~ $ sudo mdadm --create --verbose /dev/md/vol1 --level=4 --raid-devices=3 /dev/sda1 /dev/sdb1 /dev/sdc1

Pour une matrice RAID-5 utilisant trois disques et un disque de secours :

pi@framboise:~ $ sudo mdadm --create --verbose /dev/md/vol1 --level=5 --raid-devices=3 /dev/sda1 /dev/sdb1 /dev/sdc1 --spare-devices=1 /dev/sdd1

Configurer un volume RAID-10

Pour configurer un RAID-10 rapide et redondant (également appelé RAID-1 + 0 imbriqué), utilisez le code suivant :

pi@framboise:~ $ sudo mdadm --create --verbose /dev/md/vol1 --level=10 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1

Pour plus d'informations sur les matrices RAID complexes, consultez le wiki mdadm.

Confirmez votre matrice RAID

Confirmez que la création de votre matrice RAID s'est bien passée :

pi@framboise:~ $ sudo mdadm --detail /dev/md/vol1
/dev/md/vol1:
Version : 1.2
Creation Time : Tue Sep 1 10:56:07 2020
Raid Level : raid1
Array Size : 262011904 (249.87 GiB 268.30 GB)
Used Dev Size : 262011904 (249.87 GiB 268.30 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Tue Sep 1 11:01:15 2020
State : clean, resyncing
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : bitmap
Resync Status : 1% complete
Name : framboise4:vol1 (local to host framboise4)
UUID : 00cf86a6:2203941c:858016c8:7ed99f38
Events : 61
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1

Sauvegarder votre matrice RAID

Raspbian ne nous laisse pas enregistrer la matrice RAID en tant que user:pi, même en utilisant sudo.

Passez donc temporairement en compte root puis enregistrez la matrice RAID et vérifiez le contenu du fichier /etc/mdadm/mdadm.conf (n'oubliez pas de sortir du mode root !) :

pi@framboise:~ $ sudo -i
root@framboise:~# mdadm --detail --scan >> /etc/mdadm/mdadm.conf
root@framboise:~# mdadm --detail --scan >> /etc/mdadm/mdadm.conf
root@framboise:~# nano /etc/mdadm/mdadm.conf
root@framboise:~# exit
pi@framboise:~ $

Créer un système de fichiers

Nous utiliserons le système de fichiers EXT4 car c'est le meilleur choix pour notre matrice RAID.

pi@framboise:~ $ sudo mkfs.ext4 -v -m .1 -b 4096 -E stride=32,stripe-width=64 /dev/md/vol1
mke2fs 1.44.5 (15-Dec-2018)
Found a dos partition table in /dev/md/vol1
Proceed anyway? (y,N) y
fs_types for mke2fs.conf resolution: 'ext4'
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=32 blocks, Stripe width=64 blocks
16375808 inodes, 65502976 blocks
65502 blocks (0.10%) reserved for the super user
First data block=0
Maximum filesystem blocks=2214592512
1999 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Filesystem UUID: ae18d5bc-909d-4e1e-b4bc-4d68192592a6
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done
pi@framboise:~ $

sudo mkfs.ext4 -v -m .1 -b 4096 -E stride=32,stripe-width=64 /dev/md/vol1 (replace /dev/md/vol1 with your RAID array name)

Ce code produit un système de fichiers EXT4 avec :

taille de bloc = 4096 kostride = 32stripe-width = 64et laissera 1% libre pour éviter les problèmes de débordementand will leave 1% free so it won’t fill up and cause issuesL'opération prend une ou deux minutes.

Maintenant, montez le système de fichiers pour y accéder :

pi@framboise:~ $ sudo mount /dev/md/vol1 /media/nas/
mount: /media/nas: wrong fs type, bad option, bad superblock on /dev/md127, missing codepage or helper program, or other error.
pi@framboise:~ $

Ne se monte pas !

Conclusion

Problèmes connus

Voir aussi

(en) https://www.ricmedia.com/build-raspberry-pi3-raid-nas-server/

Basé sur << Build a Raspberry Pi RAID NAS Server >> par Richie.