Reparatur eines Festplattenspiegels

Author:Frank
Datum:01.03.2007 letztes Update 16.08.2007
Zusammenfassung:Folgendes Szenario:
Mittels SDS haben wir unsere Bootplatte gespiegelt, funktioniert prima. Aber plötzlich und unerwartet stirbt die Bootplatte. Diese Seite beschreibt wie wir, eine neue funktionstüchtige Platte vorausgesetzt, wieder zu einem funktionierenden Spiegel kommen.
Inhalt:
  1. alte Konfiguration feststellen
  2. Neue Platte einbauen
  3. Reparatur der Metadatenbank
  4. Submirror tauschen

 Konfiguration

Man sollte sich zuerst über die Konfiguration klar werden. Hierzu benutzt man das Kommando metastat.
Das gibt eine ausführliche Ausgabe die letztendlich auf folgende Tabelle hinausläuft.
Slizegemountet anMirrorc1t0d0sc1t1d0s
0/d30d20d10
1swapd31d21d11
4/vard34d24d14

 Neue Platte einbauen

Wie haben also zwei Platten c1t0d0 und c1t1d0. In unserem Szenario ist gleich die erste Platte c1t0d0 defekt. Der Spiegel D3x läuft auf der zweiten Platte.
 
Also erster Schritt, defekte Platte raus, neue Platte rein.
Die neue Platte muss man dem System aber noch bekannt geben. Entweder mittels reboot -- -r oder wenn das System nicht ausfallen kann/darf dann mittels der Kommandofolge drvconf; disk.
Als nächstes sollten wir die Partitionstabelle auf der neuen Platten anlegen, indem wir sie von der zweiten Platte kopieren.
 # prtvtoc /dev/rdsk/c1t1d0s2 | fmthard -s - /dev/rdsk/c1t0d0s2
fmthard:  New volume table of contents now in place.

 Reparatur der Metadatenbank

Zuerst sollten wir die Metadatenbank reparieren. Mit dem Kommando metadb -i kann man sich den Status der Datenbank ansehen.
# metadb -i
        flags           first blk       block count
      W  p  l           16              8192            /dev/dsk/c1t0d0s3
      W  p  l           8208            8192            /dev/dsk/c1t0d0s3
     a m p  luo         16              8192            /dev/dsk/c1t1d0s3
     a   p  luo         8208            8192            /dev/dsk/c1t1d0s3
Wie man sieht, es gibt 4 Kopien der Datenbank, die Masterdatenbank (Flag m) läuft auf der zweiten Platten ab Block 16. Die beiden Kopien auf der Platte c1t0d0s3 stehen nicht zur Verfügung.
Klar die erste Platte ist ja neu, also die Informationen das auf dieser Platte Kopien der Masterbank sein sollen - löschen.
metadb -f -d /dev/dsk/c1t0d0s3
Und anschließend neu anlegen
# metadb -a -f -c2 /dev/dsk/c1t1d0s3

# metadb
        flags           first blk       block count
     a      luo        16              8192            /dev/dsk/c1t0d0s3
     a      luo        8208            8192            /dev/dsk/c1t0d0s3
     a  m p  u         16              8192            /dev/dsk/c1t1d0s3
     a    p  u         8208            8192            /dev/dsk/c1t1d0s3

 Submirror anlegen

Endlich können wir die Partionen der neuen Platten einbinden. Das passiert in zwei Schritten. Zuerst muss die Information über den alten Submirror gelöscht werden. Im zweiten Schritt wird der Submirror auf der neuen Platte neu angelegt.
Normalerweise könnte man sofort den Submirror mittels metaoffline aushängen, in der Praxis funktioniert das aber nicht immer. In diesen Fällen sollte man vorher den Submirror mittels metaoffline als nicht in Benutzung markieren.
# metaoffline -f d31 d11
d31: submirror d11 is offlined
Anschließen den Submirror aushängen
# metadetach -f d31 d11
d31: submirror d11 is detached
danach den Submirror löschen
# metaclear d11
d11: Concat/Stripe is cleared
Jetzt endlich den Submirror neu definieren
# metainit -f d11 1 1 c1t0d0s1
d11: Concat/Stripe is setup
und zum Schluss in den Spiegel einbauen
# metattach d31 d11
d31: submirror d11 is attached
Fertig, für den Swap. Die selben Schritte für die retlichen Partitionen.