[OpenBSD]

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

14 - Configuration des disques


Table des matières


14.1 - Disques et Partitions

Les détails de la mise en place des disques dans OpenBSD varie selon les plates-formes, donc vous devriez lire les instructions d'installation dans le fichier INSTALL.<arch> de votre plate-forme afin de déterminer les spécificités pour votre système.

Identification du disque

OpenBSD gère le stockage de masse avec deux pilotes sur la plupart des plates-formes, en fonction de l'ensemble des commandes que ce genre de périphérique supporte: Le premier disque d'un disque de type particulier identifié par OpenBSD sera '0', le second sera '1', etc. Donc le premier disque IDE sera wd0, le troisième disque SCSI sera sd2. Si vous avez deux disques SCSI et trois disques IDE sur une machine, vous auriez avoir sd0, sd1, wd0, wd1, et wd2 sur celle-ci. L'ordre est celui de leur apparition durant la phase de détection du matériel au démarrage. Il y a quelques points clés à garder à l'esprit:

Partitionnement

À cause de raisons historiques, le terme "partition" est régulièrement utilisé pour deux choses différentes dans OpenBSD et cela amène à quelques confusions.

Les deux types de "partitions" sont:

Toutes les plates-formes OpenBSD utilisent disklabel(8) comme principal moyen pour gérer les partitions du système de fichier OpenBSD, mais seules certaines plates-formes requièrent l'utilisation de fdisk(8) pour gérer les Tables de Partitions. Sur les plates-formes utilisant des partitions fdisk, une partition fdisk est utilisée pour contenir tous les systèmes de fichiers OpenBSD, cette partition est ensuite découpée vers le haut dans le disklabel. Ces partitions disklabel sont étiquetées de "a" à "p". Quelques-unes de celles-ci sont "spéciales":

Identification des partitions

Un système de fichiers OpenBSD est identifié par le disque sur lequel il est, plus le fichier de partition système sur ce disque. Donc, les systèmes de fichiers peuvent être identifiés avec des identifiants comme "sd0a" (la partition "a" du premier périphérique "sd"), "wd2h" (la partition "h" du troisième périphérique "wd"), ou "sd1c" (l'intégralité du second périphérique). Le fichier de périphérique serait /dev/sd0a pour le block device, et /dev/rsd0a serait le fichier de périphérique pour le périphérique brut.

Quelques utilitaires vous permettront d'utiliser le nom "raccourcis" d'une partition (i.e., "sd0d") ou d'un disque (i.e., "wd1") à la place du nom actuel du périphérique ("/dev/sd0d" ou "/dev/wd1c", respectivement).

Notez encore une fois que si vous mettez des données sur wd2d, puis que vous enlevez wd1 du système et que vous redémarrez, vos données seront à présent sur wd1d, car votre ancien wd2 sera devenu wd1. Cependant, une identification de disque ne va pas changer après le démarrage, donc si une clé USB est débranchée ou plante, cela ne va pas changer l'identification des autres disques jusqu'au redémarrage.

Disklabel Unique Identifiers

Les disques peuvent aussi être identifiés par les Disklabel Unique Identifiers (DUIDs), un nombre de 16 chiffres hexadécimaux, gérés par le périphérique diskmap(4). Ce nombre est généré automatiquement et aléatoirement lorsqu'un disklabel est pour la première fois créé, mettant par défaut des zéros sur un label existant (pre OpenBSD 4.8). disklabel(8) peut être utilisé pour changer l'UID si désiré. Ces UIDs sont "persistants" -- si vous identifiez vos disques de cette façon, le disque "f18e359c8fa2522b" sera toujours f18e359c8fa2522b, peut importe l'ordre ou le moment où il est attaché. Vous pouvez spécifier les partitions sur le disque en ajoutant une période et la lettre de partition, par exemple, f18e359c8fa2522b.d est la partition 'd' du disque f18e359c8fa2522b et se référera TOUJOURS au même bloc de stockage, peut importe l'ordre dans lequel le périphérique est attaché, ou le type d'interface auquel il est attaché.

Ces UIDs peuvent être utilisé pour identifier les disques presque partout où une partition ou un périphérique devraient être spécifiés, par exemple dans /etc/fstab ou dans les lignes de commande. Bien sûr, les disques et les partitions peuvent aussi être identifiés de façon traditionnelle, par le périphérique, le numéro et la partition (i.e., /dev/sd1f), et de manière interchangeable.

Il est à noter que le DUID est une propriété du disklabel, bien que cela soit surtout académique, comme OpenBSD ne supporte qu'un seul disklabel par disque.

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 armich) 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. À 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 de fdisk

