AIX LVM: Mechanik von migratepv (Part I)

Mit dem AIX LVM Kommando migratepv können Physical Volumes in Spiegel-Kopien von Logical Volumes ausgetauscht werden. Wir wollen uns genauer anschauen wie das Kommando migratepv im Detail arbeitet. Anhand einiger Beispiele werden die Fälle ungespiegeltes Logical Volume, gespiegeltes Logical Volume (2 Kopien) und gespiegeltes Logical Volume (3 Kopien) gezeigt.

Unsere Test-Umgebung

In unserer Test-Umgebung haben wir eine Scalable Volume Group vg00 angelegt. Für die VG vg00 stehen 9 Physical Volumes zur Verfügung, welche von 3 unterschiedlichen Rechenzentren bereitgestellt werden:

  • hdisk10, hdisk11 und hdisk12 (grün) aus Rechenzentrum DC01
  • hdisk13, hdisk14 und hdisk15 (rot) aus Rechenzentrum DC02
  • hdisk16, hdisk17 und hdisk18 (blau) aus Rechenzentrum DC03

Das Kommando migratepv

Die Syntax des Kommandos migratepv ist:
migratepv [-l lv] src-pv [dst-pv ...]
Das Kommando verschiebt alle Physical Partitions des Quell Physical Volumes src-pv auf das/die Ziel Physical Volume(s) dst-pv. Über die Option ‚-l‚ kann das Verschieben auf ein Logical Volume eingeschränkt werden.
Z.B.:
# migratepv -l lv00 hdisk11 hdisk15

1. Fall: ungespiegeltes Logical Volume

Wir erzeugen ein kleines LV (10 LPs) mit dem folgenden Mapping File:

# cat unmirrored.map
hdisk10:1-3
hdisk14:1-3
hdisk12:1-3
hdisk14:4
# mklv -m unmirrored.map vg00 10
lv00
#

Das erzeugte Logical Volume sieht dann wie folgt aus:

# lslv -m lv00
lv00:N/A
LP    PP1  PV1             PP2  PV2             PP3  PV3
0001  0001 hdisk10          
0002  0002 hdisk10          
0003  0003 hdisk10          
0004  0001 hdisk14          
0005  0002 hdisk14          
0006  0003 hdisk14          
0007  0001 hdisk12          
0008  0002 hdisk12          
0009  0003 hdisk12          
0010  0004 hdisk14          
#

Die ersten 3 Physical Partitions liegen auf hdisk10 (DC01), die nächsten 3 Physical Partitions liegen auf hdisk14 (DC02), usw.

Die Physical Partitions auf hdisk14 (DC02) sollen auf die hdisk11 (DC01) verschoben werden. Damit läge das LV komplett auf Physical Volumes des Rechenzentrums DC01.

Wir verfolgen die Arbeit von migratepv:

# migratepv -l lv00 hdisk14 hdisk11

Als erstes wird eine zweite Spiegel-Kopie mit Physical Partitions auf dem Ziel Physical Volume hdisk11 (DC01) hinzugefügt. Das Logical Volume ist jetzt temporär teilweise gespiegelt.

Die in Spiegel-Kopie 2 hinzugefügten Physical Partitions müssen dann aufsynchronisiert werden.

Nachdem die Synchronisation abgeschlossen ist und die neuen Physical Partitions eine gültige Kopie der Daten besitzen, werden die Physical Partitions auf dem Quell Physical Volume hdisk14 (DC02) entfernt und durch die Physical Partitions der Spiegel-Kopie 2 ersetzt.

Die Spiegel-Kopie 2 enthält dann keine Physical Partitions mehr und wird dann letztlich entfernt. Das Logical Volume lv00 ist wieder (komplett) ungespiegelt.

Das resultierende Logical Volume sieht dann so aus:
# lslv -m lv00
lv00:N/A
LP    PP1  PV1             PP2  PV2             PP3  PV3
0001  0001 hdisk10          
0002  0002 hdisk10          
0003  0003 hdisk10          
0004  0009 hdisk11          
0005  0010 hdisk11          
0006  0011 hdisk11          
0007  0001 hdisk12          
0008  0002 hdisk12          
0009  0003 hdisk12          
0010  0012 hdisk11          
#

Die erste und einzige Spiegel-Kopie liegt jetzt komplett auf Physical Volumes des DC01.

Die Arbeitsweise von migratepv im Falle eines ungespiegelten LVs ist damit:

  1. Hinzufügen einer zweiten Spiegel-Kopie für die zu verschiebenden Logical Partitions auf dem Ziel Physical Volume.
  2. Aufsynchronisieren der neuen Spiegel-Kopie.
  3. Ersetzen der ersten Spiegel-Kopie durch die zweite Spiegel-Kopie.

2. Fall: gespiegeltes Logical Volume (2 Kopien)

