Buscar este blog

lunes, 14 de febrero de 2011

Migración de discos

Este documento muestra como migrar los VGs sobre nuevos discos. Este procedimiento es muy útil por ejemplo para la migración de cabinas.

Nota previa: este documento supone que todos los datos están dentro de LVM (no se utilizan raw devices) y que no existe cluster.
Si hubiese cluster hay dos posibles procedimientos (el correcto, cuando funciona bien cspoc, y la "ñapa", cuando no funciona bien cspoc).
En el caso de los raw devices hay que migrar a nivel de aplicación.

Formas de migración
Para migrar los datos de un disco a otro existen varias opciones:
- mirrorvg / unmirrorvg. Sencillo pero poco control.
- migratepv a nivel de disco. También bastante sencillo, pero poco control cuando los LVs están repartidos sobre varios discos.
- migratepv a nivel de LV. Tiene complejidad a nivel de preparación. Más control cuando los LVs están repartidos sobre varios discos.
- migratelp. MUY complejo, sobre todo la preparación. Todo el control que se quiera. Opinión personal: de locos, solo para casos muy concretos, y no para migraciones completas.

Migración de rootvg
En el caso de rootvg el comando migratepv puede fallar, debido a hd5:
# man migratepv
[...]
The migratepv command (only when the source and target physical volumes are specified) fails when a boot logical volume is found on the source physical volume. When you migrate a physical volume, the boot logical volume must remain intact. Two contiguous physical partitions and the new boot image must be built on the new boot logical volume.
[...]

Debido a ello vamos a migrar mediante mirrorvg / unmirrorvg.
Se podría realizar mediante migratepv a nivel de LV (o mediante migratelp), pero teniendo en cuenta que rootvg suele tener un único disco no es necesario meterse en estos líos.

Mediante mirrorvg / unmirrorvg hay que tener en cuenta que el volumen de sysdump no se pone en mirror. Por ello, una vez realizado el mirror hay que migrar este LV mediante migratepv.

1. Identificar discos de rootvg (actual y nuevo)
# lspv
hdisk0 0009561e31e7016d UT1.sapr3vg active
hdisk1 0009561e31cfd660 rootvg active
hdisk2 none None
Vemos que rootvg está en el hdisk1, y vamos a migrar sobre hdisk2.

2. Comprobar el tamaño de rootvg
# lsvg rootvg
VOLUME GROUP: rootvg VG IDENTIFIER: 0009561e0000d600000
0011931cfeca8
VG STATE: active PP SIZE: 32 megabyte(s)
VG PERMISSION: read/write TOTAL PPs: 575 (18400 megabytes)
MAX LVs: 256 FREE PPs: 45 (1440 megabytes)
LVs: 10 USED PPs: 530 (16960 megabytes)
OPEN LVs: 9 QUORUM: 2 (Enabled)
TOTAL PVs: 1 VG DESCRIPTORS: 2
STALE PVs: 0 STALE PPs: 0
ACTIVE PVs: 1 AUTO ON: no
MAX PPs per VG: 32512
MAX PPs per PV: 1016 MAX PVs: 32
LTG size (Dynamic): 256 kilobyte(s) AUTO SYNC: no
HOT SPARE: no BB POLICY: relocatable

3. Añadir el disco nuevo a rootvg
# extendvg rootvg hdisk2
0516-1254 extendvg: Changing the PVID in the ODM.
# lspv
hdisk0 0009561e31e7016d UT1.sapr3vg active
hdisk1 0009561e31cfd660 rootvg active
hdisk2 0009561e31e701ad rootvg active

