Speicherkapazität klingt zunächst einfach, bis man anfängt, unter die Zahl zu schauen, die auf der Seite eines USB-Sticks aufgedruckt ist. Ein USB-Stick wird vielleicht als 32GB verkauft, Windows meldet einen etwas anderen Wert, ein Fertigungstool fragt nach der Kapazität in MB, und an anderer Stelle meldet das Gerät eine LBA-Anzahl, die wie eine völlig unabhängige Zahl aussieht.
Sie hängen alle miteinander zusammen.
Der Zusammenhang zwischen Kapazität, Sektorgröße und LBA ist eigentlich recht einfach, sobald man versteht, wofür die einzelnen Zahlen stehen. Dieses Wissen ist außerdem nützlich, wenn man mit USB-Sticks auf Fertigungs- oder Duplizierungsebene arbeitet, wo die Angabe „32GB“ manchmal einfach nicht präzise genug ist.
Was ist ein LBA?
LBA steht für Logical Block Addressing, also logische Blockadressierung. Anstatt über die physische Position von Daten innerhalb des NAND-Flash-Speichers nachzudenken, sieht der Computer das Speichergerät als eine lange Folge nummerierter logischer Blöcke.
LBA 0 ist der erste logische Block, LBA 1 der nächste, dann LBA 2 und so weiter, bis das Gerät seinen letzten verfügbaren LBA erreicht.
Der wichtige Punkt dabei ist, dass ein LBA allein noch nicht verrät, wie viel Speicher vorhanden ist. Wir müssen zusätzlich die Größe jedes logischen Sektors kennen.
Der grundlegende Zusammenhang lautet:
Kapazität in Byte = LBA-Anzahl × logische Sektorgröße
Bei den meisten USB-Sticks beträgt die logische Sektorgröße 512 Byte.
Damit erhalten wir eine sehr praktische Abkürzung.
Ein MiB enthält 1.048.576 Byte. Wenn jeder logische Sektor 512 Byte enthält:
1.048.576 ÷ 512 = 2.048
Bei logischen 512-Byte-Sektoren gilt daher:
2.048 LBAs = 1 MiB
Und das bedeutet:
LBA-Anzahl ÷ 2.048 = Kapazität in MiB
Technisch gesehen ist MiB hier die korrekte Bezeichnung, weil wir mit 1.048.576 Byte rechnen und nicht mit den dezimalen 1.000.000 Byte, die für MB verwendet werden. Einige Fertigungsprogramme und MPTools bezeichnen diesen Wert trotzdem als „MB“. Deshalb ist es wichtig zu verstehen, was das jeweilige Tool tatsächlich unter MB versteht.
Ein echtes LBA-Beispiel
Nehmen wir an, ein USB-Stick meldet folgende LBA-Anzahl:
60.125.184
Wenn wir davon ausgehen, dass das Gerät logische Sektoren mit 512 Byte verwendet, können wir seine adressierbare Kapazität berechnen:
60.125.184 × 512 = 30.784.094.208 Byte
Oder wir verwenden die Abkürzung:
60.125.184 ÷ 2.048 = 29.358 MiB
Das Gerät verfügt also über exakt 29.358 MiB adressierbaren Speicher, was ungefähr 28,67 GiB beziehungsweise 30,78 GB entspricht, wenn die Kapazität in dezimalen Gigabyte angegeben wird.
Genau deshalb verrät die einfache Bezeichnung „32GB USB-Stick“ noch nichts über seine exakte Geometrie.
Zwei USB-Sticks, die beide als 32GB-Produkte verkauft werden, müssen nicht unbedingt exakt dieselbe Anzahl verfügbarer LBAs besitzen. NAND-Konfiguration, Controller-Einstellungen, reservierte Kapazität, Bad-Block-Management, Over-Provisioning und die Art, wie das Gerät während der Fertigung konfiguriert wurde, können sich alle auf die endgültige adressierbare Kapazität auswirken, die dem Host-Computer präsentiert wird.
Für die meisten Anwender spielt ein kleiner Unterschied keine Rolle.
Bei der Datenträgerduplizierung kann er dagegen eine ziemlich große Rolle spielen.
Die Rechnung in die andere Richtung
Die Berechnung lässt sich auch umkehren.
Wenn wir die genaue gewünschte LBA-Anzahl kennen und die logische Sektorgröße 512 Byte beträgt, können wir diese LBA-Anzahl in eine Kapazität umrechnen und den USB-Stick mithilfe eines MPTools entsprechend konfigurieren, vorausgesetzt, der Controller und das MPTool unterstützen diese Möglichkeit.
Die Formel lautet:
LBA-Anzahl ÷ 2.048 = MiB
Wir können daher aus der vom Kunden gewünschten LBA-Anzahl die erforderliche Kapazität berechnen und anschließend die entsprechende Kapazität im MPTool einstellen.
Wenn das MPTool logische 512-Byte-Sektoren verwendet und sein Kapazitätsfeld binäre MiB repräsentiert, sollte das Einstellen dieser Kapazität zur gewünschten LBA-Anzahl führen.
Das kann besonders nützlich sein, wenn USB-Sticks hergestellt werden, die zu einem bekannten Master-Gerät passen müssen. Es ist außerdem einer der Gründe, warum USB-Duplizierungshardware anders arbeitet als eine einfache Dateikopie. Ein Duplizierer arbeitet möglicherweise mit der tatsächlichen Struktur des Speichergeräts, anstatt lediglich sichtbare Dateien von einem Dateisystem in ein anderes zu kopieren.
Stellen wir uns zum Beispiel vor, ein Kunde erstellt ein bootfähiges Master-Image auf einer bestimmten Charge von USB-Sticks. Sechs Monate später trifft eine weitere Charge nominell identischer 32GB-Sticks ein, aber der verwendete NAND-Speicher hat sich geändert und die neu produzierten Laufwerke stellen geringfügig weniger LBAs bereit.
Auf dem Etikett steht weiterhin 32GB.
Das Betriebssystem erkennt sie weiterhin als Geräte mit ungefähr 32GB.
Aus Sicht eines sektorweisen Datenträger-Images sind sie jedoch nicht identisch.
Wenn das Master-Image mehr LBAs erwartet, als das Zielgerät bereitstellt, passt das Image möglicherweise nicht auf das Laufwerk. GPT-basierte Medien bringen eine weitere Komplikation mit sich, weil GPT am Ende des Datenträgers einen Backup-Header speichert. Die Position dieser Struktur ist an das Ende des adressierbaren Geräts gekoppelt.
Das ist einer der Gründe, warum bootfähige Medien und Datenträger-Images etwas mehr Aufmerksamkeit verdienen als eine gewöhnliche Sammlung von Dateien. Wir haben außerdem bereits behandelt, warum sich bootfähige USB-Medien nicht in jeder Umgebung gleich verhalten, und der gemeinsame Nenner ist, dass die Datenträgerstruktur genauso wichtig sein kann wie die Dateien, die sich auf dem Laufwerk befinden.
Die Kontrolle über die tatsächlich gefertigte Kapazität kann daher erheblich nützlicher sein als die bloße Angabe einer Marketingkapazität wie 32GB, 64GB oder 128GB.
Die Sektorgröße verändert die Berechnung
Für die oben genannte Abkürzung gibt es allerdings eine wichtige Einschränkung:
LBA-Anzahl ÷ 2.048 = MiB funktioniert nur bei logischen 512-Byte-Sektoren.
Ein LBA ist eine Adresse. Er bedeutet nicht automatisch 512 Byte.
Wenn ein Speichergerät stattdessen logische Sektoren mit 4.096 Byte bereitstellt, repräsentiert jeder LBA die achtfache Datenmenge.
Nehmen wir zum Beispiel wieder dieselbe LBA-Anzahl:
60.125.184
Bei logischen 512-Byte-Sektoren:
60.125.184 × 512 = 30.784.094.208 Byte
Das entspricht ungefähr 30,78 GB beziehungsweise etwa 28,67 GiB.
Wenn exakt dieselben 60.125.184 LBAs jedoch logische Sektoren mit 4.096 Byte darstellen:
60.125.184 × 4.096 = 246.272.753.664 Byte
Dann repräsentiert das Gerät ungefähr 246,27 GB beziehungsweise etwa 229,36 GiB.
Dieselbe LBA-Anzahl. Eine völlig andere Kapazität.
Deshalb muss die Sektorgröße bekannt sein, bevor eine LBA-Anzahl in eine Kapazität umgerechnet werden kann.
Warum sollte man überhaupt etwas anderes als 512 Byte verwenden?
An diesem Punkt stellt sich die naheliegende Frage, warum Speichergeräte nicht einfach immer 512-Byte-Sektoren verwenden.
Historisch gesehen wurden 512-Byte-Sektoren zum Standard bei Festplatten und verankerten sich schließlich tief in Betriebssystemen, BIOS-Implementierungen, Bootloadern, Datenträger-Dienstprogrammen und anderer Software. Kompatibilität ist einer der wichtigsten Gründe dafür, dass logische 512-Byte-Sektoren bis heute so verbreitet sind, auch bei USB-Sticks.
Moderne Speichergeräte sind intern allerdings erheblich komplizierter.
NAND-Flash-Speicher arbeitet physisch nicht mit hübsch aufgeräumten kleinen 512-Byte-Blöcken. NAND verwendet wesentlich größere Pages und Erase Blocks, während auch moderne Festplatten zu größeren physischen Sektoren übergegangen sind. Ein Controller muss das Bild, das der Computer vom Speichergerät sieht, in die wesentlich größeren Strukturen übersetzen, die vom zugrunde liegenden Speichermedium tatsächlich verwendet werden.
Hier kommen Sektorgeometrien wie 512e und 4Kn ins Spiel.
Ein 512e-Gerät verwendet größere physische Sektoren, häufig 4.096 Byte, präsentiert dem Host aber weiterhin logische Sektoren mit 512 Byte. Der Computer erhält dadurch die Kompatibilität traditioneller 512-Byte-Sektoren, während das Speichergerät intern mit einer effizienteren physischen Geometrie arbeiten kann.
Ein 4Kn-Gerät geht noch einen Schritt weiter und stellt dem Host logische Sektoren mit 4.096 Byte direkt zur Verfügung.
Größere Sektoren können den Adressierungsaufwand reduzieren, die Effizienz von Fehlerkorrekturinformationen verbessern und besser zu den physischen Eigenschaften moderner Speichermedien passen. Bei sehr großen Speichergeräten bedeuten größere logische Sektoren außerdem, dass weniger einzelne logische Blöcke erforderlich sind, um dieselbe Kapazität zu beschreiben.
Allerdings gibt es dabei auch Kompromisse.
Ältere Betriebssysteme, Boot-Umgebungen, Embedded-Geräte und spezialisierte Hardware erwarten möglicherweise logische Sektoren mit 512 Byte. Auch Software, die bestimmte Annahmen über die Sektorgröße trifft, kann sich anders verhalten, wenn ihr 4Kn-Medien präsentiert werden. Das ist einer der Gründe, warum Speicherhersteller und Controller-Anbieter die Sektorgeometrie manchmal als konfigurierbare Option anbieten, anstatt für jede Anwendung dieselbe Konfiguration zu erzwingen.
Bei einem normalen USB-Stick, der lediglich dazu verwendet wird, Word-Dokumente und Fotos zwischen Computern zu übertragen, ist davon nichts besonders aufregend. Der Anwender steckt das Laufwerk ein, sieht ungefähr die erwartete Kapazität und macht mit seinem Tag weiter.
Bei Duplizierern, bootfähigen USB-Medien, Embedded-Systemen, Industrieanlagen und kontrollierten Fertigungsumgebungen kann die exakte Geometrie dagegen Bestandteil der Produktspezifikation werden.
„32GB“ beschreibt die Gegend.
Sektorgröße und LBA-Anzahl nennen Ihnen die tatsächliche Adresse.
Redaktioneller Hinweis: GetUSB.info berichtet seit 2006 über USB-Flash-Speicher, Duplizierungssysteme und das Verhalten von Wechseldatenträgern. Dieser Artikel basiert auf praktischer Erfahrung mit der Geometrie von USB-Sticks, der Controller-Konfiguration und der Duplizierung auf Sektorebene.