migratepv arbeitet bei Logical Volumes mit 2 Spiegel-Kopien mit einer temporären dritten Spiegel-Kopie.
Allerdings gibt es hier zwei verschiedene Varianten (wie auch schon bei migratelp):

  • Variante 1: Einfügen der dritten Spiegel-Kopie vorne, d.h. Kopie 2 wird zu Kopie 3 und die Kopie 1 zur Kopie 2. Die temporäre Kopie wird als Kopie 1 vorne eingefügt.
  • Variante 2: Anhängen der dritten Spiegel-Kopie hinten als Kopie 3.

Welche Variante von migratepv verwendet wird, hängt davon ab in welchen Spiegel-Kopien das Quell Physical Volume verwendet wird.

Wird das Quell Physical Volume verwendet in:

  • Ausschließlich in der Spiegel-Kopie 1, dann wird die Variante 1 verwendet.
  • Ausschließlich in der Spiegel-Kopie 2, dann wird die Variante 2 verwendet.
  • In beiden Spiegel-Kopien (z.B. weil Strictness nicht auf super-strict gesetzt ist): entscheidend ist hier die höchste Logical Partition die das Quell Physical Volume verwendet. Wird für diese Logical Partition das Quell Physical Volume in der Spiegel-Kopie 1 verwendet, dann wird die Variante 1 verwendet, wird das Quell Physical Volume in der Spiegel-Kopie 2 verwendet, dann wird die Variante 2 verwendet!

Gerade der letzte Fall ist vermutlich vielen AIX Administratoren nicht so bekannt und dürfte daher der interessantere Fall sein.

Um die Arbeitsweise von migratepv, für den interessanten Fall das ein Physical Volume in beiden Spiegel-Kopien verwendet wird, zu illustrieren, erzeugen wir ein Logical Volume bei dem 2 Physical Volumes in beiden Spiegel-Kopien verwendet werden.
Wir erzeugen ein kleines LV (10 LPs) mit dem folgenden Mapping File:

# cat bad_mirror_cp1.map
hdisk10:1-2
hdisk14:1-2
hdisk10:3-4
hdisk11:3-4
hdisk10:5-6
# mklv —m bad_mirror_cp1.map vg00 10
lv00
# cat bad_mirror_cp2.map
hdisk13:1-2
hdisk11:1-2
hdisk13:3-4
hdisk14:3-4
hdisk13:5-6
# mklvcopy —m bad_mirror_cp2.map lv00 2
# syncvg -l lv00
#

Das resultierende Logical Volume sieht dann so aus:

# lslv -m lv00
lv00:N/A
LP    PP1  PV1             PP2  PV2             PP3  PV3
0001  0001 hdisk10         0001 hdisk13          
0002  0002 hdisk10         0002 hdisk13          
0003  0001 hdisk14         0001 hdisk11          
0004  0002 hdisk14         0002 hdisk11          
0005  0003 hdisk10         0003 hdisk13          
0006  0004 hdisk10         0004 hdisk13          
0007  0003 hdisk11         0003 hdisk14          
0008  0004 hdisk11         0004 hdisk14          
0009  0005 hdisk10         0005 hdisk13          
0010  0006 hdisk10         0006 hdisk13          
#

Die hdisk11 (DC01) wird in beiden Spiegel-Kopien verwendet, genauso wie die hdisk14 (DC02).
Ziel wäre in der Spiegel-Kopie 1 nur Physical Volumes aus DC01 zu verwenden und entsprechend für Spiegel-Kopie 2 nur Physical Volumes aus DC02.

Die Kandidaten als Quell Physical Volume sind eindeutig hdisk11 (DC01) und hdisk14 (DC02). In unserer Test-Umgebung haben wir die Physical Volumes hdisk12 (DC01) und hdisk15 (DC02) zur Verfügung.

Ob man hdisk11 (DC01) oder hdisk14 (DC02) austauscht, spielt erstmal keine Rolle, beides ist möglich. Allerdings ist es entscheidend gegen welches der verfügbaren Physical Volumes man austauscht!

Variante 1

Wir entscheiden uns zunächst für den Austausch von hdisk11 (DC01) und damit die Variante 1 von migratepv. Der Graphik kann man entnehmen das die höchste Logical Partition die die hdisk11 (DC01) verwendet, die LP 0008 ist. (Die hdisk11 (DC01) wird dort in der Spiegel-Kopie 1 verwendet, womit wir bei Variante 1 wären.)

Bei der Variante 1 wird das Ziel Physical Volume vorne als Spiegel-Kopie 1 eingefügt. Da in Spiegel-Kopie 1 nur Physical Volumes aus DC01 verwendet werden sollen, kommt als Ziel Physical Volume damit nur die hdisk12 (DC01) in Frage.

Wir tauschen also mittels migratepv die hdisk11 (DC01) gegen die hdisk12 (DC01) aus

# migratepv -l lv00 hdisk11 hdisk12

Wir verfolgen die Arbeit von migratepv auf den nächsten Seiten wieder graphisch.

Es wird temporär eine dritte Spiegel-Kopie erzeugt und angefügt. Die Physical Partitions aus Spiegel-Kopie 2 werden in die neue Spiegel-Kopie 3 verschoben. Die Physical Partitions der Spiegel-Kopie werden in die Spiegel-Kopie 2 verschoben.

Durch das Verschieben entsteht Platz in der Spiegel-Kopie 1.

