On prépare les disques :
root@server2835:/$ pvcreate /dev/rdsk/c6t8d0 Physical volume "/dev/rdsk/c6t8d0" has been successfully created. root@server2835:/$ pvcreate /dev/rdsk/c8t8d0 Physical volume "/dev/rdsk/c8t8d0" has been successfully created.
On prépare la création du VG :
root@server2835:/dev$ ls -l */group* crw------- 1 root sys 64 0x010000 Mar 26 2007 alt_vg00/group crw-r----- 1 root sys 64 0x000000 Mar 26 2007 vg00/group root@server2835:/dev$ mkdir extvg01 root@server2835:/dev$ mknod extvg01/group c 64 0x020000 root@server2835:/dev$ ls -l */group* crw------- 1 root sys 64 0x010000 Mar 26 2007 alt_vg00/group crw-r--r-- 1 root sys 64 0x020000 Jan 22 11:20 extvg01/group crw-r----- 1 root sys 64 0x000000 Mar 26 2007 vg00/group
On créé le VG :
root@server2835:/dev$ vgcreate -l 255 -p 128 -e 4096 -s 64 /dev/extvg01 /dev/dsk/c6t8d0 Volume group "/dev/extvg01" has been successfully created. Volume Group configuration for /dev/extvg01 has been saved in /etc/lvmconf/extvg01.conf root@server2835:/dev$ vgextend /dev/extvg01 /dev/dsk/c68t8d0
lvcreate -n lv_name /dev/vg_name lvcreate -r N -n lv_name /dev/vg_name (avec Symmetrix)
lvextend -L "taille en MO" /dev/vg_name/lv_name /dev/dsk/cxtydz
lvextend -m 1 /dev/vg_name/lv_name /dev/dsk/cxtydz_miroir
newfs -F vxfs -o largefiles /dev/vg_name/rlv_name
mkdir <point de montage>
/dev/vg_name/lv_name <point de montage> vxfs delaylog 0 2
mount <point de montage>
bdf
ls -l <point de montage>
lvextend -L "taille en MO" /dev/vg_name/lv_name /dev/dsk/cxtydz /dev/dsk/cxtydz_miroir avec cxtydz primaire et cxtydz_miroir le disque miroir (si nécessaire)
fsadm -F vxfs -b (taille en MO*1024) <point de montage>
bdf
umount <point de montage>
lvremove /dev/vg_name/lv_name
lvcreate -n lv_name /dev/vg_name lvcreate -r N -n lv_name /dev/vg_name (avec Symmetrix)
lvextend -L "taille en MO" /dev/vg_name/lv_name /dev/dsk/cxtydz
lvextend -m 1 /dev/vg_name/lv_name /dev/dsk/cxtydz_miroir
chown <user sybase>:<group sybase> /dev/vg_name/r*
ln -s /dev/vg_name/rlv_name /sybase_data/<instance sybase>/rawdevice/<sybase name>
lvremove /dev/vg_name/lv_name
Avec vxfs on peut réduire un FS à chaud (pas spécifique à HP-UX). On réduit d'abord le FS avec fsadm puis on réduit ensuite le LV avec lvreduce. Il faut être précis sur les tailles utilisées, ici on passe le FS à de 6 Go à 4 Go par ex. :
fsadm -b $((4000*1024)) /toto
lvreduce -L 4000 /dev/vg_titi/lv_toto
Lorsque des LVs sont mirrorés sur des disques distants (du SAN inter sites par ex.) il faut être vigilant lors de la création ou l'augmentation des filesystems pour ne pas endommager le miroir. Si on mirrore mal (c'est-à-dire en spécifiant des mauvais disques) on se retrouve avec un mirroir incohérent et on a donc des LVs qui contiennent des PEs sur des disques situés un même site. En cas de crash d'une baie ou d'un incendie, on perd donc les disques, les données et le miroir. D'où l'intérêt de mirrorer avec soin.
Par ex. SAM1) ne sait pas déterminer où sont situés les disques physiquement. Lorsqu'on lui demande d'étendre un LV il prend les premiers disques libres. Et la plupart du temps on se retrouve un miroir incorrect car les n disques utilisés peuvent potentiellement se situés sur un même site. On peut rétablir la situation à coups de lvextend -m 0, lvextend -m 1 et pvmove mais c'est long et moins on a d'espace disque de libre et plus c'est fastidieux à faire.
Si beaucoup de personnes disposent des droits root sur une machine on a donc plus de risques d'obtenir un LVM moisi. Tout le monde ne fait pas forcément attention lors des manipulations LVM. Ou bien d'autres personnes ne savent pas faire ou pensent savoir faire. Pour éviter ça le PVG permet de réduire les risques.
Ci-dessous un résumé des étapes pour mettre en place le PVG :
VG /dev/vg_data1 PVG PV_siteA /dev/dsk/c1t6d0 /dev/dsk/c2t6d0 PVG PV_siteB /dev/dsk/c3t6d0 /dev/dsk/c4t6d0
Pour le VG vg_data1 on a 2 PVGs composés des disques c[1,2]t6d0 d'une part et c[3,4]t6d0 d'autre part. C'est à dire que lorsqu'on utilise lvextend ou lvreduce le système sait qu'il doit travailler avec 1 disque de chaque PVG.
On utilise l'option PVG-strict de la commande lvchange (c'est le même principe que le strict / superstrict sous AIX) :
lvchange -s /dev/vg_data1/lv_data1
Attention, il faut passer le LV en PVG-strict avant de lui ajouter un mirroir. Ce qui revient à faire, dans l'ordre, : lvcreate, lvchange puis lvextend.
Un vgexport met à vide le fichier etc/lvmpvg, il faut penser à le backuper avant de faire des export/import de VG.
C'est tout. Maintenant un simple lvextend sans spécifier de disque fonctionnera en utilisant un disque de chaque PVG. De cette manière on aura un mirroring propre. Par ailleurs on peut également utiliser la méthode en spécifiant manuellement les disques. Enfin quand on rajoute ou supprime un ou plusieurs disques d'un VG il faut penser à mettre à jour le /etc/lvmpvg en conséquence.
lvcreate -n lv_name /dev/vg_name lvcreate -r N -n lv_name /dev/vg_name (avec Symmetrix)
lvextend -L "taille en MO" /dev/vg_name/lv_name /dev/dsk/cxtydz
lvextend -m 1 /dev/vg_name/lv_name /dev/dsk/cxtydz_miroir
newfs -F vxfs -o largefiles /dev/vg_name/rlv_name
LV[26]=“/dev/vg_package2/lv_ubix_data4”; FS[26]=“/oracle_data/disk4/UBXP”; FS_MOUNT_OPT[26]=“”
LV[27]=“/dev/vg_package2bis/lv_gispro”; FS[27]=“/appli/package2/GISPROXY”; FS_MOUNT_OPT[27]=“”
mkdir <point de montage>
mount <lv_name> <point de montage>
chown user_name:group_name <point de montage>
vgexport -p -s -m /etc/cmcluster/Packagex/vg_name.map /dev/vg_name
vgexport /dev/vg_name mkdir /dev/vg_name chmod 755 /dev/vg_name mknod /dev/vg_name/group c 64 même_mineur_du_vg_source (ex : 0x010000) vgimport -s -m /etc/cmcluster/Packagex/vg_name.map /dev/vg_name chown <user sybase>:<group sybase> /dev/vg_name/r* mkdir <point de montage>
lvextend -L "taille en MO" /dev/vg_name/lv_name /dev/dsk/cxtydz /dev/dsk/cxtydz_miroir
fsadm -b (taille en MO * 1024) <point de montage>
bdf
umount <point de montage>
rmdir <point de montage>
lvremove /dev/vg_name/lv_name
LV[26]=“/dev/vg_package2/lv_ubix_data4”; FS[26]=“/oracle_data/disk4/UBXP”; FS_MOUNT_OPT[26]=“”
LV[27]=“/dev/vg_package2bis/lv_gispro”; FS[27]=“/appli/package2/GISPROXY”; FS_MOUNT_OPT[27]=“”
vgexport -p -s -m /etc/cmcluster/Packagex/vg_name.map /dev/vg_name
rmdir <point de montage> vgexport /dev/vg_name mkdir /dev/vg_name chmod 755 /dev/vg_name mknod /dev/vg_name/group c 64 même_mineur_du_vg_source (ex : 0x010000) vgimport -s -m /etc/cmcluster/Packagex/vg_name.map /dev/vg_name chown <user sybase>:<group sybase> /dev/vg_name/r*
lvcreate -n lv_name /dev/vg_name lvcreate -r N -n lv_name /dev/vg_name (avec Symmetrix)
lvextend -L "taille en MO" /dev/vg_name/lv_name /dev/dsk/cxtydz
lvextend -m 1 /dev/vg_name/lv_name /dev/dsk/cxtydz_miroir
chown <user sybase>:<group sybase> /dev/vg_name/r*
ln -s /dev/vg_name/rlv_name /sybase_data/<instance sybase>/rawdevice/<sybase name>
lvremove /dev/vg_name/lv_name
vgexport -p -s -m /etc/cmcluster/Packagex/vg_name.map /dev/vg_name
vgexport /dev/vg_name mkdir /dev/vg_name chmod 755 /dev/vg_name mknod /dev/vg_name/group c 64 même_mineur_du_vg_source (ex : 0x010000) vgimport -s -m /etc/cmcluster/Packagex/vg_name.map /dev/vg_name chown <user sybase>:<group sybase> /dev/vg_name/r*
On peut avoir un souci de montage de FS avec certaines options comme convosync ou mincache. Ou alors être dans l'impossibilité d'augmenter un FS avec fsadm. Il faut vérifier la license VxFS avec vxlicense -p :
vrts:vxlicense: INFO: Feature name: HP_OnlineJFS [50] vrts:vxlicense: INFO: Number of licenses: 1 (non-floating) vrts:vxlicense: INFO: Expiration date: Sun Jun 24 10:00:00 2007 (148.1 days ago) vrts:vxlicense: INFO: Release Level: 22 vrts:vxlicense: INFO: Machine Class: All vrts:vxlicense: INFO: Site ID: 0
Il faut dans ce cas patcher le OnLineFS avec la version la plus à jour.
vgchange -c n /dev/vg_apps
Soit on augmente le FS octet par octet avec fsadm -b soit on vérifie la fragmentation du FS :
root@server:/ fsadm -E /some/fs fsadm: /etc/default/fs is used for determining the file system type Extent Fragmentation Report Total Average Average Total Files File Blks # Extents Free Blks 41818 4 4 57741 blocks used for indirects: 319 % Free blocks in extents smaller than 64 blks: 100.00 % Free blocks in extents smaller than 8 blks: 100.00 % blks allocated to extents 64 blks or larger: 0.86 Free Extents By Size 1: 57741 2: 0 4: 0 8: 0 16: 0 32: 0 64: 0 128: 0 256: 0 512: 0 1024: 0 2048: 0 4096: 0 8192: 0 16384: 0 32768: 0 65536: 0 131072: 0 262144: 0 524288: 0 1048576: 0 2097152: 0 4194304: 0 8388608: 0 16777216: 0 33554432: 0 67108864: 0 134217728: 0 268435456: 0 536870912: 0 1073741824: 0 2147483648: 0
Plus le nombre de blocs contenus dans les extents les plus petits est important, plus le FS est fragmenté, ce qui est le cas ici.
Pour défragmenter, à chaud :
fsadm -e -d /some/fs
Exemple de sortie de la commande :
Au lieu de se contenter de lire les fichiers lvm, elle interroge aussi la pvda des disques, voici ce que ça donne sur un cluster:
(on teste l'ajout d'un disque sur un VG lié à un package)
server1 | server2 | commande | |||
---|---|---|---|---|---|
/dev/rdsk/c6t7d3 | UNUSED | /dev/rdsk/c2t7d3 | UNUSED | pvcreate /dev/rdsk/c2t7d3 | |
/dev/rdsk/c6t7d3 | NOCONF in /dev/vg00 | /dev/rdsk/c2t7d3 | NOCONF in /dev/vg00 | vgextend /dev/vg_Package2 /dev/dsk/c2t7d3 | |
/dev/rdsk/c6t7d3 | NOCONF in /dev/vg_Package2 | /dev/rdsk/c2t7d3 | CONFIG in /dev/vg_Package2 | export import des maps | |
/dev/rdsk/c6t7d3 | CONFIG in /dev/vg_Package2 | /dev/rdsk/c2t7d3 | CONFIG in /dev/vg_Package2 | vgreduce /dev/vg_Package2 /dev/dsk/c2t7d3 | |
/dev/rdsk/c6t7d3 | ERROR in /dev/vg_Package2 | /dev/rdsk/c2t7d3 | NOCONF in /dev/vg00 | export import des maps | |
/dev/rdsk/c6t7d3 | NOCONF in /dev/vg00 | /dev/rdsk/c2t7d3 | NOCONF in /dev/vg00 | pvremove /dev/rdsk/c2t7d3 | |
/dev/rdsk/c6t7d3 | UNUSED | /dev/rdsk/c2t7d3 | UNUSED |
Du coup, on en déduit:
UNUSED | On peut utiliser le disque on est sur de sa dispo |
NOCONF in /dev/vg00 | Sur un noeud du cluster, le pvcreate a été fait, mais le disque n'est affecté à aucun VG |
CONFIG in /dev/<vg> | Le Disque est dans un VG, la map est OK |
NOCONF in /dev/<vg> | Le disque est dans le VG, la map n'est pas à jour export/import de map à effectuer |
ERROR in /dev/<vg> | Le disque n'est plus dans le VG, la map n'est pas à jour export/import de map à effectuer |
Lors des tests, on n'a pas regargé le comportement des disques alternés.
vgexport -s -p -m /tmp/pkg3.map /dev/vg_Package3
vgchange -a n /dev/vg_Package3
vgexport /dev/vg_Package3
mkdir /dev/vg_Package8 chmod 755 /dev/vg_Package8 mknod /dev/vg_Package8/group c 64 0x070000
vgimport -m /tmp/pkg3.map -s /dev/vg_Package8
vgchange -a y vg_Package8 lsvg vg_Package8
Si le VG est sur un cluster, refaire 3 4 5 sur le second noeud.