unixadmin.free.fr Handy Unix Plumbing Tips and Tricks

9fév/11

Comment utiliser lreducelv et synclvodm

Suite à un problème hardware survenu pendant la commande migratepv de hdisk1 vers hdisk4, le LVM n'est pas stable.

Voici une procédure pour remédier à ce genre de problème en utilisant les commande bas niveau comme lreduclv qui vont modifier les VGDA.
Pour tester cette procedure il est possible de créer un LV mirroré et de supprimer sa copie en utilisant lreducelv puis synclvodm.

Cas concret:

# lsvg -l datavg
0516-1147 : Warning - logical volume lv001 may be partially mirrored.
datavg:
LV NAME    TYPE       LPs     PPs     PVs  LV STATE      MOUNT POINT
lv001      jfs2       239     478     2    open/syncd    /app/prod

# lspv -l hdisk1
hdisk1:
LV NAME               LPs     PPs     DISTRIBUTION          MOUNT POINT
lv001                 239     239     51..35..51..51..51    /app/prod

# lspv -l hdisk4
hdisk4:
LV NAME               LPs     PPs     DISTRIBUTION          MOUNT POINT
lv001                 239     239     51..35..51..51..51    /app/prod

On constate qu'aucune PPs n'est STALE

# lsvg datavg
VOLUME GROUP:       datavg                   VG IDENTIFIER:  000d39810000d9000000011b3478a70e
VG STATE:           active                   PP SIZE:        128 megabyte(s)
VG PERMISSION:      read/write               TOTAL PPs:      765 (97920 megabytes)
MAX LVs:            512                      FREE PPs:       287 (36736 megabytes)
LVs:                3                        USED PPs:       478 (61184 megabytes)
OPEN LVs:           3                        QUORUM:         1 (Disabled)
TOTAL PVs:          3                        VG DESCRIPTORS: 3
STALE PVs:          0                        STALE PPs:      0
ACTIVE PVs:         3                        AUTO ON:        yes
MAX PPs per VG:     130048                                    
MAX PPs per PV:     1016                     MAX PVs:        128
LTG size (Dynamic): 256 kilobyte(s)          AUTO SYNC:      no
HOT SPARE:          no                       BB POLICY:      relocatable

L'ODM nous montre bien que le LV est mirroré

odmget -q "name=lv001 and attribute=copies" CuAt

CuAt:
    name = "lv001"
    attribute = "copies"
    value = "2"
    type = "R"
    generic = "DU"
    rep = "r"
    nls_index = 642

Comme l'état du LV ressemble à un mirroir, ma première idée est de supprimer la copie de hdisk1

# rmlvcopy lv001 1 hdisk1
0516-022 lquerypv: Illegal parameter or structure value.
0516-304 getlvodm: Unable to find device id 0000000000000000
     in the Device Configuration Database.
0516-848 rmlvcopy: Failure on physical volume 0000000000000000,
    it may be missing or removed.

Résolution:

Effectuer par prudence Une sauvegarde du filesystem /app/prod.

Récupérer la map du LV lv001 à l'aide de la commande lquerylv

# lquerylv -L `getlvodm -l lv001` -r > /tmp/lv001.map

Editer le fichier /tmp/lv001.map et ne conserver que les lignes de hdisk1 soit les lignes commencant par son PVID 005b127cb1a5e315

# grep 005b127cb1a5e315 /tmp/lv001.map > /tmp/lv001_hdisk1.map

Vérifier le nombre de ligne présente dans le fichier /tmp/lv001_hdisk1.map (normalement égal à 239)

# wc -l /tmp/lv001_hdisk1.map

Supprimmer le LV lv001 contenu sur hdisk1 à partir du second fichier /tmp/lv001_hdisk1.map

# lreducelv -l `getlvodm -l lv001` -s 239 /tmp/lv001_hdisk1.map

L'ODM référence toujours 2 copies re-synchroniser les VGDA et l'ODM

# synvlvodm -v datavg lv001

Controler l'état du LV

