Einheit 11: Harddisks & Dateisysteme
Lernziele und Kompetenzen
Den Aufbau von Hard Disk Drives und RAID-Systemen kennen lernen und die Prinzipien bei der Ansteuerung durch das Betriebssystem verstehen.
Datenpersistenz
Hard Disk Drives (dt. Festplatten sind die seit Jahrzehnten am weit verbreitetsten Art Daten zu speichern.
Dateisysteme hรคngen dabei stark von den darunterliegenden Gerรคten ab
Wie speichern moderne Hard Disks รผberhaupt Daten ab?
Wie sieht das Interface hierfรผr aus?
Wie sind die Daten konkret angeordnet und wie wird darauf zugegriffen?
Wie lรคsst sich mit โDisk Schedulingโ die Leistung verbessern?
Welche Konsequenz hat der Wandel von klassischen Festplatten hin zu Solid State Disks (Abk. SSD)?
Das Interface
Der Aufbau ist im Grundprinzip immer รคhnlich
Das Laufwerk besteht aus einer Anzahl von sog. Sektoren (i.d.R. in Form von 512-Byte Blรถcken)
Jeder Block kann individuell gelesen und geschrieben werden
Alle Sektoren sind nummeriert 0 bis ๐โ1 (bei ๐ Sektoren)
Multi-Sektor-Operationen sing mรถglich (und gรคngig)
Viele Dateisysteme lesen 4KB oder mehr auf einmal
Atomare Schreiboperationen sind nur auf 512-Byte Blรถcke zugesichert
Torn Write
Was bedeutet atomare Schreiboperationen sind nur auf 512-Byte Blรถcken zugesichert?

Nur die ersten drei Blรถcke wurden geschrieben, obwohl der Stromausfall erst sehr spรคt bei der Schreiboperation von Block 4 aufgetreten ist.
Inoffizielle Annahmen รผber Disks
Annahmen, die von vielen Clients getroffen werden (unwritten contract):
Auf zwei nahe beieinander liegende Blรถcke kann schneller zugegriffen werden, als auf weit entfernt liegende
Der Zugriff auf fortlaufende Bรถcke (engl. sequential read/write) ist der schnellste Zugriff รผberhaupt und gewรถhnlich schneller als der wahlfreie Zugriff (engl. random access)
Angenommen, Sie schreiben einen Treiber fรผr (konventionelle) Festplatten unter diesen Annahmen und morgen tauscht jemand die Festplatten gegen Solid State Disks aus, was passiert dann?
Festplattengemoetrie
Grundlegende Geometrie
Eine oder mehrere Scheiben (engl. platter), jede mit je zwei Seiten
Magnetische Oberflรคche aus Eisenoxid - oder Kobalt-Deckschicht (engl. surface)
Achse bzw. Spindle (engl. spindle)
Schreib-/Lesekopf (engl. disk-head)
Arm mittels dem der Schreib-/Lesekopf positioniert wird (engl. disk arm)
Daten sind in konzentrischen Kreisen (engl.tracks) angeordnet
Umdrehung wird in RPM (rotations per minute) gemessen.
Typische Werte heutzutage von 7.200 bis 15.000 RPM
Interessant wird die Umdrehungszeit, bei 10.000 RPM sind dies ca. 6ms
Vereinfachte Festplatte
Einige (vereinfachende) Annahmen
Ein Track
Track besteht aus 12 Sektoren bzw. Blรถcken (Sektoren)
Jeder Block besteht aus 512 Byte
Die Scheibe dreht sich gegen der Uhrzeiger Sinn

Rotationa Delay
Rotational Delay oder auch Rotational Latency โ Zeit bis sich der gesuchte Sektor unter dem Schreib-Lese-Kopf befindet
Eine vollstรคndige Umdrehung dauert ๐
Suchen wir Sektor 0 und starten bei Sektor 6, ist das Delay ๐ /2
Der Worst-Case wรคre im Beispiel zuvor ein Start bei 5, hier wird fast eine ganze Rotation benรถtigt und das Delay betrรคgt somit fast ๐
Seek Time
In Wirklichkeit besitzen HDDs sehr viele Tracks und der Schreib-/Lesekopf muss permanent ausgerichtet werden
Hier: Kopf รผber dem innersten Track muss zum รคuรersten bewegt werden (engl. seek):
Rotation und Seek sind mit die teuersten Operationen einer Festplatte
Seeking besteht aus vier Phasen:
Beschleunigung (engl. acceleration)
Schub bei voller Geschwindigkeit (engl. coasting)
Abbremsung (engl. deceleration)
Einschwingzeit (engl. settling time) mit 0,5 bis 2ms

Transfer und andere unwichtige Dinge
Erst wenn der Kopf korrekt positioniert ist (stellen Sie sich vor, er wรคre nur ungefรคhr auf dem richtigen Track๐คฆโโ๏ธ) findet der Transfer (engl.transfer) statt.
Um dass sequentielle Lesen zu ermรถglichen, nutzen manche Disks ein sog. Spurversatz (engl. trackskew) an, damit keine Latenz nach dem Neupositionieren entsteht, wenn die Daten auf einem anderen Sektor weitergefรผhrt werden.
Auรen befinden sich mehr Sektoren (Physik rulez!), daher werden Platten oft in Zonen (engl. multi-zoned disks). รuรere Zonen besitzen dann mehr Sektoren als innere.
Schreib-/Lesecache zur Performance-Steigerung. Beim Schreiben kann sofort nach dem Cachen bestรคtigt werden (engl. writeback) oder erst nach dem Schreiben auf Platte (engl. writethrough).
I/O Zeiten
Wie setzt sich nun die Zeit fรผr einen I/O-Zugriff zusammen?
Fรผr den Plattenvergleich gerne genutzt: I/O Rate:

Disk Scheduling
Aufgrund der hohen Kosten fรผr Disk Zugriffe entscheidet der Disk Scheduler รผber die Zugriffe:
Anders als bei Prozessen kann man bei Plattenzugriffen die Dauer gut berechnen
Auf Basis von Seek-Zeiten und der Rotation Delay kann der kรผrzeste Job gefunden werden
Shortest Seek Time First (SSTF)
Anordnung der Jobs nach Track โ die Anfrage mit dem am nรคchst gelegenen Track wird zuerst gewรคhlt
Problem: Die Disk Geometrie ist dem Betriebssystem nicht bekannt
Anstelle dessen kann der nรคchst gelegen Block verwendet werden (nearest-block-first, Abk. NBF)
Problem 2: Starvationโ Bei einem fortlaufenden Strom von Anfragen auf z.B. die inneren Tracks wรผrden Anfragen auf die รคuรeren ignoriert
Wie kann dieses Problem gelรถst werden?
SCAN
Anfragen werden von den รคuรeren zu den inneren Tracks und wieder zurรผck etc. abgearbeitet (engl. sweep)
C-SCAN (Circular SCAN)
Anstelle in beiden Richtungen werden Anfragen immer von den รคuรeren Tracks abgearbeitet
Fairer gegenรผber den รคuรeren und inneren Tracks, da reines SCAN zweimal die mittleren Tracks trifft
Allerdings werden SCAN/C-SCAN nicht annรคhernd einem SJF-Ansatz gerecht
Shortest Positioning Time First (SPTF)
Ausgangspunkt s. vorherige Abbildung
Sollte nun Track 8 oder 16 zuerst gewรคhlt werden?
Abhรคngig von Seek-Zeit und Rotation-Delay
Lรถst eigentlich unsere vorherigen Probleme
Problem: Das Betriebssystem kennt meist nicht die Track-Grenzen nicht und weiร nicht wo sich der Schreib-Lese-Kopf gerade befindet
Daher wird SPFT meist innerhalb des Drives selbst implementiert
manchmal auch: Shortest Access Time First (SATF)
Weiter Herausforderungen
Frรผher wurde das gesamte Scheduling im Betriebssystem realisiert โ frรผher waren die Disks โeinfacherโ gebaut.
Heute besitzen Festplatten einen komplexen Scheduler auf dem Disk Controller, der exakte Daten รผber die internen Positionen hat.
Das Betriebssystem schickt die Requests an die Disk, die es am geeignetsten hรคlt und die Disk kรผmmert sich um den Rest.
I/O Merging: Requests, die nahe aneinander liegende Sektoren betreffen, sollten mรถglichst zusammengefasst werden, da dies den Overhead fรผr das Betriebssystem reduziert.
Wie lange soll der Scheduler warten, bis eine I/O-Anfrage abgearbeitet wird? Es kรถnnte ja noch eine โbessereโ Anfrage kommen, so dass die Disk effizienter genutzt werden kann.
RAID-Systeme
Festplatten gehรถren zu den langsamsten Komponenten in einem Rechner. Wenn eine Festplatte ausfรคllt, sind die persistierten Daten verloren. Auรer Sie haben ein Backup, aber das ist hier nicht der Punkt, wicht hier ist jedoch: RAID ist kein Backup!
Zunรคchst die Frage: Wie kann ein groรes, schnelles und zuverlรคssiges Speichersystem geschaffen werden?
Von auรen betrachtet sieht ein RAID wie eine Festplatte aus.
Intern ist ein RAID jedoch ein hรถchst komplexes System mit zahlreichen Vorteilen:
Performance, Speicherplatz (Kapazitรคt) und Zuverlรคssigkeit
RAID-Systeme verkraften auรerdem den Ausfall einzelner Festplatten
Interface
Fรผr das Dateisystem sieht ein RAI- System aus wie eine einzelne Festplatte (warum es das nicht ist klรคren wir spรคter).
Bei einem Request durch das Betriebssystem, muss das RAID ermitteln auf welche Disk (bzw. abhรคngig vom RAID Level, auf welche Disks) zugegriffen werden muss.
Da die Daten auf mehrere Disks verteilt sind, mรผssen mehrere physikalische I/O-Zugriffe pro logischen I/O-Zugriff stattfinden
RAID Charakteristika
Auf Basis welcher Kriterien kรถnnen RAID-Systeme evaluiert werden?
Kapazitรคt
Wie viel effektiver Speicherplatz ist verfรผgbar, wenn ๐ Disks mit ๐ต Blรถcken verwendet werden? Ohne Redundanz sind dies ๐โ ๐ต
Wenn zwei Kopien vorgehalten werden (engl. mirroring) wรคren dies (๐โ ๐ต)โ2
Verschiedene RAID-Level liegen irgendwo dazwischen
Zuverlรคssigkeit
Zur Vereinfachung gehen wir derzeit von einem einzigen Fehlermodell aus: Eine Disk fรคllt komplett aus, einem sog. Fail-Stop.
Des weiteren gehen wir davon aus, dass der RAID-Controller dies auch direkt feststellen kann.
Wie viele Disks kรถnnen ausfallen, so dass das jeweilige RAID-Design immer noch funktionsfรคhig ist?
Es gibt natรผrlich noch mehr Fehlerfรคlle, die wir spรคter betrachten!
Performance
Die Performance ist nicht ganz einfach zu bestimmen:
Hรคngt vom jeweiligen Workload ab
Wie hoch ist die Schreibe- oder Lesegeschwindigkeit?
Wie wir vorher gelernt haben, hรคngt dies auch von den eingesetzten Disks ab
RAID Level
RAID Level 0
Keine Redundanz
Mehrere Disks werden genutzt, um die Kapazitรคt zu erhรถhen (engl.striping)
Einfachste Form: Blรถcke werden รผber die Disks verteilt
Werden Blรถcke nun sequentiell gelesen, kann dies parallelisiert werden!
Stripes
Blรถcke in der gleichen Reihe werden Stripes genannt.

Chunk Size
Besser: Mehrere Blรถcke auf einer Disk
Hier: Zwei 4-KB Blรถcke bevor zur nรคchsten Disk gesprungen wird

Performance Auswirkung:
Kleine Chunk Sizes: Dateien werden รผber viele Disks verteilt
Groรe Chunk Sizes: Intra-File Parallelitรคt wird reduziert
Richtige Grรถรe: schwer zu bestimmen bzw. โit dependsโ
RAID-0 Analyse
Kapazitรคt
Bei ๐ Disk mit je ๐ต Blรถcken liefert RAID-0 ein perfektes Ergebnis: ๐โ ๐ต
Zuverlรคssigkeit
Perfekt, was die Ausfallwahrscheinlichkeit angeht: Bei einem Fehler sind die Daten futsch!
Performance
Bei einem Zugriff auf einen einzelnen Block: Vergleichbar mit einzelner Disk
Bei sequentiellen Zugriffen: Volle Parallelitรคt
Bei wahlfreien Zugriffen ๐โ ๐ MB/s mit
Fรผr eine detaillierte Berechnung sei hier auf OSTEP Kapitel 38.4 verwiesen
RAID Level 1
Mirroring
Jeder Block wird im System auf eine andere Disk kopiert (bzw. gespiegelt)
Hier: RAID-10 bzw. RAID 1+0, nutzt gespiegelte Paare von Disk
Alternativ: RAID-01 bzw. RAID 0+1, besteht aus zwei RAID-0 Arrays, die gespiegelt sind

Kapazitรคt
Es wird nur die Hรคlfte der Kapazitรคt genutzt: (๐โ ๐ต)โ2 und somit teuer
Zuverlรคssigkeit
Ausfall einer Diks wird verkraftet, im vorherigen Fall kรถnnen sogar Konstellationen von Disks ausfallen (z.B. Disk 0 und 2), darauf sollte man aber nicht wetten
Performance
Einzelne Leseoperation vergleichbar mit einer einzelnen Disk
Fรผr einen Schreibzugriff mรผssen jedoch zwei (parallele) physikalische Schreiboperationen durchgefรผhrt werden, im Worst-Case muss auf den langsamsten Schreibprozess gewartet werden (z.B. aufgrund von Rotation Delay)
Sequentielle Schreib- und Leseoperationen dauern (๐/2โ ๐) MB/s mit ๐=(๐ด๐๐๐ข๐๐ก๐๐๐ท๐๐ก๐)/(๐๐๐๐๐ก๐๐ด๐๐๐๐ ๐ ) bzw. die Hรคlfte des Hรถchstdurchsatzes
Wahlfreie Leseoperationen sind mit ๐โ ๐ MB/s die beste Operation fรผr RAID-1, wogegen wahlfreie Schreiboperationen mit ๐/2โ ๐ MB/s weniger geeignet sind, da zwei physikalische Schreiboperationen simultan durchgefรผhrt werden mรผssen.
Fรผr eine detaillierte Berechnung sei auch hier auf OSTEP Kapitel 38.4 verwiesen
RAID Level 4
Nutzung eines sog Paritรคtsbits
Benรถtigt weniger Speicherplatz als gespiegelte RAIDs, jedoch auf Kosten der Performance
Mittels der XOR-Funktion wird das Paritรคtsbit berechnet

Parity-Bit
Invariante
Pro Zeile gerade Anzahl von 1en, einschl. des Paritรคtsbits
RAID muss dies sicherstellen
Beim Ausfall einer Zeile C (s.o.) kann diese wiederhergestellt werden
Wie? XOR auf die verbleibenden Spalten ausfรผhren
Aber bei Blรถcken?
Bitweises XOR auf den ganzen Block (z.B. 4 KB)

Kapazitรคt
1 Disk fรผr Paritรคten ergibt eine Gesamtkapazitรคt (๐โ1)โ ๐ต
Zuverlรคssigkeit
RAID-1 erlaubt den Ausfall einer Disk
Performance
Sequentielle Leseoperationen kรถnnen alle Disks (ohne die Paritรคtsdisk) nutzen und liefern so einen Maximaldurchsatz von (๐โ1)โ ๐ MB/s
Bei einem sog. Full Stripe Write wird ein gesamter Stripe auf einmal beschrieben und der Paritรคtsblock kann direkt mit berechnet werden, alle Schreiboperationen kรถnnen parallel stattfinden (effizienteste Schreiboperation im RAID-4)
Die effektive Bandbreite bei sequentiellen Schreiboperationen ist dabei (๐โ1)โ ๐ MB/s
Wahlfreie Leseoperationen liegen bei (๐โ1)โ ๐ MB/s
Beim Schreiben eines einzelnen Blocks muss das Paritรคtsbit des Stripes neu berechnet werden
Variante 1: Additive Parity
Alle bestehenden Blรถcke (parallel) lesen und mit dem neune Block
XORNeu berechneter Paritรคtsblock und neuer Block kรถnnen parallel geschrieben werden
Variante 2: Subtractive Parity
Alter Wert wird gelesen, ist dieser mit dem neuen Wert identisch muss das Paritรคtsbit nicht geรคndert werden, falls doch, muss das Paritรคtsbit umgedreht werden
Bei ganzen Blรถcken (z.B. 4 KB) wie in RAID-4 sind dies 4096 mal 8 Bit.
Der Einsatz des jeweiligen Verfahrens hรคngt also wieder davon ab (โit dependsโ)
Auf jeden Fall wird die Paritรคtsdisk zum Flaschenhals
RAID Level 5
Grundlegend gleich zu RAID-4, jedoch mit den Paritรคtsblรถcken รผber die versch. Disks verteilt (engl. rotating parity)
Flaschenhals wird somit beseitigt

RAID-5 Analyse
Die meisten Werte sind identisch zu RAID-4
Wahlfreie Leseoperationen sind etwas besser, da alle Disks genutzt werden kรถnnen
Wahlfreie Schreiboperationen verbessern sich signifikant, da Requests nun parallel ausgefรผhrt werden kรถnnen.
รbungsaufgaen
Einfache XOR Berechnung
Gegeben sind zwei Binรคrzahlen: 1010 und 1100. Berechnen Sie das Ergebnis der XOR-Operation zwischen diesen beiden Zahlen.
1 XOR 1 = 0 0 XOR 1 = 1 1 XOR 0 = 1 0 XOR 0 = 0
Die gesuchte Binรคrzahl ist demnach 0110. In diesem Fall handelt es sich um gerade Paritรคt (auch als โeven parityโ bezeichnet). Die XOR-Operation zwischen den beiden Binรคrzahlen 1010 und 1100 ergibt die Binรคrzahl 0110, die eine gerade Anzahl von Einsen enthรคlt. Daher ist dies ein Beispiel fรผr gerade Paritรคt.
XOR Berechnung mit mehreren Datenblรถcken
Disk 1 =1111
Disk 2 =1110
Disk 3 =1100
Disk 4 =1000
Die Berechnung des ersten Bits jedes Datenblocks ergibt folgende Berechnung
1 XOR 1 XOR 1 XOR 1
= ((1 XOR 1) XOR 1) XOR 1
= (0 XOR 1) XOR 1
= 1 XOR 1n
= 0
Die Berechnung des zweiten Bits jedes Datenblocks ergibt folgende Berechnung
1 XOR 1 XOR 1 XOR 0
= ((1 XOR 1) XOR 1) XOR 0
= (0 XOR 1) XOR 0
= 1 XOR 0
= 1
Die Berechnung des dritten Bits jedes Datenblocks ergibt folgende Berechnung
1 XOR 1 XOR 0 XOR 0
= ((1 XOR 1) XOR 0) XOR 0
= (0 XOR 0) XOR 0
= 0 XOR 0
= 0
Die Berechnung des letzten Bits jedes Datenblocks ergibt folgende Berechnung
1 XOR 0 XOR 0 XOR 0
= ((1 XOR 0) XOR 0) XOR 0
= (1 XOR 0) XOR 0
= 1 XOR 0
= 1
Die Berechnung ergibt demnach folgenden Paritรคtsblock:
Disk 5 = 0101
Last updated