Leid und Freud mit RAID

Viele wissen ja (nicht), dass ich auch mit solchen "legacy" Betriebssystemen wie SmartOS hantiere (von dem trotz aller "legacy" immernoch alle zwei Wochen ein neues Release herauskommt). SmartOS läuft in einer RAM-Disk und verwendet normalerweise alle Festplatten eines Rechners zur Datenablage. Dafür benutzt es ZFS.

Das ZFS eines meiner Compute Nodes begrüßte mich im Neuen Jahr so:

[root@myserver-26 (my-dc-2) ~]# zpool status
  pool: zones
 state: DEGRADED
status: One or more devices has been removed by the administrator.
        Sufficient replicas exist for the pool to continue functioning in a
        degraded state.
action: Online the device using 'zpool online' or replace the device with
        'zpool replace'.
  scan: scrub repaired 0 in 0 days 00:19:11 with 0 errors on Mon Jan 15 07:31:05 2018
config:
                                                              
      NAME        STATE     READ WRITE CKSUM
      zones       DEGRADED     0     0     0
        raidz2-0  DEGRADED     0     0     0
          c1t0d0  ONLINE       0     0     0
          c1t1d0  ONLINE       0     0     0
          c1t2d0  REMOVED      0     0     0
          c1t3d0  ONLINE       0     0     0
          c1t4d0  ONLINE       0     0     0

errors: No known data errors

So ungefähr sieht das aus, wenn eine Platte ausgefallen ist. Das Betriebsystem bekommt die Platten vom eingebauten RAID-Controller präsentiert, auf dem ich für jede Platte ein RAID-0 angelegt habe:

[root@myserver-26 (my-dc-2) ~]# diskinfo
TYPE DISK          VID      PID              SIZE          RMV SSD
SCSI c1t0d0        LSI      RAID 5/6 SAS 6G  3725.50 GiB   no  no
SCSI c1t1d0        LSI      RAID 5/6 SAS 6G  3725.50 GiB   no  no
SCSI c1t2d0        LSI      RAID 5/6 SAS 6G  3725.50 GiB   no  no
SCSI c1t3d0        LSI      RAID 5/6 SAS 6G  3725.50 GiB   no  no
SCSI c1t4d0        LSI      RAID 5/6 SAS 6G  3725.50 GiB   no  no

Die defekte Platte wurde wie immer ausgetauscht, nur beim Einrichten des RAIDs nach dem Plattentausch hatte ich ignoriert, dass die neue Platte vom Controller als "UBad" gekennzeichnet wurde - und habe trotzdem gebootet. Leider hat das Betriebssystem dann nur noch vier Platten "gesehen" und diese umnummeriert. Ich war so auf das Tauschen der Platte fokussiert, dass mir das auch entgangen ist. So habe ich die defekte Platte mit zpool replace ersetzt und ZFS hat sie entsprechende "resilvered". Danach habe ich erneut gebootet, die getauschte Platte mit storcli /c0 /e252 /s4 set good (o. ä.) wieder verfügbar gemacht und wieder gebootet (ja - ich mußte immer ein grml-Linux booten, um storcli benutzen zu können - dazu gleich mehr). Jetzt waren wieder fünf Platten da (möglicherweise wurden die Platten auch nochmal umnummeriert) und die Welt sah so aus:

[root@myserver-26 (my-dc-2) ~]# zpool status
  pool: zones
 state: DEGRADED
status: One or more devices could not be used because the label is missing or invalid.
        Sufficient replicas exist for the pool to continue functioning in a
        degraded state.
action: Replace the device using 'zpool replace'.
   see: http://illumos.org/msg/ZFS-8000-4J
  scan: scrub repaired 0 in 0 days 00:40:00 with 0 errors on Tue Jan  3 11:03:17 2023
config:
                                                          
        NAME                     STATE     READ WRITE CKSUM
        zones                    DEGRADED     0     0     0
          raidz2-0               DEGRADED     0     0     0
            c1t0d0               ONLINE       0     0     0
            c1t1d0               ONLINE       0     0     0
            c1t2d0               ONLINE       0     0     0
            8509418379182789513  FAULTED      0     0     0  was /dev/dsk/c1t4d0s0
            c1t3d0               ONLINE       0     0     0
                                                         
errors: No known data errors

Das wäre auch erstmal kein Beinbruch gewesen - aber leider ließ sich die Platte nicht mit zpool replace austauschen. Außerdem sind jetzt c1t4d0s0 und c1t3d0s0 vertauscht. Für den RAID-Controller war gleichzeitig alles in Ordnung. Der Kernel meldete ein devid mismatch.

Nach einem erneuten Reboot, bei dem dann offenbar wieder eine Platte ausgefallen ist, sah es dann so aus:

[root@hmyserver-26 ~]# zpool status
no pools available
[root@myserver-26 ~]# zpool import
   pool: zones
     id: 11463045474389768837
  state: UNAVAIL
 status: One or more devices contains corrupted data.
 action: The pool cannot be imported due to damaged devices or data.
    see: http://illumos.org/msg/ZFS-8000-5E
 config:
                                                        
        zones                     UNAVAIL  insufficient replicas
          raidz2-0                UNAVAIL  insufficient replicas
            c1t0d0                ONLINE
            16128883366759974911  FAULTED  corrupted data
            c1t1d0                FAULTED  corrupted data
            8509418379182789513   FAULTED  corrupted data
            c1t3d0                ONLINE

Tiple-Disk Failure - da kann auch ein raidz2 nichts dagegen machen. Obwohl der RAID-Controller wieder nur eine Platte als "UBad" gekennzeichnet hatte - diesmal aber wohl zurecht. Soviel zum Thema Leid.

Um nicht mehr Linux booten zu müssen, wenn der RAID-Controller mal wieder konfiguriert werden will, gibt es die entsprechenden Tools auch für Solaris (Storcli und MegaCLI). Die Binärkompatibilität mit SmartOS sorgt dafür, dass man diese direkt auch dort einsetzen kann. Bei MegaCLI ist das kein Problem, da Broadcomm das Binary in gezippter Form ausliefert. Storcli wird jedoch als Solaris-Package ausgeliefert. Um dies auf SmartOS auspacken zu können (wo kein Solaris-Packagemanagement existiert), wir die Solaris-Software pkgtrans benötigt, die sinnigerweise für SmartOS nicht verfügbar ist.

Um also Storcli auf SmartOS benutzen zu können, muß ich zunächst das Paket auf einem Solaris(ähnlichen) System mit pkgtrans auspacken, um dann das Binary unter SmartOS nutzen zu können. $Personen haben mir verraten, dass so ein System OmniosCE sein könnte. Der einzige Grund, warum ich mich noch nicht mit Omnios beschäftigt habe ist, dass ich bisher ein Image für SmartOS gefunden habe. Zum Glück gibt es aber Images für AWS - bzw. man kann sich eins erstellen.

Nachdem die Hürden des Trainingsaccounts übersprungen waren, ging das dann auch ganz schnell. Storcli-Binary ausgepackt, per scp kopiert und dann auf alle CNs verteilt:

[root@headnode (my-dc-2) ~]# sdc-oneachnode -q -c "mkdir -p /opt/root/storcli"
[root@headnode (my-dc-2) ~]# sdc-oneachnode -q -c -X -d /opt/root/storcli -g /opt/root/storcli/storcli
[root@headnode (my-dc-2) ~]# sdc-oneachnode -q -c "chmod 755 /opt/root/storcli/storcli"
[root@headnode (my-dc-2) ~]# /opt/root/storcli/storcli /c0 /eall /sall show
Controller = 0
Status = Success
Description = Show Drive Information Succeeded.

Drive Information :
=================

------------------------------------------------------------------------------
EID:Slt DID State DG       Size Intf Med SED PI SeSz Model            Sp Type 
------------------------------------------------------------------------------
252:0     7 Onln   0 278.875 GB SAS  HDD N   N  512B MK3001GRRB       U  -    
252:1     6 Onln   1 278.875 GB SAS  HDD N   N  512B MK3001GRRB       U  -    
252:2     9 Onln   4 278.875 GB SAS  HDD N   N  512B ST9300653SS      U  -    
252:3     4 Onln   2 278.875 GB SAS  HDD N   N  512B MK3001GRRB       U  -    
252:4     8 Onln   3 278.875 GB SAS  HDD N   N  512B MK3001GRRB       U  -    
252:5    12 Onln   5 278.875 GB SAS  HDD N   N  512B MK3001GRRB       U  -    
252:6    11 Onln   6 278.875 GB SAS  HDD N   N  512B MK3001GRRB       U  -    
252:7    10 Onln   7 278.875 GB SAS  HDD N   N  512B MK3001GRRB       U  -    
------------------------------------------------------------------------------

EID-Enclosure Device ID|Slt-Slot No.|DID-Device ID|DG-DriveGroup
DHS-Dedicated Hot Spare|UGood-Unconfigured Good|GHS-Global Hotspare
UBad-Unconfigured Bad|Onln-Online|Offln-Offline|Intf-Interface
Med-Media Type|SED-Self Encryptive Drive|PI-Protection Info
SeSz-Sector Size|Sp-Spun|U-Up|D-Down|T-Transition|F-Foreign
UGUnsp-Unsupported|UGShld-UnConfigured shielded|HSPShld-Hotspare shielded
CFShld-Configured shielded|Cpybck-CopyBack|CBShld-Copyback Shielded

Wenn ich mir jetzt den Schmerz mit Grml und ILO sparen kann, kann ich damit leben.