VxVM : modification du layout d'un volume logique

Veritas volume manager est un excellent LVM (qui a dit le meilleur ? ;-) Un des points que je préfère est la possibilité de changer la structure d'un volume logique de manière dynamique. Par exemple, migrer un volume logique concaténé en volume logique strippé. En plus, il permet de réaliser ces opérations de plusieurs manières différentes.

utilisation du mirroring

La solution la plus simple, si l'on dispose de l'espace disque suffisant, est de créer un miroir du volume logique existant en spécifiant le layout que l'on veut appliquer sur le miroir.
La commande d'administration utilisé est vxassist
Si on part du principe que l'on veut transformer un volume logique concaténé vers un volume strippé, on a besoin de connaître trois informations :

  • Le nombre de disque sur lesquels on veut que le stripping soit déployer. En terminologie Veritas, Il s'agit du nombres de colonnes sur lequel le stripe va s'étendre. Le terme le plus courant est stripe width.

  • Le pas de stripe à appliquer. Il s'agit de la taille du bloc écrit sur chaque disque avant de passer au suivant. Le terme le plus courant est stripe size.

  • La liste des disques veritas sur lesquels on veut déployer le miroir. Ce point n'est pas obligatoire mais en général si l'on commence ce genre d'opérations c'est que l'on a une idée bien précise de la configuration que l'on veut obtenir.
Voici la syntaxe type à suivre pour effectuer ce genre d'opération :
vxassist -b -g [DISK GROUP] -t [nom de la tache] \
mirror [nom du volume logique] layout=stripe \
ncol=[nombre de colonnes] stripewidth=[pas de stripe] \
[disque1 disque2 ...]
Une petite description des paramètres s'impose je pense :
  • -b : cela précise que l'on veut que la commande s'exécute en background
  • -t [nom de la tache] : il s’agit d’un nom donné à l’action pour pouvoir contrôler l'exécution du job avec vxtask
  • mirror : il s’agit de l'action a effectuer
  • layout=stripe : le layout que l'on veut appliquer au miroir. Ici on veut un stripping.
  • ncol : le nombre de colonne du stripe.
  • stripewidth : le pas de stripe à appliquer.

Le mieux serait de faire un exemple.

On commence par créer un volume logique concaténé d'une taille de 1 Go sans paramètre spécifique.

# vxassist -g MONDG make lv_concat 1G
On peut visualiser sa configuration avec vxprint
# vxprint -htg MONDG -v lv_concat
v lv_concat - ENABLED ACTIVE 2097152 SELECT - fsgen
pl lv_concat-01 lv_concat ENABLED ACTIVE 2097152 CONCAT - RW
sd 146G1-01 lv_concat-01 146G1 0 2097152 0 emcpower54 ENA
La ligne importante est la ligne commençant par pl qui décrit le plex utilisé par veritas et sa structure. Ici on voit CONCAT qui correspond à concaténé.

De manière simplifiée, un plex est une structure logique s'intercalant entre le volume logique et les subdisks (portion de disque physique) qui correspond à une copie des données du volume logique. En gros, on configure comment les données sont réparties sur les disques physiques à partir du plex.

On voit que la totalité des données du plex sont dans un seul subdisk situé sur le disque veritas nommé 146G1 et correspondant au disque emcpower54.

On liste les disques contenus dans le disk group
# vxprint -htg MONDG -d
DM NAME DEVICE TYPE PRIVLEN PUBLEN STATE

dm 146G1 emcpower54s2 auto 2048 87238656 -
dm 146G2 emcpower333s2 auto 2048 87238656 -
dm 146G3 emcpower334s2 auto 2048 87238656 -
dm 146G4 emcpower336s2 auto 2048 87238656 -
Le disk group est composé de 4 disques de 40 Go. A note que l'affichage des tailles dans vxprint est en bloc de 512 octets.

On va créer un miroir des données en stripping de 3 colonnes avec un pas de 1 Mo sur les disques 146G2, 146G3 et 146G4. La tâche est nommé mirror1.
# vxassist -b -g MONDG -t mirror1  mirror lv_concat \
layout=stripe ncol=3 stripewidth=1M 146G2 146G3 146G4
La commande passe en background immédiatement. Pour gérer cette tâche, on se sert de vxtask
On visualise son état d'avancement
task list mirror1
TASKID PTID TYPE/STATE PCT PROGRESS
174 ATCOPY/R 09.86% 0/2097152/206848 PLXATT lv_concat lv_concat-02 FREE146DG
On peut éventuellement mettre l'opération en pause à tout moment
# vxtask pause mirror1

# vxtask list mirror1
TASKID PTID TYPE/STATE PCT PROGRESS
174 ATCOPY/P 19.92% 0/2097152/417792 PLXATT lv_concat lv_concat-02 FREE146DG
On passe du statut running ATCOPY/R à pause ATCOPY/P

