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:
- „StorCLI“ finden Sie z. B. unter http://mirror.hetzner.com/tools/LSI/tools/StorCLI/MR_SAS_StorCLI_1.17.08.zip (das RPM-Paket kann mittels
alien
in ein deb-Paket umgewandelt und anschließend installiert werden). - Für einfacheres Handling wird ein Alias angelegt:
alias storcli='/opt/MegaRAID/storcli/storcli64'
In diesem Beispiel wird von einer defekten SSD an Slot 0 ausgegangen.
-
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'
-
Falls das defekte Laufwerk noch nicht den Status 'offline' hat, wird diese mit
storcli
auf 'offline' gesetzt:storcli /c0/e252/s0 set offline
-
Nun wird die SSD als fehlend markiert...
storcli /c0/e252/s0 set missing
-
Der Austausch wird nun über ein Support-Ticket beauftragt.
-
Nach erfolgtem Tausch sollte der Status erneut geprüft werden:
storcli /c0/eall/sall show
-
Falls der Rebuild nicht selbstständig startet, muss dies manuell durchgeführt werden.
storcli /c0/e252/s0 start rebuild
- „StorCLI“ finden Sie z. B. unter http://mirror.hetzner.com/tools/LSI/tools/StorCLI/MR_SAS_StorCLI_1.17.08.zip (das RPM-Paket kann mittels
-
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.
-
Status und Seriennummern (Inquiry Data) können bspw. mit folgendem Befehl ermittelt werden:
megacli pdlist a0 | grep -Ei 'enclosure|slot|firmware state|inquiry'
-
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
-
Nun wird die SSD als fehlend markiert ...
megacli pdmarkmissing physdrv[252:0] a0
-
... und für den Austausch vorbereitet.
megacli pdprprmv physdrv[252:0] a0
-
Der Austausch wird nun über ein Support-Ticket beauftragt.
-
Nach erfolgtem Tausch sollte der Status erneut geprüft werden:
megacli pdlist a0 | grep -Ei 'enclosure|slot|firmware state|inquiry'
-
Falls der Rebuild nicht selbstständig startet, muss dies manuell durchgeführt werden.
- 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
Adaptec-Controller
Im Beispiel wird von einer Debian-Installation auf einem RAID-1-Array mit zwei Laufwerken ausgegangen.
- Es wird das Kommandozeilen-Tool
arcconf
benötigt. Dieses finden Sie samt der benötigten C++-Bibliothek unter http://download.hetzner.com/tools/Adaptec/tools/ - Das defekte Laufwerk ist an Slot 0 angeschlossen.
-
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"
-
Falls das defekte Laufwerk noch nicht den Status 'failed' aufweist, wird dieser gesetzt.
arcconf setstate 1 device 0 0 ddd
-
Der Austausch wird nun über ein entsprechendes Support-Ticket beauftragt.
-
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"
-
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.
- HDD/SSD aus dem RAID entfernen.
In der Datenträgerverwaltung (diskmgmt.msc) das Kontextmenü des Volume C: öffnen und "Spiegelung entfernen" auswählen.
-
Auslesen der Seriennummer der defekten bzw. intakten HDD/SSD mit diskid32.exe.
-
Supportanfrage zum Austausch des Laufwerks (Hot Swapping) stellen
-
Nach erfolgtem Tausch diskpart starten
-
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
-
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. mittelsbcdedit /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
undgmirror
mit folgenden Arrays:/dev/mirror/boot (ada0p1 + ada1p1) /dev/mirror/swap (ada0p2 + ada1p2) /dev/mirror/root (ada0p3 + ada1p3)
Die defekte HDD/SSD ist ada1.
- 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
- 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
-
Austausch des Laufwerks über ein Supportticket beauftragen
-
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.
-
Partitionen der Tausch-HDD/SSD zu
gmirror
hinzufügengmirror insert boot ada1p1 gmirror insert swap ada1p2 gmirror insert root ada1p3
-
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.)-
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
-
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
-
Seriennummer der defekten HDD/SSD ermitteln
-
bspw. mit
smartctl
aus dem Paket smartmontoolssmartctl -a /dev/ada0 |grep -i serial
-
alternativ mittels
camcontrol
camcontrol identify /dev/ada0 |grep -i serial
-
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
-
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
-
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)