4. Comprobar el tamaño del disco nuevo
# lspv hdisk2
PHYSICAL VOLUME: hdisk2 VOLUME GROUP: rootvg
PV IDENTIFIER: 0009561e31e701ad VG IDENTIFIER 0009561e0000d60000
0011931cfeca8
PV STATE: active
STALE PARTITIONS: 0 ALLOCATABLE: yes
PP SIZE: 32 megabyte(s) LOGICAL VOLUMES: 0
TOTAL PPs: 575 (18400 megabytes) VG DESCRIPTORS: 2
FREE PPs: 575 (18400 megabytes) HOT SPARE: no
USED PPs: 0 (0 megabytes) MAX REQUEST: 256 kilobytes
FREE DISTRIBUTION: 230..229..229..229..230
USED DISTRIBUTION: 00..00..00..00..00
Vemos que tiene espacio suficiente para rootvg.

5. Realizar mirror de rootvg sobre el disco nuevo.
# mirrorvg rootvg hdisk2
0516-1804 chvg: The quorum change takes effect immediately.
0516-1126 mirrorvg: rootvg successfully mirrored, user should perform
bosboot of system to initialize boot records. Then, user must modify
bootlist to include: hdisk1 hdisk2.

6. Una vez que termina realizar bosboot sobre el disco nuevo.
# bosboot –ad hdisk2

bosboot: Boot image is 38981 512 byte blocks.

7. Añadir el disco nuevo a la lista de arranque.
# bootlist –m normal hdisk1 hdisk2

8. Comprobar si hay volumen de sysdump en rootvg (en principio si, pero se puede dar el caso de que no haya).
# lsvg –l rootvg
rootvg:
LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT
hd5 boot 1 2 2 closed/syncd N/A
hd6 paging 16 32 2 open/syncd N/A
hd8 jfs2log 1 2 2 open/syncd N/A
hd4 jfs2 64 128 2 open/syncd /
hd2 jfs2 192 384 2 open/syncd /usr
hd9var jfs2 64 128 2 open/syncd /var
hd3 jfs2 96 192 2 open/syncd /tmp
hd1 jfs2 32 64 2 open/syncd /home
hd10opt jfs2 16 32 2 open/syncd /opt
lg_dumplv sysdump 32 32 1 open/syncd N/A

Vemos que hay un LV de sysdump (lg_dumplv) que no está en mirror. Todos los demás LVs tienen el doble de particiones físicas (Physical Partitions / PPs) que de particiones lógicas (Logical Partitions / LPs), y están en 2 discos (Physical Volumes / PVs).

Ya de paso comprobamos que en todos los LVs pone syncd (open/syncd o closed/syncd). Si no fuese así no hay que seguir, y habría primero que sincronizar rootvg (smit syncvg).

9. Para migrar lg_dumplv vamos a comprobar que está en el disco antiguo:
# lslv –l lg_dumplv
lg_dumplv:N/A
PV COPIES IN BAND DISTRIBUTION
hdisk1 032:000:000 100% 000:032:000:000:000

10. Migramos lg_dumplv mediante migratepv, del disco antiguo al nuevo:
# migratepv –l lg_dumplv hdisk1 hdisk2

11. Comprobamos que se ha migrado correctamente:
LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT
hd5 boot 1 2 2 closed/syncd N/A
hd6 paging 16 32 2 open/syncd N/A
hd8 jfs2log 1 2 2 open/syncd N/A
hd4 jfs2 64 128 2 open/syncd /
hd2 jfs2 192 384 2 open/syncd /usr
hd9var jfs2 64 128 2 open/syncd /var
hd3 jfs2 96 192 2 open/syncd /tmp
hd1 jfs2 32 64 2 open/syncd /home
hd10opt jfs2 16 32 2 open/syncd /opt
lg_dumplv sysdump 32 32 1 open/syncd N/A
# lspv –l hdisk1
hdisk2:
LV NAME LPs PPs DISTRIBUTION MOUNT POINT
hd10opt 16 16 16..00..00..00..00 /opt
hd2 192 192 00..00..82..110..00 /usr
hd9var 64 64 00..64..00..00..00 /var
hd3 96 96 88..35..00..05..00 /tmp
hd1 32 32 00..00..00..00..32 /home
hd5 1 1 01..00..00..00..00 N/A
hd6 16 16 00..16..00..00..00 N/A
hd8 1 1 00..00..01..00..00 N/A
hd4 64 64 00..00..32..00..00 /
# lspv –l hdisk2
hdisk2:
LV NAME LPs PPs DISTRIBUTION MOUNT POINT
hd10opt 16 16 16..00..00..00..00 /opt
hd2 192 192 00..00..82..110..00 /usr
hd9var 64 64 00..64..00..00..00 /var
lg_dumplv 32 32 00..00..00..00..32 N/A
hd3 96 96 88..35..00..05..00 /tmp
hd1 32 32 00..00..00..00..32 /home
hd5 1 1 01..00..00..00..00 N/A
hd6 16 16 00..16..00..00..00 N/A
hd8 1 1 00..00..01..00..00 N/A
hd4 64 64 00..00..32..00..00 /

