Accueil En bref Objectifs Services Contact Adhésion Abonnement Tarifs Brique Internet Vidéos L'Association Support Déploiement Changements

Ajout Disque

Comment ajouter de l'espace disque sous OpenBSD?

Prenons le cas de limbo.franciliens.net l'un de nos deux serveurs sur lequel un disque de 1 To a été rajouté récemment.

Etape simple, mais quand même indispensable :

$ dmesg | grep -i ^wd
wd0 at pciide0 channel 0 drive 0: <SAMSUNG HD322GJ>
wd0: 16-sector PIO, LBA48, 305245MB, 625142448 sectors
wd0(pciide0:0:0): using PIO mode 4, Ultra-DMA mode 6
wd1 at pciide0 channel 1 drive 0: <WDC WD10EALX-009BA0>
wd1: 16-sector PIO, LBA48, 953869MB, 1953525168 sectors
wd1(pciide0:1:0): using PIO mode 4, Ultra-DMA mode 6

Dans l'exemple ci-dessus, le disque wd0 est le disque système de la machine (environ 300Go reconnu par le système) tandis que le disque wd1 est le nouveau disque, d'une taille de 953Go. C'est ce deuxième disque que nous allons donc configurer.

(Ce qui suit s'applique également aux BSD autres qu'Open : FreeBSD?, NetBSD?, etc... utilisent le même système)

La principale différence entre OpenBSD? et un système de type Linux est que Linux n'a qu'un "niveau" de partitionnement, tandis qu'OpenBSD? en offre deux : les partitions proprement dites et les "slices".

Sans rentrer dans les détails, disons que les slices ne sont que des sous-partitions.

Une particularité d'OpenBSD? est que ces slices sont (pour des disques "classiques") numérotées avec des lettres et le disque lui-même avec des chiffres, en commencant par 0. Le disque wd1, présenté ci-dessus est donc le deuxième disque du système, le premier étant wd0. Le premier slice (ou sous-partition) sera donc: wd1a, alors qu'un système Linux l'indiquerait comme : hda1 (disque a, partition 1).

L'autre particularité est que, sur un disque système, OpenBSD? impose que le slice a soit la sous-partition racine (/) du disque, le slice b soit la sous-partition de swap/mémoire virtuelle et le slice c, pour des raisons historiques, représente toujours la totalité du disque. Un disque comporte donc toujours au moins une partition et un slice, le slice c, que l'on ne peut pas effacer.

Si cela vous paraît un peu compliqué pour le moment, ce sera probablement plus clair à la fin de ce tutoriel !

Ces détails étant expliqués, nous allons donc, dans l'ordre : créer une partition OpenBSD? sur le disque, puis créer un "slice" dans cette partition, formater le système de fichiers et, enfin, monter cet espace disque sur notre système.

Pour créer une partition sous OpenBSD?, il faut utiliser le programme fdisk et son mode interactif (bien qu'il soit possible de l'utiliser de manière non-interactive, cela dépasse le cadre de ce petit tutoriel).

Pour cela, utilisez la commande suivante en tant que root :

# fdisk -e wd1
fdisk: 1>

L'option -e indique évidemment qu'il faut que fdisk fonctionne dans le mode "editeur" interactif. Sous ce mode, il suffit de taper ? pour afficher la liste des commandes ou help pour afficher la man page :

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

Affichons maintenant la liste des partitions avec la commande print :

fdisk: 1> print
Disk: wd1       geometry: 121601/255/63 [1953525168 Sectors]
Offset: 0       Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
*0: EE      0   0   2 - 121601  80  63 [           1:  1953525167 ] EFI GPT
 1: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
 2: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
 3: 00      0   0   0 -      0   0   0 [           0:           0 ] unused

Nous voyons ci-dessus 4 partitions, ce qui est standard pour un disque de ce type. Elles correspondent aux partitions primaires.

