Aller au contenu

Linux Attitude

Le libre est un état d'esprit

Archive

Tag : Disque

Niveau :      
Résumé : dmsetup

Maintenant que vous savez tout sur lvm, regardons sous le capot, pour voir comment ça tourne.

lvm

Lvm n'est en réalité qu'une surcouche à un système bien intégré dans linux et qui se nomme device-mapper ou dm en abrégé. Dm ne fait qu'une chose et il le fait bien : mapper (cartographier) un ou plusieurs périphériques de bloc sur un autre périphérique. Donc ce que fait lvm quand vous déclarez un nouveau lv, c'est uniquement déclarer à device mapper qu'un nouveau périphérique de bloc (le lv) correspond à telle et telle portion d'un périphérique physique (les pv).

Bon lvm fait un peu plus que ça puisqu'il sait faire tout ça tout seul au démarrage sans rien vous demander, il stocke ses informations au bon endroit sur les disques et tout marche de façon transparente. Mais supposons que nous voulions le faire nous-même à la main. C'est parfaitement possible avec la commande dmsetup :

# on crée un device nommé monlv, qui fait 10000 blocs et qui est mappé sur /dev/hda à partir du 1234e bloc
$ echo 0 10000 linear /dev/hda 1234 | dmsetup create monlv

Si vous voulez savoir comment sont fait vos lv, il suffit simplement de le demander à dmsetup :

$ dmsetup table /dev/mapper/vg0-lv0
>0 1028160 linear /dev/hda 0
>1028160 3903762 linear /dev/hdb 0

continuer la lecture...

Niveau :      
Résumé : lvm raid

Aujourd'hui la suite tant attendue d'une série sur lvm.

Figurez-vous qu'il est possible de faire du raid avec LVM. Hé oui, vous avez déjà remarqué que vous pouviez mettre plusieurs disque dans un vg. Pour l'instant lvm se contente de les mettre bout à bout, comme le ferait un raid de type linear.

Striping

Le raid0 aussi appelé striping découpe un disque en petits morceaux et les alterne pour en faire un disque plus gros. Le but est d'avoir un disque plus gros, mais aussi d'augmenter les performances. En effet, dès qu'on va lire ou écrire un fichier un peu plus gros que ces morceaux, on va le faire sur 2 disques simultanément et donc augmenter la bande passante.

Lorsqu'on répartit les données linéairement sur le disque on ne gagne pas en performances, par contre en cas de crash d'un des deux disques, il y a moyen de récupérer presque la moitié des données, alors que dans le cas du striping, vous êtes sur de ne rien pouvoir récupérer.

Pour faire du striping avec lvm, rien de plus simple. Lors de la création de votre LV, il suffit de préciser le nombre de "stripes" qu'on désire :

# 2 etant le nombre de partition sur lesquels découper le volume
$ lvcreate -L 1G -i 2 lv0 vg0

Notez que si vous voulez forcer le striping sur certaines partitions, il est possible de donner en paramètre à lvcreate la liste des pv sur lesquels vous voulez qu'il soit.

Et pour vérifier que c'est bien ce que vous vouliez :

$ lvdisplay -m /dev/vg0/lv0

continuer la lecture...

Niveau :      
Résumé : lvcreate -s

Avançons encore un peu dans notre exploration de lvm. LVM permet beaucoup de choses, et entre autre la création de snapshots. Un snapshot c'est une prise de vue instantanée, qui dans le cas de lvm se fait au niveau du disque. Ce qui veut dire que le contenu du snapshot peut ne pas être cohérent, par exemple si le système est en train d'écrire sur le disque en plein milieu du snapshot.

On peut utiliser les snapshot pour beaucoup de choses, par exemple, Apple l'utilise pour faire sa machine à remonter dans le temps, on peut l'utiliser pour faire des backup cohérents mais aussi pour faire des expérimentations avec des retours arrière rapide.

Un snapshot

Partons d'un lv existant avec un vg sur lequel il reste de la place (hé oui, il faudra bien stocker nos snapshots. Faisons un snapshot de notre lv :

$ lvcreate -L 50M -s -n snap /dev/vg0/original

Et voila, c'est tout, fin de l'article !

Bon, pas encore. Déjà, pourquoi donner une taille au snapshot ? Tout simplement parce que celui-ci est intelligent, donc il ne va pas copier l'intégralité du lv original. Au contraire, il ne va stocker que les différences. C'est pourquoi il est instantané et commence avec une occupation taille nulle. Par contre, il faut lui allouer une taille dans le vg, donc 50Mo sera la quantité maximum de différence qu'il pourra stocker. Au delà de cette taille, le snapshot sera cassé et il ne pourra plus fonctionner correctement (les données ne sont plus valides, laissez tomber).

