
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/md125p2
und wir die Größe dieses PV reduzieren möchten.
Ihre Ausgabe von zeigt, dass Sie nach und vor Ihrem pvs -v --segments /dev/md125p
einen sehr großen freien Speicherplatz ( SSize==81947
) haben . Dieser ist groß genug, um und unterzubringen.lv_mysql
lv_root
lv_root
alleder 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_home
in den freien Speicherplatz, der direkt nach beginnt lv_mysql
.
Führen Sie den Vorgang dann erneut aus, pvs -v --segments /dev/md125p
um die geänderten Zahlen anzuzeigen, und verschieben Sie den nächsten Block in den verbleibenden freien Bereich.
Dadurch wird Ihr PV effektiv defragmentiert.
Nun, pvmove
vielleichtWegmehr 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/md125p2
als Abkürzung für verwenden können /dev/md125p2:480745-488244
- aber beachten Sie auch, dass dies komplexer wird, wenn lh_home
es 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 pvmove
von 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.
lvremove
Bände, die Sie nicht benötigen.
pvmove
ermö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 --segments
erneut. Wiederholen Sie dies pvmove
mit 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.