Gestion des disques avancée : LVM et RAID Soft

Posted by

1 LVM2 : Le gestionnaire de volumes logiques

1.1 Introduction à LVM :

1.1.1 Pourquoi aurais-je besoin de LVM ?

LVM est un mécanisme permettant de gérer l’allocation de l’espace disque aux applications et au utilisateurs à un niveau d’abstraction plus élevé que la conception habituelle des disques et partitions. Cette abstraction permet ainsi de s’affranchir des limitations de la gestion du stockage par partitions.

Les volumes logiques peuvent êtres redimensionnés, étendus sur un autre disques ou déplacés sur le système de stockage sous jacent sans les risques du redimmensionnement des partitions. Ils sont également nommés par des labels définis par l’utilisateurs sans recourir à la notation habituelle des disques (sda, sdb etc…).

Si à l’installation les tailles de partition de données ont été mal calculées causant des tailles de partition systèmes ou de données étriquées, avec LVM il n’est plus nécessaire de détruire ces partitions (et de réinstaller s’il s’agit d’une partition système), il suffit de redimensionner la partition.

1.1.2 Terminologie de LVM :

Volume Physique (PV ou Physical Volume) : Il s’agit d’un élément de stockage physique de l’ordinateur, comprendre un disque dur, une partition de disque, un disque en RAID logiciel etc… qui est attribué à LVM.

Groupe de Volume (VG ou Volume Group) : C’est un pool de volumes physiques dont la gestion est assurée par LVM.

Volume Logique (LV ou Logical Volume) : C’est un espace de stockage alloué sur un Groupe de Volume. Au final c’est ce qui est utilisé par le système en remplacement des partitions.

Physical Extent / Logical Extent : Les volumes logiques et physiques sont divisés en blocs de données. Ces blocs sont nommés ainsi et ont tous les même taille sur un même volume.

1.1.3 Installation :

LVM2 est désormais disponible en standard dans la plupart des distributions Linux. Si vous utilisez le noyau standard de votre distribution, les modules nécessaires seront déja compilés pour vous. Si vous utilisez un noyau personnalisé, je suis certain que vous saurez trouver vous même les options à sélectionner 😉
Il restera juste les outils en ligne de commande à installer :

# apt-get install lvm2

En effet, LVM ne s’administre qu’en ligne de commande. Néanmoins celles-ci sont simples, leur nom est suffisament explicite et il commence systématiquement par :

  • pv lorsqu’elles portent sur les volumes physiques
  • vg pour les commandes pour manipuler un groupe de volume
  • lv lorsqu’il s’agit d’administrer les volumes logiques

Ces commandes sont également présentes dans le « shell » lvm.

1.2 Administration de LVM2 :

1.2.1 Création d’un volume logique :

On commence par créer un périphérique physique LVM :

debian:~# pvcreate /dev/hdb1 VG1
  Physical volume "/dev/hdb1" successfully created
  Device VG1 not found (or ignored by filtering).
debian:~# pvdisplay /dev/hdb1
  --- NEW Physical volume ---
  PV Name               /dev/hdb1
  VG Name
  PV Size               4,09 GB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               c2XjmK-HWad-xms2-2NXb-UsMn-ETfy-eXEyJF

Ensuite on créé un Volume Physique utilisant ce disque physique :

debian:~# vgcreate MyVG /dev/hdb1
  Volume group "MyVG" successfully created
debian:~# vgdisplay MyVG
  --- Volume group ---
  VG Name               MyVG
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               4,09 GB
  PE Size               4,00 MB
  Total PE              1046
  Alloc PE / Size       0 / 0
  Free  PE / Size       1046 / 4,09 GB
  VG UUID               1tjZ0L-JHPS-43tc-jFD8-22Jh-QuQf-KLy5Pd

Il ne reste plusqu’à créer un ou plusieurs volumes logiques. Dans notre cas, nous allons créer deux volumes logiques. L’un nommé Softs et l’autre Data :

debian:~# lvcreate -L 1g -n Softs MyVG
  Logical volume "Softs" created

debian:~# lvcreate -L 2g -n Data MyVG
  Logical volume "Data" created

debian:~# lvdisplay -a
  --- Logical volume ---
  LV Name                /dev/MyVG/Softs
  VG Name                MyVG
  LV UUID                z4MFxB-8tvO-v5g3-zkyD-3lOD-AhST-hZqDRT
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                1,00 GB
  Current LE             256
  Segments               1
  Allocation             inherit
  Read ahead sectors     0
  Block device           254:0

  --- Logical volume ---
  LV Name                /dev/MyVG/Data
  VG Name                MyVG
  LV UUID                Dj1iVU-wSCa-DLgT-hzlQ-ielB-bArY-EKkfPQ
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                2,00 GB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     0
  Block device           254:1

