Agrandissement de disque (slice vs partition)

Mémo sur FreeBSD pour l’agrandissement d’un disque système avec déplacement de swap.


Avec la virtualisation, la possibilité d’agrandissement de disque n’est plus réservée aux baies de stockage. Dans l’exemple ci-dessous le disque se nomme /dev/vtbd0 (environnement KVM/Virtio sous Proxmox).

Slice vs Partition vs Slice

Dans le monde BSD (et Solaris), une slice est une partition primaire – au sens Linux ou Windows du terme. On peut avoir 4 slices par disque. Cette slice est elle-même découpée en partitions.
Ces différentes partitions contiennent les systèmes de fichiers et/ou la swap. Avec FreeBSD, le nombre maximum est de 7 partitions par slice. Elles sont désignées par des lettres (de a à h), la lettre c est réservée, elle désigne l’intégralité de la slice elle-même.

/dev/vtbd0    -> disque brut
/dev/vtbd0s1  -> slice BSD
/dev/vtbd0s1a -> première partition, généralement / sur un disque de boot
/dev/vtbd0s1b -> généralement la swap sur un disque de boot
/dev/vtbd0s1c -> (réservé) équivalent de /dev/vtbd0s1
/dev/vtbd0s1d -> système de fichiers
....
/dev/vtbd0s1h -> système de fichiers

Procédure

Avant l’agrandissement, le partitionnement (sliçonnement n’existe pas en français) est comme suit:

root@FreeBSD13:~ # gpart show vtbd0
=>       63  104857537  vtbd0  MBR  (50G)
         63          1         - free -  (512B)
         64   67108800      1  freebsd  [active]  (32G)

=>       0  67108800  vtbd0s1  BSD  (32G)
         0  62914560        1  freebsd-ufs  (30G)
  62914560   3354624        2  freebsd-swap  (1.6G)
  66269184    839616           - free -  (410M)

Cette commande affiche sur les trois premières lignes le partitionnement du disque puis, sur les lignes suivantes, le contenu de la slice BSD.
En résumé, on a un disque dédié (format MBR) avec une slice active de 32Go (vtbd0s1). Cette slice est composée d’une partition UFS (vtbd0s1a) et d’une swap (vtbd0s1b). Après agrandissement à 50Go, on se retrouve avec un espace libre en fin de disque:

root@FreeBSD13:~ # gpart show vtbd0
=>       63  104857537  vtbd0  MBR  (50G)
         63          1         - free -  (512B)
         64   67108800      1  freebsd  [active]  (32G)
   67108864   37748736         - free -  (18G)

=>       0  67108800  vtbd0s1  BSD  (32G)
         0  62914560        1  freebsd-ufs  (30G)
  62914560   3354624        2  freebsd-swap  (1.6G)
  66269184    839616           - free -  (410M)

On souhaite donc agrandir la partition UFS: il faut, dans l’ordre :

  • Agrandir la slice BSD vtbd0s1
  • Supprimer la partition de swap vtbd0s1b
  • Agrandir la partition UFS vtbd0s1b à la taille souhaitée
  • Re-créer la swap sur l’espace restant

On commence par désactiver la swap

root@FreeBSD13:~ # swapoff /dev/vtbd0s1b

On agrandit la slice vtbd0s1 de toute la place disponible (ici 18Go)

root@FreeBSD13:~ # gpart resize -i 1 vtbd0
vtbd0s1 resized
root@FreeBSD13:~ # gpart show
=>       63  104857537  vtbd0  MBR  (50G)
         63          1         - free -  (512B)
         64  104857536      1  freebsd  [active]  (50G)

=>        0  104857536  vtbd0s1  BSD  (50G)
          0   62914560        1  freebsd-ufs  (30G)
   62914560    3354624        2  freebsd-swap  (1.6G)
   66269184   38588352           - free -  (18G)

On supprime la swap:

root@FreeBSD13:~ # gpart delete -i 2 /dev/vtbd0s1
vtbd0s1b deleted
root@FreeBSD13:~ # gpart show
=>       63  104857537  vtbd0  MBR  (50G)
         63          1         - free -  (512B)
         64  104857536      1  freebsd  [active]  (50G)

=>        0  104857536  vtbd0s1  BSD  (50G)
          0   62914560        1  freebsd-ufs  (30G)
   62914560   41942976           - free -  (20G)

On agrandit la partition UFS à 46Go pour laisser 4Go de swap

root@FreeBSD13:~ # gpart resize -i 1 -s 46G vtbd0s1
vtbd0s1a resized
root@FreeBSD13:~ # gpart show
=>       63  104857537  vtbd0  MBR  (50G)
         63          1         - free -  (512B)
         64  104857536      1  freebsd  [active]  (50G)

=>        0  104857536  vtbd0s1  BSD  (50G)
          0   96468992        1  freebsd-ufs  (46G)
   96468992    8388544           - free -  (4.0G)

On agrandit le système de fichiers

root@FreeBSD13:~ # growfs -y /dev/vtbd0s1a 
super-block backups (for fsck_ffs -b #) at:
 64112192, 65394432, 66676672, 67958912, 69241152, 70523392, 71805632,
 73087872, 74370112, 75652352, 76934592, 78216832, 79499072, 80781312,
 82063552, 83345792, 84628032, 85910272, 87192512, 88474752, 89756992,
 91039232, 92321472, 93603712, 94885952, 96168192
root@FreeBSD13:~ # df
Filesystem    1K-blocks    Used    Avail Capacity  Mounted on
/dev/vtbd0s1a  46704668 4131372 38836924    10%    /
devfs                 1       1        0   100%    /dev

On recrée la swap:

root@FreeBSD13:~ # gpart add -t freebsd-swap  vtbd0s1
vtbd0s1b added
root@FreeBSD13:~ # gpart show
=>       63  104857537  vtbd0  MBR  (50G)
         63          1         - free -  (512B)
         64  104857536      1  freebsd  [active]  (50G)

=>        0  104857536  vtbd0s1  BSD  (50G)
          0   96468992        1  freebsd-ufs  (46G)
   96468992    8388544        2  freebsd-swap  (4.0G)

On l’active:

root@FreeBSD13:~ # swapon /dev/vtbd0s1b

Et voilà.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>