On reprend le job avec l'option resume
# vxtask resume mirror1
Une fois la tâche effectuée, on obtient deux plex pour le même volume logique
# vxprint -htg MONDG -v lv_concat
v lv_concat - ENABLED ACTIVE 2097152 SELECT lv_concat-02 fsgen
pl lv_concat-01 lv_concat ENABLED ACTIVE 2097152 CONCAT - RW
sd 146G1-01 lv_concat-01 146G1 0 2097152 0 emcpower54 ENA
pl lv_concat-02 lv_concat ENABLED ACTIVE 2101248 STRIPE 3/2048 RW
sd 146G2-01 lv_concat-02 146G2 0 700416 0/0 emcpower333 ENA
sd 146G3-01 lv_concat-02 146G3 0 700416 1/0 emcpower334 ENA
sd 146G4-01 lv_concat-02 146G4 0 700416 2/0 emcpower336 ENA
On voit que le plex nommé lv_concat-02 est de type STRIPE, le champ 3/2048 indique la configuration du stripe. 3 correspond au nombre de colonnes et 2048 correspond au pas de stripe en bloc de 512 octets(soit 1 Mo ici).
Les subdisks utilisés par le plex se situe sur les trois disques passés en paramètre.

Il reste maintenant à supprimer le premier plex avec la commande vxplex
# vxplex -g MONDG -o rm dis lv_concat-01
On désactive le plex lv_concat-01 (action dis)en passant en option qu'une fois désactivé il soit supprimé (option -o rm).

Pour faire plus propre, on peut en profiter pour renommer le plex lv_concat-02 en lv-concat-01. Cette opération s'effectue online.
# vxedit -g MONDG rename lv_concat-02 en lv_concat-01
Et voici le résultat final
# vxprint  -htg MONDG -v lv_concat

v lv_concat - ENABLED ACTIVE 2097152 SELECT lv_concat-01 fsgen
pl lv_concat-01 lv_concat ENABLED ACTIVE 2101248 STRIPE 3/2048 RW
sd 146G2-01 lv_concat-01 146G2 0 700416 0/0 emcpower333 ENA
sd 146G3-01 lv_concat-01 146G3 0 700416 1/0 emcpower334 ENA
sd 146G4-01 lv_concat-01 146G4 0 700416 2/0 emcpower336 ENA

relayout online

Une autre possibilité pour passer un volume de concaténé à strippé est d'effectuer un relayout online. Cette opération nécessite plus de déplacement de donnée car le volume est reconstitué petit à petit mais l'avantage est qu'il y a besoin de 20 à 30% de la volumétrie du volume logique en libre pour pouvoir l'effectuer.

Je crée un nouveau volume logique de 2 Go pour le test

# vxassist -g MONDG make lv_concat2 2G
On passe encore une fois par vxassist pour lancer le relayout. La tâche se nommera layout1.
# vxassist -b -t layout1 -g MONDG relayout lv_concat2 layout=stripe nstripe=3 stripewidth=1m
Les options ne sont pas très différentes de celles utilisées pour le mirroring. L'option notable est layout=stripe qui indique le layout que l'on veut appliquer.

Et voici le résultat que l'on obtient
vxprint -htg FREE146DG -v lv_concat2

v lv_concat2 - ENABLED ACTIVE 4194304 SELECT lv_concat2-01 fsgen
pl lv_concat2-01 lv_concat2 ENABLED ACTIVE 4196352 STRIPE 3/2048 RW
sd 146G1-03 lv_concat2-01 146G1 0 1398784 0/0 emcpower54 ENA
sd 146G4-02 lv_concat2-01 146G4 0 1398784 1/0 emcpower336 ENA
sd 146G2-03 lv_concat2-01 146G2 417792 1398784 2/0 emcpower333 ENA

le mot de la fin


J'espère que vous avez apprécié les capacités de VXVM à travers ce billet pour ceux qui ne connaissait pas. La possibilité de pouvoir modifier online la structure d'un volume logique devrait faire envie à tous ceux qui utilise quotidiennement d'autres LVM. Le fait de pouvoir gérer de manière simple les tâches en cours et de les stopper ou redémarrer à volonté est aussi très agréable.

VxVM possède encore beaucoup d'autres fonctionnalités intéressantes. J'essaierais de faire d'autres billets à ce sujet dans le futur.

Commentaires

1. Le lundi, juin 2 2008, 14:49 par presta

Une autre question :
Imaginons nous en environement de prod :

Jusqu'à quel degré le systeme vxvm est permissif dans de telles actions sans aucun loupé

Presta

2. Le mardi, juin 10 2008, 11:52 par Alain Dejoux

Hello,

Je reviens de vacances, ceci explique le retard dans ma réponse :-)

En général, je considère la commande vxassist comme fiable. Par précaution, j'évite d'utiliser les commandes de plus "bas niveau" à moins d'en avoir vraiment besoin(je pense ici à vxmake et certaines de ses utilisations).

Avant d'effectuer des opérations sur de la production, je vérifie qu'il n'y a pas de bug connu sur le site de symantec pour la version que j'utilise et je teste avec un filesystem de test(qu'on peut créer pour l'occasion) avant.

Je touche du bois mais je n'ai pas rencontré de problème jusqu'à présent.

Alain