[OpenBSD]

[Index de la FAQ] [Section 13 - Multimédia] [Section 15 - Paquetages et Ports]

14 - Configuration des disques


Table des matières


14.1 - Utilisation de disklabel(8) sous OpenBSD

Qu'est-ce que disklabel(8) ?

Pour commencer, lisez le manuel de disklabel(8).

La façon de configurer les disques sous OpenBSD diffère légèrement selon les plates-formes. Sous i386, amd64, macppc, zaurus et cats, la configuration se déroule en deux étapes. Tout d'abord, la tranche contenant OpenBSD sur le disque est définie en utilisant fdisk(8) et ensuite divisée en partitions OpenBSD avec disklabel(8).

Toutes les autres plates-formes utilisent disklabel(8) pour la gestion complète des partitions OpenBSD. Les plates-formes qui utilisent aussi fdisk(8) placent toutes les partitions disklabel(8) dans une tranche fdisk.

Les labels contiennent certaines informations sur votre disque, comme sa géométrie ou les systèmes de fichiers présents sur celui-ci. Ils contiennent également des données sur le disque lui-même comme la vitesse de rotation, l'ordonnancement etc, présentent pour des raisons historiques et souvent incorrectes. Il est inutile de s'en inquiéter. Le disklabel est utilisé par le programme de bootstrap pour accéder aux disques et connaître le type de systèmes de fichiers présents. Vous pouvez accéder à de plus amples informations sur disklabel en lisant le manuel disklabel(5).

Sur certaines plates-formes, l'utilisation de disklabel permet de passer outre les limitations de partitionnement liées aux types d'architectures. Par exemple, sur i386, vous pouvez avoir 4 partitions primaires mais avec disklabel(8), vous utilisez une de ces partitions 'primaires' pour stocker *toutes* vos partitions OpenBSD (par exemple, 'swap', '/', '/usr', '/var', etc...) et il vous reste encore 3 partitions disponibles pour d'autres systèmes d'exploitation !

disklabel(8) à l'installation d'OpenBSD

Une partie importante de l'installation d'OpenBSD est la création initiale des labels. A l'installation, vous utiliserez disklabel(8) afin de créer les différentes partitions. Vous pourrez définir vos points de montage à partir de disklabel(8) et le changer plus tard pendant l'installation ou même après celle-ci.

Il n'existe pas de "bonne" façon de créer un label disque mais il en existe beaucoup de mauvaises. Avant de créer un label sur votre disque, lisez ce chapitre sur le partitionnement.

Pour un exemple d'utilisation de disklabel(8) pendant l'installation, référez-vous à la configuration des disques du guide d'installation.

Utilisations de disklabel(8) après l'installation

Après l'installation, un des usages les plus courants de disklabel(8) est de vérifier la disposition de votre disque. La commande suivante affichera le disklabel courant sans le modifier :

# disklabel wd0 <-- Selon le disque que vous souhaitez vérifier # Inside MBR partition 3: type A6 start 63 size 29880837 # /dev/rwd0c: type: ESDI disk: ESDI/IDE disk label: Maxtor 51536H2 flags: bytes/sector: 512 sectors/track: 63 tracks/cylinder: 16 sectors/cylinder: 1008 cylinders: 16383 total sectors: 29888820 rpm: 3600 interleave: 1 trackskew: 0 cylinderskew: 0 headswitch: 0 # microseconds track-to-track seek: 0 # microseconds drivedata: 0 16 partitions: # size offset fstype [fsize bsize cpg] a: 614817 63 4.2BSD 2048 16384 328 # Cyl 0*- 609 b: 409248 614880 swap # Cyl 610 - 1015 c: 29888820 0 unused 0 0 # Cyl 0 - 29651* d: 6291936 1024128 4.2BSD 2048 16384 328 # Cyl 1016 - 7257 e: 409248 7316064 4.2BSD 2048 16384 328 # Cyl 7258 - 7663 f: 1024128 9822960 4.2BSD 2048 16384 328 # Cyl 9745 - 10760 h: 2097648 7725312 4.2BSD 2048 16384 328 # Cyl 7664 - 9744

Notez que, pour le moment, ce disque n'a qu'une partie de son espace disponible allouée. Disklabel offre deux modes d'édition différents, un mode de commandes (utiliser à l'installation d'OpenBSD) et un éditeur complet tel que vi(1). Le mode de commandes peut paraître plus simple puisqu'il vous guide à travers les différentes étapes et propose une aide intégrée, mais le mode éditeur possède également une véritable utilité.

Ajoutons une partition au système précédent.

Attention : chaque fois que vous touchez à votre disklabel, vous mettez en danger toutes les données présentes sur le disque. Soyez sûr que vos données soient sauvegardées avant d'éditer un disklabel existant !

Nous utiliserons le mode de commandes intégré qui est lancé avec l'option "-E" de disklabel(8)

# disklabel -E wd0 ... > a k offset: [10847088] size: [19033812] 2g Rounding to nearest cylinder: 4194288 FS type: [4.2BSD] > p m device: /dev/rwd0c type: ESDI disk: ESDI/IDE disk label: Maxtor 51536H2 bytes/sector: 512 sectors/track: 63 tracks/cylinder: 16 sectors/cylinder: 1008 cylinders: 16383 total bytes: 14594.2M free bytes: 7245.9M rpm: 3600 16 partitions: # size offset fstype [fsize bsize cpg] a: 300.2M 0.0M 4.2BSD 2048 16384 328 # Cyl 0*- 609 b: 199.8M 300.2M swap # Cyl 610 - 1015 c: 14594.2M 0.0M unused 0 0 # Cyl 0 - 29651* d: 3072.2M 500.1M 4.2BSD 2048 16384 328 # Cyl 1016 - 7257 e: 199.8M 3572.3M 4.2BSD 2048 16384 328 # Cyl 7258 - 7663 f: 500.1M 4796.4M 4.2BSD 2048 16384 328 # Cyl 9745 - 10760 h: 1024.2M 3772.1M 4.2BSD 2048 16384 328 # Cyl 7664 - 9744 k: 2048.0M 5296.4M 4.2BSD 2048 16384 16 # Cyl 10761 - 14921 > q Write new label?: [y]
Dans ce cas, disklabel(8) a été capable de calculer un bon point de départ pour la partition. La plupart du temps ce sera le cas mais si vous avez des "trous" dans votre disklabel (ex. vous avez supprimez votre partition ou vous aimez simplement vous compliquer la vie) il vous faudra prendre le temps de calculer un offset correct. Notez que même si disklabel(8) effectue certaines vérifications il est très possible de faire de grosses erreurs. Faites attention et comprenez bien les valeurs que vous utilisez.