On peut maintenant créer un système de fichier et monter ces volumes logiques dans l’arbrorescence. Par commodité il sera plus simple d’indiquer les lignes adéquates dans le fichier /etc/fstab.

debian:~# mkdir /mnt/Data
debian:~# mkfs.ext3 /dev/MyVG/Softs
debian:~# mkfs.ext3 /dev/MyVG/Data
debian:~# mount /dev/MyVG/Data /mnt/Data
debian:~# mount /dev/MyVG/Softs /usr/local

1.2.2 Redimensionnement d’un volume logique :

Il est important ici de voir que modifier la taille du volume logique ne revient à modifier que la taille de la « boite ». Il est indispensable de propager les modifications de la taille du système de fichier et cela doit être fait dans un ordre précis.

1.2.2.1 Agrandissement :

L’opération consiste à démonter le volume, le vérifier, augmenter la taille du volume logique et enfin augmenter la taille du système de fichiers.

debian:~# umount /mnt/Data/
debian:~# fsck /dev/MyVG/Data
fsck 1.40-WIP (14-Nov-2006)
e2fsck 1.40-WIP (14-Nov-2006)
/dev/MyVG/Data: clean, 11/262144 files, 25406/524288 blocks
debian:~# lvresize -L 3G /dev/MyVG/Data
  Extending logical volume Data to 3,00 GB
  Logical volume Data successfully resized
debian:~# fsck -f /dev/MyVG/Data
fsck 1.40-WIP (14-Nov-2006)
e2fsck 1.40-WIP (14-Nov-2006)
Passe 1 : vérification des i-noeuds, des blocs et des tailles
Passe 2 : vérification de la structure des répertoires
Passe 3 : vérification de la connectivité des répertoires
Passe 4 : vérification des compteurs de référence
Passe 5 : vérification de l'information du sommaire de groupe
/dev/MyVG/Data: 11/262144 files (9.1% non-contiguous), 25406/524288 blocks
debian:~# resize2fs /dev/MyVG/Data
resize2fs 1.40-WIP (14-Nov-2006)
Resizing the filesystem on /dev/MyVG/Data to 786432 (4k) blocks.
Le système de fichiers /dev/MyVG/Data a maintenant une taille de 786432 blocs.
debian:~# mount /dev/MyVG/Data /mnt/Data/
1.2.2.2 Rétrécissement :

L’opération consiste à démonter le volume, le vérifier, réduire la taille du système de fichier et enfin réduire la taille du volume logique.

debian:~# umount /mnt/Data/
debian:~# fsck -f /dev/MyVG/Data
fsck 1.40-WIP (14-Nov-2006)
e2fsck 1.40-WIP (14-Nov-2006)
Passe 1 : vérification des i-noeuds, des blocs et des tailles
Passe 2 : vérification de la structure des répertoires
Passe 3 : vérification de la connectivité des répertoires
Passe 4 : vérification des compteurs de référence
Passe 5 : vérification de l'information du sommaire de groupe
/dev/MyVG/Data: 11/393216 files (9.1% non-contiguous), 29518/786432 blocks
debian:~# resize2fs /dev/MyVG/Data 2G
resize2fs 1.40-WIP (14-Nov-2006)
Resizing the filesystem on /dev/MyVG/Data to 524288 (4k) blocks.
Le système de fichiers /dev/MyVG/Data a maintenant une taille de 524288 blocs.
debian:~# lvresize -L 2G /dev/MyVG/Data
  WARNING: Reducing active logical volume to 2,00 GB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce Data? [y/n]: y
  Reducing logical volume Data to 2,00 GB
  Logical volume Data successfully resized
debian:~# mount /dev/MyVG/Data /mnt/Data/
debian:~# fd -h /mnt/Data/
debian:~# df -h /mnt/Data/
Sys. de fich.         Tail. Occ. Disp. %Occ. Monté sur
/dev/mapper/MyVG-Data
                      2,0G   68M  1,9G   4% /mnt/Data

1.2.3 Les snaphots :

Les snapshots constituent l’une des fonctionnalités clé de LVM2. Un snapshot est un cliché du volume à un instant t, ce qui est très pratique pour toutes les opérations qui nécessitent que les données ne soient pas modifiées comme les sauvegardes. De plus, depuis LVM2, les snapshots sont en lecture/écriture. Ce qui signifie qu’il est possible de faire un snapshot du système. De remonter le snapshot des partitions systèmes en lecture/écriture pour par exemple installer un logiciel sensible. Si le résultat n’a pas été problant, que les système est endommagé ou autre, il suffit de démonter ce snapshot, de remonter le volume logique puis de supprimer le snapshot et le tour est joué!

