Ubuntu und Fake-Raids

Ich nutze nun seit gut 1 1/2 Jahren Ubuntu in zusammenhing mit einem FAKE-Raid-Controler (INTEL ICH10R) und habe allerlei „lustige“ Erfahrungen gemacht. Die ich hier kundtun will. Eins vorweg, beim Einsatz eines FAKE-Raids gilt wie bei alles anderen RAIDs auch: Der RAID schützt nur vor Festplatten-Ausfall, nicht vor Dummheit, Bugs oder sonstigen Fehlern. Ein Backup (jeh nach Anwendungsfall am Besten täglich…) entspannt im Falle eines Datenverlustes doch erheblich die Situation.

Eine der versteckten Fehlerquellen ist der „RAID-Controller“ selber. Alles wird über das Betriebssystem abgefahren. Das BIOS ist nur in der Lage den RAID-Header der Platten auszulesen und zu interpretieren. Das hat drei Konsequenzen:

  • Bei einem irregulären Reboot kann es zu inkonsistent RAID Verbünden kommen. Sobald mehr als ein Stripe auf verschiedene Platten geschrieben werden muss, kann es passieren, dass nur ein Teil geschrieben wird…
  • Die Konsistenz der RAIDs ist vom Betriebssystem abhängig. Die Platten werden weiterhin an das Betriebssystem exportiert. Soll heißen man kann unter Umgehung des „RAIDS“ auf die einzelnen Platten direkt zugreifen und Daten verändern. Das ist eine erhebliche Fehlerquelle, besonders für Anfänger.
  • Da die ganze „RAID-Sache“ in Software abgearbeitet wird, können die Platten ohne weiteres an einen anderen FAKE-Raid-Controler angeschossen und dort ausgelesen werden. Der Linux Treiber ist in der Lage Controller-Unabhängig alle Header auszulesen und die RAID-Units zu betreiben. Unter Windows hat man leider nicht diesen Komfort.

Den ersten Punkt kann man bedingt durch eine USV/UPS (unabhängige Stromversorgung/uninterruptible power supply) eindämmen. So hat man nur noch Reboots zu fürchten die man selber verursacht und die kann man, wie Punkt zwei nur durch eigene Disziplin verhindern.

Gesteuert wird der FAKE-Raid immer über das dm-raid Kommando. Den aktuellen Status kann man über die folgenden Befehle abfragen.

sudo dmraid -s #zeigt den Status aller RAID-Units an
sudo dmraid -r #zeigt den Status aller RAID-Devices an

Vorsicht jedoch mit dem Status „OK“. Aktuell wird bei dem ICH10R z.B. bei einem Rebuild sofort von DEGRADE auf OK gewechselt obwohl der eigentliche Rebuild noch nicht abgeschlossen ist. Wo wir beim Rebuild selber sind. Der aktuelle Treiber erkennt aktuell scheinbar keine Statuswechsel. Ergo, wenn ein RAID in den Status degrade geht, passiert erstmal nichts, auch wenn eine Hot-Spare Einheit zur Verfügung steht. Ein Rebuild muss immer manuell gestartet werden.

sudo dmraid -R  /dev/sdX # Fügt ein Device der RAID-Unit hinzu und startet einen Rebuild.
sudo dmraid -f  -S -M /dev/sdX #markiert das ein Device als "HotSpare"
sudo dmraid -R  #startet eine Rebuild.

Achtung bei dem letzten Befehl. Es kann zu unterschiedlichem Verhalten kommen:

  • Hat die RAID-Unit nicht die benötigte Anzahl an Disk-Units wird versucht eine HotSpare-Unit der RAID-Unit hinzuzufügen und anschließen der Rebuild gestartet.
  • Hat die RAID-Unit bereits alle benötigten Disk-Units wird die RAID-Unit aktiviert und der Rebuild gestartet. Hier sollte man ganz genau darauf achten warum die RAID-Unit noch „degraded“ ist. Es kann schnell passieren, dass man zwei falsche Platte zusammen verbunden hat und versucht diese zu syncen!
