Wie kann man die Größe von Volumengruppen in LVM reduzieren?

30
[root@localhost ~] vgdisplay
  --- Volume group ---
  VG Name               vg_root
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  7
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               297,59 GiB
  PE Size               4,00 MiB
  Total PE              76182
  Alloc PE / Size       59392 / 232,00 GiB
  Free  PE / Size       16790 / 65,59 GiB
  VG UUID               XXXXXXXXXX

PV:

[root@localhost ~] pvdisplay

  --- Physical volume ---
  PV Name               /dev/mapper/udisks-luks-uuid-ASDFASDF
  VG Name               vg_root
  PV Size               297,59 GiB / not usable 2,00 MiB
  Allocatable           yes 
  PE Size               4,00 MiB
  Total PE              76182
  Free PE               16790
  Allocated PE          59392
  PV UUID               YYYYYYYYYYY

Also ich habe eine VG mit 65 GByte freiem Speicherplatz. Aber wenn ich diese Volumengruppe um ~ 50 GByte verkleinern möchte:

pvresize -tv --setphysicalvolumesize 247G /dev/mapper/udisks-luks-uuid-ASDFASDF
  Test mode: Metadata will NOT be updated and volumes will not be (de)activated.
    Using physical volume(s) on command line
    Test mode: Skipping archiving of volume group.
    /dev/mapper/udisks-luks-uuid-ASDFASDF: Pretending size is 517996544 not 624087040 sectors.
    Resizing volume "/dev/mapper/udisks-luks-uuid-ASDFASDF" to 624087040 sectors.
    Resizing physical volume /dev/mapper/udisks-luks-uuid-ASDFASDF from 0 to 63231 extents.
  /dev/mapper/udisks-luks-uuid-ASDFASDF: cannot resize to 63231 extents as later ones are allocated.
  0 physical volume(s) resized / 1 physical volume(s) not resized
    Test mode: Wiping internal cache
    Wiping internal VG cache

Die Fehlermeldung lautet also:

cannot resize to 63231 extents as later ones are allocated.

F: Wie kann ich vg_root defragmentieren, um den nicht benötigten Teil zu entfernen?

ps: Ich habe bereits herausgefunden, dass ich nur die PV-Größe ändern muss, um die VG-Größe zu ändern, oder gibt es bessere Befehle, um die VG-Größe zu ändern (Beispiel: Was kann ich tun, wenn ich mehrere VGs auf einer PV ausführen würde? ... )?

Gasko Peter
quelle

Antworten:

31

Sie können pvmovediese Speicherbereiche an den Anfang des Geräts oder eines anderen Geräts verschieben:

sudo pvmove --alloc anywhere /dev/device:60000-76182

Dann pvmovewählt , wo man die Ausmaße bewegen, oder Sie können festlegen , wo sie zu bewegen.

Sehen Sie, um pvs -v --segments /dev/devicezu sehen, welche Extents aktuell zugewiesen sind.

Stéphane Chazelas
quelle
1
Für mich war das Problem, dass es die PEs an andere Orte verlegte. Musste das Ziel angeben, zB:sudo pvmove --alloc anywhere /dev/sdX2:60000-76182 /dev/sdX2:3000-19182
akostadinov
29

Die folgenden Schritte sind erforderlich, um die Größe einer LVM- oder LVM2-Partition zu ändern:

sudo lvresize --verbose --resizefs -L -150G /dev/ubuntu/root

sudo pvresize --setphysicalvolumesize {any size here} /dev/sda5

Der letzte Befehl pvresizekann den Fehler ergeben

/dev/sda5: cannot resize to xxxxx extents as later ones are allocated.

Sie müssen den nicht zugewiesenen Speicherplatz am Ende des LVM neu anordnen. Das heißt nach root und Swap_1 Partition. Mit diesem Befehl können Sie die aktuelle Anordnung des Speicherplatzes anzeigen

pvs -v --segments /dev/sda5

pvs zeigt die Ausgabe wie folgt an

/dev/sda5 ubuntu lvm2 a-- 698.04g 150g 0 xxx+1 root 0 linear /dev/sda:0-xxx
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g xxx+1 iii 0 free
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g yyyy jjj swap 0 linear /dev/sda5:yyyy-end

Verwenden Sie nun pvmove, um die externe Fragmentierung zu entfernen:

sudo pvmove --alloc anywhere /dev/sda5:yyyy-end

Nun wollen wir sehen, ob das Verschieben des Swap-Volumes erfolgreich war.

pvs -v --segments /dev/sda5

sollte die neue Reihenfolge der Bände anzeigen:

/dev/sda5 ubuntu lvm2 a-- 698.04g 150g 0 xxx+1 root 0 linear /dev/sda:0-xxx
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g xxx+1 iii swap 0 linear /dev/sda5:xxx+1-yyyy
/dev/sda5 ubuntu lvm2 a-- 698.04g 150g yyyy+1 end 0 free

Verwenden Sie anschließend GParted und ändern Sie die Größe des LVM auf den maximal verwendeten Bereich. Der Rest wird im nicht zugewiesenen Raum sein.

Ujjal Roy
quelle
Dies ist eine ziemlich umfassende Antwort - es wäre jedoch hilfreich, wenn es einen Schritt 0 für die Größenänderung des Dateisystems enthalten würde, z. B. resize2fs. Ich denke nicht, dass es im Detail sein muss, aber es wäre hilfreich, wenn wir den zukünftigen Zuschauern einen Anstoß geben würden
Justin,
Am Anfang hatte ich freien Speicherplatz. Durch Aufrufen von pvmove ohne Ziel wurde der Speicherplatz nicht an den Anfang verschoben. Was funktionierte, wurde pvmove --alloc anywhere /dev/sda5:yyyy-end 0-newendmit "newend" als Ende - JJJJ berechnet. Ich bin mir jedoch nicht sicher, ob dies funktioniert, wenn der freie Speicherplatz am Anfang kleiner als der zu verschiebende Bereich ist. Auch ich denke, es gibt einen Tippfehler in Ihren pvs-Ausgaben, ich denke, Sie meinten /dev/sda5:0-xxxstatt /dev/sda:0-xxx.
pcworld
2
@Justin Der --resizefsParameter von lvresizekümmert sich bereits um die Größenänderung des zugrunde liegenden Dateisystems.
pcworld
@pcworld lies einfach die Manpage und scheinbar hast du recht
Justin
Hervorragende Antwort - aber können Sie den letzten Schritt erläutern? Ich gehe davon aus, dass "Größe des LVM ändern" "Größe des physischen Volumes ändern" bedeutet. Gibt es eine Möglichkeit, dies ohne GParted in der Befehlszeile für Systeme ohne GUI zu tun?
Kevin Keane
1

Dieser ältere Beitrag behandelt diese Art des Schrumpfens, damit Sie den neuen Platz für etwas anderes nutzen können. Sie müssen die Größe jedoch zuvor an die Daten anpassen. Dies sollte auch die und andere Fehler abdecken, die Sie erhalten. Da es älter ist, lesen Sie zuerst durch:

DigitalTidBits
quelle
0

Ich benutze diese Methode, nicht sicher, ob es die beste ist, aber für mich funktioniert

Verwenden Sie es mit Vorsicht und nicht SysAdmin

Berechnen Sie die Differenz, die das Problem verursacht

324% 4 = 0 kein Problem

aber

324% 32 = 10,125

Das ist das Problem, also passt es nicht

Ich denke, es heißt "get real number"

lvmdiskscan

beteiligte Partitionen aufzulisten

dann

pvresize /dev/*** --setphysicalvolumesize ***M

Ich muss zusätzliche 4M hinzufügen, um zu arbeiten, ich denke, es hängt mit der alten PE-Größe zusammen

endlich

vgchange -s 32M **
Mohamed Abo Badawy
quelle
0

Frühere Antworten halfen mir, dieses Problem zu lösen, aber ich musste es automatisieren und schrieb daher pvshrink

# ./pvshrink /dev/vda2 
Moving 50 blocks from 714 to 664
  /dev/vda2: Moved: 4.00%
  /dev/vda2: Moved: 100.00%
50 of 50 (100.00%) done
Defragmentation complete.
Metadata size: 1048576 b
PE size: 4.0 MiB
Total size 1048576 b + 714 x 4194304 b = 2995781632 b (2.8 GiB)
    Wiping internal VG cache
    Wiping cache of LVM-capable devices
    Archiving volume group "fedora" metadata (seqno 15).
    /dev/vda2: Pretending size is 5851136 not 6287360 sectors.
    Resizing volume "/dev/vda2" to 5851136 sectors.
    Resizing physical volume /dev/vda2 from 0 to 714 extents.
    Updating physical volume "/dev/vda2"
    Creating volume group backup "/etc/lvm/backup/fedora" (seqno 16).
  Physical volume "/dev/vda2" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized

Dies ruft pvmove für Sie so oft auf, wie es zum Defragmentieren des PV erforderlich ist, und ändert dann die Größe auf die minimal mögliche Größe (die aufgrund von Metadaten etwas größer ist als die verwendete Größe).

pdw
quelle