1.2.4.1 Création d’un snapshot :

Commençons par créer un snapshot du volume logique Softs :

debian:~# lvcreate -L512M -s -n SnapSofts /dev/MyVG/Softs
  Logical volume "SnapSofts" created
1.2.4.2 Montage d’un snapshot :

Un snapshot de monte comme n’importe quel volume logique :

debian:~# mkdir /mnt/snapsofts
debian:~# mount /dev/MyVG/SnapSofts /mnt/snapsofts/
1.2.4.3 Suppression d’un snapshot :
debian:~# umount  /mnt/snapsofts/
debian:~# lvremove /dev/MyVG/SnapSofts
Do you really want to remove active logical volume "SnapSofts"? [y/n]: y
  Logical volume "SnapSofts" successfully removed

1.2.4 Redimensionnement d’un Groupe de Volume :

Grâce à LVM, il est possible à tout moment d’ajouter ou de retirer des disques dans un groupe de volume pour ajuster l’espace disque nécessaire.

1.2.4.1 Agrandissement :

Ajoutons tout le disque /dev/hdd à notre groupe de volume MyVG. Pour cela il est obligatoire d’initialiser le disque via la commande pvcreate. C’est seulement après qu’il est possible d’étendre le volume de groupe pour qu’il utilise ce disque

debian:~# pvcreate /dev/hdd
  Physical volume "/dev/hdd" successfully created
debian:~# vgextend MyVG /dev/hdd
  Volume group "MyVG" successfully extended
debian:~# vgdisplay MyVG
  --- Volume group ---
  VG Name               MyVG
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  9
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               12,07 GB
  PE Size               4,00 MB
  Total PE              3089
  Alloc PE / Size       768 / 3,00 GB
  Free  PE / Size       2321 / 9,07 GB
  VG UUID               1tjZ0L-JHPS-43tc-jFD8-22Jh-QuQf-KLy5Pd

On constate que désormais notre volume de groupe fait désormais 12Go. Cet espace est désormais accessible pour les volumes logiques créés (lvresize) ou à créer dans cet espace (lvcreate).

1.2.4.2 Retrait d’un disque :

Les opérations de retrait d’un disque peuvent être souhaitées lorsque l’un des disques est de capacité trop faible ou pire, lorsque celui-ci présente des signes de faiblesses. Avant de procéder à une telle opération, il est important de sauvegarder les données, ainsi que de s’assurer qu’au final la capacité du VG sera au moins équivalente à ce qu’elle était avant le retrait du disque.
Pour réduire un volume de groupe, il est nécessaire de déplacer tous les Physical Extent du premier disque vers le second.

debian:~# pvmove /dev/hdb1
  /dev/hdb1: Moved: 27,1%
  /dev/hdb1: Moved: 33,3%
  /dev/hdb1: Moved: 62,5%
  /dev/hdb1: Moved: 91,9%
  /dev/hdb1: Moved: 100,0%
debian:~# vgreduce MyVG /dev/hdb1
  Removed "/dev/hdb1" from volume group "MyVG"

Le disque /dev/hdb1 peut désormais être retiré sans perte de données car il était entièrement dédié à notre groupe de volume (une seule partition sur tout le disque).

2 Le RAID Logiciel :

2.1 Introduction :

Linux supporte depuis maintenant assez longtemps le RAID au niveau du noyau. Cela permet d’utiliser des disques en RAID sans pour autant nécessiter de contrôleur RAID. Le noyau supporte actuellement le RAID 0 (stripping), 1 (mirroring), 0+1 (stripping en mirroir), 4, 5 et 6 (parité).

2.2 Avantages et inconvénients du RAID logiciel :

Avantages :

  • Faible coût
  • Ne nécessite pas de contrôleur RAID
  • Pas de risque de corruption de données à cause d’un bug ou d’une mise à jour du firmware
  • Le format de données du RAID est ouvert
  • Le format du RAID est neutre du point de vue du contrôleur. Le RAID soft ne connait pas les problèmes de compatibilité entre les différents fabricants de carte
  • Les performances du RAID peuvent être augmentées par l’upgrade du CPU
  • Un niveau d’abstraction plus élevé permettant un éventail de matériel supporté plus étendu
  • Le noyau de Linux a une durée de support plus étendue que la plupart de celle fournie par les fabricants de cartes RAID
  • Il est plus rapide et facile de corriger un problème au niveau du noyau qu’au niveau matériel
  • Alors que les fonctionnalités d’une carte RAID sont fixées à l’achat pour un model donné, celles du noyau peuvent évoluer avec le temps
  • Certaines cartes RAID ATA et SATA ont tendance à masquer certaines fonctionnalités comme les alertes SMART