Hinweis:Bei meinem Board kam es zu dem Interessanten Problem, das ein Rebuild initiiert durch das BIOS zwar korrekt durchgeführt wurde, der Mirror wurde wieder hergestellt aber anschließend wurde der RAID nicht als OK markiert.

Ab und zu ist es nötig eine Festplatte aus dem RAID zu entfernen, das macht man mit folgendem Kommando:

sudo dmraid -rE /dev/sdX #entfernt einen RAID-Header von einer Platte, die Daten bleiben bei RAID1 lesbar.
Ein extrem wichtiger Hinweis: Es wird zum Tests eines Raides gerne versucht eine Platte zu ziehen und anschließend diese wieder zu stecken. Läuft das System weiter, funktioniert der RAID. MACHT DAS NICHT! Benutzt zum Rebuild eines RAIDs niemals Platten die schon mal Teil dieses RAIDS waren.

Alle mir bekannten RAID-Controller (Software, Fake oder Hardware) reagieren extrem allergisch darauf eine Platte untergejubelt zu bekommen, die sie schon kennen. Wenn zwei Platten eines RAID 0 unterschiedliche Stände aufweisen und beide als „gültig“ markiert sind, ist nicht klar welche Platte der Controller als Rebuild-Quelle wählen wird. Bei dem kleines Test, ist das nicht weiter schlimm, das Delta zwischen den Platten beträgt wenige Minuten und meist nur Logfiles, schließt man aber zum Rebuild eine Platte an, die schon einen aktiven RAID-Header und einen alten Datenbestand hat, kann das extrem unangenehm werden! Richtig bitter wird es übrigens bei RAID5/6. Dort kann eine „alte“ gesteckte Festplatte den kompletten RAID „übernehmen“, der daraufhin sofort FAILED ist, da der RAID plötzlich wieder vollständig ist, aber die Prüfsummen nicht stimmen. Festplatten sollten ergo nur mir dem oben genannten Befehl entfernt werden.

Ein anderer Stolperstein ist der oben erwähnte Direktzugriff. Wenn Programme unter Umgehung des Raides direkt auf Platten zugreifen. Meistens ist dies z.B. der GRUB-Installer. Dieser installiert sich meist nach /dev/sdX anstatt auf das /dev/mapper/<RAID-NAME> Device. Bei einem Ausfall der Platte mit dem Bootloader hat man zwar keinen Datenverlust, kann das System jedoch nicht booten. Das ist nicht weiter schlimm, kann aber extrem irritieren und Panik auslösen.[1. Man sollte immer bedenken, dass man oft unter Stress steht, wenn es zum Ausfall einer Platte kommt. Das sind nie Situationen die man erwartet. Alles was dabei nicht läuft wie man es erwartet erhöht den Druck nur und verleitet zu Fehlern] Abhilfe schafft da nur ein erneutes installieren des Bootloaders auf das richtige Device.

sudo grub-setup /dev/sdX

Um weitere Direktzugriffe zu verhindern, sollte man ganz genau aufpassen was man mountet.

Fazit nach 1 1/2 Jahren FAKE-Raid Betrieb: Ich hab noch keine wirklichen Datenverlust durch den FAKE-Raid selber gehabt. Zwei mal habe ich mich durch eigene Dummheit ins Knie geschossen, kam aber immer durch zeitnahe Backups ohne Datenverlust davon. Es kostete mich nur Zeit und Nerven. Kann ich den Einsatz eines FAKE-Raids empfehlen? Nein – mit einer Ausnahme:

  • Man braucht einen bootbaren RAID 5 und will kein Geld für einen teuren Hardware-RAID ausgeben.

Selbst bei diesem Szenario würde ich eher zu einem bootbaren (Software) RAID-1 mit nachgeschaltetem (Software) RAID 5/6 raten. Es gibt nichts, was ein Fake-Raid besser kann/macht als ein Software-RAID. Dazu kommt, dass der DM-RAID wesentlich schlechter gepflegt wird als md-raid (Software-RAID) oder LVM. Die Fake-Raides sind und bleiben ein Auswuchs der Windows-Welt wo es lange Zeit keine brauchbare Software-Raid-Lösung gab. Ich werde mit dem nächsten LTS Release meinen Server auf jeden Fall entweder auf 100% Hardware-RAID oder die jetzigen Fake-Raids auf Software-RAID umstellen.