Sur la plupart des plates-formes OpenBSD, il y 16 partitions disklabel disponibles, notées de "a" à "p" (certains systèmes "spécialisés" n'en ont que huit). Chaque disklabel doit avoir une partition 'c' avec un "fstype" défini à "unused" qui couvre l'ensemble du disque physique. Si ce n'est pas le cas de votre disklabel, il doit être fixé, l'option "D" (plus bas) peut être utilisée. Ne tentez jamais d'utiliser la partition "c" pour autre chose que l'accès en mode raw des secteurs du disque et n'essayez pas de créer un système de fichiers sur "c". Sur le périphérique de démarrage et seulement sur celui-ci, "a" est réservé pour la partition racine et "b" pour le swap. Tous les autres périphériques peuvent utiliser l'ensemble des quinze partitions en dehors de 'c' pour leur système de fichiers.

Trucs et astuces sur disklabel

14.2 - Utilisation de fdisk(8) sous OpenBSD

Avant de commencer, lisez le manuel de fdisk(8).

fdisk(8) est utilisé sur certaines plates-formes (i386, amd64, macppc, zaurus et cats) pour créer une partition reconnue par la ROM de démarrage du système dans laquelle les partitions disklabel d'OpenBSD peuvent être inscrites. Les autres plates-formes n'ont pas besoin d'utiliser fdisk(8). fdisk(8) peut également être utilisé pour la manipulation du MBR ("Master boot record") pouvant avoir un impact sur tous les systèmes présents sur la machine. A l'inverse de certains programmes dont les fonctionnalités sont proches de celles de fdisk, sous OpenBSD cette commande assume que vous savez ce que vous voulez faire et en règle générale n'interviendra pas dans vos décisions, ce qui en fait un outil très puissant. Il vous laissera également faire des choses que vous n'aviez pas forcément prévues et doit donc être utilisé avec précaution.

Normalement, seule une partition fdisk OpenBSD sera inscrite sur le disque. Cette partition sera divisée par disklabel en différentes partitions systèmes de fichiers OpenBSD.

Pour simplement voir votre table de partition avec fdisk, utilisez :

# fdisk sd0

Ce qui vous donnera une sortie similaire à celle-ci :

Disk: sd0 geometry: 553/255/63 [8883945 Sectors] Offset: 0 Signature: 0xAA55 Starting Ending LBA Info: #: id C H S - C H S [ start: size ] ------------------------------------------------------------------------ *0: A6 3 0 1 - 552 254 63 [ 48195: 8835750 ] OpenBSD 1: 12 0 1 1 - 2 254 63 [ 63: 48132 ] Compaq Diag. 2: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused 3: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused

Dans cet exemple, nous voyons la sortie de fdisk concernant le premier lecteur SCSI. Nous pouvons voir les partitions OpenBSD (A6). Le * indique que la partition OpenBSD est amorçable.

Dans l'exemple précédent, nous avons simplement accédé à une information. Qu'en est-il si nous souhaitons éditer notre table de partition ? Et bien, pour ce faire, nous devons utiliser l'option - e. Ceci fera apparaître une invite de commandes pour interagir avec fdisk.

# fdisk -e wd0 Enter 'help' for information fdisk: 1> help help Command help list manual Show entire OpenBSD man page for fdisk reinit Re-initialize loaded MBR (to defaults) setpid Set the identifier of a given table entry disk Edit current drive stats edit Edit given table entry flag Flag given table entry as bootable update Update machine code in loaded MBR select Select extended partition table entry MBR swap Swap two partition entries print Print loaded MBR partition table write Write loaded MBR to disk exit Exit edit of current MBR, without saving changes quit Quit edit of current MBR, saving current changes abort Abort program without saving current changes fdisk: 1>

Voici un aperçu des commandes disponibles lorsque vous utilisez l'option -e.

trucs et astuces fdisk

14.3 - Ajout de nouveaux disques sous OpenBSD

Une fois votre disque CORRECTEMENT installé, vous devez utiliser fdisk(8) (i386 seulement) et disklabel(8) afin de le configurer pour OpenBSD.

Pour les utilisateurs i386, commencez avec fdisk. Les autres architectures peuvent ignorer cette étape. Dans l'exemple suivant, nous ajouterons un troisième disque SCSI au système.

# fdisk -i sd2
Cette commande va initialiser la "véritable" table de partition du disque pour un usage exclusif par OpenBSD. Ensuite, vous devez créer un disklabel. Ceci risque de sembler confus.
# disklabel -e sd2 (screen goes blank, your $EDITOR comes up) type: SCSI ...bla... sectors/track: 63 total sectors: 6185088 ...bla... 16 partitions: # size offset fstype [fsize bsize cpg] c: 6185088 0 unused 0 0 # (Cyl. 0 - 6135) d: 1405080 63 4.2BSD 1024 8192 16 # (Cyl. 0*- 1393*) e: 4779945 1405143 4.2BSD 1024 8192 16 # (Cyl. 1393*- 6135)
Tout d'abord, ignorez la partition 'c', celle-ci est toujours présente et est nécessaire au fonctionnement de programmes comme disklabel ! Le type de système de fichiers ("fstype") pour OpenBSD est 4.2BSD. Le nombre total de secteurs ("total sectors") représente la taille du disque. Admettons qu'il s'agit d'un disque de 3 gigaoctets. 3 gigaoctets en terme de constructeur de disques représente 3000 megaoctets. Divisons 6185088 par 3000 (on utilise bc(1)). Vous obtenez 2061. Ainsi, pour décider des tailles des partitions a, d, e, f, g, ... multipliez simplement X par 2061 afin d'avoir X megaoctets d'espace sur cette partition. L'offset de votre première partition doit être égal à "sectors/track" comme rapporté par disklabel. Pour nous, cette valeur est égale à 63. L'offset de chaque partition suivante résultera de la combinaison de la taille et de l'offset de chacune d'elle (sauf la partition 'c' qui n'intervient pas dans cette équation).

Ou, si vous souhaitez simplement une partition couvrant tout le disque, afin d'offrir un espace de stockage web, un répertoire d'utilisateurs ("home") ou autre chose, ôtez simplement la valeur "sectors/track" à la taille totale du disque. 6185088-63 = 6185025. Votre partition est :

d: 6185025 63 4.2BSD 1024 8192 16
Si tout ceci vous semble inutilement complexe, vous pouvez simplement utiliser disklabel -E pour entrer dans le même mode de partitionnement dont vous disposiez à l'installation ! Dans celui- ci, vous pouvez utiliser "96M" pour spécifier "96 megaoctets" (ou, si vous possédez un disque suffisamment gros, 96G pour 96 gigaoctets). En revanche, le mode -E utilise la géométrie BIOS du disque, pas sa véritable géométrie, et souvent ces deux valeurs sont différentes. Pour passer outre cette limitation, tapez 'g d' pour "geometry disk" (géométrie disque). Les autres options sont 'g b' for "geometry bios" (géométrie bios) et 'g u' pour "geometry user" (géométrie utilisateur) ou simplement, ce que le label affichait avant que disklabel n'effectue des changements.

Voilà qui était dense. Mais tout n'est pas terminé. Vous devez à présent créer un système de fichiers sur ce disque en utilisant newfs(8).

# newfs sd2a

Ou autre, selon le nom donné à votre disque par le système de nommage d'OpenBSD (regardez la sortie de dmesg(8) pour voir comment OpenBSD a nommé votre disque).

Maintenant, il vous faut décider où vous souhaitez monter cette partition nouvellement créée. Disons que vous vouliez la monter sur /u. Tout d'abord, créez le répertoire /u. Puis montez-le.

# mount /dev/sd2a /u

Enfin, ajoutez-le a /etc/fstab(5).

/dev/sd2a /u ffs rw 1 1

Et si vous souhaitiez migrer un répertoire existant comme /usr/local ? Vous devriez monter le nouveau disque sur /mnt et utiliser cpio - pdum pour copier /usr/local vers le répertoire /mnt. Editez le fichier /etc/fstab(5) afin de préciser que votre partition /usr/local est maintenant /dev/sda2 (votre nouvelle partition formatée). Exemple :

/dev/sd2a /usr/local ffs rw 1 1

Redémarrez en mode single user avec boot -s, déplacez le répertoire /usr/local vers /usr/local-backup (ou si vous vous sentez en veine, supprimez-le) et créez un répertoire /usr/local vide. Enfin, redémarrez le système et voilà, les fichiers sont présents !

14.4 - Comment créer un espace de pagination dans un fichier

(Note : si vous souhaitez ajouter un espace de pagination dans un fichier parce que vous recevez des erreurs du type "virtual memory exhausted", vous devriez d'abord essayer d'augmenter la limite des processus avec unlimit(1) pour csh ou ulimit(1) pour sh)

Il n'est pas nécessaire de recompiler le noyau pour utiliser un fichier comme espace de pagination, même si cela peut être effectué à des fins de personnalisation, cette faq vous montrera les deux façons de faire.

Paginer dans un fichier

L'utilisation d'un fichier d'échange est le moyen le plus simple et le plus rapide pour augmenter l'espace de pagination (swap) disponible. Ce fichier ne doit pas résider sur un système de fichiers dont l'option "SoftUpdates" est activée (cette option est désactivée par défaut). Pour commencer, vous pouvez voir la taille totale et utilisée de votre swap actuel en utilisant l'utilitaire swapctl(8). Pour ce faire, lancez la commande :

$ swapctl -l Device 512-blocks Used Avail Capacity Priority swap_device 65520 8 65512 0% 0

Cela vous affiche les différents dispositifs utilisés pour la pagination ainsi que leurs statistiques actuelles. Dans l'exemple précédent, il n'y a qu'un seul dispositif nommé "swap_device". Il s'agit de l'espace disque prédéfini utilisé pour paginer (partition b visible sous disklabel). Comme vous pouvez le constater dans l'exemple précédent, cet espace n'est pas beaucoup utilisé pour le moment. Mais pour les besoins de ce document, nous imaginerons que 32Mo supplémentaires sont nécessaires.

La première chose à faire pour configurer un fichier en tant que dispositif de pagination est de créer ce fichier. Le mieux est d'utiliser la commande dd(1). Voici un exemple montrant la création d'un fichier /var/swap de 32Mo.

$ sudo dd if=/dev/zero of=/var/swap bs=1k count=32768 32768+0 records in 32768+0 records out 33554432 bytes transferred in 20 secs (1677721 bytes/sec)

Une fois que cela est fait, nous pouvons activer la pagination vers ce fichier. Pour ce faire, utilisez la commande suivante :

$ sudo chmod 600 /var/swap $ sudo swapctl -a /var/swap

A présent, vérifions que ce fichier a bien été ajouté à la liste des dispositifs de pagination disponibles.

$ swapctl -l Device 512-blocks Used Avail Capacity Priority swap_device 65520 8 65512 0% 0 /var/swap 65536 0 65536 0% 0 Total 131056 8 131048 0%

Maintenant que le fichier de pagination est activé, vous devez ajouter une ligne à votre fichier /etc/fstab afin que les changements soient pris en compte au prochain redémarrage. Si cette ligne n'est pas ajoutée, ce dispositif ne sera plus activé au prochain reboot.

$ cat /etc/fstab /dev/wd0a / ffs rw 1 1 /var/swap /var/swap swap sw 0 0

Paginer via un périphérique vnode

Il s'agit d'une solution plus définitive pour ajouter de l'espace de pagination. Afin de paginer vers un fichier de façon permanente, commencez par créer un noyau avec vnd0c comme swap. Si votre système de fichiers racine est wd0a, alors wd0b est votre ancien swap ; utilisez la ligne suivante dans le fichier de configuration du noyau (référez-vous à la section de compilation d'un nouveau noyau en cas de doute) :

config bsd root on wd0a swap on wd0b and vnd0c dumps on wd0b

Après cela, le fichier qui sera utilisé pour paginer devra être créé. Pour ce faire, utilisez la même commande que pour l'exemple précédent.

$ sudo dd if=/dev/zero of=/var/swap bs=1k count=32768 32768+0 records in 32768+0 records out 33554432 bytes transferred in 20 secs (1677721 bytes/sec)

A présent que votre fichier est en place, vous devez l'ajouter dans votre fichier /etc/fstab. Voici une ligne d'exemple pour démarrer la machine avec ce dispositif de pagination activé.

$ cat /etc/fstab /dev/wd0a / ffs rw 1 1 /dev/vnd0c none swap sw 0 0

Votre ordinateur doit maintenant être redémarré afin que les changements effectués sur le noyau soient pris en compte. Une fois que cela est fait, il est temps de configurer le dispositif pour paginer. On utilisera la commande vnconfig(8).

$ sudo vnconfig -c -v vnd0 /var/swap vnd0: 33554432 bytes on /var/swap

La dernière étape consiste à activer la pagination vers ce dispositif. Cela s'effectue de la même façon que dans les exemples précédents, en utilisant using swapctl(8). Puis nous vérifierons qu'il a bien été ajouté à la liste des dispositifs de pagination disponibles.

$ sudo swapctl -a /dev/vnd0c $ swapctl -l Device 512-blocks Used Avail Capacity Priority swap_device 65520 8 65512 0% 0 /dev/vnd0c 65536 0 65536 0% 0 Total 131056 8 131048 0%

14.5 - Soft Updates

Les "Soft Updates" sont basés sur une idée de Greg Ganger et Yale Patt et ont été développés pour FreeBSD par Kirk McKusick. Les Soft Updates imposent une réorganisation partielle des opérations sur le tampon permettant la suppression du code FFS, des écritures synchrones des entrées. Une augmentation des performances est ainsi réalisée lors des écritures sur disque.

L'activation des Soft Updates est effectuée par une option de montage. Lors du montage d'une partition avec l'utilitaire mount(8), vous pouvez activer les Soft Updates sur celle-ci. Voici l'exemple d'une entrée dans le fichier /etc/fstab(5) permettant de monter la partition sd0a avec les Soft Updates activés.

/dev/sd0a / ffs rw,softdep 1 1

Note aux utilisateur sparc : n'activez pas Soft Updates sur les machines de type sun4 ou sun4c. Ces architectures ne supportent qu'un montant très faible de mémoire noyau et ne peuvent utiliser cette fonctionnalité. En revanche, les machines de type sun4m ne posent pas de problème.

14.6 - Comment se déroule le processus de démarrage d'OpenBSD/i386 ?

Le processus de démarrage d'un système OpenBSD/i386 est loin d'être simple et une bonne compréhension de celui-ci peut être utile afin de diagnostiquer un problème lorsque les choses ne fonctionnent pas. Ce processus comporte quatre étapes clefs :
  1. Master Boot Record (MBR) : Le "Master Boot Record" (enregistrement de démarrage principal) est le premier secteur (512 octets) du disque. Il contient la table de partition primaire et un petit programme permettant de charger le "Partition Boot Record" (PBR - enregistrement de démarrage des partitions). Notez que dans certains environnements, le terme "MBR" se réfère uniquement à la portion de code comprise dans le premier bloc du disque et non pas au bloc entier (incluant la table de partition). Il est primordial de comprendre le sens d'"initialiser le MBR" ; la terminologie sous OpenBSD sous-entend la réécriture complète du secteur MBR et pas seulement son code, comme cela peut être le cas avec certains systèmes. Vous n'en aurez l'utilité que très rarement. Pour ce faire, utilisez l'option "-u" de la commande fdisk(8) ("fdisk -u wd0").

    Bien qu'un MBR soit inclut avec OpenBSD, vous n'êtes pas obligé de l'utiliser puisque virtuellement, n'importe quel MBR est capable de le faire démarrer. Le MBR se manipule avec l'aide du programme fdisk(8) qui est utilisé pour éditer la table de partition mais également pour installer le code MBR sur le disque.

    Le MBR d'OpenBSD s'annonce avec le message suivant :

    Using drive 0, partition 3.
    montrant le disque ainsi que la partition d'où il s'apprête à charger le PBR. On peut également voir un point (".") en fin de ligne, ce qui signifie que la machine est capable d'utiliser la conversion LBA ("Logical Block Adressing") au démarrage. Si la machine avait été incapable d'une telle conversion, le point aurait été remplacé par un point-virgule (";"), indiquant une conversion CHS ("Cylinder-Head-Sector") :
    Using Drive 0, Partition 3;
    Notez que le point ou le point-virgule en fin de ligne peut servir d'indicateur du "nouveau" MBR OpenBSD introduit à partir de la version 3.5.
  2. Partition Boot Record (PBR) : Le "Partition Boot Record" (enregistrement de démarrage de partition), aussi appelé PBR ou biosboot(8) (d'après le nom du fichier contenant le code) représente le premier secteur physique de la partition OpenBSD du disque. Le PBR est le "first-stage boot loader" (chargeur de démarrage de niveau un) d'OpenBSD. Il est exécuté par le code MBR et se charge de lancer le "second- stage boot loader" (chargeur de démarrage de niveau deux), boot(8). Comme le MBR, le PBR est constitué d'une toute petite quantité de code et de données d'une taille totale de 512 octets. Ce n'est pas suffisant pour avoir une application reconnaissant un système de fichiers, donc, plutôt que de demander au PBR de localiser /boot sur le disque, la localisation de /boot accessible par le BIOS est codée physiquement dans le PBR lors de l'installation.

    Le PBR est installé par installboot, décrit dans plus en détails dans la suite de ce document. Le PBR s'annonce avec le message suivant :

    Loading...
    affichant un point pour chaque bloc qu'il essaye de charger. Comme précédemment, le PBR montre s'il utilise une conversion LBA ou CHS pour s'exécuter. Dans le cas de CHS, il affichera un message suivi d'un point- virgule :
    Loading;...
    L'ancien biosboot(8) (avant la version 3.5) affichait le message "reading boot...".
  3. Second Stage Boot Loader, /boot : /boot est chargé par le PBR et se charge d'accéder au système de fichiers OpenBSD par le BIOS de la machine afin de localiser et de lancer le noyau. boot(8) permet également de passer plusieurs options et informations au noyau.

    boot(8) est un programme intéractif. Après son exécution, il tente de localiser et lire /etc/boot.conf si celui-ci existe (ce qui n'est pas le cas dans une installation par défaut) puis lance les commandes qui y sont indiquées. A moins que le fichier /etc/boot.conf ne l'en empêche, boot(8) offre à l'utilisateur une invite de commandes similaire à celle-ci :

    probing: pc0 com0 com1 apm mem[636k 190M a20=on] disk: fd0 hd0+ >> OpenBSD/i386 BOOT 2.10 boot>
    Par défaut, l'utilisateur a cinq secondes pour entrer une commande avant le démarrage du noyau, bsd, à partir de la partition racine du premier disque dur, ce qui représente le comportement par défaut. Le "second- stage boot loader" détecte (et examine) votre matériel grâce au BIOS (puisque le noyau OpenBSD n'est pas encore chargé). Précédemment on peut voir qu'il a détecté : Le signe '+' après "hd0" signifie que le BIOS a indiqué à /boot que ce disque peut être accessible par LBA. Lors d'une première installation, vous verrez souvent un '*' après un disque dur ; ceci signifie que ce disque ne possède pas de label OpenBSD valide.
  4. Noyau : /bsd: il s'agit de la finalité du processus de démarrage, avoir le noyau OpenBSD chargé en mémoire RAM et fonctionnant correctement. Une fois le noyau exécuté, OpenBSD peut accéder directement au matériel sans passer par le BIOS.
Ainsi, le tout début du processus de démarrage pourrait ressembler à ceci :
Using drive 0, partition 3. <- MBR Loading.... <- PBR probing: pc0 com0 com1 apm mem[636k 190M a20=on] <- /boot disk: fd0 hd0+ >> OpenBSD/i386 BOOT 2.10 boot> booting hd0a:/bsd 4464500+838332 [58+204240+181750]=0x56cfd0 entry point at 0x100120 [ using 386464 bytes of bsd ELF symbol table ] Copyright (c) 1982, 1986, 1989, 1991, 1993 <- Noyau The Regents of the University of California. All rights reserved. Copyright (c) 1995-2007 OpenBSD. All rights reserved. http://www.OpenBSD.org OpenBSD 4.1 (GENERIC) #1434: Thu Mar 8 22:56:57 MST 2007 deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC ...

Ce qui peut mal se passer

Le PBR étant très petit, son éventail de messages d'erreur est limité et quelque peu complexe. La plupart des messages ressemblent à : Les autres messages d'erreur sont expliqués en détail dans le manuel de biosboot(8). Pour plus d'informations sur le processus de démarrage pour i386, référez-vous à :

14.7 - Quels sont les problèmes liés aux disques de grande capacité sous OpenBSD ?

OpenBSD supporte les systèmes de fichiers jusqu'à 231-1, soit 2,147,483,647 secteurs, et puisque chaque secteur équivaut à 512 octets, cela correspond à un peu moins de 1To.

Il existe aussi une taille limite de 1To pour le disque physique bien que sous *certaines* conditions, vous ne rencontrerez pas de problèmes avant 2To, mais ceci n'est pas garanti.

Bien entendu, les capacités du système de fichiers et celles d'un matériel défini sont deux choses bien différentes. Un nouveau disque dur IDE de 250Go pourrait provoquer des problèmes sur des interfaces trop anciennes (d'une capacité standard de 137Go maximum), certains adaptateurs SCSI très anciens peuvent avoir des problèmes avec des lecteurs modernes et des BIOS un peu trop vieux peuvent se figer lorsqu'ils tombent sur un disque dur de trop grande capacité. De fait, vous devez respecter les possibilités de votre matériel.

Taille des partitions et limitations au niveau de la localisation

Malheureusement, les fonctionnalités du système d'exploitation ne sont accessibles qu'une fois celui-ci chargé en mémoire. Le processus de démarrage devra se contenter de la ROM de lancement du système (bien plus limitée).

Pour cette raison, le fichier /bsd (le noyau) doit se trouver dans l'espace disque adressable par la ROM. Cela signifie que sur certains systèmes i386, la partition racine doit se situer dans les premiers 504Mo, mais les ordinateurs plus récents peuvent avoir des limites de l'ordre de 2Go, 8Go, 32Go, 128Go ou plus. Il est important de noter que de nombreux ordinateurs récents supportant un adressage au delà de 128Go sont en fait limités par le BIOS et ne peuvent démarrer que sur les 128 premiers gigaoctets. Vous pouvez utiliser ces systèmes avec de gros disques durs, mais la partition racine devra être placée dans les premiers 128Go.

Notez qu'il est toujours possible d'installer un disque dur de 40Go sur un vieux 486 et d'y placer OpenBSD sur une seule et énorme partition ; vous pourriez penser avoir réussi à violer la règle précédente. Cependant, un beau jour, celle-ci risque de revenir vous hanter de manière peu plaisante :

Pourquoi ? Simplement parce que vous avez "écrasé" l'ancien /bsd par le nouveau, ce fichier n'a pas été écrit au-dessus de l'autre, mais a été relocalisé vers un autre endroit sur le disque, probablement au-delà des 504 premiers Mo supportés par le bios. Le chargeur de démarrage se voit alors dans l'impossibilité d'atteindre /bsd et le système se fige.

Afin de permettre le lancement d'OpenBSD, les chargeurs de démarrage (biosboot(8) et /boot dans le cas d'un i386) ainsi que le noyau (/bsd) doivent se situer à l'intérieur de l'espace d'adressage supporté par la ROM de boot et par leurs propres capacités. Afin de ne jamais rencontrer de problèmes, la règle est simple :

