28 juin 2007
Oracle Entreprise 10g sous Etch
Pour des raisons professionnelles (ou par curiosité) , vous pouvez être amené à devoir installer Oracle sur votre Debian. Cet article décrit les différentes étapes pour réaliser cette opération.
1. Pré-requis hardware
Au niveau de la mémoire physique, Oracle conseille au minimum 1024 Mo. Pour estimer la mémoire physique dsiponible sur votre machine, lancer la commande suivante :
$ grep MemTotal /proc/meminfo
MemTotal: 516684 kB
Pour ma part, je n'ai qu'environ 512 Ko mais cela conviendra en augmentant la swap.
Au niveau de la swap, il est conseillé d'avoir 1,5 fois la taille de la mémoire physique si celle-ci est comprise entre 1024 et 2048 Mo.
$ grep SwapTotal /proc/meminfo
SwapTotal: 1550232 kB
1.5 Mo de swap devrait également nous suffire même si notre système est un peu solicité.
Concernant l'espace disque, je vous conseille d'avoir une partition propre pour Oracle.
Il faut disposer d'envrion 4 Go.
df -k [votre point de montage] pour savoir l'espace occupé sur votre partition
$ df -k .
Il faut aussi avoir 400 Mo de libre sous /tmp. Pour ma part /tmp étant sous le filesystem /, je n'ai pas
assez de place. Dans ces cas là, nous positionnerons les variables TEMP et TMPDIR sur un autre répertoire
pour ques les fichiers temporaires lors de l'installation se placent ailleurs. Nous verrons ça plus tard.
2. Installation des packages nécessaire
Controler que les packages suivants sont bien installés :
cpp-3.3 g++ g++-3.3 g++-4.1 gcc gcc-3.3 gcc-3.3-base gcc-4.1 lesstif2 libaio1 libbeecrypt6 libc6-dev libdb3 libneon25 librpm4 libssp0 libstdc++5 libstdc++5-3.3-dev libstdc++6-4.1-dev linux-kernel- headers rpm unzip sudo
Dans le cas contraire, apt-get install [nom du package]
3. Paramètrer votre système
Ajouter la ligne suivante dans votre fichier /etc/pam.d/login
session required /lib/security/pam_limits.so
Créer les liens suivants :
# ln -s /usr/bin/awk /bin/awk
# ln -s /usr/bin/rpm /bin/rpm
# ln -s /usr/bin/basename /bin/basename
Créer un fichier redhat-release pour faire croire que le système est une redhat et non une debian.
En effet, Oracle n'est certifié que sur les serveurs Redhat et Suze.
# echo « Red Hat Linux release 3.0 (drupal) » > /etc/redhat-release
Initialiser la gestion des rpm :
# mkdir /var/lib/rpm
# rpm --initdb
# rpm --rebuilddb
Modification des fichiers systèmes :
Faire une sauvegarde de votre fichier /etc/sysctl.conf
Editer votre fichier /etc/sysctl.conf et ajouter les lignes suivantes :
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144
Pour la prise en compte dynamique de ces paramètres, faites la commande suivante :
# /sbin/sysctl -p
Faire une sauvegarde du fichier /etc/security/limits.conf
Editer le fichier /etc/security/limits.conf et ajouter les lignes suivantes :
* soft nproc 2047
* hard nproc 16384
* soft nofile 1024
* hard nofile 65536
Comme nous allons utiliser le bash pour l'utilisateur Oracle, ajouter les lignes suivantes dans le fichier /etc/profile
if [ $USER = «oracle» ]; then
ulimit -u 16384 -n 65536
fi
4. Création des groupes et users nécessaires à l'installation et l'utilisation d'oracle
- Création du groupe oinstall (groupe Oracle Inventory), dba, nobody et
# /usr/sbin/groupadd oinstall
# /usr/sbin/groupadd dba
# /usr/sbin/groupadd nobody
- Modification du user nobody pour qu'il appartienne au groupe nobody
# usermod -g nobody nobody
- Création de l'utilisateur oracle
# useradd -d /oracle/home -g oinstall -G dba -s /bin/bash oracle
Création des répertoires d'installation :
# mkdir -p /oracle/home
# mkdir -p /oracle/u01/app/oracle/product
# mkdir -p /oracle/u01/app/oracle/oraInventory
# mkdir -p /oracle/u01/oradata
# mkdir -p /oracle/install
- Changement du propriétaire et du groupe sur les différents répertoires :
# chown -R oracle:oinstall /oracle/home /oracle/u01 /oracle/install
- Ajout des droits nécessaires sur le répertoire /oracle/u01
# chmod -R 775 /oracle/u01
- Création de l'environnement oracle :
Se Connecter avec le user oracle
# su - oracle
Créer un fichier .bashrc sous /oracle/home
PS1=’[\u sur \h] \w :’
umask 022
unset USERNAME
export ORACLE_BASE=/oracle/u01/app/oracle
export ORACLE_HOME=/oracle/u01/app/oracle/product
export ORACLE_SID=orcl #orcl coorespond au nom de notre future base de donnée
export ORACLE_TERM=xterm
export PATH=/oracle/u01/app/oracle/product/bin:/usr/sbin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export ORATAB=/etc/oratab
export ORACLE_HOME_LISTENER=$ORACLE_BASE
Si vous n'avez pas assez de place sous /tmp c'est à dire 400 Mo ajouter ces deux variables dans le fichier .bashrc :
export TEMP=/oracle/tmp
export TMPDIR=/oracle/tmp
Créer le répertoire /oracle/tmp avec un accès en lecture/écriture pour le user oracle
# Créer le lien suivant pour que les variables soient prises en compte à la connexion :
$ ln -s .bashrc .bash_profile
5. Installation d'Oracle 10g release 2
Sur le site d'oracle, téléchargez les fichiers suivants :
10201_database_linux32.zip (pour notre moteur oracle)
10201_client_linux32.zip (si vous désirez installer le client oracle, optionnel)
Placer les fichiers sous /oracle/install
Les faire appartenir à oracle (groupe oinstall)
# chown oracle:oinstall 10201_database_linux32.zip 10201_client_linux32.zip
Se connecter en oracle et décompresser le fichier :
# su - oracle
$ cd /oracle/install
$ unzip 10201_database_linux32.zip
Maintenant connectez-vous sous X avec l'utilisateur Oracle.
Après cela, aller dans le répertoire /oracle/install/database.
$ cd /oracle/install/database
Lancer le script :
$ ./runInstaller
Votre installation débute :
Ecran n°1 :
Ecran n°2 :
Ecran n°3 :
Ecran n°6 :
Ici, vous cliquez sur Gestion des mots de passe si vous voulez modifier un mot de passe par défaut :
Ecran n°7 (changement du mot de passe du user HR):
Ecran n°8 :
Attention, ici, il faut se connecter en root dans un terminal et lancer les 2 commandes ci-dessous :
# cd /oracle/u01/app/oracle/oraInventory
# ./orainstRoot.sh
Modification des droits d'accès de /oracle/u01/app/oracle/oraInventory en 770.
Modification du nom de groupe de /oracle/u01/app/oracle/oraInventory en oinstall.
L'exécution du script est terminée
# cd /oracle/u01/app/oracle/product
# ./root.sh
Running Oracle10 root.sh script...
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /oracle/u01/app/oracle/product
Enter the full pathname of the local bin directory: [/usr/local/bin]:
Creating /usr/local/bin directory...
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...
Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
Ecran n°9 :
Voilà vous pouvez quitter, votre installation est terminée.
Pour lancer Oracle Entreprise Database Control (OEM anciennement) :
# su - oracle
$ $ORACLE_HOME/bin/emctl start dbconsole
Vous pouvez ensuite vous connecter en http :
http://localhost:1158/em
Et voici ce que ça donne. C'est quand même mieux que la version XE Edition ;-)
12 mai 2007
Mise à jour du noyau : compilation d'un 2.6.18
Continuons sur notre lancée et essayons maintenant d'installer le kernel 2.6.18. Actuellement, nous sommes en 2.6.8-3.
Le noyau 2.6.18 peut être récupéré directement sur kernel.org ou alors sur les mirroirs Debian. Etant toujours en version Sarge, je vais donc dans un premier temps modifier le /etc/apt/sources.list pour aller sur les dépôts de Etch :
deb http://ftp2.fr.debian.org/debian/ etch main contrib non-free
deb-src http://ftp2.fr.debian.org/debian/ etch main contrib non-free
deb http://security.debian.org/ etch/updates main contrib non-free
deb http://security.debian.org/ etch/updates main contrib
Ensuite, on fait une mise à jour de notre base apt :
# apt-get update
Il n'est pas trop conseiller de compiler le noyau à partir de root. Nous allons donc créer un utilisateur s'appelant kernel et appartenant au groupe src :
# useradd -G src kernel
Nous changeons son mot de passe
# passwd kernel
Installation des outils de compilation
Comme nous décidons de compiler nous-même le noyau, nous allons installer les outils nécessaires à cette étape via le paquet kernel-package.
# apt-get install kernel-package
Ce paquet contient notamment la commande make-kpkg qui permet de créer un paquet à partir des sources du noyau. Vous pouvez vérifier que cette commande existe bien :
# which make-kpkg
/usr/bin/make-kpkg
A cause de changement dans le noyau, l'utilitaire initrd-tools, utilisé pour générer les initrd dans Sarge, ne peut plus être utilisé. Il est nécessaire de récupérer le paquet initramfs-tools (yaird pourrait être choisi également mais n'est pas le plus approprié).
# apt-get install initramfs-tools
Nous allons rechercher les sources du noyau disponibles au format Debian. Avec Etch, tous les paquets de noyau Linux ont été renommés de kernel-* en linux-*.
# apt-cache search --names-only "linux-source"
linux-source-2.6.18 - Linux kernel source for version 2.6.18 with Debian patches
Récupérons le paquet :
# apt-get install linux-source-2.6.18
Reading Package Lists... Done
Building Dependency Tree... Done
Suggested packages:
libncurses-dev kernel-package libqt3-mt-dev
The following NEW packages will be installed:
linux-source-2.6.18
0 upgraded, 1 newly installed, 0 to remove and 793 not upgraded.
Need to get 41.4MB of archives.
After unpacking 41.5MB of additional disk space will be used.
Get:1 http://security.debian.org etch/updates/main linux-source-2.6.18 2.6.18.dfsg.1-12etch1 [41.4MB]
Fetched 41.4MB in 47m35s (14.5kB/s)
debconf: unable to initialize frontend: Gnome
debconf: (Unable to load Gnome -- is libgnome2-perl installed?)
debconf: falling back to frontend: Dialog
Selecting previously deselected package linux-source-2.6.18.
(Reading database ... 107122 files and directories currently installed.)
Unpacking linux-source-2.6.18 (from .../linux-source-2.6.18_2.6.18.dfsg.1-12etch1_all.deb) ...
Setting up linux-source-2.6.18 (2.6.18.dfsg.1-12etch1) ...
Le paquet est stocké sous /usr/src :
# ls -ltr /usr/src | tail -1
-rw-r--r-- 1 root root 41381108 Apr 9 20:10 linux-source-2.6.18.tar.bz2
Là encore, il n'est pas trop conseillé de le compiler directement à partir de cet emplacement. Nous le copions donc dans un autre répertoire (ici data).
# cp linux-source-2.6.18.tar.bz2 /data
Nous nous connectons avec le user kernel
# su - kernel
Nous allons dans le répertoire sous /data où se trouve le paquet du noyau :
$ cd /data
Nous le décompressons et le désarchivons :
$ tar xvjf linux-source-2.6.18.tar.bz2
Nous avons maintenant un répertoire linux-source-2.6.18
$ ls -ltr
drwxr-xr-x 21 kernel users 4096 May 7 02:20 linux-source-2.6.18
On va dans ce répertoire :
$ cd linux-source-2.6.18
Compilation du paquet
$ make-kpkg --rootcmd fakeroot --initrd --append-to-version=.`date +%Y%m%d.%H%M` --revision=2.6.18 kernel-image
A partir de ce moment, vous pouvez consulter cette page http://linux.developpez.com/guide/a12859.html pour la meilleure configuration de votre noyau.
Un paquet du noyau est ainsi créé sous le répertoire parent de l'arbre du noyau
$ ls /data/*.deb
linux-image-2.6.18.20070506.1815_2.6.18_i386.deb
Installation du paquet en root
$ su - root
# cd /data
# dpkg -i linux-image-2.6.18.20070506.1815_2.6.18_i386.deb
Puis après on reboot
# init 6
Une fois que vous avez rebooté, vous pouvez contrôlé que votre nouveau kernel est bien installé :
# uname -r
2.6.18.20070506.1815
05 mai 2007
Mise à jour du noyau : passage d'un 2.4.27 à un 2.6.8
Comme vous le saviez peut-être si vous avez lu l'article présentant la configuration de ma machine, j'étais en noyau 2.4 et plus précisément en 2.4.27-2-k7. Officiellement , le noyau de 2.6.21 est sorti le 26 avril 2007. Ce qui signifie que j'ai un retard énorme au niveau de ma configuration.
Comme ma machine était très stable et que je l'utilise régulièrement, je n'avais pas encore ressenti le besoin de faire de mise à jour du kernel. Avec la sortie officielle de la nouvelle Debian, il paraît par contre difficile d'envisager une migration de Sarge vers Etch sans envisager de passer en 2.6 qui fait partie des pré-requis.
Je m'y suis donc mis aujourd'hui et après quelques essais infructueux, tout s'est très bien passé.
J'ai épuré au maximum pour fichier /etc/apt/sources.list.
Voici son contenu :
deb http://ftp2.fr.debian.org/debian/ sarge main contrib non-free
deb-src http://ftp2.fr.debian.org/debian/ sarge main contrib non-free
deb http://security.debian.org/ sarge/updates main contrib non-free
deb http://security.debian.org/ sarge/updates main contrib
Ensuite une petit mise à jour de ma base apt :
#apt-get update
A partir de ce moment là, j'ai fait une recherche pour voir les noyaux disponibles sous sarge :
#apt-cache search --names-only "kernel-image"
Parmi toutes les versions, voici celle que j'ai retenue :
kernel-image-2.6-k7 - Linux kernel image for version 2.6 on AMD K7
Elle s'appuie en fait sur un noyau 2.6.8-3, comme le montre la commande apt-cache show
#apt-cache show kernel-image-2.6-k7
Package: kernel-image-2.6-k7
Priority: optional
Section: base
Installed-Size: 32
Maintainer: Debian kernel team <debian-kernel@lists.debian.org>
Architecture: i386
Source: kernel-latest-2.6-i386
Version: 101sarge1
Depends: kernel-image-2.6.8-3-k7
Filename: pool/main/k/kernel-latest-2.6-i386/kernel-image-2.6-k7_101sarge1_i386.deb
Size: 2164
MD5sum: cbd1dd8a0dc39c35598c131e0473ce46
SHA1: 2346bba216185cf7b9e46eeaf3bc7d8748f80831
SHA256: 3e0212f740b06ddf143b0fb1e3b67bc05605c5c937935a9a2ed6b7740696becf
Description: Linux kernel image for version 2.6 on AMD K7.
This package will always depend on the latest 2.6 kernel image available
for AMD Duron/Athlon.
Avant de me lancer dans l'installation du nouveau noyau, je fais une petite simulation pour voir ce que fera l'installation du paquet :
# apt-get install -s kernel-image-2.6-k7
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
kernel-image-2.6.8-3-k7
Suggested packages:
lilo kernel-doc-2.6.8
The following NEW packages will be installed:
kernel-image-2.6-k7 kernel-image-2.6.8-3-k7
0 upgraded, 2 newly installed, 0 to remove and 153 not upgraded.
1 not fully installed or removed.
Inst kernel-image-2.6.8-3-k7 (2.6.8-16sarge6 Debian:3.1r6/oldstable, Debian-Security:3.1/oldstable)
Inst kernel-image-2.6-k7 (101sarge1 Debian:3.1r6/oldstable, Debian-Security:3.1/oldstable)
Conf gdm (2.6.0.8-1sarge2 Debian:3.1r6/oldstable, Debian-Security:3.1/oldstable)
Conf kernel-image-2.6.8-3-k7 (2.6.8-16sarge6 Debian:3.1r6/oldstable, Debian-Security:3.1/oldstable)
Conf kernel-image-2.6-k7 (101sarge1 Debian:3.1r6/oldstable, Debian-Security:3.1/oldstable
A partir de là je l'ance l'installation :
# apt-get install kernel-image-2.6-k7
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
kernel-image-2.6.8-3-k7
Suggested packages:
lilo kernel-doc-2.6.8
The following NEW packages will be installed:
kernel-image-2.6-k7 kernel-image-2.6.8-3-k7
0 upgraded, 2 newly installed, 0 to remove and 153 not upgraded.
1 not fully installed or removed.
Need to get 15.3MB of archives.
After unpacking 45.2MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://ftp2.fr.debian.org sarge/main kernel-image-2.6.8-3-k7 2.6.8-16sarge6 [15.3MB]
Get:2 http://ftp2.fr.debian.org sarge/main kernel-image-2.6-k7 101sarge1 [2164B]
Fetched 15.3MB in 41m13s (6175B/s)
debconf: unable to initialize frontend: Gnome
debconf: (Unable to load Gnome -- is libgnome2-perl installed?)
debconf: falling back to frontend: Dialog
Selecting previously deselected package kernel-image-2.6.8-3-k7.
(Reading database ... 105472 files and directories currently installed.)
Unpacking kernel-image-2.6.8-3-k7 (from .../kernel-image-2.6.8-3-k7_2.6.8-16sarge6_i386.deb) ...
Selecting previously deselected package kernel-image-2.6-k7.
Unpacking kernel-image-2.6-k7 (from .../kernel-image-2.6-k7_101sarge1_i386.deb) ...
Setting up gdm (2.6.0.8-1) ...
debconf: unable to initialize frontend: Gnome
debconf: (Unable to load Gnome -- is libgnome2-perl installed?)
debconf: falling back to frontend: Dialog
Reloading GNOME Display Manager configuration. Changes will take effect
when all current X sessions have ended.
Setting up kernel-image-2.6.8-3-k7 (2.6.8-16sarge6) ...
Searching for GRUB installation directory ... found: /boot/grub .
Testing for an existing GRUB menu.list file... found: /boot/grub/menu.lst .
Searching for splash image... none found, skipping...
Found kernel: /boot/vmlinuz-2.6.8-3-k7
Found kernel: /boot/vmlinuz-2.4.27-2-k7
Updating /boot/grub/menu.lst ... done
Ensuite un petit reboot
Après le reboot on vérifie si le kernel utilisé est bien le nouveau :
#uname -r
2.6.8-3-k7
20 mai 2006
Optimiser vos périphériques IDE : hdparm
Pour cela nous allons utiliser l'utilitaire hdparm. Il nous faut donc l'installer :)
#apt-get install hdparm
hdparm permet de configurer certaines options de votre disque dur.
Ces possiblités sont multiples et je vous conseille fortement de lire
le man pour de plus amples informations. Néanmoins, nous allons en aborder quelques unes.
Nous
supposons que notre disque dur est /dev/hda dans nos exemples. Dans un
premier temps, nous voulons obtenir des informations sur notre disque
- Lecture des informations du disque :
#hdparm -i /dev/hda
/dev/hda:
Model=ST360020A, FwRev=3.34, SerialNo=5EX010L0
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
BuffType=unknown, BuffSize=2048kB, MaxMultSect=16, MultSect=off
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=117231408
IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2
AdvancedPM=yes: unknown setting WriteCache=enabled
Drive conforms to: Unspecified: ATA/ATAPI-1 ATA/ATAPI-2 ATA/ATAPI-3 ATA/ATAPI-4 ATA/ATAPI-5 ATA/ATAPI-6
* signifies the current active mode
Nous pouvons également utiliser l'option -I :
#hdparm -I /dev/hda
/dev/hda:
ATA device, with non-removable media
Model Number:
ST360020A
Serial Number:
5EX010L0
Firmware Revision: 3.34
Standards:
Supported: 6 5 4
Likely used: 6
Configuration:
Logical max current
cylinders 16383 16383
heads 16 16
sectors/track 63 63
--
CHS current addressable sectors: 16514064
LBA user addressable sectors: 117231408
device size with M = 1024*1024: 57241 MBytes
device size with M = 1000*1000: 60022 MBytes (60 GB)
Capabilities:
LBA, IORDY(can be disabled)
Standby timer values: spec'd by Standard
R/W multiple sector transfer: Max = 16 Current = ?
Advanced power management level: unknown setting (0x0040)
Recommended acoustic management value: 128, current value: 128
DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 *udma5
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=240ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* SMART feature set
Security Mode feature set
* Power Management feature set
* Write cache
* Look-ahead
* Host Protected Area feature set
* WRITE_BUFFER command
* READ_BUFFER command
* DOWNLOAD_MICROCODE
* Advanced Power Management feature set
SET_MAX security extension
* Automatic Acoustic Management feature set
* Device Configuration Overlay feature set
* SMART error logging
* SMART self-test
Security:
Master password revision code = 65534
supported
not enabled
not locked
not frozen
not expired: security count
not supported: enhanced erase
HW reset results:
CBLID- above Vih
Device num = 0 determined by the jumper
Checksum: correct
Ces
informations correspondent à celles qui ont été lues au moment du
dernier reboot de votre système. Nous avons ainsi le modèle du disque
(Model), numéro de série et le FirmWare. Nous avons également le nombre
de cylindre, de têtes et de secteur par cylindre, le nombre maximxum de
secteur pouvant être lus par interruption et sa valeur actuelle ("R/W multiple sector transfer: Max = 16 Current = ?") la taille du tampon (buffsize) et le mode DMA supporté (DMA mode).
- Nous allons maintenant regarder la configuration actuelle de notre disque :
#hdparm /dev/hda
/dev/hda:
multcount = 0 (off)
IO_support = 0 (default 16-bit)
unmaskirq = 0 (off)
using_dma = 0 (off)
keepsettings = 0 (off)
readonly = 0 (off)
readahead = 8 (on)
geometry = 7297/255/63, sectors = 117231408, start = 0
Comme
nous pouvons le voir, le disque n'est quasiment pas configuré et donc
optimisé (nous l'avons fait volontairement pour notre exemple).
- Nous allons maintenant tester les performances de notre disque avant son optimisation :
#hdparm -tT /dev/hda
/dev/hda:
Timing cached reads: 692 MB in 2.00 seconds = 346.00 MB/sec
Timing buffered disk reads: 8 MB in 3.73 seconds = 2.14 MB/sec
L'argument -t permet de tester la lecture directe sur les plateaux du disque.
L'argument -T teste la lecture des données depuis le cache.
Il est évident que la lecture à partir du cache est incomparablement plus rapide.
Ces
données sont une lecture instantanée, vous pouvez donc la lancer 3 fois
par exemple pour en faire une moyenne même si les résultats risquent
d'avoir peu de variation. Voici une petite boucle qui vous lancera la
commande toutes les 5 secondes. Vous pourrez l'interrompre en appuyant
sur les touches Ctrl + C.
#while true; do hdparm -tT /dev/hda; sleep 5; done
- Augmentation du nombre de secteurs lus par interruption
A
chaque fois que des données sont lues ou écrites sur un disque, un
processus appelé interruption a lieu. A ce moment précis, un certain
nombre de secteur sont envoyés. La valeur maximale est indiquée par la
variable MaxMultSect (obtenue avec la commande
hdparm -i /dev/hda) qui diffère suivant les disques durs. Dans notre
exemple, cette fonctionnalité n'est pas active (multcount = 0 (off)). Nous allons donc remédier à cela :
#hdparm -m16 /dev/hda
/dev/hda:
setting multcount to 16
multcount = 16 (on)
On
peut vérifier la prise en compte en relançant la commande hdparm
/dev/hda et constater que le paramètre multicount est initialisé
(multcount = 16 (on)). Le disque pourra dorénavant envoyer
16 secteurs simultanément. On peut avoir un gain de 2 à 50 % sur la
vitesse de transfert. Voyons ce que cela donne pour notre disque
:
#hdparm -tT /dev/hda
/dev/hda:
Timing cached reads: 672 MB in 2.00 seconds = 336.00 MB/sec
Timing buffered disk reads: 8 MB in 3.29 seconds = 2.43 MB/sec
Ici
le gain n'est pas très énorme mais certains disques peuvent gérer
jusqu'à 32 envois simultanés ce qui améliorerait les performances de
façon un peu plus significative.
- Augmentation de la bande passante
Notre
disque fonctionne actuellement en 16 bits. Il nous faut donc modifier
cela car comme tous les disques récents il accepte le transfert en 32
bits qui définit la bande passante. Vous pouvez acitver cette option
par le paramètre -c1 (-c0 activant le support 16 bits) ou -c3 qui
ajoute la notion de synchronisation nécessaire à certains chipsets.
#hdparm -m16 -c1 /dev/hda
/dev/hda:
setting 32-bit IO_support flag to 1
setting multcount to 16
multcount = 16 (on)
IO_support = 1 (32-bit)
ou
#hdparm -m16 -c3 /dev/hda
/dev/hda:
setting 32-bit IO_support flag to 3
setting multcount to 16
multcount = 16 (on)
IO_support = 3 (32-bit w/sync)
Vous pouvez refaire un test de performance pour voir quelle est la meilleure option.
- Activer le DMA
L'activation du DMA permet d'envoyer
directement les données à la mémoire vive. Il existe pusieurs modes
possibles pour le DMA, l'option -d1 X32 active le mode DMA avec un
débit compris entre 13 ou 16 Mb/s. L'option -d1 X66 active le
mode Ultra-DMA-2 avec un débit à 66 Mb/s. L'option -u1 permet au driver
de disque de commencer à réponder à d'autres interruptions I/O alors
que des données sont en écriture ou en lecture sur le disque via
DMA. A vous de faire des tests
de performance, pour voir quel est le mode le plus approprié à votre
disque.
#/dev/hdparm -d1 -X66 -u1 /dev/hda
/dev/hda:
setting unmaskirq to 1 (on)
setting using_dma to 1 (on)
setting xfermode to 66 (UltraDMA mode2)
unmaskirq = 1 (on)
using_dma = 1 (on)
Si nous testons maintenant nos performances, nous obtenons cela :
#hdparm -tT /dev/hda
/dev/hda:
Timing cached reads: 660 MB in 2.00 seconds = 330.00 MB/sec
Timing buffered disk reads: 56 MB in 3.11 seconds = 18.01 MB/sec
Voici maintenant notre configuration actuelle :
#hdparm /dev/hda
/dev/hda:
multcount = 16 (on)
IO_support = 3 (32-bit w/sync)
unmaskirq = 1 (on)
using_dma = 1 (on)
keepsettings = 0 (off)
readonly = 0 (off)
readahead = 8 (on)
geometry = 7297/255/63, sectors = 117231408, start = 0
Voilà
c'est terminé. cet article s'est notamment inspiré du livre de Jérôme
Henry "Outils d'administration Linux en entreprise" aux éditions
Vuibert.
16 avril 2006
Gestion de la mémoire
1. Principes
Pour rappel, il existe deux types de mémoire. La mémoire réelle/vive
ou RAM (matérialisée par vos barrettes mémoire dans votre UC) et la
mémoire de pagination ou d'échange appelée également SWAP.
La mémoire disponible sur un système linux correspond donc à la somme de la mémoire réelle et de la mémoire de pagination.
Sur un système peu chargé, la mémoire de pagination n'est quasiment jamais utilisé. Dans le cas contraire, cela signifie que votre système est chargé et qu'il faudra peut être ajouter de la RAM. En fait, le noyau va déplacer en mémoire de pagination les processus les moins utilisés.
2. Afficher la taille de la mémoire totale
Pour
connaître la taille de la mémoire totale sur votre système, il suffit
d'utiliser la commande free avec le paramètre -t. Les autres
options de cette commande vous permettent d"afficher la
taille en octet (-b), en Ko (-k), en Mo (-m). Si vous
voulez verifier son utilisation, activer l'option -s <nombre de
seconde> pour rafraichir l'affichage toutes les n secondes.
#free -m -t
total
used free
shared buffers cached
Mem:
503
495 7
0
47 171
-/+ buffers/cache: 276 227
Swap: 1513 0 1512
Total: 2017 496 1520
Ici l'on constate que la mémoire totale (RAM + mémoire de pagination) est de 2 Go (2017 Mo).
3. La mémoire de pagination
Pour
stocker la mémoire de pagination, il y a deux possibilités : soit
utiliser un fichier normal soit utiliser une partition dédiée. Même
s'il est conseillé d'utilser une partion disque dédiée pour des
questions de rapidité notamment, il est aussi possible d'utiliser un
fichier d'échange. L'avantage de cette deuxième solution consiste
essentiellement à sa mise en place rapide mais également à sa
possibilité d'augmenter facilement sa taille.
3.1 Partition de swap
Une
partition peut être définie sur une partition du disque dur ou un
volume logique. Il faut formater la partition pour accueillir l'espace
de pagination à l'aide de la commande mkswap -c <nom de la partition> (le paramètre -c permet de vérifier les erreurs).
Exemple :
#mkswap -c /dev/hda7
Il faut ensuite activer cette nouvelle partition swap en utilisant la commande swapon <nom de la partition>.
Exemple :
#swapon /dev/hda7
Pour visualiser, vous pouvez utiliser la commande swapon -s.
Exemple :
#swapon -s
Filename
Type
Size Used Priority
/dev/hda2
partition 1550232
1084 -1
/dev/hda7
partition 1550232
1084 -2
La
notion de priorité définit la priorité d'utilisation de la partition
swap. Ainsi celle qui a la plus grande priorité est utilisée en
premier. Il est conseillé de définir des priorités équivalentes pour
des partitions SWAP situées sur un même disque physique car le système
les utilisera en parallèle, ce qui permet un accès plus rapide.
Pour désactiver une partition de swap vous devez utiliser la commande swapoff <nom de la partition>
Exemple :
#swapoff /dev/hda7
3.2 Fichier de swap
Pour créer un fichier de swap, il faut utiliser la commande dd. La commande dd utilise notamment les paramètres suivants :
if : fichier en entrée
of : fichier en sortie
bs : taille des blocs en octet avec laquelle les données seront lues (par défaut 512)
count : nombre de blocs à lire
Ici nous allons créer un de 256 Mo en utilisant en entrée le fichier spécial /dev/zero retourne des caractères "null".
Exemple :
#dd if=/dev/zero of=ficswap bs=1024k count=256
256+0 records in
256+0 records out
268435456 bytes transferred in 12.565065 seconds (21363635 bytes/sec)
Nous allons ensuite formater notre fichier pour qu'il puisse accueillir l'espace de pagination :
#mkswap ficswap
Setting up swapspace version 1, size = 268431 kB
no label, UUID=05a66ce3-f133-4b88-a08d-2cd8d3e202eb
Puis ensuite nous activons cette nouveau espace de pagination :
#swapon ficswap
Nous pouvons vérifier que ce nouvel espace de pagination est bien activé :
#swapon -s
Filename
Type
Size Used Priority
/dev/hda2
partition 1550232
63256 -1
/dev/hda7
partition 1550232 63256 -2
/home/ficswap
file 262136
0 -3
Enfin pour activer cet espace au démarrage, vous devrez ajouter les lignes suivantes dans votre fichier /etc/fstab :
/home/fciswap swap swap defaults,pri=-3 0 0
4. Commande pour obtenir des informations sur la mémoire
4.1 vmstat
vmstat permet d'afficher les statistiques sur la mémoire virtuelle.
Exemple d'utilisation :
vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free
buff cache si
so bi bo
in cs us sy id wa
1 0 189088 8600 16020 107424
1 4 9 18
399 903 22 3 76
0
2 0 189088 8576 16020 107424
0 0 0 0
397 2926 27 1 72 0
6 0 189088 8572 16020 107424
0 0 0 0
442 2903 25 2 73 0
4 0 189088 8600 16020 107424
0 0 0 0
679 3843 31 2 67 0
1 0 189088 8580 16028 107424
0 0 0 25
680 3660 27 3 70 0
memory :
- swpd : Quantité de mémoire virtuelle utilisée en Ko (mémoire disponible -mémoire utilisé + swap utilisé)
-free : Quantité de mémoire physique libre
- buff : de mémoire utilisée comme tampons d'E/S
swap :
- si: Quantité de mémoire paginé lue depuis un disque en ko/s.
- so: Quantité de mémoire paginé transférée sur disque en ko/s.
4.1 sar (System Activity Reporter)
La commande sar n'est pas installé par défaut sur un système Debian. Pour cela, vous devez installer le paquet sysstat.
#apt-get install sysstat
L'option -r permet d'avoir des statistiques sur la mémoire et l'espace de pagination
Exemple :
#sar -r 5
Linux 2.4.27-2-k7 (linux) 05/07/06
01:43:26
kbmemfree kbmemused %memused kbbuffers
kbcached kbswpfree kbswpused %swpused kbswpcad
01:43:31
9296
506428 98.20
18656
104092 1359992 190240
12.27 11072
Average:
9296
506428 98.20
18656
104092 1359992 190240
12.27 11072
kbmemfree : quantité de mémoire libre en Ko
kbmemused : quantité de mémoire utilisée en Ko
%memused : pourcentage de mémoire utilisée
05 mars 2006
Gestion des modules
1. Principes
Les différents composants nécessaires à votre machine peuvent être chargés de deux manières possibles :
- soit ils sont chargés directement par le noyau
- soit ils peuvent intégrés et chargés au cours de l'exécution du noyau.
L'insertion en dynamique de nouveaux modules évite notamment d'avoir
à recompiler systèmatiquemnt son noyau lors de nouveaux besoins.
Le
code compilé des différentes fonctionnalités et des différents pilotes
de périphériques peut se trouver soit dans l'image du noyau comem nous
l'avons dit précédemment soit dans des fichiers situés sous /lib/modules/<version du noyau>.
2. Ajouter un module
Il existe deux commandes pour ajouter un module : insmod et modprobe.
insmod permet d'insérer individuellement un module en mémoire alors que mobprobe
insérera lui aussi le module mais également toutes ses dépendances. Il
est donc conseillé d'utiliser prioritairement la commande modprobe.
Voici la syntaxe de la commande pour ajouter un module avec modprobe :
#modprobe <nom du module>
Exemple :
#modprobe loop
3. Supprimer un module
Pour supprimer un module de la mémoire, il faut utiliser la commande rmmod.
Voici la syntaxe :
#rmmod <nom du module>
Exemple :
#rmmod loop
4. lister l'ensemble des modules chargés
Pour voir quels sont les modules chargés en mémoire, il faut utiliser la commande lsmod.
5. Informations sur un module
Pour obtenir des informations sur un module, utiliser la commande modinfo (cette commande étant récente, tous les modules ne contiennent pas des informations). La syntaxe est modinfo <nom du module>
#modinfo snd-emu10k1
filename: /lib/modules/2.4.27-2-k7/updates/alsa/snd-emu10k1.o
description: "EMU10K1"
author: "Jaroslav Kysela <perex@suse.cz>"
license: "GPL"
parm: index int array (min = 1, max = 8), description "Index value for the EMU10K1 soundcard."
parm: id string array (min = 1, max = 8), description "ID string for the EMU10K1 soundcard."
parm: enable int array (min = 1, max = 8), description "Enable the EMU10K1 soundcard."
parm:
extin int array (min = 1, max = 8),
description "Available external inputs for FX8010. Zero=default."
parm:
extout int array (min = 1, max = 8),
description "Available external outputs for FX8010. Zero=default."
parm:
seq_ports int array (min = 1, max = 8),
description "Allocated sequencer ports for internal synthesizer."
parm:
max_synth_voices int array (min = 1, max =
8), description "Maximum number of voices for WaveTable."
parm:
max_buffer_size int array (min = 1, max = 8),
description "Maximum sample buffer size in MB."
parm: enable_ir int array (min = 1, max = 8), description "Enable IR."
6. Modconf : gestion par interface
Il existe un outil qui permet de charger des modules supplémentaires dans le noyau grâce à une interface : modconf. Si vous voulez tester ce paquet, installez le :
#apt-get install modconf
Ensuite pour le lancer :
#modconf
Voici ce que cela donne :
28 janvier 2006
Ajout d'un nouveau système de fichiers
Ici nous allons expliquer comment récupérer de l'espace disque non utilisé ou après désinstallation de windows.
1. Théorie sur le partitionnement d'un disque
Il existe trois sortes de partition sur un disque : la partition principale (appelée aussi partition primaire), la partition étendue et les lecteurs logiques. Vous pouvez installer jusqu'à 4 partitions principales mais une seule ne pourra être active (ceci est une limite de l'architecture des PC). Afin de pallier à cette limitation, il est possible de créer ce que l'on appelle une partition étendue puis ensuite créer dessus des lecteurs logiques.
Ainsi sur windows, vous pourrez avoir quelques chose de la forme suivante : 
2. Exemple concret
2.1 Configuration actuelle
Soit la machine suivante : Un disque dur de 60 Go.
Nous avons la configuration suivante :
Disk geometry for /dev/hda: 0.000-57241.898 megabytes
Disk label type: msdos
Minor Start End
Type
Filesystem Flags
1 0.031
266.704 primary ext3
boot
2 266.704 19336.047 extended
5 266.735 5036.000 logical ext3
6 5036.032 7899.147 logical ext3
7 7899.179 9413.085 logical linux-swap
8 9413.117 9797.453 logical ext3
9 9797.484 19336.047 logical ext3
Nous avons donc une partition primaire et une partition étendue avec 5 lecteurs logiques.
Device Boot Start End Blocks Id System
/dev/hda1 *
1
34
273073+ 83
Linux
/dev/hda2
35
2465 19527007+ 5 Extended
/dev/hda5
35
642
4883728+ 83 Linux
/dev/hda6
643
1007 2931831 83 Linux
/dev/hda7
1008 1200 1550241 82
Linux swap / Solaris
/dev/hda8
1201 1249 393561
83 Linux
/dev/hda9
1250 2465 9767488+ 83
Linux
Nous
avons donc la partition primaire /dev/hda1 et /dev/hda2 la
partition étendue sur laquelle réside nt 5 lecteurs logiques (hda5,
hd6, hd7 pour la swap, hd8 et hda9).
2.1 Créer un nouveau lecteur logique /dev/hda10
Nous avons dit plus haut que nous utilisions 20 Go de notre disque dur de 60 Go. Nous voulons créer un nouveau système de fichier dont le nom sera film et qui devra faire une taille de 30 Go. Il va donc nous falloir étendre notre partition étendue /dev/hda2 de 30 Go et donc créer un nouveau lecteur logique.
Pour cela, j'ai utilisé QtParted du cd SystemRescueCD (www.sysresccd.org). lorsque vous bootez sur le CD, il faut alors taper la commande
run_qtparted
A partir de là, cela ressemble à partition magique. vous créez simplement votre nouveau lecteur logique.
2.2 Nouvelle configuration après partitionnement
Device Boot Start
End
Blocks Id
System
/dev/hda1 *
1 34
273073+ 83 Linux
/dev/hda2
35 6564
52452225 f W95 Ext'd (LBA)
/dev/hda5
35
642
4883728+ 83 Linux
/dev/hda6
643
1007
2931831 83 Linux
/dev/hda7
1008 1200
1550241 82 Linux swap /
Solaris
/dev/hda8
1201
1249 393561 83
Linux
/dev/hda9
1250
2465 9767488+ 83
Linux
/dev/hda10
2466 6564
32925186 83 Linux
On voit maintenant que notre partition étendue hda2 est
augmenté et un nouveau lecteur logique hda10 a été créé d'une taille
environ de 32 Go.
2.3 Création d'un nouveau système de fichier
Il s'agit maintenant de créer notre nouveau système de fichier /films.
-
Formatage de la partition en ext3 : dans un premier temps, nous allons
formater notre nouvelle partition (ou lecteur logique) afin de pouvoir
créer un système fichier dessus. Nous allons la formater pour créer un
système fichier journalisé ext3.
# mkfs.ext3 /dev/hda10
mke2fs 1.37 (21-Mar-2005)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
4120704 inodes, 8231296 blocks
411564 blocks (5.00%) reserved for the super user
First data block=0
252 block groups
32768 blocks per group, 32768 fragments per group
16352 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
-
Création du point de montage : maintenant nous allons créer notre point
de montage. Pour cela, nous allons créer notre répertoire films sous /
pour faire au plus simple. Nous allons le faire appartenir à
l'utilisateur tagger.
# mkdir films
#ls -ld films
drwxr-xr-x 2 root root 1024 Jan 14 15:29 films
# chown tagger:tagger /films
# ls -ld films
drwxr-xr-x 2 tagger tagger 1024 Jan 14 15:29 films
Voilà notre point de montage est créé.
-
Montage du système de fichier : maintenant, nous allons monter notre
partition /dev/hda10 qui fait 30 Go environ sur notre répertoire
servant de point de montage /films.
# mount -t ext3 /dev/hda10 /films
maintenant
regardons si notre nouveau système de fichier est bien monté (on peut
utiliser la commande mount mais pour avoir plus détail nous utilisons
df -k)
# df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hda1
255912
96210 146049 40% /
tmpfs
257860 0
257860 0% /dev/shm
/dev/hda9
9614116
1168408 7957336 13% /home
/dev/hda5
4807056
2087244 2475628 46% /usr
/dev/hda6
2885780
704892 2034300 26% /var
/dev/hda10
32407936
32828 30728852 1% /films
Voilà notre système de fichier est bien monté sur /films et fait environ 30 Go.
-
Montage automatique du système de fichier au boot : maintenant nous
allons ajouter une entrée dans le fichier /etc/fstab afin que notre
système de fichier monte automatiquement à chaque démarrage. Il faut
donc éditer le fichier fstab et ajouter la ligne suivante :
/dev/hda10
/films
ext3 defaults 0
2
Ce qui donne le fichier /etc/fstab suivant :
# /etc/fstab: static file system information.
#
#
<file system> <mount point> <type>
<options> <dump>
<pass>
proc
/proc proc
defaults 0
0
/dev/hda1 /
ext3
defaults,errors=remount-ro 0 1
/dev/hda9
/home
ext3 defaults 0
2
/dev/hda5 /usr
ext3
defaults 0 2
/dev/hda6
/var
ext3 defaults
0 2
/dev/hda10
/films ext3
defaults 0 2
/dev/hda7
none
swap sw
0 0
/dev/hdb /media/cdrom0 iso9660 ro,user,noauto 0 0
/dev/hdc /media/cdrom1 iso9660 ro,user,noauto 0 0
/dev/fd0
/media/floppy0 auto
rw,user,noauto 0 0
/dev/sda1
/mnt/usbkey vfat
defaults,noauto,user,sync,uid=1000,gid=1000,umask=022
0 0
Voilà à chaque démarrage, notre nouveau système de fichiers sera monté automatiquement.