# lsvg -l datavg
datavg:
LV NAME    TYPE       LPs     PPs     PVs  LV STATE      MOUNT POINT
lv001      jfs2       239     239     1    open/syncd    /app/prod

Recréer le Boot Logical Volume

# bosboot -ad /dev/ipldevice
Taggé comme: Aucun commentaire
7fév/11

How to recover VG after remove VG by smit or other


Vous pouvez vous inspirer de cette procédure pour récupérer un filesystem suite à un "rmlv" ou rmfs malencontreux.

Cette procédure est inspirée de ce script:
http://www.zubyzu.com/aix/mergevg.html

Warning::
Le pré-requis pour récupérer un VG : Avoir les vgdata ou un snap qui contient les MAP des LVs.

- VGDATA location:
/tmp/vgdata/

- SNAP location:
/tmp/ibmsupt/lvm/

Maquette de test

Créer un VG sur hdisk1

# lspv
hdisk0          00c848edfe43e40c                    rootvg          active
hdisk1          00c848ed176293f8                    testvg          active

Créer un FS

# mklv -t jfs2 -y testlv1 testvg 200 hdisk1

# crfs -v jfs2 -d testlv1 -m /testfs1 -A yes

# lsvg -l testvg
testvg:
LV NAME             TYPE       LPs     PPs     PVs  LV STATE      MOUNT POINT
testlv1             jfs2       100     100     1    open/syncd    /testfs1
loglv00             jfs2log    1       1       1    open/syncd    N/A

# mount /testfs1

Vérifier les VGDA de hdisk1

# lqueryvg -p hdisk1 -At
Max LVs:        256
PP Size:        23
Free PPs:       438
LV count:       2
PV count:       1
Total VGDAs:    2
Conc Allowed:   0
MAX PPs per PV  1016
MAX PVs:        32
Quorum (disk):  1
Quorum (dd):    1
Auto Varyon ?:  1
Conc Autovaryo  0
Varied on Conc  0
Logical:        00c848ed00004c000000012b1773ef4b.1   testlv1 1
00c848ed00004c000000012b1773ef4b.2   loglv00 1
Physical:       00c848ed176293f8                2   0
Total PPs:      639
LTG size:       128
HOT SPARE:      0
AUTO SYNC:      0
VG PERMISSION:  0
SNAPSHOT VG:    0
IS_PRIMARY VG:  0
PSNFSTPP:       4352
VARYON MODE:    0
VG Type:        0
Max PPs:        32512


Executer ces commandes, les MAP des LVs sont requises pour récupérer un VG.

# mkvgdata -m testvg
or
# snap -a

C'est parti !!!

# umount /testfs1

# smitty vg
Remove a Volume Group
* VOLUME GROUP name             [testvg]
ARE YOU SURE?

rmlv: Logical volume testlv1 is removed.
rmlv: Logical volume loglv00 is removed.
ldeletepv: Volume Group deleted since it contains no physical volumes.


Les VGDA ont été supprimée .

# lqueryvg -p hdisk1 -At
0516-320 lqueryvg: Physical volume hdisk1 is not assigned to
a volume group.
0516-066 lqueryvg: Physical volume is not a volume group member.
Check the physical volume name specified.

# lspv
hdisk0          00c848edfe43e40c                    rootvg          active
hdisk1          00c848ed176293f8                    None

Récupérer le VG

# ls -l /tmp/vgdata/testvg
total 32
-rw-r--r--    1 root     system         2117 Sep 15 21:16 filesystems
-rw-r--r--    1 root     system           12 Sep 15 21:16 loglv00.map
-rw-r--r--    1 root     system         2400 Sep 15 21:16 testlv1.map
-rw-r--r--    1 root     system         2531 Sep 15 21:16 testvg.data

Vérifier la taille de la PP du VG

# grep PPSIZE /tmp/vgdata/testvg/testvg.data
PPSIZE= 8

Recréer le VG avec la bonne taille de PPs

# mkvg -s 8 -y testvg hdisk1

