DebSousDeb - Débuter sous Debian

Débuter sous Debian ou la Découverte au Jour le Jour de la Distribution Debian

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 :
1

Ecran n°2 :
2

Ecran n°3 :
3

Ecran n°4 :
4

Ecran n°5 :
5

Ecran n°6 :
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):
7

Ecran n°8 :
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 :
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 ;-)
11

Posté par tagger à 22:05 - 10. Administration système - Commentaires [0] - Rétroliens [0] - Permalien [#]
Tags :

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


Posté par tagger à 22:46 - 10. Administration système - Commentaires [0] - Rétroliens [0] - Permalien [#]
Tags :

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

Posté par tagger à 18:54 - 10. Administration système - Commentaires [0] - Rétroliens [0] - Permalien [#]
Tags :

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.

Posté par tagger à 19:05 - 10. Administration système - Commentaires [0] - Rétroliens [0] - Permalien [#]
Tags :

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

Posté par tagger à 17:04 - 10. Administration système - Commentaires [2] - Rétroliens [0] - Permalien [#]

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 :
modconf

Posté par tagger à 11:00 - 10. Administration système - Commentaires [0] - Rétroliens [0] - Permalien [#]
Tags :

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 :
partition1















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.

Posté par tagger à 15:02 - 10. Administration système - Commentaires [0] - Rétroliens [0] - Permalien [#]



« Accueil  1