This is a short script to create a physical (host)/virtual (guest) map.
This is a basic script written quickly, that was used to simplify data migration operations. So improvements welcomed.
Requirements :
- script must be run from host. (not guest)
- ssh must be allowed using keys (no passwd) to all guests.
- hpvmstatus command must be available from path.
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @hpvmstatus=`hpvmstatus`;
my @vms;
my $vm;
my %vm_data;
foreach(@hpvmstatus) {
($vm)=$_ =~ /^(.+)\s+[0-9]+\sHPUX\s+On/;
if (defined($vm)){
$vm =~ s/\s+//g;
push (@vms,$vm);
}
}
foreach $vm (@vms){
my @hpvmstatus_vm=`hpvmstatus -P $vm`;
foreach(@hpvmstatus_vm){
#Device Adaptor Bus Dev Ftn Tgt Lun Storage Device
#======= ========== === === === === === ========= =========================
#disk avio_stor 0 2 0 0 0 disk /dev/rdisk/disk17
(my $ftn,my $tgt,my $lun,my $disk)=$_ =~ /^disk\s+avio_stor\s+\d+\s+\d+\s+(\d+)\s+(\d+)\s+(\d+)\s+disk\s+(.+)$/;
if (defined($ftn)){
$vm_data{$vm}->{$disk}->{"dev"}=$ftn;
$vm_data{$vm}->{$disk}->{"tgt"}=$tgt;
$vm_data{$vm}->{$disk}->{"lun"}=$lun;
#Convert tgt to the good legacy device
my $tgtconv=sprintf("%02X",$tgt);
my $tgtconv_part1;
my $tgtconv_part2;
($tgtconv_part1)=$tgtconv=~/(.)./;
($tgtconv_part2)=$tgtconv=~/.(.)/;
$tgtconv_part1=hex($tgtconv_part1);
$tgtconv_part2=hex($tgtconv_part2);
#$vm_data{$vm}->{$disk}->{"legacy"}="c".$ftn."t".$tgtconv_part2."d".$tgtconv_part1;
$vm_data{$vm}->{$disk}->{"legacy"}="c\\dt".$tgtconv_part2."d".$tgtconv_part1; # Don't know how the instance number is defined (cX) so use a more gereric regexp
}
}
}
foreach $vm (@vms){
my @ioscan=`ssh -q -o stricthostkeychecking=no -o batchmode=yes root\@$vm \"ioscan -m dsf\"`;
foreach(keys(%{$vm_data{$vm}})){
my $regex=$vm_data{$vm}->{$_}->{"legacy"}."\$";
my @vdisk=grep(/$regex/,@ioscan);
my $vdisk_str=join(",",@vdisk);
($vdisk_str)=split(",",$vdisk_str);
$vdisk_str=~s#\s+/dev/rdsk/.+##g;
$vdisk_str=~s/\s//g;
$vm_data{$vm}->{$_}->{"vdisk"}=$vdisk_str;
}
}
# Debuging purpose
#print Dumper(\%vm_data);
foreach $vm (@vms){
printf("VM\tPhys\t\t\tVirt\n");
foreach(keys(%{$vm_data{$vm}})){
printf("%s\t%s\t%s\n",$vm,$_,$vm_data{$vm}->{$_}->{"vdisk"});
}
}
A short article to keep some useful queries for ASM.
- Querie to list disks and groups.
set pages 1000
set lines 300
col path format a50
col instance_name format a20
select v$asm_diskgroup.name,v$asm_disk.GROUP_NUMBER,v$asm_client.INSTANCE_NAME,v$asm_disk.PATH,v$asm_disk.name,v$asm_disk.STATE
from v$asm_diskgroup, v$asm_client, v$asm_disk
where v$asm_client.GROUP_NUMBER=v$asm_disk.GROUP_NUMBER and v$asm_disk.GROUP_NUMBER=v$asm_diskgroup.GROUP_NUMBER
order by group_number,path;
NAME GROUP_NUMBER INSTANCE_NAME PATH NAME STATE
------------------------------ ------------ -------------------- -------------------------------------------------- ------------------------------ --------
DCLICDGR 1 MODEFRR12 /dev/oracle/asmdisk_decldr1 DCLICDGR_0000 NORMAL
DCLICDG 2 MODEFRR12 /dev/oracle/asmdisk_decldd1 DCLICDG_0000 NORMAL
DCLICDG 2 MODEFRR12 /dev/oracle/asmdisk_decldd2 DCLICDG_0001 NORMAL
DCLICDG 2 MODEFRR12 /dev/oracle/asmdisk_decldd3 DCLICDG_0002 NORMAL
DCLICDG 2 MODEFRR12 /dev/oracle/asmdisk_decldd4 DCLICDG_0003 NORMAL
ESBDGR 3 ASCGFRR12 /dev/oracle/asmdisk_esbdr1 ESBDGR_0000 NORMAL
ESBDG 4 ASCGFRR12 /dev/oracle/asmdisk_esbdd1 ESBDG_0000 NORMAL
ESBDG 4 ASCGFRR12 /dev/oracle/asmdisk_esbdd2 ESBDG_0001 NORMAL
ESBDG 4 ASCGFRR12 /dev/oracle/asmdisk_esbdd3 ESBDG_0002 NORMAL
ETTDGR 5 ITECFRR12 /dev/oracle/asmdisk_ettdr1 ETTDGR_0001 NORMAL
ETTDG 6 ITECFRR12 /dev/oracle/asmdisk_ettdd1 ETTDG_0001 NORMAL
ETTDG 6 ITECFRR12 /dev/oracle/asmdisk_ettdd2 ETTDG_0002 NORMAL
ETTDG 6 ITECFRR12 /dev/oracle/asmdisk_ettdd3 ETTDG_0003 NORMAL
OCRDG 7 +ASM2 /dev/oracle/asmdisk_ocr1 OCRDG_0000 NORMAL
OCRDG 7 +ASM2 /dev/oracle/asmdisk_ocr2 OCRDG_0001 NORMAL
OCRDG 7 +ASM2 /dev/oracle/asmdisk_ocr3 OCRDG_0002 NORMAL
PYRADGR 8 FISOFRR02 /dev/oracle/asmdisk_pyradr1 PYRADGR_0000 NORMAL
PYRADG 9 FISOFRR02 /dev/oracle/asmdisk_pyradd1 PYRADG_0001 NORMAL
PYRADG 9 FISOFRR02 /dev/oracle/asmdisk_pyradd2 PYRADG_0002 NORMAL
PYRADG 9 FISOFRR02 /dev/oracle/asmdisk_pyradd3 PYRADG_0003 NORMAL
PYRADG 9 FISOFRR02 /dev/oracle/asmdisk_pyradd4 PYRADG_0004 NORMAL
DATA3 10 EDOCFRE12 /dev/oracle/asmdisk_data3 DATA3_0000 NORMAL
EDOCDG 12 EDOCFRU02 /dev/oracle/asmdisk_edocdg EDOCDG_0000 NORMAL
EDOCARCHDG 13 EDOCFRU02 /dev/oracle/asmdisk_edocarchdg EDOCARCHDG_0000 NORMAL
- Add / remove disk.
alter diskgroup EDOCDG add disk '/dev/oracle/asmdisk_xp01','/dev/oracle/asmdisk_xp02'
alter diskgroup EDOCDG drop disk 'EDOCDG_0000';
- Follow oprations.
select * from v$asm_operation;
- Change rebalancing power (1 –>11) to speed up operations.
alter diskgroup DATA2 REBALANCE POWER 5;
Warning : Take care about ownerships and rights on the disk special files !
A good synthetic article about ASM can be found here : http://www.oracle-base.com/articles/10g/AutomaticStorageManagement10g.php
Bon comme le dit le titre, plein le cul des plans foireux cette semaine.
Donc on part sur une valeur sure, a proximité car la météo annonce des orages violents dans l’après midi : La Ferme Durant.
Rien à dire sur la montée, efficace et propice à la mauvaise fois, exagérations en tout genre et poésie sur plein de sujets.
La descente sans surprise, toujours excellente même si un peu grasse. Seul le passage des rochers nous fera poser pieds à terre.
Le coup de sabre lui sera qu’une formalité pour l’équipe.
Les photos sur la galerie.
Première sortie de Thierry D, avec son nouveau vélo. Pour l’occasion on choisit un parcours sur vtopo : Les Balcons de Chartreuse.
Sortie prévue de 4h, et la deuxième plan loose de la semaine !
- On loupe la prise du chemin de montée –> 1h a galérer dans les couloirs de purge des falaises de Chartreuse.
- Le parcours doit vraiment pas être roulé, de nombreux arbres en travers et végétation abondante.
- Première partie du topo, descente quasi inexistante.
- Monté qui doit passer sur le vélo relativement facilement d’après le topo –> on doit pas avoir la même conception du faux plat montant….
- Humidité globale –> hyper difficile de rouler avec les cailloux bien glissant. (pas la faute du topo)
- Deuxième partie un peu mieux, mais ça sent le chemin pas beaucoup parcouru quand même. Quelque épingles ou BG 33 fera de beaux passages… On a manqué aussi perdre Thierry dans un fossé !
- La fin se termine sur un chemin super large, plein de boue.
Bref encore une sortie finalement de 6h30 à oublier….
Une note positive, gros tirage de bourre pour rentrer à la voiture !
Distance : ~31 km D+ : ~1100 m.
Le fichier gpx: http://uggla.free.fr/gps_track/2k11/20110603-BalconChartreuse.gpx.
Le fichier kml : http://uggla.free.fr/gps_track/2k11/20110603-BalconChartreuse.kmz.
Les photos sur la galerie.
Sortie du Jeudi férié.
La météo est pas top, mais on part quand même faire un tour avec Frank.
J’ai récupéré un topo, qui passe par le Habert de Chamechaude. Montée principalement sur le bitume jusqu’au col de porte, un peu dure la montée pour moi.
On mange un peu et on continue jusqu’au Habert, de la on descend c’est hyper gras donc ça glisse à mort sur les racines.
Bon je passe rapidement, quelques sentiers sont pas mal mais trop courts. Le ratio montée/descente est pas favorable, on est couvert de boue, bref un beau plan loose.
Le seul truc positif, c’est la rencontre avec « Maurice », un chien qui nous suivra une bonne partie de la sortie.
Mis a part pour le coté physique, sortie globalement à oublier. Sauf peut être quelques chemins sur le sec.
Distance : ~63 km D+ : ~2100 m.
Le fichier gpx: http://uggla.free.fr/gps_track/2k11/20110602-HabertChamechaude.gpx.
Le fichier kml : http://uggla.free.fr/gps_track/2k11/20110602-HabertChamechaude.kmz.
Les photos sur la galerie.