LUKS – Verschlüsselte Platten retten.

Aus gegeben Anlass ( an dieser Stelle nochmal dank an den Ubuntu-Server-Installer) ein kleinen hinweis was man machen kann, wenn einem der CryptHeader zerstörrt wurde.

Zuerst muss man Ruhe bewahren. Dann sich die Fakten klar machen. Bei modernen Verschlüsslungsverfahren wird nicht gesamte Platte mit einmal verschlüsselt sondern immer häppchenweise. Eine zerstörte verschlüsselte Partition lässt sich genauso wieder herstellen wie eine normale Partition. Mit einem Unterschied: der CryptHeader. Dieser enthällt den Hauptschlüssel, ohne diesen hat man verloren. Sowohl ein eventuell eingerichtetes KeyFile als auch das Password leifern nur zugriff auf diesen Schlüssel. Ist dieser Schlüssel im eimer, so bleibt nur noch das Entschlüsseln per BruteForce… wie Erfolgversprechend das ist, hängt von der Schlüssellänge ab… Wenn man ein Backup einpsielen kann, ist es jetzt aber der richtige Zeitpunkt dies zu tun….

Meine Lektion vom Wochenende, ohne CryptoHeader hat man kaum eine Chance. Eventuell kann man noch wie hier beschrieben versuchen zu retten, was zu retten ist und den Header selber „neu schreiben“. Das funktioniert allerdings nur, solange der Schlüssel selber noch intakt ist. Die chancen dafür stehen gar nicht schlecht. Der eigendliche Schlüssel wird relativ weit hinten „versteckt“. Bei mir erst ab Byte 4096 (wenn ich die Daten richtig interpretiere).[1. Wiki: LUKS-Header-Format]

Um einem solchen Stress aber aus dem weg zu gehen gibt es eine ganz einfache Methode: einfach den Luks-Header sichern! War das früher nur über dd un der Kenntniss der HeaderLength möglich, geht das ganze jetzt komfortabel über das cryptsetup-Kommando. Dazu muss man die gewünschte Partition unmount und das CryptDevice schließen, anschließend kann man folgenden Befehl ausfürhen:

sudo cryptsetup luksHeaderBackup  --header-backup-file=header.backup /dev/sdXN 

Um im Falle eines Fehlers den Header wieder herzustellen braucht es folgenden Befehl:

sudo cryptsetup luksHeaderRestore  --header-backup-file=header.backup /dev/sdXN

Wichtig dabei anzumerken ist, dass das HeaderFile auf keinen fall in der verschlüsselten Partition liegen sollte. Das bringt wenig. Es macht auch keinen sinn, dieses File irgendwo aufzubewahren, wo man ohne weiteres keinen Zugriff drauf bekommt. Von diesem File geht in erster linie keine Sicherheitsrisiko aus. Da es ein Angreifer eh ohne weiteres von der Platte ausgelesen werden kann und dies tun wird, um so das Password zu schneller brechen. Man sollte dieses file aber auch nicht unbedingt bei Facebook einstellen 😉

Performance vs Verschlüsselung

Wenn man einen File-Server betreibt, so kann man unglaublich viel Zeit darin investieren, den Raid zu planen, die Verschlüsselung einzurichten und das Netzwerk zu tunen. All das nutzt aber nichts, wenn am Ende der Benutzer glaubt, die Bytes einzeln über die Leitung schieben zu müssen.

Dass kann bzw wird passieren, wenn man seinen File-Server verschlüsselt. Der tollste RAID bringt wenig, wenn er auf den CPU warten muss, weil dieser fröhlich am ent-/verschlüsseln ist. Hier liegt ein grundlegender Widerspruch zwischen zwei Anforderungen vor. Jeh stärker man die Verschlüsselung forciert, desto langsamer wird der Datenzugriff.

