Préparation de clefs usb pour faire du raid (3/3)
Contexte
C’est la troisième partie de ce post et la suite de celui-ci
On a déja vu pas mal de commandes dans les deux précédents posts donc hésite pas à les relires au cas où.
Présentation
On va donc voir plusieurs choses importantes dans ce post : - Raid : Ça permets la tolérance de panne entre les différents périphériques de stockages qui font partie d’un gratte raid et peut aussi améliorer la performance en répartissant les données sur les différents disques. - LVM : Logical Volume Manager - Permets la création et la gestion de volumes logiques sous linux.
Je ne rentre pas trop dans les délais pour l’instant, je ferai probablement des posts sur ces deux fonctionnalitées.
Cambouis
RAID
Il y plusieurs types de raid, on ne vas rentrer dans les détails de ces différents modes ici.
Prérequis
Pour pouvoir configurer le RAID correctement, il faut d’abord
préparer les partitions des clefs USB et pour ça, on va utiliser
fdisk sur chacune des clefs.
[!WARNING] Comme d’habitude avec
fdisk, il faut que tu fasses bien gaffe, on joue avec les partititons de périphériques de stockages donc ne te trompes de devices si tu veux pas casser ton système.
Sachant que ces clefs vont être utilisés seulement pour faire de la sauvegarde, on va faire qu’une seule partition en RAID.
utilisateur·ice@au-hasard:~ $ sudo fdisk /dev/sdb
Welcome to fdisk (util-linux 2.41).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): d # La lettre d permets de supprimer une partition. J'avais déja une partition de présente pour partir de 0, je préfère la supprimer.
Selected partition 1
Partition 1 has been deleted.
Command (m for help): n # La lettre n permets de créer une partition, je laisse les arguments suivants pas défaut, parce que je ne veux qu'une partition primaire sur toute la clef.
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (1-4, default 1):
First sector (2048-30326783, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-30326783, default 30326783):
Created a new partition 1 of type 'Linux' and of size 14.5 GiB.
Command (m for help): t # La lettre t permets de modifier le type de partition, de base il créer la partition en `Linux`, on va la changer en `raid`
Selected partition 1
Hex code or alias (type L to list all): fd # Les lettres fd sont le raccourci pour indiqués à la partition d'être en `raid`
Changed type of partition 'Linux' to 'Linux raid autodetect'.
Command (m for help): p # La lettre p permets de visualiser les modifications que l'on a faite avant
Disk /dev/sdb: 14.46 GiB, 15527313408 bytes, 30326784 sectors
Disk model: Micro OTG
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7d98f6f9
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 30326783 30324736 14.5G fd Linux raid autodetect
Command (m for help): w #La lettre w permets d'écrire donc de modifier les partitions pour ensuite quitter `fdisk`. Attention à bien vérifier les modifications que vous faites, c'est irréversible après ça.
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.Il faut ensuite faire ça pour toutes les autres clefs USB. De mon
côté, le nom des périphériques est
/dev/sdb,/dev/sdc,/dev/sdb.
Pour vérifier que tout est bon au niveau de tes nouvelles partitions, tu peux taper cette commande :
utilisateur·ice@au-hasard:~ $ lsblk -o NAME,TYPE,PARTTYPENAME
NAME TYPE PARTTYPENAME
[…]
sdb disk
└─sdb1 part Linux raid autodetect
sdc disk
└─sdc1 part Linux raid autodetect
sdd disk
└─sdd1 part Linux raid autodetect
[…]L’argument -o de la commande lsblk est très
intéressant, tu peux créer tes colonnes comme tu le souhaites avec une
mutltitude d’informations. Par exemple, on peut récupérer
l’UUID des périphériques via cette argument, on verras ça
dans la suite du post.
Création
On va maintenant installer le paquet mdadm pour
configurer le raid.
utilisateur·ice@au-hasard:~ $ sudo apt update && sudo apt install mdadm -yEnsuite, on créé le raid avec la commande suivante, attention à bien choisir le type de raid qu’il te faut selon le nombre de périphérique de stockage que tu as sous la main. L’explication fait suite à la commande :
utilisateur·ice@au-hasard:~ $ sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
To optimalize recovery speed, it is recommended to enable write-indent bitmap, do you want to enable it now? [y/N]? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.Sur cette commande, on créé le périphérique /dev/md0,
c’est le petit nom de notre raid avec le level 5 qui corresponds au Raid
5 ce qui signifie que l’on utilise chaque disques (3 minimuns pour le
raid5) pour la donnée et sa parité. La parité va servir à recréé la
donnée à partir des autres disques en cas de dysfonctionnement de l’un
d’eux. Attention quand même le raid 5 ne peut avoir qu’un seul disque
défectueux à la fois. Pour la suite de la commande, on indique le nombre
de partitions qu’il va y avoir dans la grappe du raid et les partitions
en questions.
Je te vois venir avec ta question, pourquoi on ne mets pas
l’UUID de la partition dans ta commande ? Parce que
mdadm va créé un UUID bien à lui pour les partitions
faisant partis de sa grappe.
J’ai répondu y à la question qui est posé pour que
mdadm puisse utiliser le bitmap d’écriture qui permets de
savoir où sont les données dans les blocs des disques lors d’une
opération de récupération d’une panne, ça améliore la vitesse de
récupération donc mais ça diminue la vitesse en écriture des données vu
que ça écrit la donnée et ça indique aussi que cet emplacement n’est pas
vide.
On va maintenant faire en sorte que mdadm soit reconnu
comme un deamon via le système, c’est à dire qu’il soit démarrer au
lancement de ton serveur :
utilisateur·ice@au-hasard:~ $ sudo mdadm --daemonise /dev/md0
mdadm: --daemonise does not set the mode, and so cannot be the first option.
#Si vous avez un message d'erreur comme ci-dessus, lancer la commande suivante
utilisateur·ice@au-hasard:~ $ sudo mdadm --monitor --daemonise /dev/md0
mdadm: Warning: One autorebuild process already running.
62921Pour avoir des informations sur le raid nouvellement créé, on peut taper la commande suvante :
utilisateur·ice@au-hasard:~ $ sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Mon Mar 9 14:43:13 2026
Raid Level : raid5
Array Size : 30306304 (28.90 GiB 31.03 GB)
Used Dev Size : 15153152 (14.45 GiB 15.52 GB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Intent Bitmap : Internal # Le bitmap est stocké en interne donc avec la métadonnée de l'écriture et donc est répliqué sur tous les périphériques de stockage.
Update Time : Mon Mar 9 14:55:16 2026
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : bitmap
Rebuild Status : 18% complete # La construction de la grappe est en cours.
Name : rpi-3:0 (local to host rpi-3)
UUID : cce68065:bedd2069:3e55820e:aad5a2ab
Events : 136
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
3 8 49 2 spare rebuilding /dev/sdd1Où vérifier le processus mdstat :
utilisateur·ice@au-hasard:~ $ cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[3] sdc1[1] sdb1[0]
30306304 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
[==>..................] recovery = 14.0% (2125300/15153152) finish=53.0min speed=4090K/sec
bitmap: 0/1 pages [0KB], 65536KB chunk
unused devices: <none>Pour vérifier ça avec des commandes que l’on a déja vu, tu peux de
nouveau taper la commande lsblk :
utilisateur·ice@au-hasard:~ $ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
[…]
sdb 8:16 1 14.5G 0 disk
└─sdb1 8:17 1 14.5G 0 part
└─md0 9:0 0 28.9G 0 raid5
sdc 8:32 1 14.5G 0 disk
└─sdc1 8:33 1 14.5G 0 part
└─md0 9:0 0 28.9G 0 raid5
sdd 8:48 1 14.5G 0 disk
└─sdd1 8:49 1 14.5G 0 part
└─md0 9:0 0 28.9G 0 raid5
[…]On peut voir que les partitions que l’on a créé sont rattachés à
md0 qui est notre raid.
LVM
Cette partie n’est pas nécessaire mais conseiller, si tu veux passer
cette partie, il te suffit d’ajouter ton périphérique raid dans
/etc/fstab pour qu’il soit monté dans un répertoire. Je te
laisse relire la partie
1 de ces tutos si tu veux plus d’infos.
Maintenant que le raid est configuré, on va s’attaquer à la partie LVM. Ça va nous permettre d’ajouter le volume RAID dans un LVM et de pouvoir gérer plus facilement le stockage de tout ça.
Installation
sudo apt update && sudo apt install lvm2 -yConfiguration
pv : physical volume
Le pv corresponds aux périphériques de stockage que l’on
veut ajouter dans la configuration de notre LVM, ici, ça sera notre raid
/dev/md0.
On va donc créé ce pv avec la commande suivante :
utilisateur·ice@au-hasard:~ $ sudo pvcreate /dev/md0
Physical volume "/dev/md0" successfully created.vg : volume group
Le vg est donc un groupe de volume qui peut permettre de
regrouper les données par fonctionnalités où par tout autre chose à ton
bon vouloir.
Le groupe de volume doit obligatoirement faire parti d’un
pv donc dans la commande de la création, on le rattachera à
son pv.
Je nomme toujours mes vg de la manière suivante :
vg_nomduvg pour avoir plus de visibilités à sa lecture.
utilisateur·ice@au-hasard:~ $ sudo vgcreate vg_backups /dev/md0
Volume group "vg_backups" successfully createdlv : logical volume
Le lv corresponds au volume logique donc à l’emplacement
où sera la données elle même.
Le volume logique doit obligatoirement faire parti d’un
vg donc dans la commande de la création, on le rattachera à
son vg.
Je nomme toujours mes lv de la manière suivante :
lv_nomdulv pour avoir plus de visibilités à sa lecture.
utilisateur·ice@au-hasard:~ $ sudo lvcreate -L 5G -n lv_blog vg_backups
Logical volume "lv_blog" created.L’avantage du LV, c’est que l’on peut augmenter sa capacité tant
qu’il reste de la place sur le pv et le vg,
j’ai donc mis pour l’instant 5Go.
Ce qui est top, c’est que si je veux faire un autre site sur le même
serveur, je peux créer un autre LV pour les sauvegardes et l’intégrer
dans le vg_backups et d’un coup d’oeil, je reconnaitrais
mon arborescence de données de sauvegarde.
Vérification
Pour vérifier tout ça, on a toujours notre commande
lsblk qui doit nous présenter quelque chose comme ceci
:
au_hasard@rpi-3:~ $ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
[…]
sdb 8:16 1 14.5G 0 disk
└─sdb1 8:17 1 14.5G 0 part
└─md0 9:0 0 28.9G 0 raid5
└─vg_backups-lv_blog 252:0 0 5G 0 lvm
sdc 8:32 1 14.5G 0 disk
└─sdc1 8:33 1 14.5G 0 part
└─md0 9:0 0 28.9G 0 raid5
└─vg_backups-lv_blog 252:0 0 5G 0 lvm
sdd 8:48 1 14.5G 0 disk
└─sdd1 8:49 1 14.5G 0 part
└─md0 9:0 0 28.9G 0 raid5
└─vg_backups-lv_blog 252:0 0 5G 0 lvm
[…]Configuration du volume
Pour finir, oui, c’est bientôt fini, je te félicite si tu es arrivé·e jusqu’ici. /
On va configurer le LV et le monter dans un répertoire
comme on a pu le voir dans le premier post.
sudo mkfs.ext4 /dev/mapper/vg_backups-lv_blog
mkdir ~/backups #Si il n'existe pasPour récupérer l’UUID à indiquer dans
/etc/fstab, tu peux utiliser la commande suivante :
au_hasard@rpi-3:~ $ lsblk -o NAME,TYPE,PARTTYPENAME,UUID
NAME TYPE PARTTYPENAME UUID
[…]
sdb disk
└─sdb1 part Linux raid autodetect cde68065-bedd-2069-3e55-820eaad5a2ab
└─md0 raid5 Tb8bxg-LHR5-eEXw-YsNi-Nt68-i1lL-fdEt2i
└─vg_backups-lv_blog lvm c99a6dbc-0a1c-476c-8c1e-33f6a2db9780
sdc disk
└─sdc1 part Linux raid autodetect cde68065-bedd-2069-3e55-820eaad5a2ab
└─md0 raid5 Tb8bxg-LHR5-eEXw-YsNi-Nt68-i1lL-fdEt2i
└─vg_backups-lv_blog lvm c99a6dbc-0a1c-476c-8c1e-33f6a2db9780
sdd disk
└─sdd1 part Linux raid autodetect cde68065-bedd-2069-3e55-820eaad5a2ab
└─md0 raid5 Tb8bxg-LHR5-eEXw-YsNi-Nt68-i1lL-fdEt2i
└─vg_backups-lv_blog lvm c99a6dbc-0a1c-476c-8c1e-33f6a2db9780
[…]On récupère l’UUID du lv et on peut ensuite l’ajouté
dans /etc/fstab.
Et voila !! Tu as maintenant du raid et du LVM pour ta sauvegarde !!! Bien joué.
Je pense qu’un de mes prochains posts sera de mettre en place un petit monitoring des périphériques de stockage pour savoir si l’un d’eux est HS et doit être changé.