# lspv
hdisk0          00c848edfe43e40c                    rootvg          active
hdisk1          00c848ed176293f8                    testvg          active

Vérifier le nombre de PPs et le type de LV pour chaque LV du VG

# cat /tmp/vgdata/testvg/loglv00.map | wc -l
1

# grep -p 'LOGICAL_VOLUME= loglv00' /tmp/vgdata/testvg/testvg.data | grep TYPE
TYPE= jfs2log

Recréer le LV à l'aide des paramètres précédents

# mklv -t jfs2log -y loglv00 -m /tmp/vgdata/testvg/loglv00.map testvg 1

Au suivant ...

# cat /tmp/vgdata/testvg/testlv1.map | wc -l
200

# grep -p 'LOGICAL_VOLUME= testlv1' /tmp/vgdata/testvg/testvg.data | grep TYPE
TYPE= jfs2

#  mklv -t jfs2 -y testlv1 -m /tmp/vgdata/testvg/testlv1.map testvg 200

Vérifier l'état des LV

# lsvg -l testvg
testvg:
LV NAME             TYPE       LPs     PPs     PVs  LV STATE      MOUNT POINT
loglv00             jfs2log    1       1       1    closed/syncd  N/A
testlv1             jfs2       200     200     1    closed/syncd  N/A

#  getlvcb -AT testlv1
AIX LVCB
intrapolicy = m
copies = 1
interpolicy = m
lvid = 00c848ed00004c000000012b17819b9d.2
lvname = testlv1
label =
machine id = 848ED4C00
number lps = 200
relocatable = y
strict = y
stripe width = 0
stripe size in exponent = 0
type = jfs2
upperbound = 32
fs =
time created  = Wed Sep 15 21:36:32 2010

Vérifier les options des filesystems à partir du snap ou /tmp/vgdata/testvg/filesystems
Inscrire dans le logical volume control block toutes les options

# /usr/sbin/putlvcb -f log=/dev/loglv00:mount=true:options=rw:account=false testlv1

# /usr/sbin/putlvcb -L /testfs1 testlv1

#  getlvcb -AT testlv1
AIX LVCB
intrapolicy = m
copies = 1
interpolicy = m
lvid = 00c848ed00004c000000012b17819b9d.2
lvname = testlv1
label = /testfs1
machine id = 848ED4C00
number lps = 200
relocatable = y
strict = y
stripe width = 0
stripe size in exponent = 0
type = jfs2
upperbound = 32
fs = log=/dev/loglv00:mount=true:options=rw:account=false
time created  = Wed Sep 15 21:36:32 2010
time modified = Wed Sep 15 21:39:12 2010

Copier le fichier filesystems dans /etc

# cp /etc/filesystems /etc/filesystems.bak
# cp filesystems /etc/filesystems

# lsvg -l testvg
testvg:
LV NAME             TYPE       LPs     PPs     PVs  LV STATE      MOUNT POINT
loglv00             jfs2log    1       1       1    closed/syncd  N/A
testlv1             jfs2       200     200     1    closed/syncd  /testfs1

# lqueryvg -p hdisk1 -At
Max LVs:        256
PP Size:        23
Free PPs:       438
LV count:       2
PV count:       1
Total VGDAs:    2
Conc Allowed:   0
MAX PPs per PV  1016
MAX PVs:        32
Quorum (disk):  1
Quorum (dd):    1
Auto Varyon ?:  1
Conc Autovaryo  0
Varied on Conc  0
Logical:        00c848ed00004c000000012b17819b9d.1   loglv00 1
00c848ed00004c000000012b17819b9d.2   testlv1 1
Physical:       00c848ed176293f8                2   0
Total PPs:      639
LTG size:       128
HOT SPARE:      0
AUTO SYNC:      0
VG PERMISSION:  0
SNAPSHOT VG:    0
IS_PRIMARY VG:  0
PSNFSTPP:       4352
VARYON MODE:    0
VG Type:        0
Max PPs:        32512

Monter et vérifier l'intégrité des filesystems.

Taggé comme: Aucun commentaire