Opslagcapaciteit klinkt eenvoudig, totdat je verder kijkt dan het getal dat op de zijkant van een USB-stick staat. Een USB-stick kan worden verkocht als 32GB, Windows geeft een iets andere waarde weer, een productietool vraagt om de capaciteit in MB en ergens anders meldt het apparaat een LBA-aantal dat op het eerste gezicht een volledig losstaand getal lijkt.
Ze hangen allemaal met elkaar samen.
Het verband tussen capaciteit, sectorgrootte en LBA is eigenlijk vrij eenvoudig zodra je begrijpt wat elk getal voorstelt. Het is bovendien nuttige informatie wanneer je op productie- of duplicatieniveau met USB-sticks werkt, waar alleen de aanduiding “32GB” soms niet nauwkeurig genoeg is.
Wat is een LBA?
LBA staat voor Logical Block Addressing, oftewel logische blokadressering. In plaats van te kijken naar de fysieke locatie van gegevens in het NAND-flashgeheugen, ziet de computer het opslagapparaat als een lange reeks genummerde logische blokken.
LBA 0 is het eerste logische blok, LBA 1 is het volgende, daarna LBA 2, enzovoort totdat het apparaat zijn laatste beschikbare LBA bereikt.
Het belangrijke punt is dat een LBA op zichzelf niet vertelt hoeveel opslagruimte er beschikbaar is. We moeten ook weten hoe groot elke logische sector is.
De basisrelatie is:
Capaciteit in bytes = LBA-aantal × logische sectorgrootte
Bij de meeste USB-sticks is de logische sectorgrootte 512 bytes.
Dat geeft ons een bijzonder handige verkorte berekening.
Een MiB bevat 1.048.576 bytes. Als elke logische sector 512 bytes bevat:
1.048.576 ÷ 512 = 2.048
Bij logische sectoren van 512 bytes geldt dus:
2.048 LBA’s = 1 MiB
En dat betekent:
LBA-aantal ÷ 2.048 = capaciteit in MiB
Technisch gezien is MiB hier de juiste term, omdat we 1.048.576 bytes gebruiken in plaats van de decimale 1.000.000 bytes die voor MB worden gebruikt. Sommige productieprogramma’s en MPTools noemen deze waarde nog steeds “MB”, dus het is belangrijk om te begrijpen wat een specifieke tool precies met MB bedoelt.
Een echt LBA-voorbeeld
Stel dat een USB-stick het volgende LBA-aantal rapporteert:
60.125.184
Als we ervan uitgaan dat het apparaat logische sectoren van 512 bytes gebruikt, kunnen we de adresseerbare capaciteit berekenen:
60.125.184 × 512 = 30.784.094.208 bytes
Of we kunnen de verkorte berekening gebruiken:
60.125.184 ÷ 2.048 = 29.358 MiB
Het apparaat heeft dus precies 29.358 MiB aan adresseerbare opslagruimte, wat neerkomt op ongeveer 28,67 GiB, of 30,78 GB wanneer de capaciteit wordt uitgedrukt in decimale gigabytes.
Dit is ook waarom simpelweg zeggen dat iets een “32GB USB-stick” is, je nog niet vertelt wat de exacte geometrie ervan is.
Twee USB-sticks die allebei als 32GB-product worden verkocht, hebben niet noodzakelijk exact hetzelfde aantal beschikbare LBA’s. De NAND-configuratie, controllerinstellingen, gereserveerde capaciteit, bad-block-management, over-provisioning en de manier waarop het apparaat tijdens de productie is geconfigureerd, kunnen allemaal invloed hebben op de uiteindelijke adresseerbare capaciteit die aan de hostcomputer wordt gepresenteerd.
Voor de meeste gebruikers maakt een klein verschil niet uit.
Bij schijfduplicatie kan het echter behoorlijk veel uitmaken.
De berekening de andere kant op
De berekening kan ook worden omgekeerd.
Als we precies weten welk LBA-aantal we willen en de logische sectorgrootte 512 bytes is, kunnen we dat LBA-aantal omrekenen naar een capaciteit en de USB-stick met een MPTool dienovereenkomstig configureren, ervan uitgaande dat de controller en het MPTool die mogelijkheid bieden.
De formule is:
LBA-aantal ÷ 2.048 = MiB
We kunnen dus de benodigde capaciteit berekenen aan de hand van het door de klant gewenste LBA-aantal en vervolgens de overeenkomstige capaciteit in het MPTool instellen.
Als het MPTool logische sectoren van 512 bytes gebruikt en het capaciteitsveld binaire MiB vertegenwoordigt, zou het instellen van die capaciteit moeten resulteren in het gewenste LBA-aantal.
Dit kan bijzonder nuttig zijn bij het produceren van USB-sticks die exact moeten overeenkomen met een bekend masterapparaat. Het is ook een van de redenen waarom USB-duplicatiehardware anders werkt dan het simpelweg kopiëren van bestanden. Een duplicator kan namelijk werken met de daadwerkelijke structuur van het opslagapparaat, in plaats van alleen zichtbare bestanden van het ene bestandssysteem naar het andere te kopiëren.
Stel bijvoorbeeld dat een klant een opstartbare master-image maakt op één partij USB-sticks. Zes maanden later komt er een nieuwe partij binnen van nominaal identieke 32GB-sticks, maar het gebruikte NAND-geheugen is veranderd en de nieuw geproduceerde sticks stellen iets minder LBA’s beschikbaar.
Op het label staat nog steeds 32GB.
Het besturingssysteem herkent ze nog steeds als apparaten van ongeveer 32GB.
Maar vanuit het perspectief van een sector-voor-sector schijfimage zijn ze niet identiek.
Als de master-image meer LBA’s verwacht dan het doelapparaat beschikbaar stelt, past de image mogelijk niet. Media op basis van GPT voegen nog een complicatie toe, omdat GPT aan het einde van de schijf een back-upheader bijhoudt. De locatie van die structuur is gekoppeld aan het einde van het adresseerbare apparaat.
Dit is een van de redenen waarom opstartbare media en schijfimages wat meer aandacht verdienen dan een gewone verzameling bestanden. We hebben ook besproken waarom opstartbare USB-media zich niet in elke omgeving hetzelfde gedragen, en de rode draad is dat de structuur van de schijf net zo belangrijk kan zijn als de bestanden die erop staan.
Het beheersen van de werkelijk geproduceerde capaciteit kan daarom veel nuttiger zijn dan alleen een commerciële capaciteit zoals 32GB, 64GB of 128GB opgeven.
De sectorgrootte verandert de berekening
Er is één belangrijke kanttekening bij de bovenstaande verkorte berekening:
LBA-aantal ÷ 2.048 = MiB werkt alleen bij logische sectoren van 512 bytes.
Een LBA is een adres. Het betekent niet automatisch 512 bytes.
Als een opslagapparaat in plaats daarvan logische sectoren van 4.096 bytes presenteert, vertegenwoordigt elke LBA acht keer zoveel gegevens.
Neem bijvoorbeeld hetzelfde LBA-aantal als hierboven:
60.125.184
Met logische sectoren van 512 bytes:
60.125.184 × 512 = 30.784.094.208 bytes
Dat is ongeveer 30,78 GB, of ongeveer 28,67 GiB.
Maar als exact dezelfde 60.125.184 LBA’s logische sectoren van 4.096 bytes zouden vertegenwoordigen:
60.125.184 × 4.096 = 246.272.753.664 bytes
Dan vertegenwoordigt het apparaat ongeveer 246,27 GB, of ongeveer 229,36 GiB.
Hetzelfde LBA-aantal. Een compleet andere capaciteit.
Daarom moet de sectorgrootte bekend zijn voordat je een LBA-aantal kunt omrekenen naar een capaciteit.
Waarom zou je iets anders dan 512 bytes gebruiken?
Op dit punt ligt de voor de hand liggende vraag voor de hand: waarom gebruiken opslagapparaten niet gewoon altijd sectoren van 512 bytes?
Historisch gezien werden sectoren van 512 bytes de standaard voor harde schijven en raakten ze uiteindelijk diep verweven met besturingssystemen, BIOS-implementaties, bootloaders, schijfhulpprogramma’s en andere software. Compatibiliteit is een van de belangrijkste redenen waarom logische sectoren van 512 bytes nog steeds zo algemeen worden gebruikt, ook bij USB-sticks.
Maar moderne opslagapparaten zijn intern aanzienlijk ingewikkelder.
NAND-flashgeheugen werkt fysiek niet in keurige kleine blokjes van 512 bytes. NAND gebruikt veel grotere pagina’s en erase blocks, terwijl moderne harde schijven eveneens zijn overgestapt op grotere fysieke sectoren. Een controller moet wat de computer denkt dat het opslagapparaat eruitziet, vertalen naar de veel grotere structuren die daadwerkelijk door het onderliggende opslagmedium worden gebruikt.
Hier komen sectorgeometrieën zoals 512e en 4Kn in beeld.
Een 512e-apparaat gebruikt grotere fysieke sectoren, meestal 4.096 bytes, terwijl het aan de host nog steeds logische sectoren van 512 bytes presenteert. De computer behoudt daarmee de compatibiliteit van traditionele 512-byte sectoren, terwijl het opslagapparaat intern met een efficiëntere fysieke geometrie kan werken.
Een 4Kn-apparaat gaat nog een stap verder en stelt logische sectoren van 4.096 bytes rechtstreeks aan de host beschikbaar.
Grotere sectoren kunnen de overhead van adressering verminderen, de efficiëntie van foutcorrectie-informatie verbeteren en beter aansluiten bij de fysieke eigenschappen van moderne opslagmedia. Bij zeer grote opslagapparaten betekenen grotere logische sectoren bovendien dat er minder afzonderlijke logische blokken nodig zijn om dezelfde capaciteit te beschrijven.
Er zijn echter ook compromissen.
Oudere besturingssystemen, bootomgevingen, embedded apparaten en gespecialiseerde hardware kunnen logische sectoren van 512 bytes verwachten. Software die bepaalde aannames doet over de sectorgrootte kan zich ook anders gedragen wanneer deze met 4Kn-media wordt geconfronteerd. Dat is een van de redenen waarom fabrikanten van opslagapparaten en leveranciers van controllers de sectorgeometrie soms als configureerbare optie aanbieden, in plaats van één configuratie voor elke toepassing af te dwingen.
Voor een normale USB-stick die wordt gebruikt om Word-documenten en foto’s tussen computers te verplaatsen, is dit allemaal niet bijzonder spannend. De gebruiker steekt de stick in de computer, ziet ongeveer de verwachte capaciteit en gaat verder met de dag.
Voor duplicators, opstartbare USB-media, embedded systemen, industriële apparatuur en gecontroleerde productieomgevingen kan de exacte geometrie echter onderdeel worden van de productspecificatie.
“32GB” beschrijft de buurt.
De sectorgrootte en het LBA-aantal geven je het exacte adres.
Redactionele opmerking: GetUSB.info schrijft sinds 2006 over USB-flashgeheugen, duplicatiesystemen en het gedrag van verwisselbare opslagmedia. Dit artikel is gebaseerd op praktische ervaring met de geometrie van USB-sticks, controllerconfiguratie en duplicatie op sectorniveau.