Home > HP-UX, Storage > Script para extender vgs con nuevos caminos automáticamente al duplicar los paths

Script para extender vgs con nuevos caminos automáticamente al duplicar los paths

November 12th, 2007 RuBiCK Leave a comment Go to comments

Symmetrix
Teniamos un HPUX con 32 discos de almacenamiento externo Symmetrix y cada disco se veia por dos caminos de la siguiente manera:

#powermt display dev=all
Symmetrix ID=000284701111
Logical device ID=050B
state=alive; policy=SymmOpt; priority=0; queued-IOs=0
==============================================================================
---------------- Host ---------------   - Stor -   -- I/O Path -  -- Stats ---
### HW Path                 I/O Paths    Interf.   Mode    State  Q-IOs Errors
==============================================================================

10 5/0/14/0/0.1.28.0.0.4.5   c10t4d5    FA 13aA   active  alive      0      0
11 5/0/6/0/0.1.28.0.0.5.0    c11t5d0    FA  4aA   active  alive      0      0
[...]

Por graves problemas de rendimiento con los discos, se añadió dos fibras más al Symmetrix, por lo que ahora, cada disco se veía por cuatro caminos.

Escaneamos en busca de nuevos discos y creamos los ficheros de dispositivos.

#ioscan -fnCdisk #insf

Configuramos los nuevos logical devices y comprobamos que todos los caminos se ven correctamente.

#powermt config
#powermt display dev=all
Symmetrix ID=000284701111
Logical device ID=050B
state=alive; policy=SymmOpt; priority=0; queued-IOs=0
==============================================================================
---------------- Host ---------------   - Stor -   -- I/O Path -  -- Stats ---
### HW Path                 I/O Paths    Interf.   Mode    State  Q-IOs Errors
==============================================================================
10 5/0/14/0/0.1.28.0.0.4.5   c10t4d5    FA 13aA   active  alive      0      0
11 5/0/6/0/0.1.28.0.0.5.0    c11t5d0    FA  4aA   active  alive      0      0
15 5/0/6/0/0.1.30.0.3.8.2    c15t8d2    FA  5aA   active  alive      0      0
18 5/0/14/0/0.1.30.0.3.8.2   c18t8d2    FA 12aA   active  alive      0      0
[...]

Una vez que vemos los cuatro caminos como active y alive grabamos la configuración del powermt

#powermt save

El problema se presenta ahora, que tenemos el doble de discos que teníamos antes y hay que meter cada camino a su vg correspondiente.

Habría que mirar cada disco nuevo que nos ha aparecido a que disco que ya tenemos en cada vg corresponde. Para esto se ha creado este script (gracias Angel).

Voy comentando las lineas.

#Obtenemos los VGs del sistema, desechando el vg00 y el vgoramon que en este caso son de discos internos
vgdisplay -v|grep “VG Name” | grep -vE “vg00 | vgoramon” | awk -F/ ‘{print $NF}’|while read VG
do
#Para cada VG nos quedamos con uno de los dos caminos de cada disco (desechamos el pv alternativo)
vgdisplay -v $VG | grep “PV Name” | grep -v Alternate | awk -F/ ‘{print $NF}’|while read DISCO
do
#Para cada disco de un VG lo buscamos dentro del powermt para quedarnos con todos
#los caminos del mismo disco
powermt display dev=$DISCO | grep FA | awk ‘{print $3}’|while read NEW_DISK
do
#Una vez que tenemos todos los caminos, comprobamos cual pertenece al vg
#que estamos mirando.
#Si da error es que el disco no está dentro del vg, lo metemos.
if [ `vgdisplay -v $VG | grep $NEW_DISK > /dev/null 2>&1; echo $?` -eq 1 ]
then
vgextend /dev/$VG /dev/dsk/$NEW_DISK
fi
done
done
done

Con este rápido script, nos ahorramos tener que identificar los nuevos caminos, a que discos de los que ya tenemos pertenecen, identificar el vg e introducirlo dentro.

