Sur Linux, je redimensionnais les partitions MBR à l’aide de fdisk, même sur des systèmes de fichiers réels, puis émettais un resize2fs/pvresize/... (selon le type de fs) pour obtenir le nouvel espace alloué.
Dernièrement, j'utilisais des partitions Xen et GPT, et j'ai remarqué que, malheureusement, la séparation ne semble pas permettre le redimensionnement à la volée d'une partition montée. En fait, il va se plaindre:
Error: Partition XXX is being used. You must unmount it before you modify it with Parted.
J'ai essayé à la fois la commande resize
et même la combinaison rm
+ mkpart
, mais ils vont se plaindre de la partition en cours de montage.
Comment puis je faire ça?
Pour ce faire, le moyen le plus sûr consiste à démarrer à l'aide d'un support d'urgence (un CD live ou autre) et à utiliser GParted, ce qui redimensionnera la partition et le système de fichiers qu'il contient. Cela ne fonctionnera que si la partition n'est pas utilisée actuellement.
Toutefois, si vous ne pouvez vous permettre aucune période d'indisponibilité, vous pouvez essayer d'utiliser gdisk
au lieu de parted
. Vous devrez supprimer la partition que vous souhaitez redimensionner et en créer une nouvelle à la place avec le même point de départ, comme vous l’auriez fait avec fdisk
. gdisk
accepte de travailler sur un disque en cours d'utilisation, bien que le noyau ne puisse enregistrer aucune modification. Dans ce cas, vous devrez peut-être utiliser partprobe
ou kpartx
pour que le noyau accepte la nouvelle table de partition, ou même redémarrer l'ordinateur si cela ne fonctionne pas. (Cela devrait ressembler beaucoup à utiliser fdisk
.)
Cela ne fonctionne généralement qu'avec les distributions Linux les plus récentes. Outils nécessaires:
Une partition GPT stocke un en-tête de sauvegarde à la fin du disque. Si vous avez redimensionné le périphérique sous-jacent, l'en-tête de la sauvegarde sera quelque part au milieu. La première étape consiste à déplacer l'en-tête de la partition à la fin du disque.
En supposant que le disque est/dev/sda et que la partition est/dev/sda3 (doit également être la dernière partition):
sgdisk -e /dev/sda
Puis supprimez la dernière partition et recréez-la:
sgdisk -d 3 /dev/sda
sgdisk -N 3 /dev/sda
Vous verrez généralement un message indiquant que le noyau est incapable de recharger la table de partition. Vous devez exécuter partprobe pour que la partition soit enregistrée avec la nouvelle taille:
partprobe /dev/sda
Si cela échoue, vous devrez redémarrer la machine virtuelle. Après cela, vous pouvez développer votre système de fichiers avec l’outil approprié, pour ext4, etc.:
resize2fs /dev/sda3
Attention : exécuter sgdisk peut être destructeur. Assurez-vous que les procédures de sauvegarde appropriées sont en place.
Voici un exemple qu'un outil automatisé utilise pour redimensionner une partition en ligne, en une fois:
sgdisk -d 1 -n 1: 2048: 0 -c 1: -u 1: E485F29F-A1F4-4953-9DD8-799EAEA0119B -t 1: 0700/dev/xvda
Voici la liste des options pour la commande sgdisk:
gdisk /dev/xvda; p
afin de réutiliser le même uid/ dev/xvda était le disque que nous avons repartitionné.
Donc, il supprime et crée immédiatement une nouvelle partition à sa place.
PS Quelques notes sur le code de caractères '0700'. De l'homme SGDISK (8)
-t, --typecode=partnum:{hexcode|GUID} Change a single partition's type code. You enter the type code using either a two-byte hexadecimal number, as
décrit précédemment, ou une valeur GUID entièrement spécifiée, telle que EBD0A0A2-B9E5-4433-87C0-68B6B72699C7.
Meilleure explication trouvée pour ce que '0700' signifie ici - http://www.rodsbooks.com/gdisk/walkthrough.html
"Mais attendez", vous dites, "Je pensais que le disque avait une partition FAT!" En effet c'est le cas. Windows utilise un seul code GUID pour toutes ses partitions de données, qu'il s'agisse de FAT ou de NTFS. Dans le passé, le même code était utilisé sous Linux pour ses partitions de données. (Plus de détails sur ce sujet prochainement ....) Ainsi, dans ce cas, plusieurs codes MBR différents sont tous traduits en un code GPT GUID. GPT fdisk utilise, de manière quelque peu arbitraire, le code 0x0700 (ou plus précisément, EBD0A0A2-B9E5-4433-87C0-68B6B72699C7) pour toutes ces opérations.
Dans mon cas, je pense que c'était une partition Linux ext4, mais le code de type de la partition ne signifie pas un type de système de fichiers, donc '0700' ressemble plus à un type fourre-tout pour sgdisk. Au moins dans les cas que j'ai vus.
PPS. Vous devrez peut-être exécuter partprobe
pour que le noyau prenne conscience du changement de partitionnement sans redémarrer le système.
Je résume juste quelques réponses et commentaires ici:
parted
refusera simplement de changer une partition montée. gdisk
fera le travail à votre place, mais ce n’est pas dans le référentiel RHEL ou CentOS standard. Il se trouve cependant dans le référentiel EPEL .
N'oubliez pas que la modification des partitions d'un disque en cours d'utilisation peut empêcher le noyau d'enregistrer les modifications. Si cela se produit, utilisez partprobe
, partx
ou redémarrez.
Voulez-vous parler du redimensionnement d'un volume logique? Voici comment je le ferais:
vgextend vgname /dev/sdb3
lvextend -L +3T /dev/mapper/location
resize2fs /mount/point
OU (xfs):
xfs_growfs /mount/point -D <bytes>