12. Deshacemos el mirror de rootvg, sacando el disco antiguo
# unmirrorvg rootvg hdisk1
0516-1246 rmlvcopy: If hd5 is the boot logical volume, please run 'chpv -c
name>'
as root user to clear the boot record and avoid a potential boot
off an old boot image that may reside on the disk from which this
logical volume is moved/removed.
0516-1804 chvg: The quorum change takes effect immediately.
0516-1144 unmirrorvg: rootvg successfully unmirrored, user should perform
bosboot of system to reinitialize boot records. Then, user must modify
bootlist to just include: hdisk2.
# chpv –c hdisk1

13. Sacamos el disco antiguo de rootvg, y confirmamos la lista de arranque.
# reducevg rootvg hdisk1
# bosboot –ad hdisk2

bosboot: Boot image is 38981 512 byte blocks.
# bootlist –m normal hdisk2
# bootlist –m normal –o
hdisk2 blv=hd5


YA ESTÁ MIGRADO ROOTVG


Migración VG de datos

En este caso vamos a suponer que el VG está compuesto de varios discos, y que los LVs pueden estar repartidos sobre varios discos, por lo que vamos a utilizar migratepv a nivel de LV.
Si el VG tuviese un solo disco, o si los LVs no estuviesen repartidos, también se podría realizar mediante mirrorvg / unmirrorvg o mediante migratepv a nivel de disco, pero el procedimiento que vamos a ver permite realizar la migración en todos los casos.

También vamos a suponer que los discos de destino son suficientemente grandes para que quepan los LVs enteros, sin trocear. Si no fuese el caso, siempre que los discos sean sean de tamaño superior o igual a los trozos de los LVs también funcionaría, pero si no fuese así habría que usar mirrorvg (sin control) o migratelp (de locos).

1. Identificar situación del VG
Hay que identificar los PVs y los LVs que componen el VG, y el tamaño del VG, o por lo menos el tamaño usado (se va a migrar solo lo utilizado, por lo que los discos nuevos no tienen porque tener capacidad para todo el VG, aunque es mejor provisionar el tamaño total):

# lsvg nimvg
VOLUME GROUP: nimvg VG IDENTIFIER: 0009561e0000d600000
0011197b0beff
VG STATE: active PP SIZE: 16 megabyte(s)
VG PERMISSION: read/write TOTAL PPs: 14911 (238576 megabytes)
MAX LVs: 256 FREE PPs: 0 (0 megabytes)
LVs: 3 USED PPs: 14911 (238576 megabytes)
OPEN LVs: 3 QUORUM: 2 (Enabled)
TOTAL PVs: 13 VG DESCRIPTORS: 14
STALE PVs: 0 STALE PPs: 0
ACTIVE PVs: 1 AUTO ON: yes
MAX PPs per VG: 32768 MAX PVs: 1024
LTG size (Dynamic): 256 kilobyte(s) AUTO SYNC: no
HOT SPARE: no BB POLICY: relocatable

