Zusammenführen von LVM-Volume-Gruppen

7

Situation:

Ich habe einen Server mit 4 1-TB-Laufwerken in LVM, wie unten gezeigt. Der Server ist ein OpenVZ-Hardwareknoten mit etwa einem Dutzend OpenVZ-Containern. Zu diesem Zeitpunkt verwendet jeder Container nur eine Festplatte. Dies wurde zu der Zeit entwickelt, um die meiste Kontrolle und Trennung über die Festplattenlast aufrechtzuerhalten.

# pvdisplay -s
  Device "/dev/sdd1" has a capacity of 227.51 GiB
  Device "/dev/sdc1" has a capacity of 427.51 GiB
  Device "/dev/sdb1" has a capacity of 427.51 GiB
  Device "/dev/sda2" has a capacity of 407.02 GiB

Geldautomat Jeder PV ist mit einem eigenen VG ausgestattet:

# vgdisplay -s
  "vg04" 931.51 GiB [704.00 GiB used / 227.51 GiB free]
  "vg03" 931.51 GiB [504.00 GiB used / 427.51 GiB free]
  "vg02" 931.51 GiB [504.00 GiB used / 427.51 GiB free]
  "vg01" 931.02 GiB [524.00 GiB used / 407.02 GiB free]

Über diesen VGs gibt es eine Reihe von LVs:

# lvdisplay | grep Name
  LV Name                /dev/vg04/swap
  VG Name                vg04
  LV Name                /dev/vg04/vz
  VG Name                vg04
  LV Name                /dev/vg03/swap
  VG Name                vg03
  LV Name                /dev/vg03/vz
  VG Name                vg03
  LV Name                /dev/vg02/swap
  VG Name                vg02
  LV Name                /dev/vg02/vz
  VG Name                vg02
  LV Name                /dev/vg01/swap
  VG Name                vg01
  LV Name                /dev/vg01/root
  VG Name                vg01
  LV Name                /dev/vg01/vz
  VG Name                vg01

Problem:

Ein Container ist jetzt so groß geworden, dass ich ihn auf zwei Festplatten aufteilen muss, um die Ladung aufnehmen zu können.

Im Wesentlichen möchte ich zwei LVs - / dev / vg03 / vz und / dev / vg04 / vz - zu einem LV zusammenführen, der über zwei Festplatten verteilt ist.

Wie schaffe ich das am besten? Wäre vgmerge dazu in der Lage? Die Manpage für vgmerge ist ziemlich kurz und ich konnte keine eingehendere Diskussion über ihre Verwendung finden.

Am Ende könnte ich das Ziel erreichen, indem ich Dinge bewege, aber es sind viele Daten im Spiel und dies sind Produktionsserver, daher würde ich lieber versuchen, dies nach Möglichkeit zu vermeiden.

RCD
quelle

Antworten:

4

Wenn ich Ihre Frage richtig lese, möchten Sie wirklich zwei LVs auf separaten VGs zusammenführen. Dies erfordert, dass Sie Daten von einem LV in einen anderen verschieben. Es gibt keine Möglichkeit, LVs direkt zusammenzuführen.

Sie sehen also eine Art Ausfallzeit.

Sie können es wahrscheinlich einschränken, indem Sie Folgendes tun: LVA - Bald größer Logisches Volume LVB - Bald wird logisches Volume entfernt

  1. rsync LVB zum Standort auf LVA (am zeitaufwändigsten)
  2. ** Ausfallzeit beginnt ** - Deaktivieren Sie den Fernzugriff
  3. Führen Sie die endgültige Synchronisierung durch, um sicherzustellen, dass alle Daten auf LVA aktuell sind
  4. LVB aushängen
  5. Verschieben Sie synchronisierte Daten auf LVA an den Ort, an dem sie leben, als ob LVB gemountet wäre (dies sollte in LVA sein, damit die MV nur eine Inode-Operation ist und daher sehr kurz).
  6. ** Ausfallzeit endet ** - Aktivieren Sie den Remotezugriff erneut
  7. Blasen Sie nach Belieben LVB weg und vgmerge VGB in VGA
  8. Sie können dann LVA erweitern (und wahrscheinlich das Dateisystem auch online erweitern)
