Redimensionner un disque OpenBSD
Le sujet étant assez peu ou mal documenté, je me suis dit que ce serait intéressant de te faire partager mes notes.
La base
Pour l’expérience (et surtout parce que c’était à peu près mon cas d’usage), j’ai donc installé un OpenBSD 6.8 tout frais avec un disque dur de 16Gio et le partitionnement par défaut. Ce dernier met la partition /home
en dernier sur le disque. C’est la seule que tu pourras facilement redimensionner (ça tombe bien, c’est ce que je comptais faire).
Bref, donc on ne peut pas redimensionner n’importe quelle partition, seulement la dernière du disque en gros (un peu comme du partitionnement plus classique pour Linux, mais ça fait quelques années que je n’en ai pas fait).
La situation initiale ressemble donc à cela :
# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/wd0a 413M 64.5M 328M 16% /
/dev/wd0k 2.6G 2.0K 2.4G 0% /home
/dev/wd0d 546M 6.0K 518M 0% /tmp
/dev/wd0f 1.9G 1.1G 787M 58% /usr
/dev/wd0g 530M 2.0K 504M 0% /usr/X11R6
/dev/wd0h 1.8G 216K 1.7G 0% /usr/local
/dev/wd0j 5.1G 2.0K 4.8G 0% /usr/obj
/dev/wd0i 1.3G 2.0K 1.3G 0% /usr/src
/dev/wd0e 782M 5.6M 737M 1% /var
Et c’est donc surtout le /home
qui va nous intéresser.
Arrêt, redémarrage, toussa
Première étape donc, arrêter la machine et redimensionner le disque sous-jacent. Je l’ai passé à 64G pour les besoins de la démonstration, mais évidemment, ça pourrait fonctionner avec n’importe quelle valeur (enfin presque, je suppose que si on met un trillion de péta-octets, ça va ptet moins bien passer…).
Au redémarrage, à l’invite de boot, il faut préciser bsd.rd
. Il s’agit du disque de secours qui est inclus à l’installation (sauf si tu l’as enlevé mais je pars du principe que tu n’es pas un sauvage à ce point-là) :
>> OpenBSD/amd64 BOOT 3.52
boot> bsd.rd
Une fois démarré, choisis l’option (S)hell
pour tomber sur un shell standard (/bin/sh
). À ce stade, le /dev
de notre OpenBSD n’est pas encore peuplé, il va donc au moins falloir y mettre le disque en question. Si c’est un disque SATA, ce sera sd0
si c’est un disque IDE, ce sera wd0
(sur une VM, il y a de bonnes chances que ce soit wd0
du coup) :
# cd /dev
# sh MAKEDEV wd
Je suis venu pour redimensionner des partitions et botter des culs
On va pouvoir vérifier les partitions MBR du disque :
# fdisk wd0
Disk: wd0 geometry: 8354/255/63 [134217728 Sectors]
Offset: 0 Signature: 0xAA55
Starting Ending LBA Info:
#: id C H S - C H S [ start: size ]
-------------------------------------------------------------------------------
0: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused
1: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused
2: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused
*3: A6 0 1 2 - 2087 254 63 [ 64: 33543656 ] OpenBSD
Comme tu peux le constater la géométrie du disque est déjà à la bonne dimension en nombre de secteur. Mais la partition 3 (la partition OpenBSD) n’est pas encore tout-à-fait à jour. On va donc forcer fdisk
à faire ce qu’il faut :
# fdisk -iy wd0
Writing MBR at offset 0.
# fdisk wd0
Disk: wd0 geometry: 8354/255/63 [134217728 Sectors]
Offset: 0 Signature: 0xAA55
Starting Ending LBA Info:
#: id C H S - C H S [ start: size ]
-------------------------------------------------------------------------------
0: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused
1: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused
2: 00 0 0 0 - 0 0 0 [ 0: 0 ] unused
*3: A6 0 1 2 - 8353 254 63 [ 64: 134206946 ] OpenBSD
La quantité de secteur du disque a doublé : nous avons bien alloué de l’espace supplémentaire à la partition OpenBSD. En toute logique, disklabel
devrait être capable de retrouver rapidement ces petits :
# disklabel wd0
# /dev/rwd0c:
type: ESDI
disk: ESDI/IDE disk
label: VBOX HARDDISK
duid: 71abc1c5e7522ff0
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 255
sectors/cylinder: 16065
cylinders: 2088
total sectors: 134217728
boundstart: 64
boundend: 33543720
drivedata: 0
Donc là, techniquement, on a la bonne taille de disque, mais pas encore la bonne taille de partition (regarde bien le champs boundend
pour t’en rendre compte).
On va donc donner les indications nécessaires à disklabel
pour mettre la frontière au bon endroit et agrandir la dernière partition du disque :
# disklabel -E wd0
Label editor (enter '?' for help at any prompt)
wd0> b
Starting sector: [64]
Size ('*' for entire disk): [33543656] *
wd0*> c k
Partition k is currently 5535936 sectors in size, and can have a maximum
size of 106209952 sectors.
size: [5535936] *
wd0*> p
OpenBSD area: 64-134217728; size: 134217664; free: 30
# size offset fstype [fsize bsize cpg]
a: 880288 64 4.2BSD 2048 16384 6822
b: 1310050 880352 swap
c: 134217728 0 unused
d: 1162688 2190432 4.2BSD 2048 16384 9011
e: 1653888 3353120 4.2BSD 2048 16384 12921
f: 4218208 5007008 4.2BSD 2048 16384 12960
g: 1130272 9225216 4.2BSD 2048 16384 8760
h: 3816448 10355488 4.2BSD 2048 16384 12960
i: 2891616 14171936 4.2BSD 2048 16384 12960
j: 10944224 17063552 4.2BSD 2048 16384 12960
k: 106209952 28007776 4.2BSD 2048 16384 12960
wd0*> w
wd0> q
No label changes.
Pour le détail : on commence par changer la taille du disque (histoire de lui faire reconnaître ce qu’il y a en plus), puis on change la taille de la partition k
(qui correspond donc au /home
mais surtout qui est la dernière partition, la seule que l’on peut redimensionner). À partir de là, il ne reste plus qu’à faire grandir le système de fichiers correspondant :
# growfs /dev/rwd0k
We strongly recommend you to make a backup before growing the Filesystem
Did you backup your data (Yes/No) ? Yes
new filesystem size is: 26552488 frags
Warning: 41632 sector(s) cannot be allocated.
growfs: 51840.0MB (106168320 sectors) block size 16384, fragment size 2048
using 256 cylinder groups of 202.50MB, 12960 blks, 25920 inodes.
super-block backups (for fsck -b #) at:
5806240, 6220960, 6635680, 7050400, 7465120, 7879840, 8294560, 8709280,
[…]
105339040, 105753760
Dernière étape avant de valider que tout est bon : faire un petit fsck
des familles histoire de vérifier que tout est correct.
# fdisk /dev/rwd0k
Conclusage
Au démarrage suivant, on constate bien qu’on a récupéré de l’espace disque en plus :
# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/wd0a 413M 84.4M 308M 22% /
/dev/wd0k 49.0G 2.0K 46.6G 0% /home
[…]
Bon évidemment, si on doit redimensionner autre chose que la dernière partition (/var
au pif), ça va être nettement moins simple et j’aurais tendance à dire que t’auras plus vite fait de tout réinstaller. Néanmoins, le partition automatique étant pas trop mal foutu, il s’arrange pour avoir suffisamment de place partout et garder la partition qui va probablement satûrer le plus vite à la fin.
C’est loin d’être une science exacte mais jusqu’à présent, je l’ai plutôt bien vérifié dans la pratique.