# lsvg –p nimvg
nimvg:
PV_NAME PV STATE TOTAL PPs FREE PPs FREE DISTRIBUTION
hdisk8 active 1147 0 00..00..00..00..00
hdisk9 active 1147 0 00..00..00..00..00
hdisk10 active 1147 0 00..00..00..00..00
hdisk11 active 1147 0 00..00..00..00..00
hdisk29 active 1147 0 00..00..00..00..00
hdisk33 active 1147 0 00..00..00..00..00
hdisk34 active 1147 0 00..00..00..00..00
hdisk35 active 1147 0 00..00..00..00..00
hdisk37 active 1147 0 00..00..00..00..00
hdisk38 active 1147 0 00..00..00..00..00
hdisk39 active 1147 0 00..00..00..00..00
hdisk40 active 1147 0 00..00..00..00..00
hdisk41 active 1147 0 00..00..00..00..00

# lsvg –l nimvg
nimvg:
LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT
NIM.lppsrc jfs2 2240 2240 6 open/syncd /nim/lppsrc
NIM.spot jfs2 253 253 4 open/syncd /nim/spot
NIM.images jfs2 12416 12416 13 open/syncd /nim/images

2. Una vez que tenemos los LVs del VG, hay que ver en que disco (o discos) está cada LV. Para cada LV mostrado por lsvg –l VGNAME hay que hacer lslv –l LVNAME:
# lslv -l NIM.lppsrc
NIM.lppsrc:/nim/lppsrc
PV COPIES IN BAND DISTRIBUTION
hdisk8 384:000:000 59% 000:229:155:000:000
hdisk10 384:000:000 59% 000:229:155:000:000
hdisk11 326:000:000 0% 135:000:000:191:000
hdisk33 506:000:000 0% 230:000:046:229:001
hdisk38 320:000:000 0% 000:000:000:107:213
hdisk41 320:000:000 0% 119:000:000:201:000
# lslv -l NIM.spot
NIM.spot:/nim/spot
PV COPIES IN BAND DISTRIBUTION
hdisk8 085:000:000 0% 085:000:000:000:000
hdisk10 005:000:000 0% 000:000:005:000:000
hdisk11 035:000:000 0% 000:000:000:035:000
hdisk33 128:000:000 0% 000:000:128:000:000
# lslv -l NIM.images
NIM.images:/nim/images
PV COPIES IN BAND DISTRIBUTION
hdisk8 678:000:000 0% 145:000:074:229:230
hdisk9 1147:000:000 19% 230:229:229:229:230
hdisk10 758:000:000 0% 230:000:069:229:230
hdisk11 786:000:000 29% 095:229:229:003:230
hdisk29 1147:000:000 19% 230:229:229:229:230
hdisk33 513:000:000 44% 000:229:055:000:229
hdisk34 1147:000:000 19% 230:229:229:229:230
hdisk35 1147:000:000 19% 230:229:229:229:230
hdisk37 1147:000:000 19% 230:229:229:229:230
hdisk38 827:000:000 27% 230:229:229:122:017
hdisk39 1147:000:000 19% 230:229:229:229:230
hdisk40 1147:000:000 19% 230:229:229:229:230
hdisk41 825:000:000 27% 111:229:229:028:228

Como vemos los LVs están muy repartidos. El comando migratepv a nivel de PV migraría los LVs a trozos, y cada LV quedaría troceado y repartido sobre el disco destino (o los discos destino). Sin embargo al utilizar migratepv a nivel de LV controlamos lo que se migra, por lo que se quedaría ordenado y consecutivo.

3. Añadir al VG el disco nuevo (o los discos nuevos): (puede aparecer un error, ver nota al final del documento)
# extendvg nimvg hdisk53
0516-1254 extendvg: Changing the PVID in the ODM.
# lsvg –p nimvg
nimvg:
PV_NAME PV STATE TOTAL PPs FREE PPs FREE DISTRIBUTION
hdisk8 active 1147 0 00..00..00..00..00
hdisk9 active 1147 0 00..00..00..00..00
hdisk10 active 1147 0 00..00..00..00..00
hdisk11 active 1147 0 00..00..00..00..00
hdisk29 active 1147 0 00..00..00..00..00
hdisk33 active 1147 0 00..00..00..00..00
hdisk34 active 1147 0 00..00..00..00..00
hdisk35 active 1147 0 00..00..00..00..00
hdisk37 active 1147 0 00..00..00..00..00
hdisk38 active 1147 0 00..00..00..00..00
hdisk39 active 1147 0 00..00..00..00..00
hdisk40 active 1147 0 00..00..00..00..00
hdisk41 active 1147 0 00..00..00..00..00
hdisk53 active 16058 16058 3212..3211..3211..3211..3212

