« Stockage » : différence entre les versions

De Justine's wiki
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 351 : Ligne 351 :


(Pour une raison étrange, cela ne fonctionne pas avec sudo, il faut se logger en tant que root). 
(Pour une raison étrange, cela ne fonctionne pas avec sudo, il faut se logger en tant que root). 
= LVM =
<blockquote>
NB&nbsp;: Des notes plus anciennes concernant LVM (un peu plus "noob-friendly") sont disponibles là&nbsp;: [[Filesystems|Filesystems]]
</blockquote>
<pdf>Fichier:02-lvm.pdf</pdf>
LVM signifie "Logical Volume Manager". Il permet différents type d'opérations:
*Ajout et retrait d'unités de disques&nbsp;: cela permet de la maintenance et l'utilisation temporaire de disques
*Augmentation / diminution de la capacité de stockage, avec des transferts entre volumes logiques sur un même système
*Redimensionnement dynamique&nbsp;: Permet l'extension d'un système de fichiers en ligne
*Déplacement des données entre les unités de disques, avec une préparation à l'extraction d'unités de disques
*Des snapshots des volumes logiques
*De la réplication, via des copies entre les volumes logiques.
On a trois solutions pour faire du RAID&nbsp;:
*Du LVM, sur lequel viennent se greffer dmsetup / mdadm pour le RAID et ext4
*ZFS
*btrfs
LVM est un gestionnaire de périphérique en mode bloc, qui fonctionne au niveau système&nbsp;: il prend en charge des partitions ou n'importe quel autre périphérique de stockage. La vue système est homogène, les périphériques étant vus comme un seul périphérique logique par le système. On peut donc faire l'analogie entre volume et partition, puisqu'on peut tous les deux les formater, mais ils sont bel et bien DIFFÉRENTS&nbsp;! La configuration peut changer de façon dynamique, avec des snapshots, du redimensionnement, extensions, déplacements... Pour reprendre le schéma de mes précédentes notes, qui met en valeur Volume Physique, Groupe de Volumes et Volume Logique&nbsp;:
[[File:LVM1.png|400x300px|LVM1.png]]
== LVM2 sur Linux ==
LVM2 sur Linux est pris en charge au niveau Kernel par Device mapper module et au niveau utilisateur par le paquet lvm2, avec le striping en option.
À chacune de nos unités semble correspondre une commande:
*pvcreate pour Physical Volume
*vgcreate pour Volume Group
*lvcreate pour Logical Volume
= LVM&nbsp;: mise en place =
<pdf>Fichier:tp2lvm.pdf</pdf>
Pour ce TP, je repars de la machine précédente, telle que je l'avais laissée.
Je commence par installer le paquet lvm2:
<pre>sudo apt install lvm2</pre>
== Création des volumes ==
Nous avons notre RAID, qui travaille au niveau bloc. LVM travaille lui au niveau "gestionnaire de périphérique". On aura donc trois couches successives (en quelque sorte) sur nos disques:
*mdadm qui gère le RAID au niveau bloc
*LVM qui gère le disque virtuel du RAID (md0) en tant que périphérique
*ext4 qui sera le FS utilisé par le système.
On va devoir créer nos trois "unités" LVM.
=== Création du volume physique ===
<pre>justine@serveurlvmraid:/etc/mdadm$ sudo pvcreate /dev/md0
  Physical volume "/dev/md0" successfully created.</pre>
=== Création du groupe de volumes ===
<pre>justine@serveurlvmraid:/etc/mdadm$ sudo vgcreate groupevol /dev/md0
  Volume group "groupevol" successfully created</pre>
Notre groupe de volumes est créé, il porte le nom "groupevol".
=== Création de deux volumes logiques ===
On va créer deux volumes logiques (qui fonctionneront donc un peu comme disques traditionnels directement formatés en ext4) de 256 Mo chacun, vol1 et vol2, à partir de notre groupe groupevol.
<pre>justine@serveurlvmraid:~$ sudo lvcreate -n vol1 -L 256M groupevol
  Logical volume "vol1" created.
justine@serveurlvmraid:~$ sudo lvcreate -n vol2 -L 256M groupevol
  Logical volume "vol2" created.