pixelstats trackingpixel
Categories: HP-UX, Storage Tags: , ,
  1. November 28th, 2007 at 00:26 | #1

    Hola,

    Mas que con el powermt, suelo tirar del sympd list para sacar un listado de ctds vs ID de LUN del symmetrix (al cual de hecho añado el ID del propio Symmetrix, para no tener problema de LUN duplicada cuando la maquina esta conectada a 2 Symmetrix o mas).

    Lo hago con:

    . /opt/emc/ECC/symmappsrc.sh
    sympd list | awk ‘/Symmetrix ID/ { symid=$NF }
    /rdsk/ { print $1, “SYM_” symid “.” $2 }’ |
    sed -e “s#/dev/rdsk/##”

    Para un XP uso lo siguiente que me da el mismo formato de salida:

    autopath display | awk ‘/Array WWN/ { arrid=$NF }
    /Lun WWN/ { lunid=$NF }
    /dev/ { print $1, “XP_” arrid “.” lunid }’ |
    sed -e “s#/dev/dsk/##”

    Una duda: me sonaba que con Powerpath no era necesario añadir todos los PV link, es decir que podias usar cualquier de los ctd del mismo LUN y si se iba el camino a la porra Powerpath “switcheaba” automaticamente (sin tener que añadir tu los PV links en el VG). ¿ No es asi ? (voy a tener que confirmar esto)

  2. November 28th, 2007 at 01:03 | #2

    Hola Alex,

    Efectivamente, con powerpath basta con tener un solo pvlink para que balancee, pero me gusta dejarlo todo “en su sitio” es decir cada disco en su vg.

    Aunque pensandolo bien, borrando (moviendo) el lvmtab y recreandolo de nuevo con vgscan, se recrearía correctamente la estructura de los vgs con sus discos/caminos correspondientes, hay que darle un par de vueltas a esto :)

    Conozco poco el almacenamiento de EMC, uso algo más securepath y autopath o hasta incluso pvlinks a secas.

    Me gusta mucho ver diferentes maneras de abordar un mismo problema, siempre se aprende de ello y yo lo he hecho contigo.

    Gracias Alex :)

  3. November 28th, 2007 at 15:59 | #3

    Hola (de nuevo),

    Respecto al tema del vgscan, no lo recomiendo hacer a la ligera (mucha gente suele decir “nah… no pasa nada, borro el /etc/lvmtab, hago un vgscan y listo!” — por experiencia, siempre es mejor NO hacer un vgscan, porque no siempre deja las cosas bien (aunque a veces deberia, no estamso a salvo de un bug en LVM por ejemplo…) . Yo no recomiendo hacerlo. Prefiero intentar solucionar las cosas de otra forma.

    En tu script:

    if [ `vgdisplay -v $VG | grep $NEW_DISK > /dev/null 2>&1; echo $?` -eq 1 ]
    then
    vgextend /dev/$VG /dev/dsk/$NEW_DISK
    fi

    –> cambiaria el test del if por:

    if if vgdisplay -v $VG | grep “PV Name” | awk ‘{ print $3 }’ | grep -q “${NEW_DISK}$”
    then
    vgextend /dev/$VG /dev/dsk/$NEW_DISK
    fi

    . es mas sencillo (no uso “)
    . usa el -q del grep (en HP-UX, no vale esta opcione en Solaris, pero aqui no importa)
    . sobre todo: si NEW_DISK=c1t1d2 el grep va a machear tambien si esta el c1t1d20 en el vgdisplay, no es lo que quieres. Por eso, extraido la lista de discos con el awk y pongo un $ al final del grep.

    He estado pensando en el tema, y sobre todo para la gente que solo usa PV links, lo interesante, ademas de tener todos los PV links por si acaso, seria de balancear el primary link sobre las diferentes caminos…

    es decir: PV1 –> por la c1 (c1t1d0), alternate la c4 (c4t1d0) (por ejemplo)
    el siguiente PV, ponemos el primary link la c4, alternate los demas…

    Voy a ver si me sale un script que lo haga (a partir de un VG con todos los caminos ya metidos).

  4. November 28th, 2007 at 16:18 | #4

    Por lo que estoy viendo lo vamos puliendo poco a poco jejeje.

    Pero como esto solo se iba a usar una única vez, me preocupé únicamente de que hiciera lo que quería para salir del paso, sin control de errores ni nada, solo que no me tocara hacerlo a mano…

    Gracias por tus comentarios y mejoras :)

  1. November 28th, 2007 at 17:11 | #1