4. Comprobar que el disco nuevo (o discos nuevos) tienen espacio suficiente para el VG.
Teníamos TOTAL PPs: 14911 (238576 megabytes):

# lspv hdisk53
PHYSICAL VOLUME: hdisk53 VOLUME GROUP: nimvg
PV IDENTIFIER: 0009561ed7c6c0c1 VG IDENTIFIER 0009561e0000d600000
0011197b0beff
PV STATE: active
STALE PARTITIONS: 0 ALLOCATABLE: yes
PP SIZE: 16 megabyte(s) LOGICAL VOLUMES: 3
TOTAL PPs: 15355 (245680 megabytes) VG DESCRIPTORS: 1
FREE PPs: 15355 (245680 megabytes) HOT SPARE: no
USED PPs: 0 (0 megabytes) MAX REQUEST: 256 kilobytes
FREE DISTRIBUTION: 3071..3071..3071..3071..3071
USED DISTRIBUTION: 00..00..00..00..00

En este caso vamos a migrar todo a un solo disco, y vemos que nos cabe. Si migrásemos sobre más discos tendríamos que sumar la capacidad de todos los discos.

5. Migrar.
Ahora, por cada trozo de LV en cada disco hay que lanzar un migratepv con esta sintaxis:
migratepv –l LVNAME HDISK_ORIGEN HDISK_DESTINO

Por ejemplo, para migrar el LV NIM.lppsrc completo hay que lanzar:
# migratepv -l NIM.lppsrc hdisk8 hdisk53
# migratepv -l NIM.lppsrc hdisk10 hdisk53
# migratepv -l NIM.lppsrc hdisk11 hdisk53
# migratepv -l NIM.lppsrc hdisk33 hdisk53
# migratepv -l NIM.lppsrc hdisk38 hdisk53
# migratepv -l NIM.lppsrc hdisk41 hdisk53

Como vemos, para un solo LV hemos tenido que lanzar 6 migratepv (esperando a que termine cada uno para poder lanzar el siguiente). Debido a esto yo me preparo unos scripts que van migrando todos los LVs del VG. En el caso de este ejemplo el script sería:
############################################################################
# Nombre: script_migracion_nimvg #
# Desc: Script de migración de nimvg #
# Autor: MRC #
# Fecha: 2010 02 16 #
# Es importante la fecha, ya que si se prepara mucho antes de la migración #
# pueden haber cambiado los LVs #
############################################################################

echo "NIM.lppsrc" >> /tmp/mrc_migrate/res_NIMVG.txt
date >> /tmp/mrc_migrate/res_NIMVG.txt
migratepv -l NIM.lppsrc hdisk8 hdisk53
migratepv -l NIM.lppsrc hdisk10 hdisk53
migratepv -l NIM.lppsrc hdisk11 hdisk53
migratepv -l NIM.lppsrc hdisk33 hdisk53
migratepv -l NIM.lppsrc hdisk38 hdisk53
migratepv -l NIM.lppsrc hdisk41 hdisk53

echo "NIM.spot" >> /tmp/mrc_migrate/res_NIMVG.txt
date >> /tmp/mrc_migrate/res_NIMVG.txt
migratepv -l NIM.spot hdisk8 hdisk53
migratepv -l NIM.spot hdisk10 hdisk53
migratepv -l NIM.spot hdisk11 hdisk53
migratepv -l NIM.spot hdisk33 hdisk53