14.3 - 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 armish, 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. 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. À 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
type: ESDI
disk: ESDI/IDE disk
label: SAMSUNG HD154UI 
duid: d920a43a5a56ad5f
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 16
sectors/cylinder: 1008
cylinders: 2907021
total sectors: 2930277168
boundstart: 64
boundend: 2930272065
drivedata: 0 

16 partitions:
#                size           offset  fstype [fsize bsize  cpg]
  a:          1024064               64  4.2BSD   2048 16384    1 # /
  b:          4195296          1024128    swap                   
  c:       2930277168                0  unused                   
  d:          4195296          5219424  4.2BSD   2048 16384    1 # /usr
  e:          4195296          9414720  4.2BSD   2048 16384    1 # /tmp
  f:         20972448         13610016  4.2BSD   2048 16384    1 # /var
  h:          2097632         34582464  4.2BSD   2048 16384    1 # /home

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: [36680096] 
size: [2893591969] 1T
Rounding to cylinder: 2147483536
FS type: [4.2BSD]
> p m
OpenBSD area: 64-2930272065; size: 1430796.9M; free: 364310.8M
#                size           offset  fstype [fsize bsize  cpg]
  a:           500.0M               64  4.2BSD   2048 16384    1 # /
  b:          2048.5M          1024128    swap                   
  c:       1430799.4M                0  unused                   
  d:          2048.5M          5219424  4.2BSD   2048 16384    1 # /usr
  e:          2048.5M          9414720  4.2BSD   2048 16384    1 # /tmp
  f:         10240.5M         13610016  4.2BSD   2048 16384    1 # /var
  h:          1024.2M         34582464  4.2BSD   2048 16384    1 # /home
  k:       1048575.9M         36680192  4.2BSD   8192 65536    1 
> 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.4 - 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 mégaoctets. 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 mégaoctets 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 mégaoctets" ou, 96G pour 96 gigaoctets.

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 sd2d 

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/sd2d /u

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

/dev/sd2d /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 copier /usr/local dans le dossier /mnt. Exemple:

# cd /usr/local && pax -rw -p e . /mnt
Éditez le fichier /etc/fstab(5) afin de préciser que votre partition /usr/local est maintenant /dev/sda2d (votre nouvelle partition formatée). Exemple :
/dev/sd2d /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.5 - Comment gérer l'espace de pagination ?

14.5.1 - À propos de la pagination

Historiquement, toutes sortes de règles ont été expliquées pour guider l'administrateur sur la quantité d'espace de pagination à configurer sur leurs machines. Le problème, bien sûr, c'est qu'il y a peu d'applications "normales".

Une non-utilisation manifeste de l'espace de pagination est d'être un lieu ou le noyau peut générer une copie du système de base en cas de mode panique pour une analyse ultérieure. Pour que cela fonctionne vous devez avoir une partition de pagination (pas un fichier de pagination) au moins aussi grand que la taille de votre RAM. Par défaut, le système sauvera une copie de ce vidage mémoire dans /var/crash au redémarrage, donc si vous désirez faire cela automatiquement, vous devez avoir assez d'espace libre dans /var. Cependant, vous pouvez aussi démarrer le système en mode mono-utilisateur et utiliser savecore(8) pour faire le vidage ailleurs.

Plusieurs types de systèmes peuvent être configurés de façon approprié sans aucun espace de pagination. Par exemple, les pare-feu ne doivent pas paginer en fonctionnement normal. Les machines avec un stockage flash ne doivent généralement pas paginer. Si votre pare-feu est basé sur une flash, vous bénéficierez (légèrement) par la non allocation d'une partition d'espace de pagination, mais dans la plupart des cas, une partition d'espace de pagination ne fera de mal à personne; la plupart des disques possèdent assez d'espace pour en allouer un petit peu à l'espace de pagination.

