lid's Wiki

title: Environnement Linux: Gestion des utilisateurs, RAID LVM et MDADM
description: Rappels sur la gestion des utilisateurs, découverte de LVM, du RAID LVM et du RAID MDadm
published: true
date: 2025-10-01T19:05:01.043Z
tags: linux, basics, shell, raid
editor: markdown
dateCreated: 2025-10-01T18:29:19.272Z

EPSI B3: Environnement Linux

Gestion des utilisateurs et gestion des comptes

Ajout, suppression et modification d'utilisateurs

/etc/skel

Lorsqu'on ajoute un nouvel utilisateur, son répertoire HOME est créé à partir du contenu du répertoire /etc/skel (pour "skeleton").

useradd, adduser

On ne les présente plus, useradd et adduser nous permettent de créer nos utilisateurs:

useradd -ms /bin/bash utilisateur
adduser --home /home/user --shell /bin/bash user

adduser est plus interactif et "convivial" qu'useradd, et propose plus de possibilités de préconfiguration de notre utilisateur (par exemple pour préajouter notre utilisateur aux groupes de gestion du système, etc), et se configure dans le fichier /etc/adduser.conf.

userdel, deluser, newusers

De la même façon, on peut supprimer un utilisateur avec les commandes userdel et deluser:

userdel user
# pour supprimer le HOME dans la foulée:
userdel -r user
# deluser:
deluser user
# pour supprimer le HOME:
deluser --remove-home user

La commande newusers, elle, lit un fichier (ou son entrée standard) dont elle va utiliser les informations pour mettre à jour et/ou créer un ensemble d'utilisateurs. La syntaxe de ce fichier est identique à celle du fichier /etc/passwd (sauf que le mot de passe dans le fichier n'est pas chiffré et qu'il sera chiffré lors de la création des utilisateurs), cf plus bas pour ce qui concerne les fichier /etc/passwd et /etc/shadow 😃

usermod, passwd, chpasswd

On peut aussi vouloir modifier un utilisateur, par exemple, changer son HOME, l'ajouter à un groupe, etc

# ajouter user au groupe docker (pratique ;))
usermod -aG docker user
# changer le home de l'user:
usermod -d /home/usernewhome user

De même, pour modifier le mot de passe d'un utilisateur, on peut utiliser la commande passwd:

# modifier son propre mdp
passwd
# modifier le mdp de l'utilisateur "user"
sudo passwd user

chpasswd nous permet de mettre à jour les mots de passe par lots. Il va lire depuis son entrée standard une liste de paire utilisateur:motdepasse et utiliser ces informations pour mettre à jour les utilisateurs correspondants (et chiffrer les mots de passe au passage, en utilisant PAM).

chpasswd < fichier

/etc/passwd et /etc/shadow

le fichier /etc/passwd contient différentes informations sur les comptes utilisateurs, séparées par des ":":

ce qui nous donne quelque chose de ce style:

user:x:1000:1000:Michel User,,,:/home/user:/bin/zsh

Le fichier /etc/shadow contient, lui, les informations relatives aux mots de passes de nos utilisateurs, séparées là aussi par ":":

ce qui nous donne un truc du genre:

user:$9$AZertYu1Op/qSdFgHjklm:1633954707:30:365:7:14:1733954707:

Gestion des groupes

groupadd, groupdel, groupmod, addgroup, delgroup

De la même façon que nous manipulons nos utilisateurs avec les commandes useradd, adduser, deluser, usermod... etc, nous pouvons aussi créer, supprimer et manipuler des groupes:

groupadd testgroup
# en spécifiant un GID spécifique
groupadd -g 6000 testgroup2
# la même avec addgroup
addgroup --gid 6001 testgroup3
# suppression du groupe
delgroup testgroup
# éviter de delete un groupe avec des utilisateurs
delgroup --only-if-empty testgroup2
# groupdel
groupdel testgroup3

De même, un groupe peut avoir un mot de passe (et ouaip!) pour les utilisateurs non-membres du groupe:

gpasswd groupe
# ajouter ou supprimer un utilisateur d'un groupe
gpasswd -a utilisateur groupe
gpasswd -d utilisateur groupe
# configurer la liste des admins du groupe
gpasswd -A user1,user2.. groupe
# la liste des membres:
gpasswd -M user3,user4... groupe

/etc/group et /etc/gshadow

De la même façon que nos utilisateurs sont référencés dans les fichiers /etc/passwd et /etc/shadow, nos groupes sont référencés dans deux fichiers, /etc/group (qui référence aussi les utilisateurs appartenant à tel ou tel groupe), et /etc/gshadow (qui fonctionne de façon similaire à /etc/shadow).

On peut donc ajouter un utilisateur directement à un groupe en éditant le fichier /etc/group, par exemple.

Sa structure est similaire à celle d'/etc/passwd, en séparant chaque champ par ":":

De la même manière, le fichier /etc/gshadow est organisé comme suit (en utilisant toujours ":" comme séparateur):

Gestion des disques et périphériques

ajout de disque

on va ajouter un disque à notre machine virtuelle (pas besoin de plus d'1Go,
c'est pour test 😃)

On va récupérer son nom de périphérique bloc (normalement /dev/sdb) en
regardant les logs du kernel via la commande:

sudo dmesg

partitionner le disque

Plusieurs utilitaires:

on va utiliser cfdisk pour créer une partition sur notre nouveau disque:

sudo cfdisk /dev/sdb

formater le disque

Sous GNU/Linux, on peut utiliser une pléthore de systèmes de fichiers
différents:

Dans notre cas, on va faire simple: on va formater notre nouvelle partition en ext4 😃

sudo mkfs.ext4 /dev/sdb1

monter les disques de façon temporaire, et persistante via /etc/fstab

Tout d'abord, on peut monter rapidement une partition (pour vérifier son
contenu, etc) dans n'importe quel répertoire (de préférence vide 😂):

sudo mount /dev/sdb1 /mnt
ls /mnt
sudo umount /mnt

Cependant, ce n'est pas vraiment pratique si on veut que nos partitions soient
automatiquement montées au démarrage de la machine... Pour celà, on utilise le
fichier /etc/fstab:

cat /etc/fstab
UUID=2fc007d9-01a1-4d21-bd63-9ece32cd8040  /               btrfs  defaults              0  0
UUID=2fc007d9-01a1-4d21-bd63-9ece32cd8040  /var            btrfs  subvol=/@/var         0  0
UUID=2fc007d9-01a1-4d21-bd63-9ece32cd8040  /usr/local      btrfs  subvol=/@/usr/local   0  0
UUID=2fc007d9-01a1-4d21-bd63-9ece32cd8040  /srv            btrfs  subvol=/@/srv         0  0
UUID=2fc007d9-01a1-4d21-bd63-9ece32cd8040  /root           btrfs  subvol=/@/root        0  0
UUID=2fc007d9-01a1-4d21-bd63-9ece32cd8040  /opt            btrfs  subvol=/@/opt         0  0
UUID=2fc007d9-01a1-4d21-bd63-9ece32cd8040  /home           btrfs  subvol=/@/home        0  0
UUID=2fc007d9-01a1-4d21-bd63-9ece32cd8040  /.snapshots     btrfs  subvol=/@/.snapshots  0  0
UUID=6c6ccd4a-21ab-422f-be50-458222e93276  swap            swap   defaults              0  0

Ici, UUID est l'identifiant unique de la partition obtenu avec la commande
#blkid*. On peut aussi tout à fait utiliser le nom du fichier bloc
correspondant à notre partition (/dev/sdb1 par exemple) cependant l'avantage
principal de l'UUID est que même si le périphérique change d'emplacement
(devenant, par exemple, /dev/sdc), il sera quand même retrouvé et monté au bon
endroit par le système.

La syntaxe fstab est la suivante:

Dès lors, une ligne fstab valide pour notre partition /dev/sdb1 montée dans
/mnt/volume1 (pensez à mkdir le répertoire en question 😉) serait:

/dev/sdb1  /mnt/volume1 ext4 defaults,noatime 0 0

La même, avec LVM

LVM signifie Logical Volumes Manager. Il permet de créer des volumes
logiques pouvant être répartis sur plusieurs disques (ou plusieurs grappes
RAID), et facilement manipulés, c'est à dire étendus sur d'autres disques ou
partitions, sauvegardés via des instantanés (/snapshots/), etc.

Typiquement, une grappe LVM est composée de:

Tout d'abord, ajoutons un nouveau disque à notre VM, normalement il devrait
s'agir de /dev/sdc, et déclarons le comme un PV - on va devoir installer lvm2 avant:

sudo apt install lvm2
sudo pvcreate /dev/sdc

On va ensuite l'ajouter à notre groupe de volumes, que nous allons créer dans
la foulée, et que nous allons nommer epsivg:

sudo vgcreate epsivg /dev/sdc
# si on a plusieurs disques/partitions
# à ajouter au VG, on peut:
sudo vgcreate epsivg /dev/sdc /dev/sdd1 /dev/sde

Notre groupe de volumes est créé, on peut afficher ses informations avec la
commande vgdisplay:

sudo vgdisplay