echo "NIM.images" >> /tmp/mrc_migrate/res_NIMVG.txt
date >> /tmp/mrc_migrate/res_NIMVG.txt
migratepv -l NIM.images hdisk8 hdisk53
migratepv -l NIM.images hdisk9 hdisk53
migratepv -l NIM.images hdisk10 hdisk53
echo "hdisk11" >> /tmp/mrc_migrate/res_NIMVG.txt
date >> /tmp/mrc_migrate/res_NIMVG.txt
migratepv -l NIM.images hdisk11 hdisk53
migratepv -l NIM.images hdisk29 hdisk53
migratepv -l NIM.images hdisk33 hdisk53
echo "hdisk34" >> /tmp/mrc_migrate/res_NIMVG.txt
date >> /tmp/mrc_migrate/res_NIMVG.txt
migratepv -l NIM.images hdisk34 hdisk53
migratepv -l NIM.images hdisk35 hdisk53
echo "hdisk37" >> /tmp/mrc_migrate/res_NIMVG.txt
date >> /tmp/mrc_migrate/res_NIMVG.txt
migratepv -l NIM.images hdisk37 hdisk53
migratepv -l NIM.images hdisk38 hdisk53
migratepv -l NIM.images hdisk39 hdisk53
echo "hdisk40" >> /tmp/mrc_migrate/res_NIMVG.txt
date >> /tmp/mrc_migrate/res_NIMVG.txt
migratepv -l NIM.images hdisk40 hdisk53
migratepv -l NIM.images hdisk41 hdisk53

echo "FIN" >> /tmp/mrc_migrate/res_NIMVG.txt
date >> /tmp/mrc_migrate/res_NIMVG.txt

# FIN SCRIPT #

En este script va migrando a nivel de LV todos los LVs del VG. Migra cada trozo de LV desde el disco origen al disco destino.
El script va escribiendo en un fichero de log, poniendo una marca de tiempo (la fecha y hora). De esta manera, mediante un tail al fichero de log se puede ver por donde va el script.

Preparo un script parecido por cada VG que hay que migrar, y los lanzo en background mediante:
# nohup ./script_migracion_nimvg &

Para poder lanzar varios scripts en background a la vez lo que hago es colocar cada uno en un directorio distinto, así cada proceso de migración tiene su fichero de nohup.out.
Por ejemplo creo los scripts en los siguientes directorios:
/tmp/mrc_migrate/nimvg/script_migracion_nimvg
/tmp/mrc_migrate/sosvg/script_migracion_sosvg
/tmp/mrc_migrate/bd10vg/script_migracion_bd10vg

De esta manera, lanzando cada script desde su directorio, cada proceso tiene su fichero nohup.out en su directorio, y luego todos dejan el fichero de log (res_VGNAME.txt) en el mismo directorio /tmp/mrc_migrate.

Nota: en un servidor de producción, o en un servidor muy cargado no los lanzaría todos a la vez, sino que los lanzaría de uno en uno.

6. Una vez que un script ha terminado hay que comprobar que todo ha ido bien.
Lo primero es comprobar que no hay nada en el nohup.out correspondiente.
# ls –l /tmp/mrc_migrate/nimvg/nohup.out
-rw------- 1 root system 0 Feb 17 12:02 /tmp/mrc_migrate/nimvg/nohup.out

Y también comprobar en el fichero de log del script que se ha llegado al FIN:
# cat /tmp/mrc_migrate/res_nimvg.txt
NIM.lppsrc
Wed Feb 17 10:00:55 CET 2010
NIM.spot
Wed Feb 17 10:20:25 CET 2010
NIM.images
Wed Feb 17 10:35:02 CET 2010
hdisk11
Wed Feb 17 10:59:23 CET 2010
hdisk34
Wed Feb 17 11:17:55 CET 2010
hdisk37
Wed Feb 17 11:35:43 CET 2010
hdisk40
Wed Feb 17 11:47:26 CET 2010
FIN
Wed Feb 17 12:02:18 CET 2010