Die erreichten Werte skalieren dabei jedoch nicht wie erwartet. Und überhaupt fällt es im ersten Moment schwer, die wirklich wichtigen Parameter auszumachen. Zuallererst müssen die Rahmenparameter abgesteckt werden:

  • Wichtig ist die LAN-Anbindung. 100MBit/s oder 1GBit/s. Beides Transferraten sind wesentlich langsamer, als dass was fast alle RAIDs (auch Software RAIDs) Zustande bringen. Aus dem Stand schaffte mein Testsystem 251,59MByte/s (write) und 293,41MByte/s (read). An dieser Stelle sei darauf hingewiesen, dass man von Bits in Byte umrechnen muss. (1GBit/s=1024MBit/s = 128MByte).
  • Der zweite Rahmenparameter sind die Clients, bzw. deren Festplatten. Die maximale Transferrate ergibt sich aus der Lese/Schreibgeschwindigkeit dieser Komponente. In großen Netzwerken sollte kann man das getrost ignorieren, da immer mehrere Clients den Server ans Limit fahren. Im Privatgebrauch, mit weniger als fünf Clients, sollte man aber schon mal schauen wie viel Power man wirklich braucht. Dazu nimmt man seine „schnellste“ Kiste (in meinem Fall 60MByite/s Read/40MByte/s Write) und nimmt die mal 1.5. Das ist zwar kein wissenschaftlich ermittelter Wert, aber über den Daumen reicht das.

Neben diesen „harten“ Rahmenbedingungen gibt es noch eine Reihe weicher „Auswahlkriterieren“. Bei fast jedem Benchmarktool bekommt man verschiedene Werte der „Festplatte“ ausgewiesen. Sequenzjelles(Block) Lesen/Schreiben, zufälliges Lesen/schreiben und so weiter. Eine Fülle von Informationen von denen man nicht weiß, welcher Wert wichtiger ist. Zur Vereinfachung lässt sich sagen, dass bei einem Fileserver in 90% der Fälle das sequenzielle Lesen/Schreiben wichtiger ist.

Zum Testszenario: Alle Verschlüsselungs/Cipher-Algorithmen-Kombination musste ein 750GB Device verschlüsseln, wobei auch verschiedene Schlüssellängen durchprobiert wurden. Als überlagertes Dateisystem kam XFS zum Einsatz. Der CPU (ein 2.5GHz Intel Core 2 Duo) übernahm dabei nur die Krypto-Aufgaben. Der (Hardware) RAID-Controler war für die IO Zuständig. Die 4GB RAM kann man ausklammern, da der Benchmark (in diesem Fall bonnie++) bewusst den RAM umgeht. Bei einem Testfile von 8GByte Nutzt einem weder der 4GByte-RAM noch die 256 MByte Controller-Cache irgendwas. Was ja auch Sinn dieser Test ist. Das ganze lief unter einem 64 Bit Ubuntu 9.04

Zum Ergebnisdiagramm:  Der RAID lieferte nativ (unverschlüsselt) 252 MByte/s (Block Write) und 293,41 MByte/s (Block Read). Dies ist nicht auf dem Diagramm zu sehen, weil dann die Skalierung unvorteilhaft geworden wäre. Die ersten 3 Testwerte stellen daher die „praktischen“ Referenzwerte dar. Als maximal physikalische Obergrenze steht dabei die 1GBits Ethernet Verbindung. In der Praxis bringt die es bei mir ungefähr auf 800 Mbit/s (100MByte/s), folglich sind alle IO-Bandbreiten, mit mehr Leistung sinnlos. Als zweiten Referenzwert hab ich die Festplattenleistung aller meiner Clients gemessen und deren Ergebnis gemittelt. Mehr Leistung als diese ist zwar nett, da dadurch mehrere Rechner gleichzeitig auf dem Server arbeiten können aber sonderlich viel mehr Leistung wird nicht gebraucht, da dass Netzwerk aus nicht mal 5 Rechnern besteht. Der dritte Referenzwert ist der Wert der (mich) am meisten überrascht hat. Es ist die Rohleistung die der Standard SMB-Client (libsmbclient 2:3.3.2-1ubuntu3.2) auf die Leitung bringt. Überraschend deswegen, weil er schneller schreiben als lesen kann. Ob dies an meiner Serverkonfig liegt, konnte ich noch nicht verifizieren.

