Hot Swapping

Last change on 2023-01-30 • Created on 2020-03-20 • ID: RO-B3311

Einführung

Hot Swapping ermöglicht den Austausch von Laufwerken (HDDs/SSDs) im laufenden Betrieb des Systems, um die Downtime des Servers im Falle des Ausfalls eines Laufwerks zu minimieren. Dieser Artikel dient als Hilfestellung bei der Vorbereitung und Durchführung eines Austausches per HotSwap.

Kompatibilität

Ein Großteil unserer neuen Server-Modelle sind Hot-Swap-fähig.

Ob Ihr Server Hot-Swap fähig ist kann im Hetzner Robot unter im Punkt „HDD/SSD ist defekt“ in den Supportanfragen eingesehen werden. Hier gibt es in diesem Fall die Option „Tausch im laufenden Betrieb“.

Wichtige Hinweise

Prinzipiell muss das auszutauschende Laufwerk, wenn diese nicht bereits aus dem RAID entfernt worden ist, vor Erteilung des Auftrages aus dem RAID-Verbund ausgeschlossen werden, um weitere Defekte an der HDD/SSD durch den Austausch zu vermeiden. Es muss zudem, wie generell beim Austausch einer HDD/SSD, auf die korrekte Angabe der Seriennummer geachtet werden. Falls die Seriennummer der defekten HDD/SSD nicht mehr angegeben werden kann, können auch die Seriennummern der Funktionsfähigen Laufwerke angegeben werden.

Ablauf

Hardware-RAID

Durch einen Hardware-RAID-Controller besteht unabhängig vom Betriebssystem die Möglichkeit die Laufwerke via Hot-Swap auszutauschen. Derzeit werden Adaptec- und LSI-RAID-Controller verbaut.

Informationen zu den Controllern befinden sich beispielsweise auf folgenden Docs-Seiten:

Der Austausch wird wie gewohnt über ein entsprechendes Support-Ticket beauftragt.

Nachfolgend einige Beispiele:

Wichtig: Beachten Sie generell, dass es sich hierbei um Beispiele handelt. Die Schritte und insbesondere die Kommandoparameter müssen an das konkrete System angepasst werden!

LSI-Controller

Beispielkonfiguration: Debian-Installation auf einem RAID-1-Array mit zwei SSDs Es stehen die Kommandozeilen-Tools MegaCli64 und StorCLI zur Verfügung.

  • StorCLI:

    In diesem Beispiel wird von einer defekten SSD an Slot 0 ausgegangen.

    1. Status und Seriennummern (Inquiry Data) können bspw. mit folgendem Befehl ermittelt werden:

      storcli /c0/eALL/sALL show all | egrep 'Device attributes|SN = | Intf | SATA'
    2. Falls das defekte Laufwerk noch nicht den Status 'offline' hat, wird diese mit storcli auf 'offline' gesetzt:

      storcli /c0/e252/s0 set offline
    3. Nun wird die SSD als fehlend markiert...

      storcli /c0/e252/s0 set missing
    4. Der Austausch wird nun über ein Support-Ticket beauftragt.

    5. Nach erfolgtem Tausch sollte der Status erneut geprüft werden:

      storcli /c0/eall/sall show
    6. Falls der Rebuild nicht selbstständig startet, muss dies manuell durchgeführt werden.

      storcli /c0/e252/s0 start rebuild
  • MegaCli64:

    • MegaCli64 finden Sie z. B. unter http://download.hetzner.com/tools/LSI/tools/MegaCLI/8.07.10_MegaCLI_Linux.zip (das RPM-Paket kann mittels alien in ein deb-Paket umgewandelt und anschließend installiert werden).
    • Das Tool ist bezüglich der Schreibweise von Parametern recht tolerant. Diese können mit oder ohne Bindestrich und unter Be- oder Missachtung der Groß- und Kleinschreibung angegeben werden.
    • Für einfacheres Handling wird ein Alias angelegt:
      alias megacli='/opt/MegaRAID/MegaCli/MegaCli64'

    In diesem Beispiel wird von einer defekten SSD an Slot 0 ausgegangen.

    1. Status und Seriennummern (Inquiry Data) können bspw. mit folgendem Befehl ermittelt werden:

      megacli pdlist a0 | grep -Ei 'enclosure|slot|firmware state|inquiry'
    2. Falls das defekte Laufwerk noch nicht den Status (Firmware-State) 'offline' hat, wird diese mit MegaCli auf 'offline' gesetzt:

      megacli pdoffline physdrv[252:0] a0
    3. Nun wird die SSD als fehlend markiert ...

      megacli pdmarkmissing physdrv[252:0] a0
    4. ... und für den Austausch vorbereitet.

      megacli pdprprmv physdrv[252:0] a0
    5. Der Austausch wird nun über ein Support-Ticket beauftragt.

    6. Nach erfolgtem Tausch sollte der Status erneut geprüft werden:

      megacli pdlist a0 | grep -Ei 'enclosure|slot|firmware state|inquiry'
    7. Falls der Rebuild nicht selbstständig startet, muss dies manuell durchgeführt werden.