Luego se comprueba que los datos del VG están en el disco nuevo:
# lsvg –p nimvg
PV_NAME PV STATE TOTAL PPs FREE PPs FREE DISTRIBUTION
hdisk8 active 1147 1147 230..229..229..229..230
hdisk9 active 1147 1147 230..229..229..229..230
hdisk10 active 1147 1147 230..229..229..229..230
hdisk11 active 1147 1147 230..229..229..229..230
hdisk29 active 1147 1147 230..229..229..229..230
hdisk33 active 1147 1147 230..229..229..229..230
hdisk34 active 1147 1147 230..229..229..229..230
hdisk35 active 1147 1147 230..229..229..229..230
hdisk37 active 1147 1147 230..229..229..229..230
hdisk38 active 1147 1147 230..229..229..229..230
hdisk39 active 1147 1147 230..229..229..229..230
hdisk40 active 1147 1147 230..229..229..229..230
hdisk41 active 1147 1147 230..229..229..229..230
hdisk53 active 16058 446 00..00..00..00..446

Vemos que en los discos antiguos FREE PPs es igual a TOTAL PPs, por lo que no quedan datos en esos discos. También se podría comprobar cada LV mediante lslv –l LVNAME, para comprobar que están en el disco nuevo.

7. Sacar los discos antiguos del VG:
# reducevg nimvg hdisk8 hdisk9 hdisk10 hdisk11 hdisk29 hdisk33 hdisk34 hdisk35 hdisk37 hdisk38 hdisk39 hdisk40 hdisk41


YA ESTÁ MIGRADO EL VG DE DATOS


Nota: en el momento de añadir el disco nuevo al VG puede aparecer un error parecido a:
0516-1714 extendvg: The total number of partitions on the disks for this
volume group would be 45468, which exceeds the current maxpps
value of 32768. Increase the maxpps value to 65536 using
the chvg -P command, then retry.
0516-792 extendvg: Unable to extend volume group.

Este error se soluciona aumentando el número máximo de PPs por PV, mediante smit chvg o mendiante chvg –P VALOR VGNAME (en nuestro caso chvg –P 64 nimvg, ya que nos dicen que aumentemos a 65536, y el –P 64 indica 64*1024). En el menú de smit te indican que valores son posibles para el parámetro –P.
Una vez cambiado este valor hay que volver a añadir el disco al VG.


Nota adicional: en este proceso no se ha tenido en cuenta el orden de las LPs de cada LV. Es decir, que igual hemos migrado primero las LPs 100 a 199, y luego las LPs 500 a 599, y luego las LPs 0 a 99, etc...
Para realizarlo de forma que el resultado final sea óptimo deberíamos haber mirado el orden de las LPs de los LVs. Por norma general las LPs de un mismo hdisk serán consecutivas (por ejemplo de 0 a 49 en hdisk5, de 50 a 149 en hdisk2, de 150 a 299 en hdisk4, etc...)
Lo único que tenemos que hacer es identificar el orden de los hdisks, y migrarlos en ese orden dentro del script.
Para identificar el orden de las LPs se hace mediante lslv -m LVNAME, que nos da una salida parecida a:
# lslv -m SP1.lvorasof.01
SP1.lvorasof.01:/oracle/stage/102_64
LP PP1 PV1 PP2 PV2 PP3 PV3
0001 0745 hdisk18
0002 0746 hdisk18
0003 0747 hdisk18
0004 0748 hdisk18
0005 0749 hdisk18
0006 0750 hdisk18
0007 0751 hdisk18
0008 0752 hdisk18
0009 0753 hdisk18
0010 0754 hdisk18
0011 0755 hdisk18
0012 0756 hdisk18
0013 0757 hdisk18
0014 0758 hdisk18
Si el LV estuviese repartido en varios discos veríamos en que disco están las LPs, por lo que podemos indicar el orden de migración.

Si las LPs de un mismo LV en un hdisk no son consecutivas y queremos hacerlo bien entonces si que tendríamos que usar el comando migratelp, que necesita mucha más preparación (por lo menos en caso de que haya LPs intercaladas en otros hdisks).

1 comentario: