Block device
De harde schijf wordt door het operating system aangezien als een block device, dat wil zeggen dat het gegevens in paketten leest of schrijft. Een printer, een toetsenbord,… zijn stream devices, ze ontvangen of versturen de gegevens in een doorlopende stroom zonder welbepaald vast formaat.
Het operating system organiseert de schijfinhoud zodanig dat een aantal bloks voor de directory zorgen, dat een aantal bloks gegevens bevatten, en dergelijke. Bij het lezen van een bestand worden een aantal (meestal opeenvolgende) bloks gelezen.
MBR - Master Boot Record
Slechts één block heeft altijd een speciale betekenis, namelijk de eerste block, de master boot record. Dit record bevat informatie over de verdere onderverdeling van de harde schijf. Het bevat voornamelijk een tabel dat maximaal 4 elementen kan bevatten: dus maximaal 4 partities. Iedere tabelelement geeft aan waar de betreffende partitie begint en eindigd.
CHS - Cylinder, Head, Sector
Indien je de indikatie CHS op je harde schijf aantreft, dan heb je te maken met een zeer oude schijf. Adressering van de datablokken gebeurde vroeger door een cylinder, kop en sector aan te geven.
Het nadeel van deze methode is dat er daardoor een beperking op de maximale capaciteit wordt gelegd, namelijk iets meer dan 500MB: ontwerpers hadden in de jaren 80 nooit gedacht dat een schijf meer dan 1024 cylinders, 16 heads en 63 sectoren zou hebben. Nu hebben de meeste harde schijven slechts twee koppen (één plateau met twee zijden waarop gegevens opgeslagen kunnen worden), maar tienduizenden cylinders en honderden sectoren.
Zoned bit recording
Adresseren door middel van een cylinder-, head en sectornummer wordt niet meer gebruikt, niet enkel omdat de capaciteit van de schijven opgelopen is, maar ook omdat het aantal sectors per cylinder veranderlijk is: de buitendiameter is namelijk groter dan de binnendiameter. Op de buitendiameter worden er dubbel zoveel sectoren geplaatst als op de binnendiameter. Er wordt met een 15-tal zones gewerkt, waarbij iedere opeenvolgende zone minder sectoren bevat (zoned bit recording).
Het aantal sectoren per cylinder wordt tijdens de low level format bepaald. Low level format (zie historiek) is enkel mogelijk in de fabriek.
Een eigenschap van schijven met zoned bit recording is dat het lezen van grote bestanden in het begin van de schijf sneller gebeurt dan op het einde ervan omdat er meer data opgeslagen wordt op de buitenste sporen. Als je meerdere partities op je harde schijf hebt, plaats de bootpartitie als eerste partitie en de "dump" partitie (back ups) achteraan.
LBA - Logical Block Adressing
Tegenwoordig wordt er LBA toegepast: een harde schijf heeft zoveel blokken beschikbaar, en de schijf zelf bepaalt waar een bepaalde block geschreven wordt. Automatisch vervallen daardoor de limieten die in de tijd opgelegd werden door de Int-13 aanroepen (waar is de tijd!) en de BIOS.
Het operating system trekt zich niet meer aan van de onderverdeling van de harde schijf, maar gebruikt gewoon bloknummers. Alle blokken hebben dezelfde afmetingen als de sectoren, namelijk 512 bytes aan data.
Op de schijf zelf wordt er bij ieder block 40 bytes bijgevoegd als foutdetectie en correctie. Met deze extra bytes kan de drive zelf kleine fouten corrigeren (een beperkt aantal bits kunnen niet juist gelezen worden). Zwaardere fouten (de helft van de block is bijvoorbeeld onleesbaar) kunnen niet verbeterd worden. Een correcteerbare fout geeft aanleiding tot het verhogen van de waarde van smart-parameter 195 (hardware ECC recovered), een niet-correcteerbare fout geeft aanleiding tot het verhogen van smart-parameter 198 (uncorrectable sector count). Als de sector alsnog kan gelezen worden (bij een latere poging, bijvoorbeeld als de drive afgekoeld is), dan worden de gegevens weggeschreven naar een spare sector en de defekte sector wordt als slecht gemarkeerd.
Mijn nieuwe harde schijf heeft reeds meer dan 10.000 leesfouten meegemaakt; op zich is dit een gewoon fenomeen.
Spare sectors
Op ieder cylinder staan er een paar "spare sectors". Deze worden in reserve gehouden voor het geval een sector defekt zou gaan. Indien de data gered kan worden, wordt die op de spare sector geplaatst en wordt de onbetrouwbare sector niet meer gebruikt (remappen). Indien een schrijfopdracht niet lukt, wordt de data automatisch in de spare sector geplaatst. Dit gebeurt automatisch zonder ingreep van het operating system (de enige manier om te weten dat er een remapping gebeurde is door de SMART parameters op te vragen).
Bij het in gebruik nemen van de spare sectors zal de harde schijf een spare aanspreken die het dichtst mogelijk bij de defekte sector gelegen is. Indien nodig worden er spares van een andere cylinder aangesproken.
Blokken van 4k: Advanced Format
Tegenwoordig gebruiken de schijven intern blokken van 4k (ook ssd doen dit). Door de grotere blokken verliest men minder ruimte, want ieder blok heeft volgende elementen:
- een gap, dat is een stuk schijf dat niet gebruikt wordt, het is de scheiding tussen twee blokken. Deze ruimte is nodig bij het schrijven, zodat enkel de juiste blok geschreven wordt. Anders kan het volgend blok gedeeltelijk gewist worden indien de timing niet meer perfekt is.
- een sync, geeft het begin van de blok aan en dient voor de synchronisatie, zodat de volgende gegevens correct gelezen kunnen worden.
- een Address Mark dat het bloknummer aangeeft. Dit is belangrijk, omdat de kop niet direct naar het juiste spoor gestuurd kan worden: bij de beweging van de kop over de sporen probeert de electronica het aantal sporen bij te houden.
- dan pas volgt de 512 bytes data (enkel de data wordt aan de computer doorgestuurd)
- op het einde de foutcorrectie (meestal 40 bytes)
Maakt men de blokken groter, dan verliest men minder ruimte: men heeft slechts één gap, sync en address mark nodig. De foutcorrectie over éénmaal 4096 bytes vraagt minder bytes dan 8 × de foutcorrectie over 512 bytes bij eenzelfde betrouwbaarheid (de technische verklaring zou ons te ver leiden). Men wint minstens 10% capaciteit door blokken van 4k in plaats van 512 bytes te gebruiken.
In theorie zou men nog meer capaciteitswinst boeken door alle sectoren samen te voegen en toegang enkel mogelijk te maken op cylinder-niveau (zoals bij floppies en het Distribution Media Format). Met moderne harde schijven heeft men echter het probleem dat het aantal sectoren niet constant is: aan de buitenkant zitten er meer sectoren dan aan de binnenkant, om zo een gelijkmatige fluxdichtheid te bekomen. Het beheer van blokken van verschillende lengte is een te zware belasting voor het systeem en vormt een bottleneck (wijzigen = lezen van de volledige cylinder in de buffer, wijzigen en schrijven van de cylinder).
De harde schijf maakt toegang op blokniveau van 512 bytes mogelijk, maar intern wordt er altijd met 4k gewerkt. Bij het lezen van een blok is er nauwelijks tijdsverlies, maar bij het schrijven van een blok moet er een lees-wijzig-schrijf operatie uitgevoerd worden (read-modify-write), en dit zorgt voor een vertraging van bijna 100% (men moet wachten todat de blok opnieuw onder de kop passeert; bij een schijf die aan 5400 toeren draait is dat 11 milliseconden).
Clusters om tijdsverlies te vermijden
Gelukkig werken de meeste operating systems met clusters van 4k (of veelvouden ervan), waardoor een langzame read-modify-write cyclus achterwege kan blijven. De pagefile van microsoft bestaat uit blokken van 4k.
Vaak corrigeert de schijf intern de offset: de data area (zie FAT) begint gewoontegetrouw op bloknummer 63, waardoor de clusters niet overeenkomen met de blokken van 4k.
Indien de drive de correctie niet automatisch uitvoert, bestaan er utilities die de partities verschuiven. Deze utility moet je aanroepen éénmaal de partities aangemaakt en geformateerd (zie voorbeeld rechts)
Bij de verschillende Linux-versies kan je aangeven op welke boundary de partities moeten beginnen: 4k of 1MB (Linux houdt reeds rekening met het Advanced Format II).
Meer informatie over het partitioneren van de harde schijf lees je in een volgend hoofdstuk.
|