</pre>
Ils sont mêmes visibles dans fdisk&nbsp;!
<pre>Disque /dev/mapper/groupevol-vol1&nbsp;: 256 MiB, 268435456 octets, 524288 secteurs
Unités&nbsp;: secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique)&nbsp;: 512 octets / 512 octets
taille d'E/S (minimale / optimale)&nbsp;: 512 octets / 512 octets
Disque /dev/mapper/groupevol-vol2&nbsp;: 256 MiB, 268435456 octets, 524288 secteurs
Unités&nbsp;: secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique)&nbsp;: 512 octets / 512 octets
taille d'E/S (minimale / optimale)&nbsp;: 512 octets / 512 octets
justine@serveurlvmraid:~$</pre>
== Formatage et montage des volumes ==
Il faut désormais les formater en ext4, ici avec mkfs:
<pre>justine@serveurlvmraid:~$ sudo mkfs -t ext4 /dev/groupevol/vol1
mke2fs 1.43.4 (31-Jan-2017)
En train de créer un système de fichiers avec 262144 1k blocs et 65536 i-noeuds.
UUID de système de fichiers=0497b299-d302-4bfa-b2a9-d0fad5c96e0f
Superblocs de secours stockés sur les blocs&nbsp;:
    8193, 24577, 40961, 57345, 73729, 204801, 221185
Allocation des tables de groupe&nbsp;: complété                       
Écriture des tables d'i-noeuds&nbsp;: complété                       
Création du journal (8192 blocs)&nbsp;: complété
Écriture des superblocs et de l'information de comptabilité du système de
fichiers&nbsp;: complété
justine@serveurlvmraid:~$ sudo mkfs -t ext4 /dev/groupevol/vol2
mke2fs 1.43.4 (31-Jan-2017)
En train de créer un système de fichiers avec 262144 1k blocs et 65536 i-noeuds.
UUID de système de fichiers=d3663a80-cb8b-42a9-be70-f4b271486735
Superblocs de secours stockés sur les blocs&nbsp;:
    8193, 24577, 40961, 57345, 73729, 204801, 221185
Allocation des tables de groupe&nbsp;: complété                       
Écriture des tables d'i-noeuds&nbsp;: complété                       
Création du journal (8192 blocs)&nbsp;: complété
Écriture des superblocs et de l'information de comptabilité du système de
fichiers&nbsp;: complété</pre>
Enfin, on a plus qu'à les monter pour les utiliser (il faut d'abord créer les dossiers qui serviront de point de montage):
<pre>justine@serveurlvmraid:~$ sudo mkdir /mnt/lv1 /mnt/lv2
justine@serveurlvmraid:~$ sudo mount /dev/groupevol/vol1 /mnt/lv1
justine@serveurlvmraid:~$ sudo mount /dev/groupevol/vol2 /mnt/lv2</pre>
Si à ce stade, mount renvoie une erreur du type "le disque est en lecture seule", il faut vérifier qu'ils ont bien été formatés.
== Agrandissement à chaud des volumes logiques ==
On va ici vouloir agrandir à chaud le système de fichiers vol2 à 512 Mo&nbsp;: c'est possible.
=== Agrandissement du volume logique ===
On commence bien sûr par agrandir notre volume logique.
<pre>justine@serveurlvmraid:~$ sudo lvresize -L 512M /dev/groupevol/vol2
  Size of logical volume groupevol/vol2 changed from 256,00 MiB (64 extents) to 512,00 MiB (128 extents).
  Logical volume groupevol/vol2 successfully resized.</pre>
=== Agrandissement du système de fichiers ===
On agrandit le FS afin que les 512 Mo soient utilisables.
<pre>justine@serveurlvmraid:~$ sudo resize2fs -p /dev/groupevol/vol2 512M
resize2fs 1.43.4 (31-Jan-2017)
Le système de fichiers de /dev/groupevol/vol2 est monté sur /mnt/lv2&nbsp;; le changement de taille doit être effectué en ligne
old_desc_blocks = 2, new_desc_blocks = 4
Le système de fichiers sur /dev/groupevol/vol2 a maintenant une taille de 524288 blocs (1k).</pre>
=== Vérifications ===
La commande df -h nous montre bel et bien nos deux volumes logiques, parfaitement utilisables&nbsp;:
<pre>/dev/mapper/groupevol-vol1  240M    2,1M  222M  1% /mnt/lv1
/dev/mapper/groupevol-vol2  488M    2,3M  459M  1% /mnt/lv2</pre>
On constate au passage que les métadonnées prennent une certaine place.