la partition racine dans son ensemble doit se situer dans l'espace d'adressage supporté par le BIOS (ou la ROM de démarrage).

Certains utilisateurs n'utilisant pas d'i386 peuvent penser qu'ils sont immunisés contre ce problème, cependant, de nombreuses plates-formes possèdent une certaine limite fixée par la ROM de démarrage concernant la taille du disque. Trouver cette limite peut être compliquée.

Et c'est une autre raison pour partitionner votre disque dur, plutôt que d'utiliser une seule grosse partition.

fsck(8) : impératifs de durée et de mémoire

Les autres points à prendre en considération avec les gros systèmes de fichiers sont le temps et la mémoire nécessaires à l'utilisation de fsck(8) après un crash ou une coupure de courant. On ne peut pas créer un système de fichiers de 120Go sur un disque et espérer utiliser fsck(1) avec succès après un crash. Une règle simple à appliquer est de considérer que le système doit posséder au moins 1Mo de mémoire libre pour chaque 1Go d'espace disque afin d'utiliser fsck sans problème. La partition de swap peut être mise à contribution mais avec un coût tellement élevé au niveau des performances que cela en devient généralement inacceptable excepté dans certains cas. Le temps nécessaire à l'utilisation de fsck peut devenir un problème au fur et à mesure que le système de fichiers grossit, mais vous n'avez besoin d'utiliser fsck que sur les systèmes de fichiers montés. N'oubliez pas que si vous avez plusieurs disques sur le système, ils pourraient se retrouver tous à devoir subir un fsck(8) en même temps après un crash et donc demander plus de RAM qu'un disque seul.

