Niveau :
Résumé : hdparm -z /dev/used_device
Comment repartitionner un disque contenant une partition indispensable (par exemple /) sans rebooter ?
Si l'intégralité de votre disque est en LVM, cet article ne vous concerne pas puisque vous pouvez simplement redimensionner vos volumes LVM. Mais supposons que vous ayez au moins une "partition" que vous voulez redimensionner.
Posons une limite : il ne vous sera pas possible de toucher à une partition en cours d'utilisation et de prendre en compte cette modification sans rebooter ou la désactiver temporairement.
Une partition est dite utilisée si elle est montée ou activée en tant que swap, utilisée dans un MD lancé ou présente comme PV (physical volume) dans un VG (volume group) actif.
C'est Parti
Maintenant nous avons un disque dont une partition au moins est utilisée, et une autre (celle qu'on veut redimensionner ou déplacer) ne l'est pas.
Modifions la table des partitions avec fdisk (cfdisk ou parted feront l'affaire). Attention, pour toute autre opération qu'une création ou un changement du secteur de fin (déplacement), fdisk ne suffira pas.
Lorsque vous quittez l'outil et que vous écrivez sur le disque, celui-ci tente de relire la table des partitions. Puisqu'une des partitions est en cours d'utilisation, il vous indique qu'il n'a pas pu le faire.
Si vous pouvez libérer la partition temporairement, alors il suffit d'utiliser la commande suivante pour que sa table des partitions soit relue :
$ hdparm -z /dev/sdX
Supposons que vous ne puissiez pas libérer la partition. La solution est simplement d'utiliser un loopback ! Pour cela, récupérez l'offset à utiliser depuis la table de partition :
$ fdisk -lu /dev/sda | grep sda2 > /dev/sda2 1026048 286515199 142744576 83 Linux
Ici l'offset de début est 1026048*512 et celui de fin 286515199*512. Il n'y a plus qu'à créer le loopback. Attention pour la taille la formule est "secteur de fin - secteur de début + 1" car ces secteurs sont inclus :
# unités : octet $ losetup -o $(($start*512)) --sizelimit $((($end-$start+1)*512)) -f --show /dev/sda # un message d'erreur apparait, mais il peut être ignoré
Et voilà, vous pouvez maintenant faire un resize2fs sur le device de loopback et/ou un mount directement !
PS :
On pourrait croire qu'on peut faire mieux avec device mapper et dmsetup. Mais en fait ce n'est pas possible car device mapper considère que le disque complet est en cours d'utilisation si une de ses partitions est utilisée.
Comments