zfs GPT Setup

GPT Konfiguration

Meine ursprüngliche Pool-Konfiguration basierte bekanntlich darauf die vorhandenen Festplatten ada3, ada4, ada5 und ada6 als gespiegelte Devices in den Pool zu überführen. Leider ist es so, daß wenn ich eine weitere Festplatte in den Server einbaue das sich alle Device-Namen verschieben. zfs ist intelligent genug um seinen Pool anhand von UID wiederzufinden aber es trotzdem etwas verwirrend. Nun habe ich habe aber meinen Pool aber bereits aufgebaut. Und jetzt? Nervig sind auch die ständigen GEOM/GPT Meldungen vom Kernel das die Definitionen fehlerhaft sind und doch bitte schnell wiederhergestellt werden sollten. Nach einer kurzen Gedankenpause habe ich mich nun davon überzeugt es besser zu machen. Also im laufenden Betrieb umstellen.

Als erstes habe ich die beiden L2ARC Festplatten (Cache) aus dem Pool herausgelöst:

[root@trinitron ~]# zpool status
  pool: raid1p1
 state: ONLINE
  scan: scrub repaired 0 in 5h46m with 0 errors on Sat Feb 16 08:56:41 2013
config:

        NAME                      STATE     READ WRITE CKSUM
        raid1p1                   ONLINE       0     0     0
          mirror-0                ONLINE       0     0     0
            ada6                  ONLINE       0     0     0
            ada5                  ONLINE       0     0     0
          mirror-1                ONLINE       0     0     0
            ada3                  ONLINE       0     0     0
            ada4                  ONLINE       0     0     0
        logs
          mirror-2                ONLINE       0     0     0
            ada1p1                ONLINE       0     0     0
            ada2p1                ONLINE       0     0     0
        cache
          ada1p2                  ONLINE       0     0     0
          ada2p2                  ONLINE       0     0     0

errors: No known data errors

In der obigen Ausgabe sehen wir den Ausgangszustand des zfs Pools. Im folgenden werde ich nun wie bereits angesprochen die beiden Cache Festplatten entfernen.

2013-02-16.19:04:57 zpool remove raid1p1 ada2p2
2013-02-16.19:14:31 zpool remove raid1p1 ada1p2

Im nächsten Schritt habe ich die GPTIDs für meine Festplatten und Partitionen ermittelt. Unter „/dev/gptid/“ kann man sich die Device-Einträge anschauen. Die IDs sind nicht unbedingt sehr aussagekräftig aber dafür gibt es ja geeignete Hilfsprogramme wie z.B. „glabel“

[trinitron ~]$ glabel status
                                      Name  Status  Components
gptid/e4325fd0-6556-11e2-8c92-f46d04940c30     N/A  ada0p1
                    ufsid/511c1f753e9226eb     N/A  da0
                                ufs/USB16G     N/A  da0
                    ufsid/511c2042c13bdf32     N/A  da0p1
gptid/a08f6c8c-7633-11e2-9cb4-f46d04940c30     N/A  da0p1
gptid/f476cd65-778d-11e2-9cb4-f46d04940c30     N/A  ada2p2
gptid/f2f36ced-778d-11e2-9cb4-f46d04940c30     N/A  ada1p2
gptid/db804dfb-778d-11e2-9cb4-f46d04940c30     N/A  ada1p1
gptid/e6fadc3e-778d-11e2-9cb4-f46d04940c30     N/A  ada2p1

Der Befehl „glabel“ zeigt uns nun die aktuelle Zuordnung an. Jetzt werde ich dem Pool die Festplatten wieder hinzufügen. Nun aber mit den GPT IDs. Ich hätte gern die GPT Labels verwendet aber im Device-Tree wurde mir einfach kein „gpt“ angezeigt. Nur der „gptid“. Im Grunde ist es aber nur eine unschöne Darstellung. Mir ist wichtig, daß ich von den variirenden Device-Namen weg komme. Also die L2ARCH Festplatten (2x 120 GB SSD) einhängen:

2013-02-16.19:18:26 zpool add raid1p1 cache \
                    /dev/gptid/f2f36ced-778d-11e2-9cb4-f46d04940c30 \
                    /dev/gptid/f476cd65-778d-11e2-9cb4-f46d04940c30

Den selben Vorgang nun für das Intent Log (ZIL):

2013-02-16.19:27:01 zpool remove raid1p1 mirror-2
2013-02-16.19:28:46 zpool add raid1p1 log mirror \
                    /dev/gptid/db804dfb-778d-11e2-9cb4-f46d04940c30 \
                    /dev/gptid/e6fadc3e-778d-11e2-9cb4-f46d04940c30

[root@trinitron ~]# zpool status
...
        logs
          mirror-2                                      ONLINE       0     0     0
            gptid/db804dfb-778d-11e2-9cb4-f46d04940c30  ONLINE       0     0     0
            gptid/e6fadc3e-778d-11e2-9cb4-f46d04940c30  ONLINE       0     0     0
        cache
          gptid/f2f36ced-778d-11e2-9cb4-f46d04940c30    ONLINE       0     0     0
          gptid/f476cd65-778d-11e2-9cb4-f46d04940c30    ONLINE       0     0     0

OK. Nun ist das ZIL und L2ARC wieder in den Pool integriert und scheint auch zu funktionieren. Nun steht die Aufgabe an den „mirror-1“ im Pool aufzutrennen um die GPT zu recovern, die Partitionierung anzupassen um dann die Festplatte wieder in den Spiegel einzuhängen. Ich gebe zu mir war bei der Aktion etwas unwohl aber von allein passiert auf dem System ja nichts. Beginnen wir mit den Migrationsschritten:

2013-02-16.19:42:42 zpool offline raid1p1 ada4

Der ursprüngliche Mirror-Member „ada4“ ist nun OFFLINE und ich modifiziere die GPT. Es gab noch alte
Einträge vom ursprünglichen ESX5i Server. Die habe ich entfernt und einen neuen Eintrag vorgenommen:

[root@trinitron ~]# gpart add -t freebsd-zfs -b 34 -s 3907029101 -l zfsmirror1-2 ada4

2013-02-16.19:54:21 zpool replace raid1p1 ada4 gpt/zfsmirror1-2

[root@trinitron ~]# zpool status
  pool: raid1p1
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Sat Feb 16 19:54:06 2013
        1.08T scanned out of 1.51T at 2.79G/s, 0h2m to go
        62.3G resilvered, 6.10% done
config:
        NAME                                            STATE     READ WRITE CKSUM
        raid1p1                                         DEGRADED     0     0     0
          mirror-0                                      ONLINE       0     0     0
            ada6                                        ONLINE       0     0     0
            ada5                                        ONLINE       0     0     0
          mirror-1                                      DEGRADED     0     0     0
            ada3                                        ONLINE       0     0     0
            replacing-1                                 OFFLINE      0     0     0
              346825937951734283                        OFFLINE      0     0     0  was /dev/ada4
              gpt/zfsmirror1-2                          ONLINE       0     0     0  (resilvering)
        logs
          mirror-2                                      ONLINE       0     0     0
            gptid/db804dfb-778d-11e2-9cb4-f46d04940c30  ONLINE       0     0     0
            gptid/e6fadc3e-778d-11e2-9cb4-f46d04940c30  ONLINE       0     0     0
        cache
          gptid/f2f36ced-778d-11e2-9cb4-f46d04940c30    ONLINE       0     0     0
          gptid/f476cd65-778d-11e2-9cb4-f46d04940c30    ONLINE       0     0     0

Nach dem der gespiegelte „mirror-1“ Festplattenverbund wiederhergestellt wurde kommt nun die ursprüngliche Festplatte „/dev/ada3“ an die Reihe:



2013-02-16.20:56:22 zpool offline raid1p1 ada3
[root@trinitron ~]# gpart add -t freebsd-zfs -b 34 -s 3907029101 -l zfsmirror1-1 ada3

2013-02-16.20:59:29 zpool replace raid1p1 ada3 gpt/zfsmirror1-1

[root@trinitron /]# zpool status
  pool: raid1p1
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Sat Feb 16 20:59:14 2013
        1.08T scanned out of 1.51T at 2.79G/s, 0h2m to go
        21.8G resilvered, 71.34% done
config:

        NAME                                            STATE     READ WRITE CKSUM
        raid1p1                                         DEGRADED     0     0     0
          mirror-0                                      ONLINE       0     0     0
            ada6                                        ONLINE       0     0     0
            ada5                                        ONLINE       0     0     0
          mirror-1                                      DEGRADED     0     0     0
            replacing-0                                 OFFLINE      0     0     0
              10269765050397280723                      OFFLINE      0     0     0  was /dev/ada3
              gpt/zfsmirror1-1                          ONLINE       0     0     0  (resilvering)
            gpt/zfsmirror1-2                            ONLINE       0     0     0
        logs
          mirror-2                                      ONLINE       0     0     0
            gptid/db804dfb-778d-11e2-9cb4-f46d04940c30  ONLINE       0     0     0
            gptid/e6fadc3e-778d-11e2-9cb4-f46d04940c30  ONLINE       0     0     0
        cache
          gptid/f2f36ced-778d-11e2-9cb4-f46d04940c30    ONLINE       0     0     0
          gptid/f476cd65-778d-11e2-9cb4-f46d04940c30    ONLINE       0     0     0

errors: No known data errors

[root@trinitron /]# zpool status
  pool: raid1p1
 state: ONLINE
  scan: resilvered 226G in 1h0m with 0 errors on Sat Feb 16 21:59:15 2013
config:

        NAME                                            STATE     READ WRITE CKSUM
        raid1p1                                         ONLINE       0     0     0
          mirror-0                                      ONLINE       0     0     0
            ada6                                        ONLINE       0     0     0
            ada5                                        ONLINE       0     0     0
          mirror-1                                      ONLINE       0     0     0
            gpt/zfsmirror1-1                            ONLINE       0     0     0
            gpt/zfsmirror1-2                            ONLINE       0     0     0
        logs
          mirror-2                                      ONLINE       0     0     0
            gptid/db804dfb-778d-11e2-9cb4-f46d04940c30  ONLINE       0     0     0
            gptid/e6fadc3e-778d-11e2-9cb4-f46d04940c30  ONLINE       0     0     0
        cache
          gptid/f2f36ced-778d-11e2-9cb4-f46d04940c30    ONLINE       0     0     0
          gptid/f476cd65-778d-11e2-9cb4-f46d04940c30    ONLINE       0     0     0

errors: No known data errors

Soweit so gut. Sollte zfs nun wirklich den Pool wieder 100% aufgebaut haben, dann steigt meine Begeisterung um weitere 100%. Die Datenintegrität kann natürlich nur ein Test bestätigen in dem die gespeicherten Daten abgerufen und geprüft werden.

Letzte Beiträge