Inconvénients :

  • Le cache des cartes RAID améliore significativement les performances
  • Le calcul de parité est généralement plus rapide lorsqu’il est effectué par la carte que par le CPU
  • Les batteries des cartes RAID permettent de correctement flusher les données sur les disques
  • Le bus PCI sera saturé bien avant qu’une carte RAID ne le soit.

3.3 Création d’un RAID 1 (mirror) pas à pas :

Nous allons voir la création d’un RAID 1 avec les partitions /dev/hdb1 et /dev/hdd1 sans gestion des disques spare qui est pourtant une fonctionnalité extraordinaire. Ces partitions sont de capacité identique (6Go) et leur type est 0xFD (Linux RAID Autodetect). Notez qu’il est tout à fait possible de faire du RAID directement avec des disques comme support physique.
La gestion du RAID se fera via la commande mdadm qui devra être installée auparavent sur le système.

On commence par créer une partition RAID à partir de ces partitions :

debian:~# mdadm --create /dev/md0 --level=raid1 --raid-devices=2 /dev/hdb1 /dev/hdd1
mdadm: array /dev/md0 started.

Le détail de ce RAID peut être obtenu via cette commande :

debian:~# mdadm --detail /dev/md0
/dev/md0:
        Version : 00.90.03
  Creation Time : Tue Sep 25 01:03:34 2007
     Raid Level : raid1
     Array Size : 6291328 (6.00 GiB 6.44 GB)
    Device Size : 6291328 (6.00 GiB 6.44 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Tue Sep 25 01:03:34 2007
          State : clean, resyncing
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

 Rebuild Status : 86% complete

           UUID : 20ba3ba8:41d75456:9d4deba6:47ca997f (local to host debian)
         Events : 0.1

    Number   Major   Minor   RaidDevice State
       0       3       65        0      active sync   /dev/hdb1
       1      22       65        1      active sync   /dev/hdd1

Ensuite il faut figer la configuration du RAID dans le fichier /etc/mdadm/mdadm.conf :

DEVICE partitions
CREATE owner=root group=disk mode=0660 auto=yes
HOMEHOST 
MAILADDR root
ARRAY /dev/md0 devices=/dev/hdb1,/dev/hdd1

A noter qu’il est possible d’obtenir le même résultat grâce à la commande mdadm –detail –scan >> /etc/mdadm/mdadm.conf

Et on peut s’assurer que le RAID est ok grâce à cette commande :

debian:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 hdb1[0] hdd1[1]
      6291328 blocks [2/2] [UU]

unused devices: 

La partition RAID peut ainsi être formatée et montée comme n’importe quelle partiton :

debian:~# mkfs.ext3 /dev/md0
debian:~# mount /dev/md0 /usr/local/

3.4 Réparation d’un RAID soft :

Le RAID permet de se protéger d’une panne disque, il est néanmoins important de savoir comment récupérer un système sain lorsqu’il passe en mode dégradé. Sur ce RAID le second disque /dev/hdd a rendu l’âme et il n’est même plus détecté. Comme on peut le constater, il est absent du RAID.

debian:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 hdb1[0]
      6291328 blocks [2/1] [U_]

unused devices: 

Une fois ce disque remplacé et repartitionné comme il faut, il s’agit juste de l’ajouter à la grappe et de vérifier que le RAID se reconstruit :

debian:~# mdadm -a /dev/md0 /dev/hdd1
mdadm: added /dev/hdd1
debian:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 hdd1[2] hdb1[0]
      6291328 blocks [2/1] [U_]
      [===================>.]  recovery = 99.9% (6291264/6291328) finish=0.0min speed=202944K/sec

Dans certaint cas, le retrait d’un disque défaillant peut nécessiter au préalable que ce disque soit marqué comme défaillant pour être retiré du RAID. Cela se fait comme suit :

debian:~# mdadm -f /dev/hdd1
debian:~# mdadm -r /dev/hdd1

3.4 Le boot avec grub en RAID soft :

L’installation de la plupart des distribution moderne en RAID soft ne posent pas de problème en général avec la partition /boot. Néanmoins il est important de s’assurer que le bootloader n’a pas été installé uniquement sur le MBD (Master Boot Record) du premier disque. En RAID 1 cela se fait simplement en bootant la machine avec successivement un disque de débranché. Si le PC ne boot pas sur le second disque, il suffit de réinstaller grub sur les 2 MBR de cette façon (en considérant que vos disques sont /dev/hda et /dev/hdb) :

debian:~#  grub
grub>device (hd0) /dev/hda
grub>root (hd0,0)
grub>setup (hd0)
grub>device (hd0) /dev/hdb
grub>root (hd0,0)
grub>setup (hd0)

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.