14.8 - Installation des blocs de démarrage ("Bootblocks") - spécifique i386/amd64

Les versions récentes d'OpenBSD (3.5 et plus) possèdent un chargeur de démarrage très robuste qui est beaucoup moins sensible à la géométrie des disques que l'ancien. Cependant, il reste sensible à l'emplacement du fichier /boot sur le disque. Si vous effectuez une manipulation ayant pour cause de déplacer boot(8) vers un autre endroit sur le disque (en fait un nouvel inode), vous "casserez" votre système l'empêchant de démarrer normalement. Pour réparer votre bloc de démarrage afin que vous puissiez booter normalement, insérez une disquette dans votre lecteur (ou utilisez un CD-ROM bootable) et à l'invite de commandes, tapez "b hd0a:/bsd" afin de le forcer à démarrer sur le premier disque (et non sur la disquette). Votre machine devrait se lancer normalement. Vous devez à présent réinstaller le chargeur de premier niveau (biosboot(8)) en se basant sur le nouvel emplacement du fichier /boot en utilisant le programme installboot(8).

Notre exemple assume que votre disque de démarrage est sd0 (mais pour de l'IDE, ce pourrait être wd0, etc...) :

# cd /usr/mdec; ./installboot /boot biosboot sd0

Si une nouvelle version des blocs de démarrage est nécessaire, vous devrez la compiler vous même. Pour ce faire, tapez simplement :

# cd /sys/arch/i386/stand/ # make && make install # cd /usr/mdec; cp ./boot /boot # ./installboot /boot biosboot sd0 (ou quelque soit le périphérique désignant votre disque dur)

14.9 - Se préparer au désastre : faire une sauvegarde vers une bande et effectuer une restauration

Introduction :

Si vous envisagez d'administrer ce que l'on pourrait appeler un serveur de production, il est préférable d'avoir une sauvegarde au cas où l'un de vos disques durs tomberait en panne.

Cette documentation vous assistera dans l'utilisation des utilitaires standards dump(8)/ restore(8) fournis avec OpenBSD. Un autre utilitaire de sauvegarde plus avancé nommé "Amanda" est également disponible via les ports afin de sauvegarder plusieurs serveurs vers un unique lecteur de bandes. Dans la plupart des environnements, dump(8) / restore(8) suffit. Cependant, si vous avez besoin de sauvegarder plusieurs machines, il peut être utile de se documenter sur Amanda.

Les périphériques utilisés en exemple dans ce document se réfèrent à une configuration utilisant des disques et lecteurs de bandes SCSI. En environnement de production, les disques SCSI sont recommandés en place des disques IDE pour la façon dont ils gèrent les blocs défectueux. Ceci ne signifie pas pour autant que ce document est sans intérêt pour les possesseurs de disques IDE ou d'autres types de lecteurs de bandes, les noms de vos périphériques changeront légèrement. Par exemple, sd0a deviendra wd0a dans un système à base d'IDE.

Sauvegarder vers une bande :

Sauvegarder sur bande demande de savoir exactement où vos systèmes de fichiers sont montés. Vous pouvez le déterminer en utilisant la commande mount(8) dans un terminal. Vous devriez obtenir une sortie similaire à celle-ci :

# mount /dev/sd0a on / type ffs (local) /dev/sd0h on /usr type ffs (local)

Dans cet exemple, le système de fichiers racine (/) réside physiquement sur sd0a, ce qui désigne la partition a du disque SCSI fixe 0. Le système de fichiers /usr réside sur sd0h, ma partition h du disque SCSI fixe 0.

Un autre exemple de ce qu'une table de montage plus avancée pourrait être :

# mount /dev/sd0a on / type ffs (local) /dev/sd0d on /var type ffs (local) /dev/sd0e on /home type ffs (local) /dev/sd0h on /usr type ffs (local)

Dans cet exemple plus compliqué, le système de fichiers racine (/) réside physiquement sur sd0a ; /var sur sd0d; /home sur sd0e et enfin /usr sur sd0h.

Afin de sauvegarder votre machine, vous aurez besoin de renseigner dump avec le nom exact de chaque partition fixe. Voici un exemple des commandes nécessaires pour sauvegarder la table de montage simple vue plus haut :

# /sbin/dump -0au -f /dev/nrst0 /dev/rsd0a # /sbin/dump -0au -f /dev/nrst0 /dev/rsd0h # mt -f /dev/rst0 rewind

Pour la table de montage plus avancée, vous utiliserez des commandes similaires à :

# /sbin/dump -0au -f /dev/nrst0 /dev/rsd0a # /sbin/dump -0au -f /dev/nrst0 /dev/rsd0d # /sbin/dump -0au -f /dev/nrst0 /dev/rsd0e # /sbin/dump -0au -f /dev/nrst0 /dev/rsd0h # mt -f /dev/rst0 rewind

Vous pouvez vous référer à la page de manuel de dump(8) afin de connaître les fonctionnalités de chaque option. Voici une brève description des paramètres utilisés :

Et finalement, la partition à sauvegarder (/dev/rsd0a, etc...).

La commande mt(1) est utilisée à la fin pour rembobiner la bande. Référez-vous au manuel de mt afin de connaître les options disponibles (comme eject).

Si vous n'êtes pas sûr du nom de périphérique du lecteur, utilisez dmesg pour le localiser. Un lecteur de bande peut, par exemple, apparaître ainsi dans dmesg :

st0 at scsibus0 targ 5 lun 0: <ARCHIVE, Python 28388-XXX, 5.28>

Vous avez peut-être noté que, lors d'une sauvegarde, le lecteur est accédé par son nom de périphérique "nrst0" au lieu de "st0" qui apparaît dans dmesg. Lorsque vous accédez st0 à la place de nrst0, vous accédez au même lecteur bande mais en mode "raw" et en lui indiquant de ne pas rembobiner la bande à la fin du travail. Pour sauvegarder plusieurs systèmes de fichiers sur une même bande, soyez certains d'utiliser le périphérique de non-rembobinage ; dans le cas contraire (si vous utilisez rst0), la sauvegarde du système de fichiers précédent sera écrasée à la prochaine écriture sur la bande. Vous pouvez trouver une description plus conséquente de plusieurs lecteurs de bande dans la page de manuel de dump.

Si vous souhaitez écrire un petit script appelé "backup", il pourrait ressembler à celui-ci :

echo " Starting Full Backup..." /sbin/dump -0au -f /dev/nrst0 /dev/rsd0a /sbin/dump -0au -f /dev/nrst0 /dev/rsd0d /sbin/dump -0au -f /dev/nrst0 /dev/rsd0e /sbin/dump -0au -f /dev/nrst0 /dev/rsd0h echo echo -n " Rewinding Drive, Please wait..." mt -f /dev/rst0 rewind echo "Done." echo

Si des sauvegardes nocturnes planifiées sont nécessaires, cron(8) pourra être utilisé pour lancer votre utilitaire de sauvegarde automatiquement.

Il serait également utile de préciser (sur un bout de papier) la taille que devrait avoir chaque système de fichiers. Vous pouvez utiliser "df -h" afin de connaître l'espace actuellement utilisé par chaque partition. En effet, ceci pourra vous aider lorsque votre disque dur tombera en panne et que vous devrez recréer la table de partition sur le nouveau disque.

Restaurer vos données aidera aussi à réduire la fragmentation. Afin d'être sûr de récupérer tous les fichiers, le meilleur moyen de sauvegarder est de redémarrer votre système en mode "single user". Les systèmes de fichiers n'ont pas besoin d'être montés pour être sauvegardés. N'oubliez pas de monter la racine (/) en mode r/w (lecture/écriture) après avoir redémarré en mode "single user" ou dump retournera une erreur lorsqu'il essayera d'écrire les "dumpdates". Au démarrage, entrez "bsd -s" à l'invite de commandes boot> pour lancer le système en mode "single user".

Voir le contenu d'une sauvegarde sur bande :

Après avoir sauvegardé votre système de fichiers pour la première fois, il est bon de vérifier rapidement votre bande afin d'être certain que les données sont bien présentes.

Vous pouvez utiliser l'exemple suivant afin de voir le catalogue de fichiers présents sur une bande :

# /sbin/restore -tvs 1 -f /dev/rst0

Cette commande affichera la liste des fichiers présents sur la première partition de la bande. Si l'on se réfère à l'exemple précédent, 1 serait votre système de fichiers racine (/).

Pour afficher se qui est présent sur la deuxième partition vers un fichier, vous utiliserez une commande similaire à :

# /sbin/restore -tvs 2 -f /dev/rst0 > /home/me/list.txt

Pour une table de partition assez simple, 2 serait /usr ; si la vôtre est plus compliquée, 2 pourrait être /var/ ou un autre système de fichiers. L'ordre des séquences est similaire à celui utilisé pour sauvegarder les systèmes de fichiers sur la bande.

Restaurer à partir d'une bande :

Le scénario de l'exemple suivant pourrait être utile si votre disque tombait complètement en panne. Dans le cas ou vous ne souhaiteriez récupérer qu'un seul fichier à partir de la bande, référez-vous à la page de manuel de la commande restore et soyez attentifs aux instructions concernant le mode interactif.

Si vous avez bien tout préparé, remplacer un disque et restaurer vos données à partir d'une bande peut être une procédure très rapide. La disquette standard install/boot sous OpenBSD contient déjà l'utilitaire restore ainsi que les exécutables nécessaires au partitionnement de votre nouveau disque et permettant de le rendre bootable. Dans la plupart des cas, cette disquette et votre bande de sauvegarde la plus récente sont tout ce dont vous avez besoin pour remettre votre machine en production.

Après avoir remplacé le disque en panne, suivez les étapes suivantes afin de restaurer vos données :

14.10 - Montage des images disque sous OpenBSD

Pour monter une image disque (images ISO, images disques créées avec dd, etc...) sous OpenBSD, vous devez configurer un périphérique vnd(4) . Par exemple, si vous avez une image ISO localisée dans /tmp/ISO.image , voici les étapes nécessaires pour la monter :

# vnconfig svnd0 /tmp/ISO.image # mount -t cd9660 /dev/svnd0c /mnt

Remarquez que, puisqu'il s'agit d'une image ISO-9660 utilisée sur les CDs et DVDs, vous devez spécifier le type cd9660 lors du montage. Ceci est vrai peut importe le type, par exemple, vous devez utiliser ext2fs lors du montage d'images disque Linux.

Pour démonter une image, utilisez les commandes suivantes.

# umount /mnt # vnconfig -u svnd0

Pour plus d'information, référez-vous à la page de manuel de vnconfig(8).

14.11 - A l'aide ! J'ai des erreurs avec IDE DMA !

Les transferts IDE DMA supportés par pciide(4) ne sont pas fiables avec plusieurs combinaisons de matériel. Jusqu'à récemment, la plupart des "principaux" systèmes d'exploitation prétendant supporter les transferts DMA sur périphériques IDE n'activaient pas cette fonctionnalité par défaut à cause de certains matériels peu fiables. A présent, beaucoup de ces machines sont utilisées sous OpenBSD.

OpenBSD est agressif et tente d'utiliser le mode DMA le plus haut qu'il puisse configurer. Ceci pourrait engendrer une corruption dans le transfert des données sur certaines configurations à cause de certaines puces ("chipsets") de cartes mères, de disques de mauvaise qualité et/ou de la friture sur les câbles. Heureusement, les modes Ultra-DMA protègent les transferts de données avec CRC afin de détecter une éventuelle corruption. Si le CRC de l'Ultra-DMA échoue, OpenBSD affichera un message d'erreur et recommencera l'opération de transfert.

wd2a: aborted command, interface CRC error reading fsbn 64 of 64-79 (wd2 bn 127; cn 0 tn 2 sn 1), retrying

Après plusieurs échecs, OpenBSD fera descendre le mode Ultra-DMA (à priori plus fiable). Lorsqu'un mode Ultra-DMA atteint 0, le mode PIO prendra le relais.

Les erreurs UDMA sont souvent causées par des câbles endommagés ou de mauvaise qualité. C'est pourquoi les câbles devraient être les premiers suspectés si vous avez de nombreuses erreurs de DMA ou des performances dégradées. De plus, il n'est pas conseillé de placer un lecteur de CD-ROM sur la même nappe qu'un disque dur.

Si le remplacement des câbles ne résout pas le problème et qu'OpenBSD n'arrive pas à faire descendre le niveau UDMA, que votre machine se fige ou que vous obtenez trop de messages d'erreur sur la console et dans les logs, vous pouvez forcer le système à utiliser un mode DMA ou UDMA inférieur par défaut. Ceci peut être effectué avec UKC ou config(8) afin de changer les options du périphérique wd(4).

14.13 - Options RAID avec OpenBSD

Un ensemble redondant de disques durs indépendants (RAID - "Redundant Array of Inexpensive Disks") vous offre la possibilité d'utiliser plusieurs disques afin d'améliorer les performances, la capacité et/ou la redondance qu'un disque seul ne serait pas capable d'apporter. Bien qu'une description des avantages ou des risques apportés par une configuration RAID ne soit pas le propos de cet article, il est important de noter les points suivants : Si ces informations sont nouvelles pour vous, ce document n'est pas un bon point de départ pour débuter avec un RAID.

Options logicielles

OpenBSD inclut RAIDframe, une solution logicielle de RAID. La documentation est disponible ici :

La partition racine peut être directement configurée en miroir par OpenBSD en utilisant l'option "Autoconfiguration" de RAIDframe.

A partir d'OpenBSD 3.7-stable, le pilote ccd(4) inclut également une fonction de "mirroring". Ce système est inclu dans le noyau GENERIC et est présent dans le noyau bsd.rd sur certaines plates-formes (amd64, hppa, hppa64, i386), ce qui facilite son utilisation même s'il possède certaines limitations dans la reconstruction de l'array. Référez-vous aux manuels :

Options matérielles

De nombreuses plates-formes OpenBSD supportent plusieurs contrôleurs RAID matériels. Ceux-ci varient selon les plates-formes, référez-vous à la page des plates-formes supportées (listées ici).

Une autre option accessible à plusieurs plates-formes est l'un des nombreux produits qui font apparaître plusieurs disques comme un seul disque IDE ou SCSI et sont ensuite branchés sur un contrôleur IDE ou SCSI standard. Ces périphériques peuvent virtuellement fonctionner sur n'importe quelle plate-forme supportant IDE ou SCSI.

Quelques fabriquants de ce type de produits :

(Note : ce sont des produits que certains utilisateurs d'OpenBSD utilisent ; il ne s'agit en aucun cas d'une liste exhaustive ni de matériels certifiés).

Options non valides

Une question récurrente sur les listes de diffusion consiste à savoir si "les contrôleurs RAID IDE ou SATA peu coûteux (tels que les contrôleurs HighPoint, Promise ou Adaptec HostRAID) sont supportés ?". La réponse est "Non". Ces cartes et puces ne sont pas de véritables contrôleurs RAID matériels mais plutôt des RAID logiciels assistés par un BIOS. Puisqu'OpenBSD supporte déjà le RAID logiciel indépendamment du type de matériel, il n'y a pas de volonté parmi les développeurs OpenBSD d'implémenter un support spécifique à ces cartes.

Presque tous ces contrôleurs "RAID" SATA ou IDE embarqués sont de type logiciel et fonctionneront sans problème comme contrôleur SATA ou IDE en utilisant le pilote IDE standard (pciide(4)), mais ne fonctionneront pas comme RAID matériel sous OpenBSD.

14.14 - Pourquoi df(1) me dit que j'ai plus de 100% d'espace disque utilisé ?

Certaines personnes sont parfois surprises de voir qu'elles ont un espace disque disponible négatif ou que plus de 100% de l'espace d'un système de fichiers est utilisé, comme on peut le voir avec df(1).

Lorsqu'un système de fichiers est créé avec newfs(8) , un certain montant d'espace disque inaccessible aux utilisateurs est réservé. Cela permet d'avoir une marge d'erreur en cas de remplissage accidentel du disque et de garder la fragmentation au minimum. Par défaut, l'espace réservé correspond à 5% de la capacité du disque ce qui signifie que si root a imprudemment rempli le disque, vous pouvez vous retrouver avec 105% de capacité disponible utilisée.

Si une valeur de 5% ne vous semble pas appropriée, vous pouvez la changer avec la commande tunefs(8).

14.15 - Récupération de partitions après une suppression du disklabel

Si vous avez une table de partitions endommagée, vous disposez de plusieurs moyens afin d'essayer de la récupérer.

Premièrement, paniquez. Vous le faites relativement souvent, et ceci devrait donc bien se passer. Cependant, ne faites rien de stupide. Paniquez à l'écart de votre machine. Ensuite, relaxez vous, et voyez si les étapes suivantes ne pourraient pas vous aider.

Une copie de votre disklabel est sauvegardée pour chaque disque dans /var/backups via la maintenance système journalière. A condition d'avoir encore votre partition var, vous pouvez simplement lire la sortie, et la réintégrer dans disklabel.

Dans le cas ou vous ne pouvez plus voir cette partition, il y a deux options. Corriger une assez grande partie du disque afin de la voir, ou fixer une partie suffisamment grande du disque afin de pouvoir récupérer vos données. Selon ce qui s'est passé, l'une ou l'autre de ces deux solutions serait préférable (avec des disques mourants vous voudrez en premier les données, avec des doigts mouillés vous ne pourrez avoir que le label).

Le premier bon outil dont vous avez besoin est scan_ffs(8) (remarquez l'underscore, il ne s'appelle pas "scanffs"). scan_ffs(8) regardera au travers du disque, et essaiera de trouver les partitions, en vous avertissant des informations qu'il trouve sur celles-ci). Vous pouvez utiliser ces informations pour recréer le disklabel. Si vous voulez uniquement restaurer /var, vous pouvez recréer la partition pour /var, et ensuite récupérer le label et ajouter le reste.

disklabel(8) mettra à jour à la fois la compréhension du disklabel par le noyau, et essaiera également d'écrire le label sur le disque. Ainsi, même si la partie du disque qui contient le disklabel est illisible, vous serez en mesure de la monter avec mount(8) jusqu'au prochain redémarrage.

14.16 - Est-il possible d'accéder aux données présentes sur des systèmes de fichiers autres que FFS ?

Oui. Les systèmes de fichiers supportés sont : ext2 (Linux), ISO9660 et UDF (CD-ROM, DVD), FAT (MS-DOS et Windows), NFS, NTFS (Windows) et AmigaDOS. Certains n'ont qu'un support limité, comme par exemple l'accès en lecture uniquement. Notez que le système de fichiers UFS2 de FreeBSD n'est pas supporté.

Nous allons donner un aperçu sur la façon d'utiliser un de ces systèmes de fichiers sous OpenBSD. Afin d'utiliser un système de fichiers, celui-ci doit être monté. Pour plus de détails sur les options de montage, référez-vous au manuel de mount(8) ainsi qu'à celui correspondant au système de fichiers que vous souhaitez monter. Par exemple, mount_msdos, mount_ext2fs, ...

Tout d'abord, vous devez connaître le périphérique sur lequel votre système de fichiers est présent. Cela peut être tout simplement votre disque dur, wd0 ou sd0, mais ça n'est pas toujours évident. Tous les périphériques reconnus et configurés par votre système apparaissent dans la sortie de la commande dmesg(1) : un nom de périphérique, suivi par une ligne descriptive. Ainsi, mon premier CD-ROM est reconnu de la façon suivante :

cd0 at scsibus0 targ 0 lun 0: <COMPAQ, DVD-ROM LTD163, GQH3> SCSI0 5/cdrom removable

Afin d'obtenir une liste beaucoup plus courte des disques disponibles, vous pouvez utiliser sysctl(8). La commande

# sysctl hw.disknames
affichera tous les disques reconnus par votre système, par exemple :
hw.disknames=cd0,cd1,wd0,fd0,cd2

A présent, il est temps de déterminer quelles partitions sont présentes sur le périphérique et sur quelle partition le système de fichiers qui nous intéresse est présent. Nous examinerons le périphérique en utilisant disklabel(8). Le 'disklabel' comporte une liste de partitions, 16 au maximum. La partition c désigne toujours le périphérique dans son ensemble. Les partitions a-b et d-p sont utilisées par OpenBSD. Les partitions i-p peuvent être allouées automatiquement aux systèmes de fichiers d'autres systèmes d'exploitation. Dans notre cas, j'analyserai le 'disklabel' de mon disque dur qui contient un certain nombre de systèmes de fichiers.

REMARQUE : OpenBSD a été installé après les autres systèmes d'exploitation sur cette machine et pendant l'installation, le disklabel contenant les partitions pour systèmes de fichiers natifs et étrangers a été installé. Cependant, si vous ajoutez des systèmes de fichiers étrangers après l'installation du disklabel d'OpenBSD vous devrez probablement les ajouter ou les modifier ultérieurement. Cette procédure est expliquée ici.

# disklabel wd0 # using MBR partition 2: type A6 off 20338290 (0x1365672) size 29318625 (0x1bf5de1) # /dev/rwd0c: type: ESDI disk: ESDI/IDE disk label: ST340016A flags: bytes/sector: 512 sectors/track: 63 tracks/cylinder: 16 sectors/cylinder: 1008 cylinders: 16383 total sectors: 78165360 rpm: 3600 interleave: 1 trackskew: 0 cylinderskew: 0 headswitch: 0 # microseconds track-to-track seek: 0 # microseconds drivedata: 0 16 partitions: # size offset fstype [fsize bsize cpg] a: 408366 20338290 4.2BSD 2048 16384 16 # Cyl 20176*- 20581 b: 1638000 20746656 swap # Cyl 20582 - 22206 c: 78165360 0 unused 0 0 # Cyl 0 - 77544 d: 4194288 22384656 4.2BSD 2048 16384 16 # Cyl 22207 - 26367 e: 409248 26578944 4.2BSD 2048 16384 16 # Cyl 26368 - 26773 f: 10486224 26988192 4.2BSD 2048 16384 16 # Cyl 26774 - 37176 g: 12182499 37474416 4.2BSD 2048 16384 16 # Cyl 37177 - 49262* i: 64197 63 unknown # Cyl 0*- 63* j: 20274030 64260 unknown # Cyl 63*- 20176* k: 1975932 49656978 MSDOS # Cyl 49262*- 51223* l: 3919797 51632973 unknown # Cyl 51223*- 55111* m: 2939832 55552833 ext2fs # Cyl 55111*- 58028* n: 5879727 58492728 ext2fs # Cyl 58028*- 63861* o: 13783707 64372518 ext2fs # Cyl 63861*- 77535*

Comme on peut le constater, les partitions OpenBSD sont affichées en premier. Puis l'on peut voir un certain nombre de partitions ext2, une partition MSDOS ainsi que plusieurs partitions inconnues ('unknown'). Sous i386 ou amd64, vous pouvez généralement en savoir plus sur celles-ci en utilisant l'utilitaire fdisk(8). Pour le lecteur curieux, la partition i est une partition de maintenance créée par le revendeur, la partition j est une partition NTFS et la partition l est une partition d'échange Linux ('Linux swap').

Après avoir déterminée la partition que vous souhaitez utiliser, vous pouvez enfin monter le système de fichiers qu'elle contient. La plupart des systèmes de fichiers sont supportés par de noyau GENERIC : référez-vous à son fichier de configuration situé dans le répertoire /usr/src/sys/arch/<arch>/conf. Cependant, certains dont le support est expérimental (comme NTFS) ne sont pas inclus dans le noyau GENERIC. Si vous souhaitez utiliser un de ces systèmes de fichiers, vous devrez recompiler votre noyau .

Une fois les informations nécessaires entre vos mains, il est temps de monter le système de fichiers. Imaginons que le répertoire /mnt/otherfs existe, nous l'utiliserons pour monter le système de fichiers souhaité. Dans l'exemple suivant, nous monterons un système de fichiers ext2 dans la partition m :

# mount -t ext2fs /dev/wd0m /mnt/otherfs

Si vous souhaitez utiliser ce système de fichiers régulièrement, vous gagnerez du temps en insérant la ligne suivante dans votre fichier /etc/fstab :

/dev/wd0m /mnt/otherfs ext2fs rw,noauto,nodev,nosuid 0 0
Notez les valeurs 0 dans les cinquièmes et sixièmes champs. Cela indique que nous ne souhaitons pas que le système de fichiers soit sauvegardé (avec dump) ni vérifié avec fsck. Généralement, il est préférable de laisser le système d'exploitation associé à ces systèmes de fichiers s'occuper de cela.

14.16.1 - Les partitions n'apparaissent pas dans mon disklabel ! Que dois-je faire ?

Si vous installez des systèmes de fichiers étrangers sur votre machine (souvent suite à l'ajout d'un système d'exploitation) après l'installation d'OpenBSD, un disklabel sera présent mais ne sera pas mis à jour automatiquement pour prendre en compte les nouveaux systèmes de fichiers. Si vous souhaitez pouvoir y accéder, vous aurez besoin d'ajouter ou de modifier ces partitions manuellement en utilisant disklabel(8).

Pour prendre un exemple, j'ai modifié une de mes partitions ext2 existantes : en utilisant le programme fdisk de Linux, j'ai réduit la taille de la partition 'o' (voir la sortie de disklabel plus haut) à 1Go. Il sera facile de la reconnaître grâce à sa position de départ (offset: 64372518) et sa taille (13783707) sur le disque. Notez que ces valeurs sont exprimées en numéros de secteurs (et pas en megaoctets ou autre mesure) et qu'utiliser de tels nombres reste le moyen le plus sûr et le plus précis d'obtenir ces informations.

Avant notre changement, la partition ressemblait à ceci (en utilisant le fdisk(8) d'OpenBSD et en ne gardant que ce qui nous intéresse) :

# fdisk wd0 . . . Offset: 64372455 Signature: 0xAA55 Starting Ending LBA Info: #: id C H S - C H S [ start: size ] ------------------------------------------------------------------------ 0: 83 4007 1 1 - 4864 254 63 [ 64372518: 13783707 ] Linux files* . . .
Comme vous pouvez le voir, la position de départ et la taille sont exactement les mêmes que celles rapportées précédemment par disklabel(8) (ne vous méprenez pas sur par la valeur indiquée par "Offset" : il s'agit de la position de départ de la partition étendue à laquelle la partition ext2 fait partie).

Après avoir changé la taille de la partition sous Linux, elle ressemble à ceci :

# fdisk wd0 . . . Offset: 64372455 Signature: 0xAA55 Starting Ending LBA Info: #: id C H S - C H S [ start: size ] ------------------------------------------------------------------------ 0: 83 4007 1 1 - 4137 254 63 [ 64372518: 2104452 ] Linux files* . . .
Ceci doit être changé par disklabel(8). Vous pouvez, par exemple, utiliser disklabel -e wd0 qui lancera l'éditeur correspondant à la variable d'environnement EDITOR (par défaut il s'agit de vi). Une fois dans l'éditeur, changez la dernière ligne du disklabel afin qu'elle corresponde à la nouvelle taille :
o: 2104452 64372518 ext2fs
Pour terminer, enregistrez le disklabel sur le disque. A présent que le disklabel est à jour, vous devriez pouvoir monter vos partitions comme indiqué précédemment.

Vous pouvez suivre une procédure similaire afin d'ajouter de nouvelles partitions.

14.17 - Est-il possible d'utiliser un périphérique de masse ('flash memory device') sous OpenBSD ?

Théoriquement, un périphérique mémoire devrait être reconnu dès son insertion dans la machine. Peut après l'avoir branché, un certain nombre de messages du noyau devrait apparaître sur la console. Ainsi, lorsque je branche mon périphérique USB, voici ce qui apparaît sur la console :
umass0 at uhub1 port 1 configuration 1 interface 0 umass0: LEXR PLUG DRIVE LEXR PLUG DRIVE, rev 1.10/0.01, addr 2 umass0: using SCSI over Bulk-Only scsibus2 at umass0: 2 targets sd0 at scsibus2 targ 1 lun 0: <LEXAR, DIGITAL FILM, /W1.> SCSI2 0/direct removable sd0: 123MB, 123 cyl, 64 head, 32 sec, 512 bytes/sec, 251904 sec total
Ces lignes indiquent que le pilote umass(4) (périphérique de masse USB -'USB mass storage') à été rattaché au périphérique mémoire et qu'il utilise le système SCSI. Les deux dernières lignes sont les plus importantes : elles indiquent sur quel fichier de périphérique le matériel a été rattaché ainsi que le montant total d'espace de stockage. Si vous avez manqué ces lignes, vous pouvez vous y référez plus tard à l'aide de la commande dmesg(1). La géométrie CHS est fictive puisque le périphérique USB est traité comme un disque SCSI classique.

Nous allons voir deux scénarios possibles.

Le périphérique est nouveau/vide et vous souhaitez l'utiliser exclusivement avec OpenBSD.

Vous allez devoir initialiser un 'disklabel' sur le périphérique et créer au minimum une partition. Pour plus de détails, lisez Utilisation de disklabel(8) sous OpenBSD ainsi que sa page de manuel.

Dans cet exemple, je ne vais créer qu'une seule partition a dans laquelle je placerai un système de fichiers FFS :

# newfs sd0a Warning: inode blocks/cyl group (125) >= data blocks (62) in last cylinder group. This implies 1984 sector(s) cannot be allocated. /dev/rsd0a: 249856 sectors in 122 cylinders of 64 tracks, 32 sectors 122.0MB in 1 cyl groups (122 c/g, 122.00MB/g, 15488 i/g) super-block backups (for fsck -b #) at: 32,
Montons le système de fichiers créé dans la partition a sur /mnt/flashmem. Si le point de montage n'existe pas, créez-le.
# mkdir /mnt/flashmem # mount /dev/sd0a /mnt/flashmem

Vous avez reçu le périphérique de quelqu'un avec qui vous souhaitez échanger des données.

Il y a une grande chance que la personne en question n'utilise pas OpenBSD, ce qui signifie qu'un système de fichiers étranger doit être présent sur le périphérique. Nous allons donc devoir découvrir quelles partitions sont présentes, comme décrit dans la section précédente : Est-il possible d'accéder aux données présentes sur des systèmes de fichiers autres que FFS ?.

# disklabel sd0 # /dev/rsd0c: type: SCSI disk: SCSI disk label: DIGITAL FILM flags: bytes/sector: 512 sectors/track: 32 tracks/cylinder: 64 sectors/cylinder: 2048 cylinders: 123 total sectors: 251904 rpm: 3600 interleave: 1 trackskew: 0 cylinderskew: 0 headswitch: 0 # microseconds track-to-track seek: 0 # microseconds drivedata: 0 16 partitions: # size offset fstype [fsize bsize cpg] c: 251904 0 unused 0 0 # Cyl 0 - 122 i: 250592 32 MSDOS # Cyl 0*- 122*
Le 'disklabel' nous apprend qu'il n'y a qu'une seule partition i, contenant un système de fichiers FAT créé sur une machine Windows. Comme d'habitude, la partition c représente l'ensemble du disque.

A présent, nous allons monter le système de fichiers présent dans la partition i vers /mnt/flashmem.

# mount -t msdos /dev/sd0i /mnt/flashmem
Vous pouvez désormais l'utiliser comme n'importe quel autre disque.

ATTENTION : Vous devriez toujours démonter le système de fichiers avant de débrancher le périphérique de masse. Si vous ne le faites pas, le système de fichiers pourrait être laissé dans un état inconsistant ce qui aurait pour résultat d'avoir des données corrompues.

Après avoir débranché le périphérique de votre machine, vous verrez à nouveau des messages du noyau sur la console :

umass0: at uhub1 port 1 (addr 2) disconnected sd0 detached scsibus2 detached umass0 detached

14.18 - Optimiser les performances des disques durs

La performance des disques est un facteur significatif de la vitesse globale de votre machine. Ce facteur devient de plus en plus important quand votre machine héberge un environnement multi utilisateur (des utilisateurs de toutes les catégories tels que les utilisateurs qui se connectent de manière interactive et les utilisateurs qui voient votre machine comme un serveur de fichiers ou un serveur Web). Le stockage de données demande une attention constante et particulièrement quand vos partitions ne contiennent plus d'espace libre ou quand vos disques ne fonctionnent plus. OpenBSD possède plusieurs options pour augmenter la vitesse des opérations sur disque. De plus il fournit des fonctionnalités de tolérance aux pannes.

14.18.1 - CCD

La première option consiste à utiliser ccd(4) , le Pilote de Disques Concaténés. Il vous permet de grouper plusieurs partitions en un seul disque virtuel (ainsi vous pouvez rendre plusieurs disques visibles comme un seul disque). Ce concept est similaire au concept de LVM (gestion de volumes logiques) se trouvant dans plusieurs versions Unix commerciales.

Si vous utilisez le noyau GENERIC, ccd est déjà activé (dans /usr/src/sys/conf/GENERIC). Si vous avez personnalisé votre noyau, vous aurez éventuellement besoin de refaire la configuration de votre noyau. Dans tous les cas, la ligne suivante devra figurer dans votre fichier de configuration noyau :

pseudo-device ccd 4 # concatenated disk devices

La ligne précédente vous permet de configurer jusqu'à 4 périphériques ccd (disques virtuels). L'étape suivante consiste à choisir les partitions sur vos disques physiques que vous voulez consacrer à ccd. Utilisez disklabel pour marquer ces partitions en type 'ccd'. Sous certaines architectures, disklabel ne vous autorisera pas à effectuer cette opération. Dans ce cas, marquez les en 'ffs'.

Si vous utilisez ccd pour améliorer les performances à travers la technique du striping, il est à noter que vous n'aurez pas de performance optimale à moins que vous n'utilisiez le même modèle de disques avec le même paramétrage disklabel.

Editez le fichier /etc/ccd.conf afin qu'il ressemble à ce qui suit : (pour plus d'informations sur la configuration ccd, veuillez consulter ccdconfig(8))

# Configuration file for concatenated disk devices # # ccd ileave flags component devices ccd0 16 none /dev/sd2e /dev/sd3e

Pour que vos modifications prennent effet, exécutez :

# ccdconfig -C

Aussi longtemps que /etc/cdd.conf existera, ccd se configurera automatiquement lors du démarrage de la machine. A ce point, vous avez un nouveau disque dénommé ccd0; combinaison de /dev/sd2e et /dev/sd3e. Pour le partitionner, utilisez disklabel normalement. Nous vous rappelons qu'il ne faut pas utiliser la partition 'c' comme une partition réelle sur laquelle vous pouvez stocker des données. Assurez- vous que vos partitions soient au moins décalées d'un cylindre par rapport au début du disque.

14.18.2 - RAID

raid(4) est une autre solution. Elle nécessitera l'utilisation de la commande raidctl(8) pour contrôler vos périphériques raid. Le RAID OpenBSD est basé sur le port NetBSD du logiciel CMU RAIDframe par Greg Oster. OpenBSD supporte les niveaux RAID 0, 1, 4 et 5.

Comme pour ccd, le support raid doit être configuré dans le NOYAU. Mais contrairement à ccd, le support RAID n'est pas configuré par défaut dans GENERIC. Il doit compilé au niveau du noyau (le support RAID ajoute 500k à la taille d'un noyau i386) :

pseudo-device raid 4 # RAIDframe disk device

Consultez les pages de manuel raid(4) et raidctl(8) pour des informations complètes. Il y a plusieurs options et configurations possibles. Une explication détaillée est au-delà du périmètre du présent document.

14.18.3 - Soft Updates

Un autre outil qui peut être utilisé pour accélérer la vitesse de votre système est softupdates. La mise à jour des informations meta ou metainfo (qui a lieu quand vous créez ou supprimez des fichiers et des répertoires entre autres) est une des opérations les plus lentes du système de fichiers BSD traditionnel. Softupdates tente de mettre à jour les metainfo dans la RAM au lieu d'écrire chaque mise à jour de metainfo sur le disque. Une autre conséquence est que les metainfo sur le disque devraient être toujours complètes, mais pas forcément à jour. Un crash système ne devrait donc pas nécessiter une opération fsck lors du démarrage de la machine, mais seulement une version d'arrière-plan de fsck(8) qui effectue des modifications aux metainfo en RAM (comme softupdates). Ce qui veut dire que le redémarrage d'un serveur est beaucoup plus rapide puisque vous n'avez pas besoin d'attendre que fsck finisse ! (OpenBSD ne possède pas encore cette fonctionnalité). Pour en savoir plus, consultez La FAQ Softupdates .

14.18.4 - Taille du cache namei()

Le cache de traduction nom-vers-inode (alias name-to-inode ou namei()) contrôle la vitesse de la traduction chemin vers inode(5). Une valeur raisonnable de fixer une valeur pour le cache, si on venait à remarquer à l'aide d'un outil comme systat(1) , des erreurs d'allocation au niveau du cache, est d'examiner la valeur courante générée avec sysctl(8) , (qui appelle ce paramètre "kern.maxvnodes") et d'augmenter cette valeur soit jusqu'à ce que les le taux de réponse à partir du cache namei s'améliore soit jusqu'à ce qu'on détermine que le système ne bénéficie plus substantiellement de l'augmentation de la taille du cache namei. Une fois que la valeur est déterminée, vous pouvez la fixer au démarrage du système à l'aide de sysctl.conf(5).

11.3 - Pourquoi nous n'utilisons pas de montage asynchrone ("async mount") ?

Question : "Je fais simplement "mount -u -o async /" ce qui rend un paquetage dont j'ai besoin (qui touche à une centaine de chose de temps à autre) utilisable. Pourquoi le montage asynchrone n'est pas vu d'un bon œil et n'est pas activé par défaut (comme c'est le cas sur d'autres versions d'Unix) ? C'est un mécanisme sûrement plus simple et plus sûr d'améliorer les performances de certaines applications."

Réponse : " les montages asynchrones sont en effet plus rapides que des montages synchrones, mais ils sont aussi moins sûrs. Qu'arrive-t-il dans le cas d'une panne de courant ? Ou un problème matériel ? la quête de la vitesse ne doit pas sacrifier la fiabilité et la stabilité du système. Reportez-vous à la page du manuel de mount(8)." async All I/O to the file system should be done asynchronously. This is a dangerous flag to set since it does not guaran- tee to keep a consistent file system structure on the disk. You should not use this flag unless you are pre- pared to recreate the file system should your system crash. The most common use of this flag is to speed up restore(8) where it can give a factor of two speed in- crease.

D'un autre côté, quand vous travaillez avec des données temporaires que vous pouvez recréer après un plantage, vous pouvez gagnez en vitesse en utilisant une partition à part montée en asynchrone, utilisée uniquement pour ce type de données. Encore une fois, n'effectuez cette opération que si vous ne voyez pas d'inconvénient à perdre toutes les données de cette partition si quelque chose va mal. Pour cette raison, les partitions mfs(8) sont montées en mode asynchrone vu que de toute façon, elles vont être écrasées et recréées après un redémarrage.

[Index de la FAQ] [Section 13 - Multimédia] [Section 15 - Paquetages et Ports]


[back] www@openbsd.org
$OpenBSD: faq14.html,v 1.52 2007/05/02 15:10:00 jufi Exp $