We beginnen met een lege, ongeformateerde schijf (klik hier om te resetten). Alle pagina's zijn beschikbaar (groen). Onze schijf bestaat uit 4 blokken van elk 9 pagina's.
Status sectoren (HDD) en pagina's (SDD)
| Vrij
|
---|
| In gebruik
|
---|
| Ongeldig (enkel SSD)
|
---|
| TRIM (enkel SSD *)
|
---|
|
---|
Harde Schijf (HDD)
|
---|
|
---|
Solid State Disk (SDD)
|
---|
|
---|
SSD met TRIM
|
---|
|
---|
Klik op de links in volgorde voor een geanimeerde werking
- Het operating system formateert de drive. We veronderstellen dat er altijd één blok gebruikt wordt voor de directory (aangeduid Δ). Om een vlotte werking te geranderen kies je bij het formateren een clustersize met de grootte van een pagina. Bij het operating system is een cluster het kleinst adresseerbaar element. Onze schijven worden "rood" tijdens de verwerking, dit om een idee te geven van de duur van de opdracht.
- Er wordt een klein bestand geschreven. Het bestand A komt op de eerst vrije plaats en de directory wordt bijgewerkt. Voor het operating system wordt de oude directory overgeschreven, maar een SSD kan niet overschrijven. Een nieuwe pagina wordt gebruikt voor de directory. Het OS denkt nog altijd dat de directory op de eerste positie staat (denkt te maken te hebben met een HDD), maar in feite staat die op positie 3. De vertalingstabel in de SSD zorgt dat als het OS de eerste positie vraagt, die de 3 pagina krijgt. De oude pagina wordt als "ongeldig" gemarkeerd. Deze pagina is voorlopig onbereikbaar.
- Bestand A wordt uitgebreid van 1 naar twee pagina's. Dit is een vaak voorkomende situatie (logboeken, subdirectories, data-bestanden, enz). Hoewel het operating system het oud bestand en de directory op de originele plaats schrijven, moet de SSD een nieuwe plaats vinden. Zowel de directory als het bestand zitten fysisch op een andere plaats dan het OS denkt. Relocatie is nodig als het bestand volledig ingelezen wordt en dan weer volledig teruggeschreven wordt (een tekstdocument in notepad), niet bij klassieke logs (webserver logs).
- Bestand B wordt geschreven. Bestand B wordt op de eerste vrije pagina geschreven, dit komt dus niet overeen met de eerste vrije plaats van het OS, nl. positie 4 (1: dir, 2+3 bestand A). De directory wordt bijgewerkt.
- Bestand B wordt teruggeschreven en uitgebreid met een pagina. Terwijl voor het OS de schijf minder dan 50% in gebruik is, is in feite minder dan 10% beschikbaar.
- Bestand B wordt gewist. Het OS geeft dit enkel aan in de directory, maar wist niet effektief de gegevens. De SSD denkt nog altijd dat bestand B bestaat. Bepaalde operating systems zoals Linux en Windows 7 kunnen een TRIM commando geven om de ruimte vrij te geven. Een getrimde blok (geel) is vergelijkbaar met een ongeldige blok (roze). Vanaf hier verschilt de klassieke SSD van de SSD met TRIM funktie.
- Bestand C wordt geschreven (5 pagina's). Er zijn echter te weinig vrije plaatsen beschikbaar. Eerst wordt het eerste deel van het bestand geschreven op de nog vrije plaatsen. Dan moet een blok gewist worden. We hebben gelukkig een blok dat enkel ongeldige data bevat. Het blok wordt gewist, het overgebleven stuk van het bestand wordt in de vrijgemaakte blok geschreven en uiteindelijk krijgt ook de directory een plaats.
- Bestand C wordt teruggeplaatst en uitgebreid met één pagina. Er is opnieuw te weinig plaats. Een blok moet vrijgemaakt worden.
Zonder TRIM funktie:
- Blok 1 bevat bestand A en ongeldige pagina's
- blok 2 bevat deel 2 van bestand C, de directory en een paar vrije pagina's
- blok 3 bevat een ongeldige directory en bestand B (de SSD weet niet dat het bestand gewist is!)
- blok 4 bevat de rest van bestand B, het eerste deel van bestand C en twee ongeldige directories.
Er zijn geen blokken die volledig ongeldig zijn (klaar om te wissen), maar bij het wissen van de eerste blok zullen de meeste pagina's vrijkomen. Bestand A wordt naar een buffer verplaatst, de pagina wordt gewist en herschreven met het bestand A, de rest van bestand C en de directory.
Met TRIM funktie:
- Blok 3 bevat een ongeldige directory en de gewiste bestand B (getrimd)
Blok 3 kan dus probleemloos gewist worden en er is geen data dat eerst verplaatst moet worden naar een andere blok.
- Bestand A wordt uitgebreid met drie pagina's. Bij de HDD treed er fragmentatie op.
Zonder TRIM funktie:
Het bestand past precies in de vrije pagina's, maar voor de directory moeten we opnieuw een blok vrijmaken. Het systeem besluit blok vier vrij te maken. Omdat de SSD niet weet dat bestand B niet meer bestaat (het staat wel in de directory, maar de SSD weet niets af van de bestandsorganisatie van het OS), ... wordt het spookbestand keurig opnieuw herschreven.
Met TRIM funktie:
Het bestand en de nieuwe directory passen in de vrije pagina's van blok 3. Bij een volgende schrijfopdracht zal er opnieuw een blok vrijgemaakt moeten worden. Blok 1 beval enkel ongeldige data (gewiste bestanden en directories) en kan dus gewist worden zonder dat eerst een deel van de inhoud gerecupereerd moet worden.
Zoals je merkt moet de SSD een werkgeheugen hebben die minstens even groot is als een blok. Bij goedkope SSD schijven wordt daarvoor een gewone blok gebruikt. Geldige data die in een te wissen blok zit, wordt naar een andere blok gecopieerd. Dit heeft echter een zware write amplification tot gevolg: het schrijven van één enkele pagina heeft tot gevolg dat twee blokken herschreven moeten worden.
Duurdere schijven, zoals die van Intel gebruiken een RAM buffer. Indien er een stroomstoring optreedt tijdens het wissen van een blok zit de SSD in een onstabiele toestand met dataverlies: de data in de buffer gaat namelijk verloren. Daarom hebben deze SSD schijven een paar back-up elko's die de schijf van stroom kunnen voorzien om de blok verder te wissen en de data terug te schrijven.
tegenwoordig wordt er met een soort journaling gewekt: als de stroom weer opkomt na een onderbreking, dan wordt het journaal afgespeeld en de handelingen die nog niet afgewerkt waren worden eerst uitgevoerd, voordat de SSD opnieuw ready wordt.
De problemen en oplossingen voor de SSD worden hier besproken.
|