Version du 8 janvier 2019 à 23:07

Stockage local

Matériel

Au fil du temps, plusieurs types de matériels se sont développés dans le but de stocker des données.

Les bandes magnétiques

Une des plus anciennes méthodes de stockage "amovible", nous sommes successivement passés de bandes magnétiques simples, au cassettes type "cassette audio", jusqu'au LTO 3/4 (Linear Tape-Open : une technique de stockage sur bande magnétique, au format ouvert développé par HP, IBM et Seagate à la fin des années 90). Leur temps d'accès étant supérieur à 1 seconde, elles servent de nos jours à des sauvegardes, par accès séquentiels.

Médias magnétique rotatifs

Cela inclut les disquettes (aujourd'hui bien dépassées : bien qu'ayant un temps d'accès court, le débit est limité et la fiabilité douteuse) et les disques durs à plateaux, dont les temps d'accès est supếrieur à 20 ms. Le débit étant important, ils servent en général de stockage principal.

Médias optiques

Cela inclut les CD-Rom (en lecture seule), et les CD-R, RW, DVD-R/R+/RAM, disque opto-magnétiques... Ces derniers ne pouvant rivaliser avec les disques durs pour ce qui est du débit et du temps d'accès, ils servent en général à l'archivage.

Médias électroniques

Cela inclut la RAM, très rapide mais volatile, et la mémoire flash, plus lente mais non volatile. Le SSD, un assemblage de mémoires flash, constitue un véritable disque dur. Celui-ci inclue :

  • Un processeur SOC,
  • Une interface de DD standard,
  • De la RAM pour la mémoire cache
  • Des modules de mémoire flash

Il a de nombreux avantages : pas de pièces mobiles, consomme et chauffe peu, est assez fiable et performant, et est un matériel standard. En revanche, il coûte cher !

Bus et Interfaces

Ils servent à assurer la connexion entre la carte mère et le périphérique. Dans la catégorie "Desktop", les moins chers, qui mettent l'intelligence sur le poste et favorisent les connexions internes, on a:

  • IDE, le plus vieux
  • ATA (Parrallèle), ou PATA
  • ATA (Série), ou SATA
    • Moins coûteux, ils montent à 7200 RPM, et en général dans les 2 To. Les vitesses sont de 1.5 (Sata 1), 3 Gbps (Sata 2), et 6 GBps (Sata 3), et ils fonctionnent en half-duplex ! On ne peut en brancher qu'un seul par interface.

Les interfaces serveur sont plus chères, mais elles mettent l'intelligence dans le périphérique, et peuvent proposer des connexions internes ou externes. On utilise en général :

  • Le SCSI (Parrallèle)
  • Le SAS (série), qui se rapporte au SATA
    • On peut en brancher jusqu'à 128 par interface, ils montent à 15000 RPM, et font en général dans les 450 Go. Ils coûtent cher, mais fonctionnent en full-duplex et vont de 3Gbps (SAS) à 6 Gbps (SAS 2.0).
  • Le Fibre Channel en série.

Différence série / parallèle

RTENOTITLERTENOTITLE

La transmission en série (norme RS-232) se fait de façon asynchrone (sans signal d'horloge), le périphérique devant être capable de distinguer les différents cractères de 8 bits (on utilise pour cela des bits start et stop, qui utilisent 20% de la bande passante). La transmission en parallèle consiste à envoyer simultanément des données sur plusieurs canaux. Différents types de ports parallèles permettent différents débits (EPP permet 8 à 16 Mbps, et ECP y ajoute du plug-and-play). Les connecteurs DB25 permettent de connecter un élements extérieur à l'ordinateur en parallèle.

Universal Serial Bus

L'USB (Port Série Universel, qu'on peut aussi appliquer au FireWire) est universel, aussi on peut y brancher n'importe quoi (y compris du stockage). Dans le raccordement, le protocole USB Mass Storage est utilisé. Peut s'appliquer au disques SATA.

Si les disques/clefs USB sont plug and play, ils sont aussi unplug and pray : des données non contrôlées et non sécurisées sont en danger. Il faut mettre en place une politique de stockage pour limiter la prolifération des données !

Politique de stockage

Chaque disque dur est découpé en partitions, chacune de ces partitions utilisant un FS (File Système), soit une façon d'organiser les fichiers sur le disque. Certains sont Multi-système. On compte différents FS :

  • ext4
  • swapFS
  • XFS
  • btrfs
  • NTFS
  • etc...

Une politique de stockage a pour but de ne pas laisser les données éparpillées, mais de les sécuriser (en les mutualisant, et en effectuant des contrôles et des sauvegardes). Le support de cette politique est le réseau de stockage.

Sécuriser

Une baie de stockage est un périphérique intelligent, qui contient un CPU, de la mémoire cache, des contrôleurs... La sécurité se fait de plusieurs façons :

  • En sécurisant l'environnement de la salle machines
  • En ayant des élements redondants et échangeables à chaud, sans perte de données ni arrêts
  • En utilisant le RAID
  • Les accès possibles (généralement indépendants des disques internes utilisés) sont:
    • e-SATA
    • SAS
    • Fibre Channel
    • Ethernet

 

Le RAID

Le RAID (Redundant Array of Independent Disks), permet de dupliquer automatiquement les données sur plusieurs disques, pour que celles-ci restent accessibles en cas de panne d'un disque. Le RAID agit au niveau bloc, et il n'as donc rien à faire du FS en place, à moins de travailler sur du RAID logiciel à l'ancienne.Les recopies de données peuvent être faites de 2 façons :

  • Raid Software : effectué par l'OS ou par un pilote spécifique
  • Raid Hardware : effectué par un contrôleur spécifique.

Il existe plusieurs niveaux de RAID :

Niveau de RAID Description Nombre min. de disques Capacité utile (Nbre de disques) Particularités
0 Striping/Concaténation 2 N Zéro RAID : pas de duplication !
1 Miroir 2 N/2 Chaque donnée est dupliquée sur un autre disque.
1+0 Miroir puis striping 4 N/2  
5 Stripes avec parité distribuée et E/S aléatoires 3 N-1 Chaque disque fait la parité d'un/plusieurs autres : la reconstruction est longue et stressante
6 Stripes avec deux calculs de parité différents distribués
et E/S aléatoires
4 N-2 La double parité rend le processus plus complexe.

 

Augmenter l'espace de stockage

On peut étendre via des JBOD, on a alors pas d'intelligence intégrée. On augmente la capacité de stockage mais pas la puissance de traitement. On peut aussi ajouter des baies, pour augmenter la puissance de traitement; certains constructeurs permettent d'augmentation de la puissance de traitement en ajoutant des contrôleurs. Les fonctions dépendent de l'intelligence de la baie : il faut faire le rapport prix/fonctions.

Partitionnement d'une baie

Sur une baie de 24 To, on peut partitionner comme suit :

  • Un volume utile de 12 TO en RAID6, de 8*2To (prendre en compte les disques de parité !)
  • Un volume de 12To en RAID5, de 7*2 To (toujours avec les disques de parité), en gardant un emplacement "Hot spare".

Performance des baies

Pour choisir le constructeur, le mieux est de tester en conditions réelles. Le choix SAS/SATA peut se faire comme suit :

  • SAS : BDD, E/S aléatoires
  • SATA : Le Reste
  • SAS SSD : Est-ce raisonnable?

Le cache est important : la baie embarque beaucoup de cache, les différences sont lissées mais elles existent. SATA suffit dans beaucoup de cas.

Mise en place d'un serveur de sauvegardes

<pdf>Fichier:Stockagetp1.pdf</pdf>

Le but du TP est, à partir d'une VM sous Debian dotée de trois disques additionnels d'un 1 Go chacun, de mettre en place du RAID1. On utilise pour cela mdadm : il s'agira de faire du RAID logiciel. Mdadm est l'utilitaire standard sous Linux pour gérer ce genre de RAIDs, qui permet non seulement de monter des grappes RAID mais également de les monitorer.

Machine de départ

Je part d'une Debian 9, dotée de 2 Gbo de RAM et de 2 processeurs (on peut certainement être moins généreux, mais j'ai les ressources disponibles alors je préfère gagner un peu de temps les allouant). Elle est contrôlée par SSH.

