Dans l'article précédent, j'ai parlé d'un problème rencontré avec l'extension dynamique de LUN sous Volume Manager. Voici maintenant la solution employée pour corriger les formats des disques VM : vxcdsconvert.

La théorie

Cette commande est en fait un jeu de scripts fournis par Veritas, et qui fonctionnent selon un mécanisme somme toute assez simple. La commande peut traiter aussi bien un disque isolé qu'un disk group complet, cette dernière option étant bien sûr recommandée pour des raisons d'homogénéité.

Pré-requis : attention, il est indispensable d'ajouter au disk group concerné un nouveau disque, au format CDS, et d'une taille supérieure ou égale au plus gros disque déjà présent dans le DG. La raison de cet ajout devrait vous apparaître clairement dans un instant.

Voici le mécanisme appliqué par vxcdsconvert, séquentiellement et pour chacun des disques présents dans le DG :

  • déplacement de tous les subdisks vers un autre disque du DG où il reste une place suffisante (ça tombe bien, on vient d'ajouter le nécessaire)
  • sortie du disque concerné du DG
  • ajout du disque concerné dans le DG, mais cette fois au format CDS
  • retour des subdisks sur leur disque d'origine

Le lecteur avisé aura noté qu'on ne peut donc pas faire cette conversion s'il n'y a qu'un seul disque dans le DG. Pour nous, ce n'est pas gênant, puisqu'on ajoutera toujours un disque au préalable pour garantir la disponibilité de l'espace nécessaire.

La pratique

Pour ne pas décourager le lecteur, je serai direct : globalement, ça marche bien. Il y a juste un joli petit bug, non référencé à l'heure où j'écris ce billet (mais le problème a été remonté à Symantec, donc ça sera peut-être traité un jour), pour le cas où les noms de disques (Disk Media Name) commencent par un chiffre, et qui se manifeste de la manière suivante (avec dans cet exemple le disk media name 0_mondisque) :

# vxcdsconvert -g mondg -o novolstop group /usr/lib/vxvm/voladm.d/lib/vxcds_conv.sh[1210]: ${0_mondisque[*]}: bad substitution

Fort heureusement, ce problème se résoud très simplement et à chaud par un renommage du disque :

# vxedit -g mondg rename 0_mondisque mondisque_0

Il ne reste plus qu'à repasser notre commande, et à laisser la conversion se faire, ce qui peut se chiffrer en heures sur des volumes conséquents. L'opération est bien entendu également très dépendante de la charge I/O sur les volumes concernés, et donc à éviter pendant les pics d'activités sur des machines de production ...