Alle Tests fanden Donnerstag von 23 bis Freitag 2 Uhr statt.


Verschlüsselung Performance Statistic
Verschlüsselung Performance Statistik

CPU Auslastung
CPU Auslastung

Speicher Auslastung
CPU Auslastung

Die Auswertung: Da der Referenzbalken der Unverschlüsselten Performance fehlt, sieht das Ergebnis Feld ganz brauchbar aus. Das täuscht. Als erstes fällt auf, dass sich alle Algoritmen-Mischungen ungefähr gleich geschlagen haben. In absoluten Zahlen ausgedrückt sieht das wie folgt aus:

  • Write Char: Der schlechteste Wert ist 66.25 MByte/s und erreicht somit noch immer 91% der nativen Leistung. Ach die Streuung ist vernachlässigbar, Zwischen dem schnellsten und langsamsten Algorithmus liegen gerade mal 3 MByte/s.
  • Write Block: Der eigentlich interessante Wert für einen Fileserver weißt die erste Überraschung auf. Hier bringt es der schnellte Algorithmus gerade mal auf 61% (152 KByte) der ursprünglichen Leistung. Die Streuung ist hier auch am größten. Zwischen den beiden Extremen liegen 60 KByte/s. Das ist gemessen am absoluten Leistungsverlust (99MByte/s) ein enormer Wert.
  • Rewrite: Hier zeigt sich wieder ein ähnliches Bild wie beim „Write Char“-Test. Das Ergebnisfeld ist dicht beieinander. Mit einem Maximalunterschied von 6KByte/s spielt es fast keine Rolle.
  • Read Char: Auch hier das gleiche Bild. Alle Algorithmen liegen dicht beieinander. Auch der Verlust hält sich in Grenzen. (7KByte/s)
  • Read Block: Die größte Überraschung am Schluss: Mit einem Leistungsverlust von fast 80% schlagen sich alle Algorithmen in dieser Disziplin schlecht. Zudem gibt es hier wieder nennenswerte Unterschiede zwischen den einzelnen Algorithmen.(20KByte/s bei einem absoluten Verlust von 230 KByte/s) Da dies eine Königsdisziplin der FileServer ist (Dateien ausliefern) gebietet es sich, hier genauer hin zuschauen.

Neben diesen Einzelwerten fällt auf, dass die Leistung der Algorithmen nicht skaliert wie man es erwartet. Das liegt zum einen daran, dass der absolute Verlust an der Dimensionierung der CPU im Vergleich zur nativen Leistung hängt. Auf Deutsch:Der CPU gibt die maximale IO-Geschwindigkeit an, ein Monster RAID + LowCost CPU ist blöd. Der RAID wird sich die ganze zeit langweilen, weil der CPU nur am Rödeln ist. Hier wird auch klar, dass nachrüsten von Speicher an so einer Leistungsgrenze wenig bringt. Der Flaschenhals ist die CPU. Dass sieht anders aus, wenn man einen Software- oder Fake-RAID benutzt. Zum anderen skallieren die Algorithmen selber nicht wie erwartet. Wenn ein Algorithmus gut im Random-Access ist, sagt das noch lange nichts über seine Leistung im Block-Lesen oder gar Schreiben aus.  Dass Schreiboperationen performanter als Leseoperationen durchgeführt werden, entzieht sich komplett meiner Logik.