Etant donné que la totalité de wd1 sera utilisée par notre système OpenBSD?, nous allons simplement modifier la première partition (la n°0) pour en faire une partition allouée au système. Pour cela, toujours sur l'utilitaire fdisk, il est nécessaire d'utiliser la commande interactive edit, comme suit :

fdisk: 1> edit 0
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
*0: EE      0   0   2 - 121601  80  63 [           1:  1953525167 ] EFI GPT
Partition id ('0' to disable) [0 - FF]: [EE] (? for help) ?
Choose from the following Partition id values:
00 unused         20 Willowsoft     66 NetWare 386    A9 NetBSD
01 DOS FAT-12     24 NEC DOS        67 Novell         AB MacOS X boot
02 XENIX /        27 Win Recovery   68 Novell         AF MacOS X HFS+
03 XENIX /usr     38 Theos          69 Novell         B7 BSDI filesy*
04 DOS FAT-16     39 Plan 9         70 DiskSecure     B8 BSDI swap
05 Extended DOS   40 VENIX 286      75 PCIX           BF Solaris
06 DOS > 32MB     41 Lin/Minux DR   80 Minix (old)    C0 CTOS
07 NTFS           42 LinuxSwap DR   81 Minix (new)    C1 DRDOSs FAT12
08 AIX fs         43 Linux DR       82 Linux swap     C4 DRDOSs < 32M
09 AIX/Coherent   4D QNX 4.2 Pri    83 Linux files*   C6 DRDOSs >=32M
0A OS/2 Bootmgr   4E QNX 4.2 Sec    84 OS/2 hidden    C7 HPFS Disbled
0B Win95 FAT-32   4F QNX 4.2 Ter    85 Linux ext.     DB CPM/C.DOS/C*
0C Win95 FAT32L   50 DM             86 NT FAT VS      DE Dell Maint
0E DOS FAT-16     51 DM             87 NTFS VS        E1 SpeedStor
0F Extended LBA   52 CP/M or SysV   8E Linux LVM      E3 SpeedStor
10 OPUS           53 DM             93 Amoeba FS      E4 SpeedStor
11 OS/2 hidden    54 Ontrack        94 Amoeba BBT     EB BeOS/i386
12 Compaq Diag.   55 EZ-Drive       99 Mylex          EE EFI GPT
14 OS/2 hidden    56 Golden Bow     9F BSDI           EF EFI Sys
16 OS/2 hidden    5C Priam          A0 NotebookSave   F1 SpeedStor
17 OS/2 hidden    61 SpeedStor      A5 FreeBSD        F2 DOS 3.3+ Sec
18 AST swap       63 ISC, HURD, *   A6 OpenBSD        F4 SpeedStor
19 Willowtech     64 NetWare 2.xx   A7 NEXTSTEP       FF Xenix BBT
1C ThinkPad Rec   65 NetWare 3.xx   A8 MacOS X
Partition id ('0' to disable) [0 - FF]: [EE] (? for help) A6
Do you wish to edit in CHS mode? [n]
Partition offset: [1]
Partition size: [1953525167]

On voit ci-dessus qu'on ne touche pas à la configuration du disque, en prenant les valeurs par défaut de chaque question, si ce n'est pour affecter la valeur A6 (OpenBSD?) à la partition du disque wd1.

On vérifie le résultat de l'opération en affichant de nouveau la configuration du disque :

fdisk:*1> print
Disk: wd1       geometry: 121601/255/63 [1953525168 Sectors]
Offset: 0       Signature: 0xAA55
            Starting         Ending         LBA Info:
 #: id      C   H   S -      C   H   S [       start:        size ]
-------------------------------------------------------------------------------
*0: A6      0   0   2 - 121601  80  63 [           1:  1953525167 ] OpenBSD
 1: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
 2: 00      0   0   0 -      0   0   0 [           0:           0 ] unused
 3: 00      0   0   0 -      0   0   0 [           0:           0 ] unused

On peut voir ci-dessus que la partition 0 est désormais configurée comme partition OpenBSD?.

On écrit ensuite la configuration sur le disque lui-même, avec :

fdisk:*1> quit
Writing MBR at offset 0.

La commande fdisk nous confirme que la configuration est écrite en MBR (Master Boot Record), ce qui la rend permanente. La partition étant maintenant configurée, passons au slice...

Pour configurer les slices d'une partition, il faut utiliser la commande disklabel. Cette commande est beaucoup plus spartiate que la commande fdisk et n'accepte que des lettres, au lieu de commandes entières.

De la même manière que pour fdisk, nous allons utiliser disklabel en mode interactif, avec l'option -E et afficher les commandes disponibles en tapant ? à l'invite :

# disklabel -E wd1
Label editor (enter '?' for help at any prompt)
> ?
Available commands:
 ? | h    - show help                 n [part] - set mount point
 A        - auto partition all space  p [unit] - print partitions
 a [part] - add partition             q        - quit & save changes
 b        - set OpenBSD boundaries    R [part] - resize auto allocated partition
 c [part] - change partition size     r        - display free space
 D        - reset label to default    s [path] - save label to file
 d [part] - delete partition          U        - undo all changes
 e        - edit drive parameters     u        - undo last change
 g [d|u]  - [d]isk or [u]ser geometry w        - write label to disk
 i        - modify disklabel UID      X        - toggle expert mode
 l [unit] - print disk label header   x        - exit & lose changes
 M        - disklabel(8) man page     z        - delete all partitions
 m [part] - modify partition
  
Suffixes can be used to indicate units other than sectors:
 'b' (bytes), 'k' (kilobytes), 'm' (megabytes), 'g' (gigabytes) 't' (terabytes)
 'c' (cylinders), '%' (% of total disk), '&' (% of free space).
Values in non-sector units are truncated to the nearest cylinder boundary.

Commençons par lister les slices déjà présents dans la partition avec la commande p (print) :

> p
OpenBSD area: 1-1953525168; size: 1953525167; free: 1953525167
#                size           offset  fstype [fsize bsize  cpg]
  c:       1953525168                0  unused

Nous retrouvons bien notre slice c, qui, comme indiqué ci-dessus, revient en fait à l'intégralité de la partition.

Nous allons maintenant créer un slice a de 250Go environ avec la commande a (add/ajouter) suivie de la lettre identifiant le slice :

> a a
offset: [1]
size: [1953525167] 255G
Rounding size to cylinder (16065 sectors): 534787784
FS type: [4.2BSD]
Rounding size to bsize (64 sectors): 534787775

Merci de noter que, ci-dessus, les valeurs par défaut ont été systématiquement acceptée en appuyant sur la touche Entrée, à l'exception de la taille (255G). La commande disklabel accepte en effet les valeurs suivies de lettres (K, M, G) pour indiquer la taille totale d'un slice.

Affichons maintenant le résultat de notre ajout avec la commande p (print/imprimer):

> p
OpenBSD area: 1-1953525168; size: 1953525167; free: 1418737392
#                size           offset  fstype [fsize bsize  cpg]
  a:        534787775                1  4.2BSD   4096 32768    1
  c:       1953525168                0  unused

On retrouve bien ci-dessus deux slices : a, que nous allons pouvoir maintenant utiliser et c, que nous ne modifierons pas.

Ecrivons cette configuration sur le disque, avec w (write/écriture) et quittons disklabel avec x :

> w
> x

Notre slice est maintenant prêt à l'utilisation...

Pour créer le système de fichiers, il faut utiliser la commande newfs en lui indiquant le disque et le slice concerné, ainsi que le type de système de fichiers à utiliser.

Ce qui donne :

# newfs -t ffs wd1a
/dev/rwd1a: 261126.8MB in 534787768 sectors of 512 bytes
321 cylinder groups of 814.44MB, 26062 blocks, 52224 inodes each
super-block backups (for fsck -b #) at:
 64, 1668032, 3336000, 5003968, 6671936, 8339904, 10007872, 11675840, 13343808, 15011776, 16679744, 18347712, 20015680, 21683648, 23351616, 25019584, 26687552, 28355520, 30023488, 31691456,
... etc ...

On notera ci-dessus que le système de fichiers est le FFS (Fast File System), qui est le standard BSD, ainsi que la cible de la commande, qui est bien wd1a. Après quelques petites minutes de travail, le système de fichiers est prêt.

Commençons par créer le répertoire sur lequel le système de fichiers sera monté :

# mkdir /backup
# ls -alhF /
total 83580
drwxr-xr-x  16 root  wheel   512B Nov 28 22:59 ./
drwxr-xr-x  16 root  wheel   512B Nov 28 22:59 ../
-rw-r--r--   1 root  wheel   578B Mar  2  2011 .cshrc
-rw-r--r--   1 root  wheel   468B Mar  2  2011 .profile
drwxr-xr-x   2 root  wheel   512B Aug  1 17:45 altroot/
drwxr-xr-x   2 root  wheel   512B Nov 28 22:58 backup/
drwxr-xr-x   2 root  wheel   1.0K Aug  1 17:48 bin/
-rw-r--r--   1 root  wheel  46.2K Aug 30  2011 boot
-rw-r--r--   1 root  wheel   8.6M Nov 25 17:16 bsd
... etc ...

Nous pouvons ensuite monter directement le système de fichiers (disque/slice) dans ce répertoire :

# mount -v -t ffs /dev/wd1a /backup
/dev/wd1a on /backup type ffs (rw, local, ctime=Wed Nov 28 22:59:21 2012)

Et vérifier ensuite qu'il apparaît bien dans la liste des systèmes de fichiers :

# df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/wd0a      7.9G   65.9M    7.4G     1%    /
/dev/wd0i     15.7G    1.0G   14.0G     7%    /home
/dev/wd0f      7.9G    8.0M    7.5G     0%    /tmp
/dev/wd0d      7.9G    1.2G    6.2G    17%    /usr
/dev/wd0h     15.7G    1.8G   13.1G    12%    /usr/local
/dev/wd0j      7.9G    531M    7.0G     7%    /usr/ports
/dev/wd0g      7.9G    821M    6.7G    11%    /usr/src
/dev/wd0e      7.9G    783M    6.7G    10%    /var
/dev/wd0k     29.5G   10.4G   17.7G    37%    /usr/local/news
/dev/wd0l      171G    4.0K    162G     0%    /data
/dev/wd1a      253G    4.0K    240G     0%    /backup

Il faut ensuite modifier le fichier de configuration /etc/fstab comme suit, afin de rendre cette configuration permanente :

# cat /etc/fstab                                                                                                                                                                              
/dev/wd0a / ffs rw,softdep 1 1
/dev/wd0i /home ffs rw,softdep,nodev,nosuid 1 2
/dev/wd0f /tmp ffs rw,softdep,nodev,nosuid 1 2
/dev/wd0d /usr ffs rw,softdep,nodev 1 2
/dev/wd0h /usr/local ffs rw,softdep,nodev 1 2
/dev/wd0j /usr/ports ffs rw,softdep,nodev,nosuid 1 2
/dev/wd0g /usr/src ffs rw,softdep,nodev,nosuid 1 2
/dev/wd0e /var ffs rw,softdep,nodev,nosuid 1 2
/dev/wd0k /usr/local/news ffs rw,softdep,nodev 1 2
/dev/wd0l /data ffs rw,softdep,nodev,nosuid 1 2
/dev/wd1a /backup ffs rw,softdep,nodev,nosuid 1 2

Dans l'exemple ci-dessus, nous activons l'option softdep de FFS, ce qui nous permet de bénéficier de la journalisation des opérations disque, et, donc, de meilleurs temps d'accès.

Une fois le fichier /etc/fstab modifié, il suffit de démonter et de remonter le système de fichiers (/backup, dans l'exemple ci-dessus) pour que la configuration soit terminée et rendue permanente.

Pour aller plus loin

La documentation d'OpenBSD? étant excellente, il ne faut jamais hésiter à s'y reporter :