utopiabound
quelle
Ja, das habe ich mit "Dinge bewegen" gemeint. Das Problem ist, dass in jedem dieser beiden LV mehrere virtuelle Maschinen vorhanden sind. Auf diese Weise müsste ich zuerst den Inhalt von LV (b) nach LV (c) verschieben, dann LV (b) löschen und VG (b) zusammenführen VG (a), erstellen Sie ein neues LV (x), das über zwei PVs gestreift ist, und verschieben Sie dann den Inhalt von LV (a) und LV (c) zurück zum gestreiften LV (x). Möglich aber umständlich. Es wäre cool gewesen, wenn ich die beiden VGs irgendwie zusammenführen, das LV (x) direkt erstellen und den Inhalt verschieben könnte, so müsste ich den Inhalt nur einmal kopieren. Bedenken Sie auch, dass diese LVs jeweils 300G + Daten sind.
RCD
2

Obwohl Sie die beiden VGs zusammenführen können, glaube ich nicht, dass Sie eine LV von linearin konvertieren können , stripedohne sie zuerst zu löschen und neu zu erstellen .

In jedem Fall können Sie problemlos Tests mit Schleifengeräten an Dateien mit geringer Dichte durchführen, die kaum Speicherplatz beanspruchen:

truncate -s500G a
truncate -s500G b
sudo losetup /dev/loop0 a
sudo losetup /dev/loop1 b
sudo pvcreate /dev/loop0
sudo pvcreate /dev/loop1
sudo vgcreate A /dev/loop0
sudo vgcreate B /dev/loop1
sudo lvcreate ...
Stéphane Chazelas
quelle
Das wäre kein allzu großes Problem, aber vgmerge führt eine inaktive Volume-Gruppe zu einer aktiven oder inaktiven Volume-Gruppe zusammen. Daher müsste ich eine der VGs inaktivieren, bevor ich sie zusammenführen kann. Wenn ich richtig verstehe, bedeutet dies, dass die LVs auf der deaktivierten VG unbrauchbar werden und das ein Problem wäre. Es würde mich auf den ersten Platz zurückbringen, wenn ich alles bewegen müsste, um das zu erreichen, was ich tun möchte.
RCD
0

Ich weiß nicht, wie ich das machen soll, ohne die beiden logischen Volumes /dev/vg03/vzund zu zerstören /dev/vg04/vzund einen neuen LV zu erstellen, sobald Sie den Speicherplatz neu organisiert haben.

Mit der folgenden Strategie sollten Sie (ich habe sie nicht getestet) die gewünschte Konfiguration ohne Ausfallzeiten für die anderen Volumes erhalten. Möglicherweise benötigen Sie temporären Speicherplatz auf einer Arbeitsdiskette, bis zur Größe der größten der zu löschenden LVs.

  1. Sichern Sie alle Daten aus den beiden zu löschenden LVs.
  2. Deaktivieren Sie die LVs ( lvchange -an).
  3. Erstellen Sie ein physisches Volume über dem Arbeitsbereich ( pvcreate).
  4. Fügen Sie den Arbeitsbereich zu vg03( vgextend) hinzu. Verschieben Sie die Extents am Ende vg03in den Arbeitsbereich mit pvmove /dev/sdXX:MMM-NNN(ersetzen Sie sie sdXXdurch den entsprechenden Partitionsspezifizierer MMMund NNNdurch die richtigen Extent-Nummern). Verschieben Sie die Bereiche, die Sie für die Verwendung durch den neuen gestreiften LV konvertieren möchten.
  5. Rufen Sie pvresizean, um das physische Volume in der Volume-Gruppe zu verkleinern, in der Sie am Ende gerade etwas Speicherplatz freigegeben haben.
  6. Verwenden Sie fdiskoder parted, um die Partition zu verkleinern, die das gerade verkleinerte physische Volume enthält. Erstellen Sie währenddessen eine neue Partition für den Rest des Speicherplatzes.
  7. Rufen Sie pvmoveerneut auf, um alle Daten vom Arbeitsbereich zurück in die ursprüngliche (jetzt verkleinerte) PV zu verschieben.
  8. Wiederholen Sie die vorherigen 4 Schritte für vg04. Danach benötigen Sie den Arbeitsbereich nicht mehr.
  9. Es gibt jetzt zwei neue Partitionen, auf denen sich nichts befindet. Verwandeln Sie sie in physische Volumes ( pvcreate) und erstellen Sie eine Volume-Gruppe für diese beiden PVs ( vgcreate).
  10. Erstellen Sie eine gestreifte LV auf der neuen VG.
Gilles 'SO - hör auf böse zu sein'
quelle
Vielen Dank, aber dies scheint nur eine (vielleicht detailliertere) Erklärung zu sein, wie bereits in den anderen Antworten erörtert, mit der zusätzlichen Notwendigkeit einer Arbeitsplatte (für die auf dem Server kein Platz ist, da sie bereits 4 von maximal 4 hat Festplatten installiert).
RCD