Neben diesen reinen Duschsatzzahlen war es interessant Festzustellen, dass alle Algorithmen aus CPU-Sicht gleich aufwändig sind. Die Auslastung lag fast immer am Limit. Auch wenn das CPU-Diagramm etwas anderes vermuten lässt. Im ersten Moment sieht es so aus, dass der CPU eine hohe IDLE-Rate hat (Pink+Türkies). Das ist aber nur die halbe Wahrheit. Besonders bei dem langen Block nach den Test (von 3 Bis 4 Uhr – hier wurden 180 GByte Backupdaten wieder auf den RAID aufgespielt) fällt auf, dass es faktisch nur noch drei Statie gibt, in dem sich der CPU befindet: IDLE, IOWAIT oder SYSTEM.  Eigentlich müssten sich IOWAIT und SYSTEM zu 100% ergänzen. Der Grund für das IDLE ist einfach: Keine oder kaum Parallelisierung. Ein CPU hat sich immer gelangweilt. Das hat den Vorteil, dass das System trotz Vollast noch gute Antwortzeiten aufweist und einsatzfähig ist, kostet aber enorm an Durchsatz.

In hab mich für den aes-xts-plain mit einer Schlüssellänge von 256 entschieden. Da dieser die beste Block-Read/Write Performance hat. AES-ECB ist zwar nochmal eine ganze Ecke schneller (besonders beim lesenden Zugriff) jedoch ist dieser Algorithmus für eine reihe von Angriffen anfällig, die bis zur Extraktion der Krypto-Keys gehen.

[UPDATE] Nach der Veröffentlichung in den ubuntuusers-Foren hat mich Red Radish darauf hingewiesen, dass viele der hier genannten Verschlüsselungs-Algoritmen zwar möglich aber wenig sinnvoll sind. Leider ging das aus den Seiten die ich biss her gelesen hab nicht hervor. Die Anzahl der „sinnvollen“ Ciphers sind:

  • aes-ecb
  • aes-cbc-essiv:sha256
  • aes-lrw-benbi
  • aes-xts-plain
  • twofish-cbc-essiv:sha256
  • twofish-lrw-benbi
  • twofish-xts-plain

Danach sieht das Diagramm etwas übersichtlicher aus.


Verschlüsselung Performance Statistic
Verschlüsselung Performance Statistik

Links:

Verschlüsselung von RAIDs

Will man einen RAID verschlüsseln, steht man vor verschiedenen Problemen. Zuallererst muss man sich klar werden, dass eine Verschlüsselung die Datensicherheit (Redundanz) gefährden kann. Tausend Backups nützen nichts wenn der Schlüssel bzw. das Schlüsselfile verloren gegangen ist. Das klingt banal, schießt einen aber ins Knie, wenn der RAID bei einem Systemausfall die wichtigen Daten am Leben hält, das Schlüsselfile aber mit ins Nirwana gegangen ist.

Umgekehrt torpediert dein RAID meist mit der schieren Masse an  Daten die Datensicherheit im Sinne des Zugriffsschutzes. Je mehr Daten man mit dem gleichen Schlüssel verschlüsselt, desto „leichter“ lässt sich der Schlüssel aus dieser Menge extrahieren. Ab 2 GByte sollte man sich intensiv damit beschäftigen, welchen Verschlüsselungsalgorithmus (Cipher) man verwenden kann und mit welcher Schlüssellänge man arbeiten sollte.

Neben solchen theoretischen Vorüberlegungen muss man sich aber auch klar werden wie man Verschlüsseln will. Welche Features will man nutzen, worauf kann man verzichten. Ich für meinen Teil hatte klare Vorstellungen von meinem Setup:

  • FullDiskEncryption (FDE): Das RAID Array soll im ganzen verschlüsselt werden.
  • Dynamische RAID-Vergrößerung: Ab gewissen Speichergrößen ist eine Verdopplung des Speichers nicht mehr praktikabel oder schlicht bezahlbar.