Adaptec-Controller

Im Beispiel wird von einer Debian-Installation auf einem RAID-1-Array mit zwei Laufwerken ausgegangen.

  1. Status und Seriennummern können bspw. mit folgendem Befehl ermittelt werden:

    arcconf getconfig 1 pd|egrep "Device #|State\>|Reported Location|Reported Channel|Serial|S.M.A.R.T. warnings"
  2. Falls das defekte Laufwerk noch nicht den Status 'failed' aufweist, wird dieser gesetzt.

    arcconf setstate 1 device 0 0 ddd
  3. Der Austausch wird nun über ein entsprechendes Support-Ticket beauftragt.

  4. Nach erfolgtem Tausch sollte der Status erneut geprüft werden.

    arcconf getconfig 1 pd | egrep "Device \#|State\>|Reported Location|Reported Channel|Serial|S.M.A.R.T. warnings"
  5. Falls der Rebuild nicht selbstständig startet, muss dies manuell durchgeführt werden.

Software-RAID

Grundsätzlich ist auch bei Laufwerken am SATA-Controller Hot Swapping möglich. Das eingesetzte Betriebssystem erkennt die Änderung des Verbindungsstatus am jeweiligen Controller und das neue Laufwerk sobald diese angeschlossen wurde. Die notwendigen Schritte unterscheiden sich abhängig vom Betriebssystem und Konfiguration.

Nachfolgend einige Beispiele:

Wichtig: Beachten Sie generell, dass es sich hierbei um Beispiele handelt. Die Schritte und insbesondere die Kommandoparameter müssen an das konkrete System angepasst werden!

Linux

Informationen und ein ausführliches Beispielszenario um Laufwerke im Linux Software-RAID zu ersetzen, finden Sie auf folgender Docs-Seite: Festplattenaustausch im Software-RAID

Windows

Wichtig: Unter Windows ist das Hot-Swapping des Start-Plexes* nicht möglich. Daher muss das System vor dem Austausch vom intakten Plex gebootet werden. (* Microsoft bezeichnet die Spiegelung auch als Plexing, ein Plex entspricht somit einem Teil eines gespiegelten Volumes)

Folgendes Beispiel geht von einer Hetzner-Standard-Installation von Windows Server im UEFI-Modus mit zwei Laufwerken und Spiegelung aus. Das defekte Laufwerk ist disk 1 (Sekundärer Plex). Das System wurde vom primären Plex gestartet.

  1. HDD/SSD aus dem RAID entfernen.