Installation des outils

Je commence par une installation de sudo et vim (par habitude), avant de mettre à jour les paquets.

su
apt update && apt install sudo vim
visudo #Je rajoute mon utilisateur
exit
sudo apt full-upgrade
sudo apt install mdadm

Mise en place du RAID à proprement parler

Nous avons bel et bien nos trois disques (au total) : un disque système, et trois qui serviront dans le cadre du RAID. On peut les voir ainsi que leur nom à l'aide d'un fdisk -l:

justine@serveurlvmraid:~$ sudo fdisk -l
Disque /dev/sdd : 1 GiB, 1073741824 octets, 2097152 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets

Disque /dev/sdc : 1 GiB, 1073741824 octets, 2097152 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets

Disque /dev/sdb : 1 GiB, 1073741824 octets, 2097152 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets

Disque /dev/sda : 8 GiB, 8589934592 octets, 16777216 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x468ddc7c

Périphérique Amorçage    Début      Fin Secteurs Taille Id Type
/dev/sda1    *            2048 12582911 12580864     6G 83 Linux
/dev/sda2             12584958 16775167  4190210     2G  5 Étendue
/dev/sda5             12584960 16775167  4190208     2G 82 partition d'échange Linux / Solaris

Mon disque système est sda, mes disques additionnels sont sdb, sdc et sdd.

