bin
put " [pipe symbol] dd if=/dev/zero bs=2000b count=1 " /dev/null
getconf -a : liste les valeurs des variables d'environnement système
par default la valeur de ARG_MAX = 24576 (6x4Ko)
si lors d'une routine exec() on sort avec une erreur de type E2BIG, visible avec analyse truss ou trace
ou si lors d'une commande on a un arglist too long
celà est dû à un passage trop grand d'arguments à une commande.
l'environnement système peut être modifié en dynamique afin d'augmenter la valeur :
chdev -l sys0 -a ncargs=16
Difference de taille entre du et ls :
exemple : Ce programme reproduit le fonctionnement de ls : on se positionne au début du fichier et on se déplace jusqu'a la fin et on compte le deplacement
#include
#include
#include
long fileSize(char *FileName)
{
FILE *fp;
long fileLen;
fp = fopen(FileName,"r");
fseek(fp,0L, SEEK_END);
fileLen = ftell(fp);
fclose(fp);
return fileLen;
}
main(argc,argv)
int argc;
char **argv;
{
printf(" Taille de %s : %d bytes \n",argv[1],fileSize(argv[1]));
}
ew43punix1:root # dd if=/dev/zero of=./sparsefile seek=945616 bs=1024 count=10
10+0 records in.
10+0 records out.
ew43punix1:root # ll
/u/eym674h/dev/ls
total 395
drwxr-sr-x 2 root 200 512 Jan 10 11:53 ./
drwxrwsrwx 26 root 200 1024 Jan 10 11:37 ../
-rwxr-xr-x 1 root 200 198749 Jan 10 11:51 sizefile*
-rw-r--r-- 1 root 200 363 Jan 10 11:51 sizefile.c
-rw-r--r-- 1 root 200 968321024 Jan 10 12:00 sparsefile
ew43punix1:root # du -sk *
184 sizefile
1 sizefile.c
3 sparsefile <==== !!!
ew43punix1:root # ./sizefile sparsefile
Taille de sparsefile : 968321024 bytes <==== !!!
A ce stade les disques sont prêts sur le 1er vio server
3) se connecter sur le 2eme vio server, en padmin
retourner sous le vio serveur hébergeant la partition
Attention : il est prudent de vérifier les pvid obtenus sur la partition, pour les comparer avec ceux du vio serveur
# lvmo -a -v datavg
Si pervg_blocked_io_count s'incrémente, alors, utiliser ioo pour augmenter pv_min_pbuf à 2048, ou lvmo -v datavg -o pv_pbuf_count=2048 (là, on ne change que pour le vg)
Lors de la création des fs pour oracle : mettre un agblksize=512. Par défaut, on est à 4096, et on risque de faire des I/O inutiles. Les autres fs peuvent garder leur taille par défaut, par contre, celui qui contient les dbf, doit avoir son agblksize à db_block_size*db_file_multiblock_read_count. Ces parametres sont à voir avec les dbas.
Si le block size est à plus de 4096, oracle recommande 4096. Sinon 1024 ou 2048.
Pour connaitre le blocksize d'un fs : lsfs -q
Pour les I/O asynchrones :
iostat -A pour récupérer des stats
Si maxg s'approche de maxreqs, augmenter maxreqs.
Préconisation Oracle:
Il faut préferer les parametres Oracle suivants :
Séparer les redo et control files
Rapide résumé des direct io et autres concurrent IO (noté rapidement, à corriger) :
Le DIO existe depuis longtemps et est positionnable sur le JFS
Le CIO existe depuis peu et est positionnable sur le JFS2
Le CIO, permet de positionner un lock particulier sur l'inode du fichier sur lequel on travaille, et d'accéder le fichier en mode DIO de maniere implicite. En plus de l'accéder en direct IO, on peut accéder le fichier en multiple lectures/ecritures avec tous les locks gérés par oracle. Donc en clair, (encore une fois, de ce que j'ai compris) quand tu fais du CIO, tu fais implicitement du Direct IO, mais en plus en concurrent. Un des gros points forts du Direct IO est que tu t'affranchis des buffers JFS2 AIX (plus rapide dans certains cas, mais surtout, moins consommateur en ram),
Le gros point noir de tout ça, c'est qu'il peut etre genant, voire dangereux, de positionner autre chose que la base oracle en Concurrent IO ou Direct IO. Donc, il faut isoler les bases, si on veut monter les jfs2 avec le parametre CIO. C'est pour ça qu'en 9i c'était délicat, parce que c'était le seul moyen de taper les bases en Cio/Dio. Apparement avec oracle 10g, il n'est plus nécéssaire de positionner le JFS2 en Cio, il suffit de mettre en place le parametre filesystemio_options dans oracle à setall, et oracle se débrouille, et ouvre les fichiers qu'il veut acceder dans le mode qui lui convient le mieux.
En résumé, si on fait des gros accès séquentiels en lecture, avec peu d'écritures, il faut rester en asynchrone de base (via le jfs2), et si on fait des accès random, il vaut mieux bypasser le cache jfs2. Le direct IO seul est de toutes facons, déconseillé (parce que plus d'io asynchrones) si j'ai bien compris.
Par contre, pour fonctionner dans ce mode là, il faut avoir un outils de sauvegarde à chaud, ou bien sauvegarder les bases, avec oracle arreté. (en effet, si on passe une base (un table space ?) en read only pour la sauver, le fichier dbf est inaccessible.)
- ex : to delete disks not belonging to rootvg :
lspv | grep -v rootvg|awk '{ print "rmdev -dl "$1 }'| ksh
Very useful to treat multiple lines commands in one line .... instead of the usual for i in ....
-List virtual adapters (padmin) :
lsdev -virtual
-list adapters (padmin):
lsdev -type adapter
-list virtual network adapters (padmin):
lsmap -all -net
-list all pci adapters (oem_setup_env):
lsslot -c pci
- list all parents for an adapter (oem_setup_env):
lsparent -Cl fcs0
- list all children from an adapter (oem_setup_env):
lsdev -p pci0
- list all free disks (padmin):
lspv -free
- list Vio level
ioslevel
- save config disk in crontab to a mailing list (in order to rebuild the config in case of a crash) (oem_setup_env):
0 0 * * * export HOST=$(hostname);/home/padmin/mapluns.sh uuencode recreation_mapping mail -s "configuration vio server $HOST " root
root is an alias in /etc/aliases pointing to a real user address (toto@aaaa.fr)
- create a SEA adapter between ent1 (physical adapter) and ent2 (virtual adapter) (padmin) :
mkvdev -sea ent1 -vadapter ent2 -default ent2 -defaultid 1 <= creates ent3
and then ...
cfgassist <= config ent3
- create a virtual disk for a partition with hdisk6 (padmin) :
mkvdev -vdev hdisk6 -vadapter vhost0 -dev prex0rootvg
-create a virtual cdrom (padmin) :
mkvdev -vdev cd0 -vadapter vhost3 -dev cd