lvm_snapshot.png


continuer la lecture...

Niveau :      
Résumé : lvreduce ; vgreduce ; lvextend ; vgextend

Après l'immense succès du premier article, voici sous vos applaudissements le deuxième article.

Ajout d'un nouveau disque

Maintenant que vous savez utiliser LVM vous voudriez aller un peu plus loin. Mise en situation : vous avez un disque de 50To, un vg déjà en place et sur sur ce VG un LV de 30To dédié à votre médiathèque. Or vous venez de découvrir (et donc d'acheter) un nouveau disque de 1Po (Péta Octet pour ceux qui ne suivent pas, hé oui, c'est fou comme ça avance vite la technologie).

$ lvdisplay /dev/vg0/mediatheque
  --- Logical volume ---
  LV Name                /dev/vg0/mediatheque
  VG Name                vg0
  LV UUID                AN0y7h-1cIF-cPmC-vE9E-JnKG-worn-dWeQ8D
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                31,82 TB
  Current LE             81459200
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

Commençons donc par ajouter notre nouveau disque au vg :

# partitionnement
$ cfdisk /dev/sdc
# formatage
$ pvcreate /dev/sdc1
# ajout au vg
$ vgextend vg0 /dev/sdc1

Et voila nous avons de la place disponible. Maintenant agrandissons notre LV. Remarquez qu'il faut le faire avant d'agrandir le système de fichier puisqu'il se trouve au dessous. Au contraire en cas de réduction, il faut commencer par le système de fichier qui se trouve au dessus.


continuer la lecture...

Niveau :      
Résumé : pv ; vg ; lv

LVM : Logical Volume Management. C'est un système qui permet de mixer une ou plusieurs partitions pour en faire un ou plusieurs périphériques de blocs. À quoi cela peut-il bien servir ? C'est tout d'abord une question de flexibilité. Imaginez pouvoir agrandir ou réduire une partition facilement, parfois même sans démonter le système de fichier. Imaginez pouvoir agrandir une partition de façon à ce qu'elle tienne sur 2 disques. LVM apporte aussi d'autres fonctionnalités que nous verrons un peu plus tard.

Un dessin valant mieux qu'un long article, voici le principe de fonctionnement de LVM :

Fonctionnement de LVM

Donc à la première ligne vous prenez des partitions que vous transformez en pv (physical volume) :

$ pvcreate /dev/sda2
$ pvcreate /dev/sda4
$ pvcreate /dev/sdb1
# on verifie qu'ils sont reconnus
$ pvdisplay

Ensuite vous les regroupez dans un vg (volume group) :

# note : permettez-vous de choisir un nom plus explicite que vg0
$ vgcreate vg0 /dev/sda2 /dev/sda4 /dev/sdb1
# on vérifie qu'il est reconnu
$ vgdisplay

Et enfin vous redécoupez celui-ci en différents lv (logical volume) :

# note : permettez-vous de choisir un nom plus explicite que lv0
$ lvcreate -L 10G -n lv0 vg0
$ lvcreate -l 100%FREE -n lv1 vg0
# on vérifie qu'ils sont reconnus
$ lvdisplay

Notez au passage qu'il y a de nombreux moyens de spécifier la taille du volume (en taille absolue ou en pourcentage du total ou de l'espace libre).

Voila, on peut maintenant utiliser nos lv comme des partitions normales :

$ mke2fs -j /dev/vg0/lv0
$ mount /dev/vg0/lv0 /mnt

Enfin, il faut tout de même faire attention si on veut l'utiliser pour la partition /. En effet, le noyau ne scanne pas de lui-même les partitions lvm, ce sont les utilitaires pvscan, vgscan et vgchange qui doivent être appelés pour les activer. Ils le sont automatiquement par votre distribution, mais il faut disposer d'un / pour les avoir. Donc si vous voulez une racine en lvm, il vous faudra nécessairement un initrd (c'est le cas par défaut pour la plupart des distributions).

D'autre part pour une bonne détection au démarrage, fixez le type de vos partitions à "Linux LVM", (0x8E). Par exemple avec cfdisk.

$ cfdisk /dev/sda

Dans un prochain article nous verrons les fonctionnalités excitantes : redimensionement , snapshot, raid 0, raid 1 ...

En attendant, la référence se trouve sur le LVM howto