On choisit de faire un RAID 1 (miroir - cf le tableau un peu plus haut):

justine@serveurlvmraid:~$ sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
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
Continue creating array?
Continue creating array? (y/n) y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

Le détail de la commande :

  • --level=1 correspond à du RAID1
  • --raid-devices sert à choisir les disques à mettre en RAID
  • --create /dev/md0 sert à préciser le disque dur virtuel qui sera constitué de nos deux disques.

On vérifie que cela s'est bien passé :

justine@serveurlvmraid:~$ sudo mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Tue Jan  8 22:42:29 2019
     Raid Level : raid1
     Array Size : 1047552 (1023.00 MiB 1072.69 MB)
  Used Dev Size : 1047552 (1023.00 MiB 1072.69 MB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Tue Jan  8 22:42:36 2019
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : serveurlvmraid:0  (local to host serveurlvmraid)
           UUID : a0045f45:6ad1c193:fe374a5b:fb7a654b
         Events : 17

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc

Notre création s'est bien passée, un fdisk -l nous informe même de la création de /dev/md0, reconnu comme étant un disque d'1 Go :

Disque /dev/md0 : 1023 MiB, 1072693248 octets, 2095104 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets

Ajout d'un disque en spare

Notre troisième disque sera ajouté en spare au RAID, c'est-à-dire qu'il servira de disque de remplacement en cas de problème:

justine@serveurlvmraid:~$ sudo mdadm --manage /dev/md0 --add /dev/sdd
mdadm: added /dev/sdd

On peut vérifier comme tout à l'heure:

justine@serveurlvmraid:~$ sudo mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Tue Jan  8 22:42:29 2019
     Raid Level : raid1
     Array Size : 1047552 (1023.00 MiB 1072.69 MB)
  Used Dev Size : 1047552 (1023.00 MiB 1072.69 MB)
   Raid Devices : 2
  Total Devices : 3
    Persistence : Superblock is persistent

    Update Time : Tue Jan  8 22:48:50 2019
          State : clean
 Active Devices : 2
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 1

           Name : serveurlvmraid:0  (local to host serveurlvmraid)
           UUID : a0045f45:6ad1c193:fe374a5b:fb7a654b
         Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc

       2       8       48        -      spare   /dev/sdd

On voit que le disque en spare a été ajouté.

Que faire avec un système qui ne boote plus et deux disques en RAID?

La procédure donnée dans le TP est la suivante :

  • Booter sur un liveCD (genre systemrescuecd)
  • mdadm --examine -scan >> /etc/mdadm/mdadm.conf #Donne entre autre l'UUID du RAID
  • service mdadm-raid restart
  • mount /dev/mdX /mnt/raidX

Remplacement d'un disque dur à chaud

Mise en panne (simulée) d'un disque

Pour tester l'efficacité de notre RAID, on va simuler la panne d'un disque physique, afin de montrer l'utilité du RAID :

justine@serveurlvmraid:~$ sudo mdadm --fail /dev/md0 /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md0

On suit ensuite les différentes étapes de reconstruction :

watch -n 1 'cat /proc/mdstat'
#Ou, plus clair :
watch -n 1 'sudo mdadm --detail /dev/md0'

Sur nos disques vides, c'est très rapide, mais on voit bien que sdd a pris le relais :

Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       2       8       48        1      active sync   /dev/sdd

       1       8       32        -      faulty   /dev/sdc

Remplacement (simulé) d'un disque

Il suffit d'enlever le disque et de le remettre, comme on le ferait dans une baie :

justine@serveurlvmraid:~$ sudo mdadm --manage --remove /dev/md0 /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md0
justine@serveurlvmraid:~$ sudo mdadm --manage --add /dev/md0 /dev/sdc
mdadm: added /dev/sdc

Une dernière vérification avec mdadm -D /dev/md0 nous donne :

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       2       8       48        1      active sync   /dev/sdd

       3       8       32        -      spare   /dev/sdc

sdc est bel et bien de retour, cette fois-ci en tant que spare.

Rendre la config définitive

C'est simple :

root@serveurlvmraid:/etc/mdadm# mdadm --detail -scan >> /etc/mdadm/mdadm.conf

(Pour une raison étrange, cela ne fonctionne pas avec sudo, il faut se logger en tant que root). 

LVM

NB : Des notes plus anciennes concernant LVM (un peu plus "noob-friendly") sont disponibles là : Filesystems

<pdf>Fichier:02-lvm.pdf</pdf>

LVM signifie "Logical Volume Manager". Il permet différents type d'opérations:

  • Ajout et retrait d'unités de disques : cela permet de la maintenance et l'utilisation temporaire de disques
  • Augmentation / diminution de la capacité de stockage, avec des transferts entre volumes logiques sur un même système
  • Redimensionnement dynamique : Permet l'extension d'un système de fichiers en ligne
  • Déplacement des données entre les unités de disques, avec une préparation à l'extraction d'unités de disques
  • Des snapshots des volumes logiques
  • De la réplication, via des copies entre les volumes logiques.

On a trois solutions pour faire du RAID :

  • Du LVM, sur lequel viennent se greffer dmsetup / mdadm pour le RAID et ext4
  • ZFS
  • btrfs

LVM est un gestionnaire de périphérique en mode bloc, qui fonctionne au niveau système : il prend en charge des partitions ou n'importe quel autre périphérique de stockage. La vue système est homogène, les périphériques étant vus comme un seul périphérique logique par le système. On peut donc faire l'analogie entre volume et partition, puisqu'on peut tous les deux les formater, mais ils sont bel et bien DIFFÉRENTS ! La configuration peut changer de façon dynamique, avec des snapshots, du redimensionnement, extensions, déplacements... Pour reprendre le schéma de mes précédentes notes, qui met en valeur Volume Physique, Groupe de Volumes et Volume Logique :

LVM1.png

LVM2 sur Linux

LVM2 sur Linux est pris en charge au niveau Kernel par Device mapper module et au niveau utilisateur par le paquet lvm2, avec le striping en option.

À chacune de nos unités semble correspondre une commande:

  • pvcreate pour Physical Volume
  • vgcreate pour Volume Group
  • lvcreate pour Logical Volume

LVM : mise en place

<pdf>Fichier:tp2lvm.pdf</pdf>

Pour ce TP, je repars de la machine précédente, telle que je l'avais laissée.

Je commence par installer le paquet lvm2:

sudo apt install lvm2

Création des volumes

Nous avons notre RAID, qui travaille au niveau bloc. LVM travaille lui au niveau "gestionnaire de périphérique". On aura donc trois couches successives (en quelque sorte) sur nos disques:

  • mdadm qui gère le RAID au niveau bloc
  • LVM qui gère le disque virtuel du RAID (md0) en tant que périphérique
  • ext4 qui sera le FS utilisé par le système.

On va devoir créer nos trois "unités" LVM.

Création du volume physique

justine@serveurlvmraid:/etc/mdadm$ sudo pvcreate /dev/md0
  Physical volume "/dev/md0" successfully created.

Création du groupe de volumes

justine@serveurlvmraid:/etc/mdadm$ sudo vgcreate groupevol /dev/md0
  Volume group "groupevol" successfully created

Notre groupe de volumes est créé, il porte le nom "groupevol".

Création de deux volumes logiques

On va créer deux volumes logiques (qui fonctionneront donc un peu comme disques traditionnels directement formatés en ext4) de 256 Mo chacun, vol1 et vol2, à partir de notre groupe groupevol.

justine@serveurlvmraid:~$ sudo lvcreate -n vol1 -L 256M groupevol
  Logical volume "vol1" created.
justine@serveurlvmraid:~$ sudo lvcreate -n vol2 -L 256M groupevol
  Logical volume "vol2" created.

Ils sont mêmes visibles dans fdisk !

Disque /dev/mapper/groupevol-vol1 : 256 MiB, 268435456 octets, 524288 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets

Disque /dev/mapper/groupevol-vol2 : 256 MiB, 268435456 octets, 524288 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
justine@serveurlvmraid:~$

Formatage et montage des volumes

Il faut désormais les formater en ext4, ici avec mkfs:

justine@serveurlvmraid:~$ sudo mkfs -t ext4 /dev/groupevol/vol1
mke2fs 1.43.4 (31-Jan-2017)
En train de créer un système de fichiers avec 262144 1k blocs et 65536 i-noeuds.
UUID de système de fichiers=0497b299-d302-4bfa-b2a9-d0fad5c96e0f
Superblocs de secours stockés sur les blocs :
    8193, 24577, 40961, 57345, 73729, 204801, 221185

Allocation des tables de groupe : complété                        
Écriture des tables d'i-noeuds : complété                        
Création du journal (8192 blocs) : complété
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété

justine@serveurlvmraid:~$ sudo mkfs -t ext4 /dev/groupevol/vol2
mke2fs 1.43.4 (31-Jan-2017)
En train de créer un système de fichiers avec 262144 1k blocs et 65536 i-noeuds.
UUID de système de fichiers=d3663a80-cb8b-42a9-be70-f4b271486735
Superblocs de secours stockés sur les blocs :
    8193, 24577, 40961, 57345, 73729, 204801, 221185

Allocation des tables de groupe : complété                        
Écriture des tables d'i-noeuds : complété                        
Création du journal (8192 blocs) : complété
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété

Enfin, on a plus qu'à les monter pour les utiliser (il faut d'abord créer les dossiers qui serviront de point de montage):

justine@serveurlvmraid:~$ sudo mkdir /mnt/lv1 /mnt/lv2
justine@serveurlvmraid:~$ sudo mount /dev/groupevol/vol1 /mnt/lv1
justine@serveurlvmraid:~$ sudo mount /dev/groupevol/vol2 /mnt/lv2

Si à ce stade, mount renvoie une erreur du type "le disque est en lecture seule", il faut vérifier qu'ils ont bien été formatés.

Agrandissement à chaud des volumes logiques

On va ici vouloir agrandir à chaud le système de fichiers vol2 à 512 Mo : c'est possible.

Agrandissement du volume logique

On commence bien sûr par agrandir notre volume logique.

justine@serveurlvmraid:~$ sudo lvresize -L 512M /dev/groupevol/vol2
  Size of logical volume groupevol/vol2 changed from 256,00 MiB (64 extents) to 512,00 MiB (128 extents).
  Logical volume groupevol/vol2 successfully resized.

Agrandissement du système de fichiers

On agrandit le FS afin que les 512 Mo soient utilisables.

justine@serveurlvmraid:~$ sudo resize2fs -p /dev/groupevol/vol2 512M
resize2fs 1.43.4 (31-Jan-2017)
Le système de fichiers de /dev/groupevol/vol2 est monté sur /mnt/lv2 ; le changement de taille doit être effectué en ligne
old_desc_blocks = 2, new_desc_blocks = 4
Le système de fichiers sur /dev/groupevol/vol2 a maintenant une taille de 524288 blocs (1k).

Vérifications

La commande df -h nous montre bel et bien nos deux volumes logiques, parfaitement utilisables :

/dev/mapper/groupevol-vol1   240M    2,1M  222M   1% /mnt/lv1
/dev/mapper/groupevol-vol2   488M    2,3M  459M   1% /mnt/lv2

On constate au passage que les métadonnées prennent une certaine place.