Beide Punkte zusammen haben jedoch ihren Knackpunkt. Nicht alle Verschlüsselungstechnologien sind bei FDE (oder überhaupt) in der Lage einmal verschlüsselte Container/Volumes in der Größe zu verändern. TrueCrypt kann dies nur bei Containern und dann mit einem Performance-Overhead, der inakzeptabel ist. Bei den OpenSource-Technologien bleibt dann nur noch dm-crypt über. Dieses hat jedoch die „Schwäche“, dass der Verschlüsselungheader (welcher Cipher, Start, Ende, etc) selber unverschlüsselt auf der Platte liegt. Sicherheitstechnisch ist das kein Problem. Auch wenn der Angreifer den Cipher kennt, beißt er sich bei den richtigen Algorithmen und Schlüssellängen die Zähne aus. Nur kann ein dm-crypt Benutzer nicht glaubhaft abstreiten, dass er eben dm-crypt nicht benutzt.

Mir war die juristische Debatte erstmal egal, ich wollte ein verschlüsseltes dynamisches RAID-Device. Das hat mich ein ganzes Wochenende gekostet (500GB auf 750GB zu migrieren dauert immer ungefähr 4 Stunden). Es hat sich mir ein zentrales Problem in den weg gestellt. Es gibt für die Konsole kein Tool, dass eine Partition vergrößern kann, dessen Dateisystem es nicht erkennt. Man kann mittels fdisk die Partitionstabelle löschen und neu schreiben. So sadomasochistisch bin ich aber nicht veranlagt. Man riskiert immer vollen Datenverlust!

Man kann den Umweg über Logical Volume Manager (LVM) gehen. Dazu wird bei einem vergrößerten Device nicht die Partition vergrößert, sondern im neuen freien Bereich einfach eine weitere Partition erstellt. Diese wird dann dem Logischen Device hinzugefügt. Arbeitet man nur mit einem Fake- oder Software-RAID, mag das akzeptabel sein. Kommt es bei diesen zu einem Stromausfall darf man eh beten. Hardware-RAIDs nutzen jedoch BBUs um Datenverlust im Fehlerfall zu unterbinden. Was mit der LVM Zwischenschicht wieder ausgehebelt währe.

Möglichkeit drei ist einfach: man nutzt keine Partitionierung. Dazu muss man einfach wie folgt sein Device „beschreiben“

sudo parted /dev/sdX
mklabel msdos
quit

Nach dieser Aktion hat man eine MSDOS – Partitionierung, aber nicht erschrecken, die verschwindet gleich wieder ;).
Jetzt kann man die Festplatte direkt verschlüsseln, was z.B. bei einer GPT – Partitionstabelle nicht geht.

sudo cryptsetup luksFormat --cipher aes-xts-plain:sha256 -s 256 -q /dev/sdX #Verschlüsselung anlegen
sudo cryptsetup luksOpen /dev/sdX someCryptDev #Verschlüsseltes Device öffnen
mkfs.ext3 /dev/mapper/someCryptDev #verschlüsseltes Device formatieren
mount /dev/mapper/someCryptDev /mnt/someCryptDevUncrypted

Beim Wiedereinhängen einfach luksFormat und mkfs weglassen, sonst blöd 😉
Interessant wird jetzt die Vergrößerung. Dazu im unter lagerten RAID erstmal das Device vergrößern. Um die neue Festplattengröße dem System bekannt zu machen muss man entweder mittels des RAID-Treibers ein rescann auslösen, man entlädt einfach den ganzen Treiber und hängt ihn wieder ein oder startet einfach neu.

sudo lsmod #alle Treiber anzeigen lassen und den RAID-Treiber raus suchen.
sudo modprobe -r
 #RAID-Treiber entladen
sudo modprobe
 #RAID-Treiber laden

Letztes geht nicht ohne das aushängen der gemountet Partition. Besser gesagt, es geht schon, bloß muss man dann mit Datenverlust rechnen. Ein Rescan sollte zu keinem Datenverlust führen, das ist jedoch Treiber-abhängig, in jedem Fall das Manual oder den Maintainer konsultieren. Für 3Ware (jetzt LSI) Raids müssen die Devices z.B. ausgehängt sein.