An den frei gewordenen Stellen in der Spiegel-Kopie 1 werden die Physical Partitions auf dem Ziel Physical Volume eingefügt.

Die neu eingefügten Physical Partitions in Spiegel-Kopie 1 werden synchronisiert.

Anschließend werden die Physical Partitions des Quell Physical Volumes in den Spiegel-Kopien 2 und 3 entfernt. Physical Partitions der Spiegel-Kopie 3 werden an die freiwerdenden Stellen der Spiegel-Kopie 2 geschoben.

Als letztes wird die leere Spiegel-Kopie 3 dann entfernt.

Das resultierende Logical Volume sieht dann so aus:

# lslv -m lv00
lv00:N/A
LP    PP1  PV1             PP2  PV2             PP3  PV3
0001  0001 hdisk10         0001 hdisk13          
0002  0002 hdisk10         0002 hdisk13          
0003  0009 hdisk12         0001 hdisk14          
0004  0010 hdisk12         0002 hdisk14          
0005  0003 hdisk10         0003 hdisk13          
0006  0004 hdisk10         0004 hdisk13          
0007  0011 hdisk12         0003 hdisk14          
0008  0012 hdisk12         0004 hdisk14          
0009  0005 hdisk10         0005 hdisk13          
0010  0006 hdisk10         0006 hdisk13             
#

Alle Physical Partitions der Spiegel-Kopie 1 liegen auf Physical Volumes von DC01. Alle Physical Partitions der Spiegel-Kopie 2 liegen auf Physical Volumes von DC02. Das Logical Volume ist jetzt korrekt zwischen den beiden Rechenzentren DC01 und DC02 gespiegelt! Die Wiederherstellung der korrekten Spiegelung war mit nur einem migratepv Kommando möglich!

Unabhängig davon ob das Quell Physical Volume in einer oder mehreren Spiegel-Kopien des Logical Volumes verwendet wird, wird nach dem Lauf von migratepv das Ziel Physical Volume nur in genau einer Spiegel-Kopie verwendet!
Wir schauen uns im folgenden noch die Variante 2 an.

Variante 2

Um auch die Variante 2 einmal zu demonstrieren, gehen wir zum Ausgangszustand zurück und tauschen dieses Mal die hdisk14 (DC02) aus. Der Graphik kann man entnehmen das die höchste Logical Partition die die hdisk14 (DC02) verwendet, ebenfalls die LP 0008 ist. (Die hdisk14 wird dort in der Spiegel-Kopie 2 verwendet, womit wir bei Variante 2 wären.)

Bei der Variante 2 wird das Ziel Physical Volume hinten als Spiegel-Kopie 3 hinzugefügt. Am Ende von migratepv werden die Physical Partitions der Kopie 3 zur Kopie 2. Da in Spiegel-Kopie 2 nur Physical Volumes aus DC02 verwendet werden sollen, kommt als Ziel Physical Volume damit nur die hdisk15 (DC02) in Frage.

Wir tauschen also mittels migratepv die hdisk14 (DC02) gegen die hdisk15 (DC02) aus

# migratepv -l lv00 hdisk14 hdisk15

Wir verfolgen wieder die Arbeit von migratepv graphisch.

Hinzufügen einer temporären dritten Kopie mit dem Ziel Physical Volume als Spiegel-Kopie 3.

Aufsynchronisieren der dritten Spiegel-Kopie.

Entfernen der Physical Partitions des Quell Physical Volumes in Spiegel-Kopie 1 und 2. In die entstehenden Lücken werden die nachfolgenden Kopien geschoben.

Die nun leere dritte Spiegel-Kopie wird wieder entfernt.

Das resultierende Logical Volume sieht dann so aus:

# lslv -m lv00
lv00:N/A
LP    PP1  PV1             PP2  PV2             PP3  PV3
0001  0001 hdisk10         0001 hdisk13          
0002  0002 hdisk10         0002 hdisk13          
0003  0001 hdisk11         0009 hdisk15          
0004  0002 hdisk11         0010 hdisk15          
0005  0003 hdisk10         0003 hdisk13          
0006  0004 hdisk10         0004 hdisk13          
0007  0003 hdisk11         0011 hdisk15          
0008  0004 hdisk11         0012 hdisk15          
0009  0005 hdisk10         0005 hdisk13          
0010  0006 hdisk10         0006 hdisk13             
#

Alle Physical Partitions der Spiegel-Kopie 1 liegen auf Physical Volumes von DC01. Alle Physical Partitions der Spiegel-Kopie 2 liegen auf Physical Volumes von DC02.

Die Arbeitsweise von migratepv im Falle eines gespiegelten LVs mit 2 Kopien:

    1. Hinzufügen einer dritten Spiegel-Kopie für die zu verschiebenden Logical Partitions auf dem Ziel Physical Volume. Die dritte Kopie wird entweder vorne eingefügt, oder hinten angefügt.
    2. Aufsynchronisieren der neuen Spiegel-Kopie.
    3. Entfernen der Spiegel-Kopie mit Physical Partitions auf dem Quell Physical Volume.