Repartitionner son disque sous FreeBSD

Il y a peu, attiré par les sirènes du comble du hype d’avoir un serveur dédié, et juste pour dire que, moi aussi, je fais partie du club très peu fermé des zadministrateurs en herbe, je me suis offert la location d’une dedibox (pour ne pas citer de marque).

En plus c’est chouette me dis-je, car dedibox propose du FreeBSD comme système d’exploitation à l’installation du serveur.

Mais, (car sans “mais” je n’aurais pas fais ce billet) hélas pour moi qui aime partitionner mon système comme je le souhaite, il n’y a pas (encore) possibilité de personnaliser son partitionnement à l’installation.

Je me retrouve donc avec un slice d’environ 140 Gio, peuplée de seulement 3 labels (ou partitions):

/ de 1024 Mio

/usr de 70 Gio

/var de 70 Gio aussi

Or moi je veux un /tmp et un /home séparés, dans leur partitions propres. Est-ce trop demander ô monde cruel ?

Il ya bien growfs(8) qui permet, comme son nom l’indique, d’agrandir un système de fichier existant. Mais je veux plutot reduire /var pour créer un /tmp et un /home dans l’espace libéré, donc exit growfs(8) :( (à quand un shrinkfs(8)).

Il ne me reste plus qu’à faire ça à la bonne franquette, à la mimine, les mains dans le cambouis. Nous allons sauvegarder, effacer, recréer, puis restaurer les partitions dont la taille va changer ou qui vont être créées.

Attention: dans cet exemple nous n’allons toucher qu’à /var, c’est pourquoi nous ne sauvegardons que lui. Dans tous les cas, ayez des sauvegardes à jour de vos données importantes et si possible en double dans un endroit sûr. Je ne saurais être tenu responsable d’une quelconque perte de donnée !

D’abord on coupe un maximum de daemons via /etc/rc.d et /usr/local/etc/rc.d (j’ai fait mon repartitionnement en ne gardant que ssh de lancé).

On note quelquepart la sortie de la commande mount sans arguments, afin d’avoir sous la main la correspondance entre nos partitions et nos points de montage:

# mount
/dev/ad4s1a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/ad4s1d on /usr (ufs, local, soft-updates)
/dev/ad4s1e on /var (ufs, local, soft-updates)

On sauvegarde la partition /var quelque part dans /usr (que nous n’avons pas l’intention de toucher) (“man 8 dump” pour la signification des flags):

# dump -a0uLf /usr/dediboxuser/backup/var.dump /var

On “dé-monte” la partition /var

# umount -f /var

On change la valeur de la sysctl kern.geom.debugflags afin de pouvoir modifier le partitionnement en “Live”.

# sysctl kern.geom.debugflags=16

On edite la table des labels afin de supprimer l’entrée correspondant à notre /var d’origine (la partition “e” dans mon cas)

# bsdlabel -e ad4s1

Cela nous ouvre la table des labels dans notre éditeur par défaut, supprimez la ligne correspondant au /var d’origine (partition “e” dans mon cas), sauvez les modifications et quitter l’éditeur. Notez que l’on pourrait ajouter nos nouvelles partitions /tmp /home et /var maintenant en les ajoutant dans la table des labels, mais son format étant non-intuitif, nous allons faire nos modifs avec sysinstall.

# sysinstall

Dans le menu, entrez dans “Custom”, puis ensuite dans “Label”.

Pour créer une partitions dans l’espace devenu disponible:

Touche “C” -> Selectionnez “a filesystem” ->OK-> Entrez la taille en G (ex: 1G) ->OK-> Entrez le point de montage (ex: /tmp)->OK

Une fois créées toutes vos nouvelles partitions, appuyez sur la touche “W” pour écrire les modifications. Vous pouvez ignorer les différentes erreurs qui s’affichent. Notez quelquepart le nouveau partitionnement, avec le nom des partitions et les points de montage correspondant. Sortez de sysinstall.

On relance bsdlabel pour ecrire pour de bon les modifs

# bsdlabel -e ad4s1

Sauvez le fichiers sans rien modifier et quittez l’éditeur.

On contrôle que les périphériques correspondants aux nouvelles partitions ont bien été créées:

# ls -l /dev/ad4s1*
crw-r—–  1 root  operator    0,  72 Dec 11 16:59 /dev/ad4s1
crw-r—–  1 root  operator    0,  73 Dec 11 16:59 /dev/ad4s1a
crw-r—–  1 root  operator    0,  74 Dec 11 16:59 /dev/ad4s1b
crw-r—–  1 root  operator    0,  75 Dec 11 16:59 /dev/ad4s1c
crw-r—–  1 root  operator    0,  76 Dec 11 16:59 /dev/ad4s1d
crw-r—–  1 root  operator    0,  77 Dec 11 16:59 /dev/ad4s1e
crw-r—–  1 root  operator    0,  78 Dec 11 16:59 /dev/ad4s1f
crw-r—–  1 root  operator    0,  79 Dec 11 16:59 /dev/ad4s1g

On remarque l’apparition de ad4s1f et ad4s1g, qui correspondent aux nouvelles partitions.

On créé maintenant des systèmes de fichiers sur les nouvelles partitions vierges (ne pas oublier ad4s1e, qui a été supprimée et recréée plus petite):

# newfs -U -O2 /dev/ad4s1e
# newfs -U -O2 /dev/ad4s1f
# newfs -U -O2 /dev/ad4s1g

On edite /etc/fstab, pour ajouter/modifier les entrées correspondantes aux nouvelles partitions (le partitionnement qui a été noté à l’étape sysinstall est utile maintenant)

/dev/ad4s1e       /tmp       ufs      rw      2      2
/dev/ad4s1f       /home     ufs      rw      2      2
/dev/ad4s1g      /var         ufs      rw      2      2

Puis on monte nos nouvelles partitions:

# mount -a

Et on vérifie:

# mount
/dev/ad4s1a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/ad4s1d on /usr (ufs, local, soft-updates)
/dev/ad4s1e on /tmp (ufs, local, soft-updates)
/dev/ad4s1f on /home (ufs, local, soft-updates)
/dev/ad4s1g on /var (ufs, local, soft-updates)

Les nouvelles partitions sont bien montées :)

Il ne reste plus qu’à restorer les données de notre ancien /var

# cd /var
# restore -rf /usr/home/dediboxuser/backup/var.dump

Pensez aussi à déplacer vos données de /usr/home vers /home et de modifier les utilisateurs locaux pour qu’il utilisent /home/%u plutôt que /usr/home/%u

Voilà, c’est à peu près tout ;)

Dec13

Leave a Reply

You must be logged in to post a comment.