In der Datenträgerverwaltung (diskmgmt.msc) das Kontextmenü des Volume C: öffnen und "Spiegelung entfernen" auswählen.

  1. Auslesen der Seriennummer der defekten bzw. intakten HDD/SSD mit diskid32.exe.

  2. Supportanfrage zum Austausch des Laufwerks (Hot Swapping) stellen

  3. Nach erfolgtem Tausch diskpart starten

  4. Laufwerk vorbereiten / Partitionen entsprechend der intakten HDD/SSD anlegen

  • falls Austausch-HDD/SSD nicht erkannt wird:

    DISKPART> rescan
  • Laufwerk anzeigen lassen

    DISKPART> list disk
  • für den Fall, dass das defekte Laufwerk als M1 (Missing) angezeigt wird

    DISKPART> select disk M1
    DISKPART> delete disk
  • Tauschlaufwerk in dynamischen Datenträger mit GPT konvertieren

  • EFI-Partition anlegen, formatieren und ihr den Laufwerksbuchstaben E zuweisen

  • HDD/SSD der Spiegelung von C hinzufügen und warten bis die Synchronisation abgeschlossen ist

    DISKPART> select disk 1
    DISKPART> convert gpt
    DISKPART> create partition efi size=200
    DISKPART> format fs=fat32 quick
    DISKPART> assign letter=e
    DISKPART> convert dynamic
    DISKPART> select volume c
    DISKPART> add disk 1 wait
  • EFI-Partition der intakten HDD/SSD den Buchstaben x zuweisen

    DISKPART> select disk 0
    DISKPART> select part 1
    DISKPART> assign letter=x
    DISKPART> exit
  1. EFI-Partition und Bootmanager

    Im Beispiel wurden den EFI-Partitionen folgende Laufwerksbuchstaben zugeordnet: x: vorhandene EFI-Partition e: neu angelegte EFI-Partition auf der Austauschlaufwerk

  • Zunächst ist es ratsam den System-BCD-Speicher zu sichern (hier in die Datei BCD_backup im aktuellen Verzeichnis), um später Änderungen ggf. mittels bcdedit /import rückgängig machen zu können:

    bcdedit /export BCD_backup
  • Die EFI-Partition wird nun rekursiv kopiert, dabei aber der BCD-Speicher und der Ordner "System Volume Information" übersprungen:

    robocopy x:\ e:\ * /e /copyall /dcopy:t /xf BCD.* /xd "System Volume Information"
  • Nun kann der System-BCD-Speicher mit bcdedit auf die Austauschlaufwerk exportiert werden:

    bcdedit /export e:\EFI\Microsoft\Boot\BCD

Nun kann von beiden Bootmanagern aus jedem der beiden Plexe gestartet werden.

Unter Umständen sind weitere Anpassungen des BCD-Speichers (bspw. falls noch ein verwaister Start-Eintrag existiert) notwendig. Umfassende Informationen finden Sie unter anderem in folgendem Dokument (englisch): http://download.microsoft.com/download/6/E/E/6EE26977-FAA0-41CC-8BDA-7A0C5E6EB9CC/Configuring%20Disk%20Mirroring%20for%20Windows%20Server%202012.docx

FreeBSD

  • gmirror + UFS:

    Beispielkonfiguration: FreeBSD-Installation mit UFS und gmirror mit folgenden Arrays:

    /dev/mirror/boot (ada0p1 + ada1p1)
    /dev/mirror/swap (ada0p2 + ada1p2)
    /dev/mirror/root (ada0p3 + ada1p3)

    Die defekte HDD/SSD ist ada1.

    1. Defekte HDD/SSD aus dem RAID entfernen
    • Status prüfen

      gmirror status
    • Partitionen der defekten HDD/SSD ggf. deaktivieren

      gmirror deactivate boot ada1p1
      gmirror deactivate swap ada1p2
      gmirror deactivate root ada1p3
    • Partitionen der defekten HDD/SSD "vergessen"

      gmirror forget boot
      gmirror forget swap
      gmirror forget root
    1. Seriennummer der defekten HDD/SSD ermitteln
    • bspw. mit smartctl aus dem Paket smartmontools:

      smartctl -a /dev/ada1 |grep -i serial
    • alternativ mittels camcontrol:

      camcontrol identify /dev/ada1 |grep -i serial
    1. Austausch des Laufwerks über ein Supportticket beauftragen

    2. Nach erfolgtem Tausch die Partitionstabelle von ada0 nach ada1 kopieren

      gpart backup ada0 | gpart restore ada1

    HINWEIS: Aktuell scheint ein Fehler im FreeBSD 11 beim Restore der Partitionstabelle zu geben, wodurch ein Booten von dem ersetzten Laufwerk verhindert werden kann. Falls dieses Problem auftauchen sollte, bitte beachten Sie diesen Eintrag im FreeBSD Forum.

    1. Partitionen der Tausch-HDD/SSD zu gmirror hinzufügen

      gmirror insert boot ada1p1
      gmirror insert swap ada1p2
      gmirror insert root ada1p3
    2. Bootcode auf der Tausch-HDD/SSD installieren

      gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada1
  • ZFS

    Beispielkonfiguration: FreeBSD-Installation mit ZFS mit folgenden Arrays:

    /dev/mirror/boot (ada0p1 + ada1p1)
    /dev/mirror/swap (ada0p2 + ada1p2)

    ZFS-Pool zroot mit Spiegelung über gpt/root0 (GPT-Label für ada0p3) und gpt/root1 (GPT-Label für ada1p3)

    Die defekte HDD/SSD ist ada0.

    (Die beiden gmirror Spiegel boot und swap werden entsprechend der oben genannten Vorgehensweise behandelt.)

    1. Sollte ZFS zur Spiegelung eingesetzt werden, muss auch hier vor dem Austausch geprüft werden, in welchem Zustand sich der Mirror befindet, und ggf. die entsprechende Partition (in folgendem Beispiel gpt/root0) offline gesetzt werden:

      zpool status
       pool: zroot
      state: ONLINE
       scan: none requested
      config:
             NAME           STATE     READ WRITE CKSUM
             zroot          ONLINE       0     0     0
               mirror-0     ONLINE       0     0     0
                 gpt/root0  ONLINE       0     0     0
                 gpt/root1  ONLINE       0     0     0
      zpool offline zroot gpt/root0
      zpool status
       pool: zroot
      state: DEGRADED
      status: One or more devices has been taken offline 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: none requested
      config:
             NAME                     STATE     READ WRITE CKSUM
             zroot                    DEGRADED     0     0     0
               mirror-0               DEGRADED     0     0     0
                 8894732708877724737  OFFLINE      0     0     0  was /dev/gpt/root0
                 gpt/root1            ONLINE       0     0     0
      
      gmirror deactivate boot ada0p1
      gmirror deactivate swap ada0p2
      gmirror forget boot
      gmirror forget swap
    2. Falls wie im Beispiel GPT-Label eingesetzt werden, kann mittels gpart die Zuordnung zum Laufwerk ermittelt werden.

      gpart list | grep -Ei 'geom|label'
      Geom name: ada0
      label: boot0
      label: swap0
      label: root0
      Geom name: ada1
      label: boot1
      label: swap1
      label: root1
    3. Seriennummer der defekten HDD/SSD ermitteln

    • bspw. mit smartctl aus dem Paket smartmontools

      smartctl -a /dev/ada0 |grep -i serial
    • alternativ mittels camcontrol

      camcontrol identify /dev/ada0 |grep -i serial
    1. Der Austausch erfolgt über ein Support-Ticket unter Angabe der Seriennummer der auszutauschenden HDD/SSD. Nach dem Austausch wird mittels gpart die Partitionstabelle übertragen, die gmirror Spiegelung repariert und der Bootcode installiert:

      gpart backup ada1 | gpart restore ada0
      gmirror insert boot ada0p1
      gmirror insert swap ada0p2
      gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
    2. Anschließend wird das GPT-Label der ZFS-Partition (in diesem Fall die dritte, also ada0p3) der Austauschlaufwerk angepasst (gpt/root0):

      gpart modify -i 3 -l root0 ada0
    3. Das neue Gerät kann nun den ausgefallenen Teil des Spiegels ersetzen:

      zpool replace zroot gpt/root0
      zpool status -x
      all pools are healthy

Ausführliche Informationen zur Konfiguration und Verwaltung des ZFS-Dateisystems sind in der Dokumentation von Oracle zu finden: Oracle ZFS-Dokumentation (deutsch)

Table of Contents