Il y a toutes sortes d'astuces pour optimiser l'espace de pagination (ou sur le disque, disques séparés, etc...), mais si vous vous trouvez vous-même dans une situation où l'espace de pagination est une solution, vous avez probablement besoin de plus de RAM. En général, la meilleure optimisation pour l'espace de pagination est de ne pas en avoir besoin.

Sur OpenBSD, l'espace de pagination est géré par le programme swapctl(8) qui ajoute, supprime, affiche et donne des priorités sur les fichiers et périphériques d'espace de pagination.

14.5.2 - Paginer sur une partition

Sur OpenBSD, la partition 'b' du disque de démarrage est utilisée par défaut et automatiquement pour l'espace de pagination. Pas de configuration est nécessaire pour mettre cela en place. Si vous ne désirez pas utiliser d'espace de pagination sur le disque de démarrage, ne définissez pas une partition "b". Si vous désirez utiliser l'espace de pagination sur une autre partition ou sur un autre disque, vous devez définir ces partitions dans /etc/fstab avec des lignes ressemblant à cela :

/dev/sd3b none swap sw 0 0
/dev/sd3d none swap sw 0 0

14.5.3 - Paginer 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 pour csh(1) ou ulimit pour sh(1))

Quelquefois, votre envie initiale sur la quantité de swap nécessaire est fausse, et vous devez ajouter plus d'espace de pagination, occasionnellement dans l'urgence (comme dans "Geez, at the rate it is burning swap, we'll be wedged in five minutes"). Si vous vous retrouvez dans cette situation, ajouter de l'espace de pagination dans un fichier sur un système de fichier existant peut-être une solution rapide.

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 d'une taille 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

À 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

14.6 - 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.7 - Comment se déroule le processus de démarrage d'OpenBSD/i386 et d'OpenBSD/amd64 ?

Le processus de démarrage d'un système OpenBSD/i386 et OpenBSD/amd64 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) représente les 512 premiers 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, effaçant la table de partition existante, et pas seulement son code, comme cela peut être le cas avec certains systèmes. Vous n'aurez pas souvent envie de le faire. Pour ce faire, utilisez l'option "-u" de la commande fdisk(8) ("fdisk -u wd0") pour (ré)installer le code du MBR.

    Bien qu'OpenBSD inclue son propre MBR, 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 les 512 premiers octets 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(8), 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;... 
    

  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 interactif. 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 3.18
         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 3.18
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-2012 OpenBSD.  All rights reserved.  http://www.OpenBSD.org

OpenBSD 5.2 (GENERIC) #278: Wed Aug  1 10:04:16 MDT 2012
    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.8 - Quels sont les problèmes liés aux disques de grande capacité sous OpenBSD ?

OpenBSD supporte les systèmes de fichiers FFS et FFS2 (aussi connu comme UFS et UFS2). FFS est le système de fichiers historique de OpenBSD, FFS2 est nouveau depuis la 4.3. Avant de regarder les limites de chaque système, nous avons besoin de regarder à des limites système plus générale.

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, mais il fonctionne très bien), 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 et boot code.

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 l'espace supporté par la ROM de démarrage.

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/amd64) 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. C'est une autre raison de NE pas allouer tout l'espace disque Juste Parce Ce Qu'il Est La. Garder le système de fichier monté RO ou pas monté aide à les garder du besoin d'être fsck(8) après l'arrachage du câble d'alimentation. Réduire le nombre d'inodes (en utilisant l'option -i de newfs) peut aussi améliorer le temps de fsck -- en supposant que vous n'avez vraiment pas besoins d'eux.

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.

FFS vs. FFS2

Utilisant FFS, OpenBSD supporte un système de fichiers individuel avec 231-1, ou 2,147,483,647 blocs et chaque secteur possède une taille de 512 octets, ce qui est un petit peu moins que 1To. FFS2 est capable de supporter des disques beaucoup plus grands, donc il faudra longtemps avant d'atteindre les nouvelles limites du système de fichiers.

