[LVM] Réduire un VG à chaud !

Hello,

J’ai mon système actuellement booté et comme ceci :

azathoth:/etc/monit/conf.d# lvs -ao +devices

LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices home system -wi-ao---- 5,00g /dev/sda5(6426) root system -wi-ao---- 9,31g /dev/sda5(0) swap_1 system -wi-ao---- 4,00g /dev/sda5(2384)

azathoth:/etc/monit/conf.d# pvdisplay -m

[code] — Physical volume —
PV Name /dev/sda5
VG Name system
PV Size 465,52 GiB / not usable 2,00 MiB
Allocatable yes
PE Size 4,00 MiB
Total PE 119173
Free PE 114485
Allocated PE 4688
PV UUID cmJNY1-03pp-f9xC-BLHb-v9Od-2lwe-yzZ5y0

— Physical Segments —
Physical extent 0 to 2383:
Logical volume /dev/system/root
Logical extents 0 to 2383
Physical extent 2384 to 3407:
Logical volume /dev/system/swap_1
Logical extents 0 to 1023
Physical extent 3408 to 6425:
FREE
Physical extent 6426 to 7705:
Logical volume /dev/system/home
Logical extents 0 to 1279
Physical extent 7706 to 119172:
FREE[/code]

le hic, c’est ça :

azathoth:/etc/monit/conf.d# vgs

VG #PV #LV #SN Attr VSize VFree system 1 3 0 wz--n- 465,52g [b][u]447,21g[/u][/b]

Je veux retirer cet espace libre et le réutiliser pour créer un autre VG. Mais je veux le faire à chaud :slightly_smiling:

Est-ce possible ? si oui, comment ?

Et si non, comment le faire proprement depuis un livecd ?

merci !

Je ne l’ai jamais fait, mais cela devrait être possible à chaud avec [mono]pvresize[/mono] si aucun extent n’est alloué au-delà de la nouvelle taille. Cela ne devrait pas poser de problème si des LV n’ont jamais été réduits ou supprimés. Dans le cas contraire, il faudra éventuellement déplacer les extents avec une commande du genre :

Mais d’après la sortie de pvdisplay, le gros de l’espace libre est à la fin du PV donc cela ne devrait pas être nécessaire.

Il faudra ensuite réduire la partition /dev/sda5 contenant le PV à une taille supérieure ou égale à la nouvelle taille du PV.

Hello Pascal, merci pour ton aide.

Alors j’ai tenté ça, mais ça n’a pas fonctionné :

root@azathoth:/etc# pvresize -v --setphysicalvolumesize 20480M /dev/sda5

DEGRADED MODE. Incomplete RAID LVs will be processed. Using physical volume(s) on command line Archiving volume group "system" metadata (seqno 9). /dev/sda5: Pretending size is 41943040 not 976269312 sectors. Resizing volume "/dev/sda5" to 976269312 sectors. Resizing physical volume /dev/sda5 from 0 to 5119 extents. /dev/sda5: cannot resize to 5119 extents as later ones are allocated. 0 physical volume(s) resized / 1 physical volume(s) not resized

20 Gio, c’est trop peu. En plus des LV il faut prendre en compte l’espace libre de ~12 Go situé entre les LV swap_1 et home. Comme le montre [mono]pvdisplay[/mono], l’espace libre contigu jusqu’à la fin du PV commence à l’extent 7706 soit 7706*4M = 30824M (~30 Gio).

Si tu veux récupérer les ~12 Go (ce que je ne conseille pas, ça peut toujours servir à agrandir les LV du VG system), il va falloir déplacer les extents du LV home avec [mono]pvmove[/mono].

donc je devrais faire un :

pvresize -v --setphysicalvolumesize 30824M /dev/sda5

suivi d’une destruction de /dev/sda5 via fdisk et d’une reconstruction de cette partition logique en prenant les bornes de début/fin proposées par défaut par fdisk ?

merci

Pourquoi une destruction ? Tu veux risquer de perdre toutes tes données ? Tu crois que [mono]fdisk[/mono] va trouver tout seul où commence et finit le PV ?
Il suffit de réduire la partition existante. Si [mono]fdisk[/mono] ne le permet pas, utilise un autre outil qui le permet comme [mono]parted[/mono] (attention les actions sont immédiatement exécutées sur le disque, il n’y a pas de commande “write” pour enregistrer les modifications).

Je ne pensais pas que détruire la partition et la recréer derrière faisait perdre les données. Je pensais que l’on ne touchait qu’à la structure de la partition, pas aux données elles même, dans la mesure où si aucune écriture n’a lieu entre la suppression de la partition et sa recréation, nos données sont toujours là. Bon, ça explique pourquoi j’ai du refaire mon installation tout à l’heure :\

Penses-tu que resize2fs pourrait m’aider ? Tu m’as proposé parted, mais j’ai peur de faire une boulette avec cet outils, je connais mieux resize2fs, si je l’envoie avec ces options, ça devrait correctement se passer, non ? :

resize2fs -p /dev/sda5 30824M

Et sinon du coup, si j’utilise parted, comment je peux être sure de trouver les bonnes valeurs pour la borne de début et la borne de fin (si je ne dis pas de bêtise, après modification, le pv devrait commencer à 0 et finir à 7706, non ? puisqu’après on est justement à l’espace que je voudrais dégager de mon pv) ? J’aurais tendance à faire un parted /dev/sda resizepart 0 7706.

En principe, oui. Mais quand on agit sur une partition logique, des secteurs du disques sont modifiés en dehors de la table de partition principale donc on ne sait jamais. Et puis quand on recrée la partition, il faut qu’elle commence au même secteur que l’ancienne, là où commencent les données. En fonction de l’alignement choisi, ce n’est pas forcément le cas par défaut.

Euh, si tu as dû réinstaller, pourquoi n’en as-tu pas profité pour recréer un PV avec la bonne taille ?

Non. [mono]resize2fs[/mono] sert à redimensionner un système de fichiers ext2, ext3 ou ext4, pas une partition. C’est l’équivalent [mono]pvresize[/mono] que tu as utilisé pour redimensionner le PV. Les deux ne modifient que la taille du contenu, pas du contenant qui est la partition.

La commande [mono]resizepart[/mono] de [mono]parted[/mono] ne modifie que la fin de la partition, pas le début. Si tu veux être tranquille, tu comptes large. Je pense que tu n’es pas à 1 Go près.

Non. Le premier nombre est le numéro de la partition, donc 5. Le second nombre est la nouvelle position de fin dans l’unité spécifiée avec le suffixe qui va bien. 7706 est le nombre d’extents de LVM dont la taille est 4 Mio (soit 4096 Kio, 4195 ko, 4194304 octets, 8192 secteurs de 512 octets), il faut donc convertir ce nombre dans une unité comprise par [mono]parted[/mono]. Voir la description de [mono]unit[/mono] dans la page de manuel.

Merci pour tes explications, du coup j’ai pu me débrouiller avec tout ça !