Reduzieren einer LVM-Gruppe - Größe kann nicht auf xxxx-Bereiche geändert werden, da spätere zugewiesen werden

Reduzieren einer LVM-Gruppe - Größe kann nicht auf xxxx-Bereiche geändert werden, da spätere zugewiesen werden

Ich habe versucht, die Größe eines Centos 6.10-Images durch die Reduzierung einer LVM-Gruppe zu reduzieren. Ich bin an dem Punkt angelangt, an dem ich diesen Befehl ausführen konnte:

pvresize -tv --setphysicalvolumesize  1600G /dev/md125p2

Und es gibt mir die folgende Fehlermeldung:

 /dev/md125p2: cannot resize to 409599 extents as later ones are allocated.

Ich versuche zu verstehen, wie ich den Befehl pvmove konstruiere, um den Fehler zu beheben, aber ich verstehe das Konzept nicht ganz.

Hier ist die Ausgabe dieses Befehls pvs -v --segments /dev/md125p

  PV           VG            Fmt  Attr PSize PFree   Start  SSize  LV       Start Type   PE Ranges                 
  /dev/md125p2 vg_centos6svr lvm2 a--u 1.86t 320.11g      0 384000 lv_mysql     0 linear /dev/md125p2:0-383999     
  /dev/md125p2 vg_centos6svr lvm2 a--u 1.86t 320.11g 384000  81947              0 free                             
  /dev/md125p2 vg_centos6svr lvm2 a--u 1.86t 320.11g 465947  12800 lv_root      0 linear /dev/md125p2:465947-478746
  /dev/md125p2 vg_centos6svr lvm2 a--u 1.86t 320.11g 478747   1998 lv_swap      0 linear /dev/md125p2:478747-480744
  /dev/md125p2 vg_centos6svr lvm2 a--u 1.86t 320.11g 480745   7500 lv_home      0 linear /dev/md125p2:480745-488244

Ich weiß, dass der Verschiebebefehl ungefähr so ​​aussehen muss:

pvmove --alloc anywhere /dev/md125p2 vg_centos6svr:yyyy-end

Mir ist nur nicht klar, wie ich den yyyy-Endteil berechnen soll. Ich nehme an, es bedeutet, die 81947 (Blöcke?) zu verschieben, die bei 384000 beginnen, aber was ist „yyyy“ und „Ende“?

Antwort1

Ich sehe also, dass alles aktiviert ist /dev/md125p2und wir die Größe dieses PV reduzieren möchten.

Ihre Ausgabe von zeigt, dass Sie nach und vor Ihrem pvs -v --segments /dev/md125peinen sehr großen freien Speicherplatz ( SSize==81947) haben . Dieser ist groß genug, um und unterzubringen.lv_mysqllv_rootlv_rootalleder LVs, die im physischen Layout danach kommen.

Die erste Zahlenreihe, die ich vorschlagen würde, ist:

***# pvmove --alloc anywhere /dev/md125p2:480745-488244 /dev/md125p2:384000+7499

das heißt, verschieben Sie das gesamte lv_homein den freien Speicherplatz, der direkt nach beginnt lv_mysql.

Führen Sie den Vorgang dann erneut aus, pvs -v --segments /dev/md125pum die geänderten Zahlen anzuzeigen, und verschieben Sie den nächsten Block in den verbleibenden freien Bereich.

Dadurch wird Ihr PV effektiv defragmentiert.

Nun, pvmovevielleichtWegmehr Optionen als die, die ich verwende (vielleicht Angabe des PV statt der Ausdehnungen?), aber ich bin damit zufrieden, die Blöcke einfach explizit zu verwenden, sodass alle meine Quellen und Ziele die Form /dev/<dev>:<Start>-<End>oder haben /dev/<dev>:<Start>+<SSize-1>.

Ich vermute, Ihr Problem bestand hauptsächlich darin, dass in Ihrer „Quell“-Spezifikation die Ausmaße fehlten.

Ich habe ein paar Beispiele gesehen, bei denen -end- ich weiß nicht, ob das etwas ist, dasangeblichzu arbeiten, aber es würde die Frage aufwerfen "Ende derWas?". Also vermeide ich es und verwende explizite Blocknummern. Sie müssen nur darauf achten, dass die +Syntax einPlusund muss um eins kleiner sein als die SSize.

Extra

OK, auf der Quellseite scheint es, als ob Sie es -name lv_home /dev/md125p2als Abkürzung für verwenden können /dev/md125p2:480745-488244- aber beachten Sie auch, dass dies komplexer wird, wenn lh_homees in mehrere Bereiche fragmentiert wird (würde das "alle Fragmente" bedeuten?) - ich denke, ich bevorzuge immer noch den Zahlenansatz. Beachten Sie, dass Ihr Beispiel in der FragenichtGeben Sie den LV-Namen an, daher bin ich nicht sicher, was ich pvmovevon dem, was Sie angegeben haben, verstanden hätte ...

Antwort2

Um ein PV zu verkleinern, müssen Sie Extents verschieben, um Speicherplatz freizugeben, bevor die gewünschte Größe erreicht ist. In Ihrem Fall Extents unter 409599.

Testen Sie zunächst die Wiederherstellung aus einer Sicherungskopie, um sicherzustellen, dass die Daten bei Bedarf wiederhergestellt werden können.

lvremoveBände, die Sie nicht benötigen.

pvmoveermöglicht die Angabe von Extents durch LV-Namen und des Ziels durch Offsets mit der Notation +. Bei der Angabe des Ziels muss es sich um ein PV und nicht um ein VG handeln.

Verschiebt ein LV zum ersten Extent im freien Speicherplatz. Der Offset ist die Größe des zu verschiebenden Segments.

pvmove --alloc anywhere  -n lv_swap /dev/md125p2 /dev/md125p2:384000+1998

Holen Sie sich das neue Segmentlayout pvs -v --segmentserneut. Wiederholen Sie dies pvmovemit einem anderen LV und dem neuen Startumfang des freien Speicherplatzes.

Persönlich bevorzuge ich Daten-VGs getrennt von Betriebssystem-VGs. Aber das ist Ihr Speicher, legen Sie ihn nach Wunsch an.

verwandte Informationen