Les noyaux de démarrage/installation supportent seulement FFS, pas FFS2, donc les partitions systèmes clés (/, /usr, /var, /tmp) ne doivent pas être en FFS2 ou de sérieux problèmes de maintenance arriveront (il n'y a aucune raison pour avoir ces partitions aussi large de toute façon). Pour cette raison, les partitions très grandes doivent être utilisées uniquement pour des partitions "non-système", par exemple /home, /var/www/ ,/bigarray, etc.

Il faut remarquer que tous les contrôleurs et pilotes ne supportent pas les grands disques. Par exemple, ami(4) a une limite de 2To par volume logique. Faites toujours attention à ce qui était disponible quand un contrôleur ou une interface a été fabriqué, et ne vous fiez pas seulement à "l'adéquation des connecteurs".

Disques de plus de 2To

Le système MBR utilisé sur les ordinateurs repère uniquement les disques jusqu'à 2To de taille. fdisk(8) va typiquement reporter une taille de disque du modulo de 2To, donc votre disque de 2.7To (vendu en tant que 3To) s'affichera dans fdisk(8) avec une taille aux alentours de 700Go. Cela ne nuit en aucune façon à la capacité d'OpenBSD à utiliser des disques plus grands. Comme le MBR est utilisé uniquement pour l'amorçage de l'OS, une fois que l'OS est en cours d'exécution, les systèmes de fichiers sont définis par le disklabel, qui n'a pas de limite de 2To.

Pour utiliser un disque de plus de 2To, créez une partition OpenBSD sur le disque en utilisant fdisk, quelle que soit la taille que fdisk vous affichera. Lorsque vous étiquetez le disque avec disklabel(8), utilisez l'option "b" pour mettre les limites d'OpenBSD (qui sont par défaut à la taille de la partition fdisk OpenBSD) pour couvrir le disque entier. Maintenant, vous pouvez créer vos partitions comme bon vous semble. Vous devez toujours respecter les capacités de votre BIOS, qui aura la limitation de seulement comprendre les partitions fdisk, donc votre partition 'a' devrait entièrement être dans la partie du disque gérée par fdisk, en plus de toutes les limitations du BIOS.

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

OpenBSD a un boot loader très robuste qui est indifférent à la géométrie des disques, mais pas indifférent à l'endroit où le fichier /boot se situe 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 un CDROM dans votre lecteur (ou utilisez une disquette bootable) et à l'invite de commandes, tapez "boot hd0a:/bsd" afin de le forcer à démarrer sur le premier disque (et non sur le CD ou 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
Notez que "/boot" est l'emplacement physique du fichier "boot" que vous souhaitez utiliser étant donné que le système est actuellement monté. Si votre situation était un peu différente et que vous avez booté depuis le CD et monté la partition 'a' sur /mnt, cela devrait probablement être "/mnt/boot" à la place. installboot(8) fait deux choses ici -- il installe le fichier "biosboot" où cela est nécessaire pour être dans la partition Boot Record, et le modifie avec l'emplacement physique du fichier "/boot".

14.10 - 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 ou que les données seraient perdues d'une autre façon.

Cette documentation vous assistera dans l'utilisation des utilitaires standards dump(8)/ restore(8) fournis avec OpenBSD. Des utilitaires de sauvegarde plus avancés, comme "Amanda" et "Bacula" sont disponibles via les ports afin de sauvegarder plusieurs serveurs vers des disques et lecteurs de bandes.

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 de type SCSI fixé à 0. Le système de fichiers /usr réside sur sd0h, la partition h du disque de type SCSI fixé à 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 où 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.11 - 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 vnd0 /tmp/ISO.image
# mount -t cd9660 /dev/vnd0c /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 vnd0

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

14.12 - À 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 ancien.

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.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. À condition d'avoir encore votre partition var, vous pouvez simplement lire la sortie, et la réintégrer dans disklabel.

Dans le cas où 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, et NTFS (Windows). Certains n'ont qu'un support limité, comme par exemple l'accès en lecture uniquement.

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:

À 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
duid: d920a43a5a56ad5f
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 16
sectors/cylinder: 1008
cylinders: 16383
total sectors: 78165360
boundstart: 20338290
boundend: 49656915
drivedata: 0

16 partitions:
#             size        offset  fstype [fsize bsize  cpg]
  a:        408366      20338290  4.2BSD   2048 16384   16 # /
  b:       1638000      20746656    swap
  c:      78165360             0  unused
  d:       4194288      22384656  4.2BSD   2048 16384   16 # /usr
  e:        409248      26578944  4.2BSD   2048 16384   16 # /tmp
  f:      10486224      26988192  4.2BSD   2048 16384   16 # /var
  g:      12182499      37474416  4.2BSD   2048 16384   16 # /home
  i:         64197            63 unknown
  j:      20274030         64260 unknown
  k:       1975932      49656978   MSDOS
  l:       3919797      51632973 unknown
  m:       2939832      55552833  ext2fs
  n:       5879727      58492728  ext2fs
  o:      13783707      64372518  ext2fs 

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. 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 mégaoctets 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. À 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 ?

14.17.1 - mémoire flash comme périphérique de stockage portable

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, 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.

À 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.17.2 - Mémoires Flash comme disque de démarrage

On peut utiliser les mémoires flash de différentes façons comme disque de démarrage avec OpenBSD. Cela peut être fait avec des périphériques USB (en s'assurant que votre ordinateur peut démarrer sur un périphérique flash USB, ce qui n'est pas le cas pour tous) ou non USB (par exemple CF) avec des adaptateurs IDE ou SATA. (Les périphériques non USB attachés a un adaptateur USB sont traités comme un périphérique USB.) Dans certains cas, vous pouvez actuellement utiliser un périphérique des deux façons (chargez le média dans l'adaptateur USB, mais utilisez un adaptateur IDE).

Un périphérique flash attaché à un port USB sera visible comme un périphérique SCSI sd(4). Attaché à une adaptateur IDE, il sera visible comme un périphérique wd(4).

Dans le cas d'un média flash dans un adaptateur IDE, il pourra être démarré de tout système qui peut démarrer un disque dur IDE sur le même adaptateur. D'un certain sens, le système voit le média flash comme un disque IDE. Configurez simplement le matériel de manière appropriée, et installez OpenBSD sur le disque flash comme d'habitude.

Dans le cas de démarrage d'un périphérique USB, votre système doit être capable de démarrer d'un périphérique USB sans être distrait par un autre périphérique sur le système. Il faut remarquer que si votre intention est de faire un environnement portable de démarrage sur un périphérique USB, vous préférerez vraiment utiliser les DUIDs, plus que la traditionnelle notation "/dev/sd0X". Le périphérique USB va apparaître comme un disque SCSI, parfois sd0. Sans les DUIDs, si vous branchez ce périphérique dans un système ayant déjà quelques disques de type SCSI (i.e., périphériques attachés à une interface ahci(4)) branchés, il se terminera probablement par un identifiant différent, ce qui compliquera l'utilisation de ce périphérique flash de système en système, vous devriez donc mettre à jour /etc/fstab. L'utilisation des DUIDs résout ce problème.

Quelques remarques :

14.17.3 - Comment puis-je créer un périphérique de démarrage USB "Live" ?

Il est très facile de créer un disque flash USB de démarrage (ou autre !) qui puisse être utilisé comme un système OpenBSD "live" sans installer OpenBSD sur le disque dur local de la machine. Évidemment, la machine cible doit pouvoir démarrer d'un périphérique USB, mais le chargement initial peut-être fait de n'importe quelle machine avec une interface USB.

Des raisons pour lesquelles vous voudriez le faire :

Créer un tel "disque OpenBSD live" est simple. Voilà !

Il y a certaines choses que vous voudrez faire après l'installation pour améliorer vos résultats :

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 peu d'options pour augmenter la vitesse des opérations sur disque.

14.18.1 - Soft Updates

Un outil important 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. Pour en savoir plus, consultez La FAQ Softupdates .

14.18.2 - 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).

14.19 - 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 gagner 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.78 2013/01/20 07:39:01 ajacoutot Exp $