Ist die neue Festplattengröße im System bekannt, muss man sie nutzbar machen. Dazu gibt es zwei Möglichkeiten:

  • Online – ohne Downtime des Dateisystems: Dies benötigt ein Dateisystem, was das Vergrößern/Verkleinern „on-the-Fly“ unterstützt. Das können z.b. EXT3 oder XFS.
    sudo fdisk -lu /dev/sdX #Sektoren raus schreiben
    sudo cryptsetup status  #Offset raus schreiben
    sudo cryptsetup resize -o  -b ;
    sudo resize2fs /dev/mapper/sdX #resize des FileSystems am Beispiel EXT3
  • Offline – mit Downtime des Dateisystems: Die kann mit allen Dateisystemen durchgeführt werden, die vergrößert/verkleinert werden können. Es ist auch ein Stück komfortabler.
    sudo umount /dev/mapper/; #aushängen des verschlüsselten Devices (wenn nicht schon vor dem Scann passiert)
    sudo cryptsetup luksClose  #schließen des verschlüsselten Devices (wenn nicht schon vor dem Scann passiert)
    sudo cryptsetup luksOpen /dev/sdX  #damit ist auch schon die Vergrößerung des verschlüsselten Devise erledigt...
    sudo resize2fs /dev/mapper/ #resize des FileSystems am Beispiel EXT3/EXT2

    Beim öffnen des Device nutzt selbiges scheinbar automatisch allen verfügbaren Platz, wenn man nichts anderes (mittels resize) einstellt.

So kann kann in jedem Fall ohne viel Stress seine RAID-Device stückchenweise nach seinen Bedürfnissen erweitern. Dennoch sollte man von allen wichtigen Daten immer ein Backup haben! Zudem sollte man dieses Vorgehen ein, zwei mal geübt haben, bevor man es mit wichtigen Daten durchführt;)

Weniger ist Mehr: Wie es mit den Dateisystemen weitergeht

Ein Beitrag im Kernel-Bereich bei Linux Weekly News hat mal wieder einen interessanten Aspekt bei der Entwicklung moderner Dateisysteme beleuchtet, welcher nicht im direkten Fokus des Normalusers oder Administrators liegt.

Grundlegend geht es darum, dass der Speicherplatz wesentlich schneller wächst als alles andere. Eine „witzige“ Anekdote die durch diesen Fakt bedingt ist, ist die maximale zu verwaltende Speichergröße bei Ext4. Im aktuellen Ext4-Tree wird eine Blocknummer von 48 Bit genutzt, obwohl 64Bit locker möglich währen. Der Grund ist simpel. Selbst mit 48 Bit kann man 1 PByte verwalten und schon der Check dieser Datenmenge braucht unter aktuellen Bedingungen sehr lange (über 100 Jahre).

Es überrascht mich ein wenig wie deutlich der Autor des LWN-Artikels auf die Fehleranfälligkeit von SSDs hinweißt. Besonders da ich überlege damit meinen Server zu „upgraden“ …

Es ist jedoch interessant zu lesen, wie die Entwickler diesen Problemen versuchen zu begegnen. Ein Dateisystem das auf Wiederherstellung und Reparatur (s)eines defekten Zustandes optimiert ist. Es klingt für mich als Programmierer/(hobby)Administator ein wenig seltsam, dass ein Dateisystem davon ausgeht korrupt zu sein. Jedoch müssen wir uns wohl an diesen Umstand gewöhnen und geeignet darauf reagieren.

ChunkFS geht den Ansatzt, dass Fehler entweder global (totaler Verlust der Festplatte) oder lokal (einzelne Lesefehler) auftreten. Selten gibt es was dazwischen… Fast alle modernen Dateisysteme können mit ersterem nicht umgehen (außer über ein Fallback mittels RAID) und behandeln einen Lokalen defekt, indem sie die ganze Festplatte als „korrupt“ ansehen. Klingt irgendwie nicht sehr sinnig 😉

Chunk FS hingegen teilt „Festplatte“ in viele unabhängige Bereiche, die einzeln und online (im Background) wiederhergestellt werden können. Was freilich nur Sinn macht, wenn die Daten irgendwo redundant abgelegt sind. Noch gibt es keine wirklich praxistaugliches Implementation aber es ist wohl nur noch eine Frage der Zeit.