On peut (enfin!) créer notre volume logique avec la commande lvcreate (ici,
si notre périphérique fait 1Go et notre VG ~1Go, on va créer un volume de
512Mo, et nous allons l'appeler lv1

sudo lvcreate -L 512m -n lv1 epsivg

Nous pouvons désormais le formater, puis le monter de la façon suivante:

sudo mkfs.ext4 /dev/mapper/epsivg-lv1
# on part du principe qu'on a créé le répertoire /mnt/lv1:
sudo mount /dev/mapper/epsivg-lv1 /mnt/lv1

De même, on peut le monter directement dans le fstab, comme d'hab maintenant
(faites le! 😃)

ajouter un disque supplémentaire à une grappe LVM

Si on veut ajouter un disque supplémentaire à une grappe LVM et l'utiliser
pour étendre un volume logique LVM, tout d'abord on doit l'initialiser comme
volume physique. Ajoutons un disque à notre VM (/dev/sdd probablement), puis:

sudo pvcreate /dev/sdd

Ajoutons le ensuite à notre VG epsivg:

sudo vgextend epsivg /dev/sdd

Puis enfin utilisons lvextend pour agrandir notre volume logique lv1:

sudo lvextend -L +512m epsivg/lv1
sudo resize2fs /dev/mapper/epsivg-lv1

Et voilà 😃 - pratique, non? Imaginons le cas d'une base de données sur un
volume logique situé sur une grappe RAID-1 de 1To. On arrive à la limite de
capacité de notre volume, il suffit d'ajouter une autre grappe RAID-1 à notre
VG puis d'étendre notre volume logique contenant les données de notre base de
données, et hop, on est repartis pour quelques années 😃

RAID logiciel sous gnu/linux

/Note: le RAID n'est pas un backup!!!/

RAID signifie /Redundant Array of Independent Disks/ - on dit aussi parfois /Redundant Array of Inexpensive Disks/ :p

RAID0 (lol)

Alors, si vous avez des données dont vous n'avez rien à faire, que vous pouvez facilement retélécharger par exemple, et que vous avez besoin de performances, RAID-0 est tout indiqué (par exemple: jeux vidéos). Mais c'est à peu près tout 😄. RAID-0 "découpe" les données entre les disques, en lecture comme en écriture, en stripes dont la taille est prédéfinie lors de la création de l'agrégat - en général des stripes de 64Ko. Dès lors, on peut facilement écrire nos données sur 2 (ou plus) disques en même temps. idem pour la lecture. On peut considérer, grossièrement, qu'un agrégat RAID-0 de deux disques identiques permet de quasiment doubler les performances en écriture et en lecture. Remplacez les disques à plateau par des SSD et on peut obtenir des performances plus que sympathiques 😃

Par contre, si un disque de l'agrégat rencontre un problème, tout l'agrégat est perdu, et donc les données qui se trouvaient dessus 😃

RAID1

Ici, nos deux (ou plus) disques sont en miroir, c'est à dire que les deux (ou plus) disques contiennent exactement les mêmes données. On peut dès lors perdre tous les disques sauf un avant de perdre nos données, mais bien sûr les coûts sont plus élevés, vu qu'il faut, au minimum, doubler chaque disque pour chaque agrégat RAID-1.

RAID4 et RAID-DP

Ici, un disque (dans le cas de RAID-4) est dédié aux informations de parité. Deux disques sont réservés aux informations de parité dans le cas de RAID-DP. On rencontre souvent RAID-DP sur les baies Netapp: on a un bon ratio performance/résilience (on peut perdre deux disques par agrégat sans perdre de données dans le cas de RAID-DP, un seul dans le cas de RAID-4)

RAID5

Ici, on n'utilise pas un disque réservé pour les informations de parité, mais ces informations sont réparties sur chaque disque de l'agrégat, de manière séquentielle. Il nécessite, tout comme RAID-4, au minimum 3 disques. On obtient les meilleures performances sur un agrégat de 6/7 disques. Par exemple ici, une grappe RAID-5 sur une carte Perc H700, avec 6 disques SATA moisis:

lidstah@polaris:~$ sudo pveperf
CPU BOGOMIPS:      76612.16
REGEX/SECOND:      1511699
HD SIZE:           97.93 GB (/dev/mapper/pve-root)
BUFFERED READS:    467.61 MB/sec
AVERAGE SEEK TIME: 7.67 ms
FSYNCS/SECOND:     1697.46
DNS EXT:           32.21 ms
DNS INT:           47.76 ms

On voit qu'on obtient des performances plus que décentes niveau reads et fsync.

Par contre, on ne peut perdre qu'un seul disque.

RAID6

RAID6 est une évolution de RAID5 permettant d'utiliser /n/ informations redondantes de parité au lieu d'une seule. La grande majorité des implémentations de RAID6 se limitent à une valeur de /n = 2/ du fait de la complexité des fondements mathématiques à la base de ce système.

Ses avantages principaux sont de pouvoir résister à la perte de /n/ disques (en pratique, souvent deux disques), mais ses défauts principaux sont des temps d'écriture plus longs du fait des calculs plus complexes, et un temps de reconstruction du RAID en cas de perte de 2 disques très, très, trèèèès long 😃

Cependant il est de plus en plus utilisé du fait de l'augmentation des performances du matériel dédié, comme des CPUs, permettant de l'implémenter de façon logicielle (ajouté au kernel Linux 2.6, donc ça remonte).

RAID-Z (ZFS)

Similaire à RAID-5, le RAID-Z, utilisé par ZFS de Sun Microsystems, utilise un système de /copy-on-write/ afin de limiter les effets de /trous d'écriture/ (baisse des performances en écriture de nombreux petits fichiers sur un RAID-5). Néanmoins il est moins performant que RAID-5, sauf si on alloue de la RAM ou des flashpools SSD pour mettre en cache les opérations de lecture/écriture (L2ARC et ZIL).

RAIDs rigolos

RAID01

RAID10

RAID05

RAID15

RAID50

RAID51

RAID Matériel et RAID Logiciel

RAID Matériel

Le RAID Matériel implique l'utilisation de cartes dédiées (en général PCIe), utilisant souvent des firmwares propriétaires. La carte RAID s'occupe de la gestion des agrégats RAID et présente au système d'exploitation un seul /block device/. L'OS ne "voit" alors qu'un seul disque par agrégat RAID, sans nécessairement connaître l'état des disques utilisés - cependant des drivers existent permettant de vérifier l'état - notamment SMART - des disques utilisés par l'agrégat au niveau du système d'exploitation.

Ces cartes RAID disposent souvent de mémoire cache, permettant d'augmenter notablement les performances. De plus, elles disposent en général d'ASICs dédiés à la gestion des différents niveau de RAID, permettant de libérer le CPU lors, par exemple, de la reconstruction d'un RAID dont un disque a été remplacé.

RAID Logiciel avec LVM (ultra simple 😄)

Tout d'abord, on va ajouter deux disques identiques de 2Go à notre VM. Ils vont nous servir à créer notre grappe RAID avec LVM.

Une fois ajoutés, et identifiés avec la commande lsblk, on va les déclarer comme Volumes Physiques (PV) utilisables par LVM (ici, /dev/sde et /dev/sdf):

sudo pvcreate /dev/sde /dev/sdf

On va ensuite les ajouter à un groupe de volumes logiques que nous allons nommer vraid:

sudo vgcreate vraid /dev/sde /dev/sdf

Enfin, nous allons créer un volume logique RAID-1 que nous allons appeler vol1:

sudo lvcreate --size 1536M --name vol1 --type raid1 vraid

Il ne nous reste plus qu'à le formater, le monter… et voilà… difficile de faire plus simple 😄

RAID Logiciel avec MDADM

Ici, c'est l'OS qui gère directement les agrégats RAID, ce qui permet une meilleure souplesse d'utilisation, mais impacte - légèrement - les performances.

Sous Windows, le Gestionnaire de disques permet de facilement créer des agrégats RAID (0,1,5,6 iirc).

Sous GNU/Linux, on utilisera l'utilitaire /mdadm/. Par exemple pour créer un RAID-1 entre nos disques sdc et sdd (de taille identique):

# dans les deux cas:
# type de table de partitions GPT
# taille identique de partition
# type de partition: "fd", RAID Linux Autodetect
$ sudo cfdisk /dev/sdc
$ sudo cfdisk /dev/sdd

Puis on crée notre agrégat RAID-1 avec la commande mdadm:

$ sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdc1 /dev/sdd1
# puis on "daemonise" notre volume RAID pour qu'il soit chargé à chaque démarrage:
$ sudo mdadm --daemonise /dev/md0
# en cas de fail:
$ sudo mdadm --monitor --daemonise /dev/md0

On peut maintenant vérifier les détails de notre aggrégat RAID-1:

$ sudo fdisk -l
$ sudo mdadm --detail /dev/md0

Et enfin, le formater et le monter:

$ sudo mkfs.ext4 /dev/md0
$ sudo mount /dev/md0 /mnt
$ df -h
$ sudo umount /mnt

Pour finir, on peut le déclarer dans fstab. Admettons qu'on veuille le monter dans le répertoire raid1 du répertoire home:

$ sudo mkdir /home/raid1
$ sudo vim /etc/fstab
/dev/md0  /home/raid1  ext4 defaults 0 1
:wq

Si un des disques vient à flancher, on va d'abord le retirer de l'aggrégat avant d'ajouter un nouveau disque:

# on le marque "faulty"
$ sudo mdadm --manage /dev/md0 --set-faulty /dev/sdc1
# on le retire de la grappe
$ sudo mdadm --manage /dev/md0 --remove /dev/sdc1
# une fois le disque remplacé par un nouveau disque (partitionné, etc)
# on remet le nouveau disque en prod
# on va partir du principe que la partition est /dev/sdc1:
$ sudo mdadm --manage /dev/md0 --add /dev/sdc1

On peut aussi vouloir stopper complètement une grappe et la supprimer:

$ sudo mdadm --detail /dev/md0
$ sudo mdadm --stop /dev/md0
$ sudo mdadm --zero-superblock /dev/sdc1
$ sudo mdadm --zero-superblock /dev/sdd1
# Puis on modifie la conf' de mdadm si nécessaire

mini-TP

Créez une VM (1c, 1Go RAM), sur laquelle: