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