meta data for this page
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Nächste Überarbeitung | Vorherige Überarbeitung | ||
kurzuebersicht_zu_datentraegern_partitionen [2023/01/09 22:35] – angelegt juergenhaas | kurzuebersicht_zu_datentraegern_partitionen [2023/02/06 00:01] (aktuell) – juergenhaas | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Kurzübersicht zu Datenträgern und Partitionen ====== | ====== Kurzübersicht zu Datenträgern und Partitionen ====== | ||
- | //**in Arbeit**// | ||
+ | ===== Datenträger ===== | ||
+ | |||
+ | ==== Magnetische Festplatten, | ||
+ | |||
+ | {{ :: | ||
+ | Datenträger zur persistenten Speicherung von Informationen sind heutzutage zumeist herkömmliche Festplatten mit magnetischen Scheiben oder NAND-Flash-Speicher wie z. B. SSDs, USB-Sticks oder Speicherkarten. Während die Speicherbereiche Festplatten früher entsprechend ihrer Geometrie in Cylinders, Heads und Sectors aufgeteilt wurde, wird heutzutage die sogenannte **Logical Block Address (LBA)** zur Adressierung der Speicherblöcke auf Datenträgern verwendet. Angaben in der alten CHS-Notation haben heutzutage zumeist keine praktische Relevanz mehr und sollten in der Regel ignoriert werden, weil sie oft irrelevante oder irreführende Informationen liefern. | ||
+ | |||
+ | Bei der vorherrschenden LBA-Adressierung werden die Datenträgerblöcke unabhängig von ihrer tatsächlichen physischen Lage einfach mit einer logischen Adresse bei 0 beginnend durchnummeriert. Eine LBA kann, je nach Standard und Verwendung, z. B. 28, 32 oder 48 Bit lang sein. Jede Adresse bezeichnet dabei einen bestimmten Block auf dem Datenträger. Datenträgerblöcke besitzen grundsätzlich eine einheitliche Größe von **512 Byte**. Allerdings setzt sich bei moderneren Speichermedien zunehmend eine Blockgröße von **4096 Byte** durch. | ||
+ | |||
+ | ==== NAND-Flash-Speichermedien ==== | ||
+ | |||
+ | Moderne Festplatten wie SSDs basieren auf NAND-Flash-Speicher. Für die folgenden Erläuterungen wird von der einfachsten Form, nämlich zweidimensionalem Flash-Speicher mit Single Level Cells (SLC) ausgegangen. Bei SLC-Speicher kann eine einzelne Speicherzelle nur die Werte 1 oder 0 aufnehmen, nämlich wenn die Speicherzelle voll geladen oder leer ist. Modernere Speicherchips arbeiten mit Speicherzellen, | ||
+ | * SLC: 2 Zustände -> 1 Bit pro Zelle | ||
+ | * MLC: 4 Zustände -> 2 Bit pro Zelle | ||
+ | * TLC: 8 Zustände -> 3 Bit pro Zelle | ||
+ | * QLC: 16 Zustände -> 4 Bit pro Zelle | ||
+ | Außerdem werden in neueren Speicherchips die Speicherstrukturen dreidimensional aufgebaut. Zum besseren Grundverständnis wird hier aber eine vereinfachte Darstellung der herkömmlichen zweidimensionalen Anordnung verwendet. | ||
+ | |||
+ | Siehe hierzu auch dieses {{https:// | ||
+ | |||
+ | ---- | ||
+ | === Struktur von Flash-Speicher === | ||
+ | {{ :: | ||
+ | * Es können nicht an jede einzelne Speicherzelle alle Anschlüsse herangeführt werden, die benötigt würden, um sie einzeln anzusteuern. Dabei würde viel zu viel Platz auf den Speicher-Chips für die Anschlusswege verschwendet und es bliebe kaum Platz für die eigentlichen Speicherzellen übrig. | ||
+ | * Flash-Speicherzellen sind daher in Rastern angeordnet, so dass nur die einzelnen Zeilen und Spalten eines Rasters mit Datenleitungen angebunden werden müssen. Durch Ansteuerung einer bestimmten Zeile und Spalte kann prinzipiell gezielt auf eine Zelle zugegriffen werden. | ||
+ | * Eine so organisierte Speichereinheit bezeichnet man als Block. | ||
+ | * Alle Zellen einer einzelnen Zeile bezeichnet man als Page. | ||
+ | * Ein Speicherblock hat abhängig vom Datenträger meist eine Größe von einigen Megabyte. | ||
+ | * Bedingt durch die Art und Weise wie ein Block angeschlossen ist, kann immer nur eine ganze Page gelesen werden. | ||
+ | * Ebenfalls bedingt durch die Anschlussweise kann immer nur ein ganzer Block geschrieben werden. Das Beschreiben eines Blocks erfolgt in mehreren Teilschritten. | ||
+ | * Zuerst werden alle Zellen eines Blocks vollständig geladen. | ||
+ | * Danach können einzelne Zellen gezielt entladen werden. | ||
+ | * Am Ende dieses Vorgangs beinhaltet der Block die gewünschten Daten. | ||
+ | |||
+ | {{ :: | ||
+ | |||
+ | ---- | ||
+ | === Lebensdauer und Wear Leveling ==== | ||
+ | Das Lesen aus Flash-Speicher stellt für die Speicherzellen keine nennenswerte Belastung dar. Allerdings geht der Schreibvorgang mit einer tatsächlichen physischen Belastung der Speicherzellen einher, was zu einer schrittweisen Abnutzung der Zellen führt. Ist diese zu weit fortgeschritten, | ||
+ | |||
+ | Damit nicht bereits nach kurzer Zeit stark beanspruchte Bereiche von Flash-Speichermedien kaputtgehen, | ||
+ | |||
+ | {{ :: | ||
+ | Wenn eine Datei geändert werden soll, deren Inhalt sich in bereits stärker abgenutzten Speicherzellen befindet, dann wird der neue Inhalt nicht mehr an die selbe Stelle geschrieben wie der alte, sondern es werden stattdessen weniger abgenutzte Speicherzellen verwendet. Die LBA-Adresse bleibt dabei gleich. Dieses Variante des Wear Leveling, bei der jeweils dann, wenn gerade etwas neu geschrieben werden soll, einem neuen Bereich zugeordnet wird, nennt sich **dynamisches Wear Leveling**. | ||
+ | |||
+ | |||
+ | {{nand-flash_static_wear_leveling.png? | ||
+ | Dem gegenüber steht das **statische Wear Leveling**. Dieses kommt dann zum tragen, wenn bestimmte Inhalte auf dem Datenträger über lange Zeit unangetastet bleiben, also statisch sind. Das können z. B. große Video-Dateien, | ||
+ | |||
+ | Wear Leveling kann auch noch mit Spare-Seicher kombiniert werden. Das bedeutet, dass Flash-Speichermedien mit mehr tatsächlichem Speicherplatz hergestellt und ausgeliefert werden, als sie nominal besitzen. Der überzählige Speicher, sogenannter Spare-Speicher (Ersatz-Speicher), | ||
+ | |||
+ | Dieser besondere Umgang mit dem vorhandenen Speicherplatz führt dazu, dass Flash-Speichermedien fast bis zum Ende ihrer Lebensdauer ihre komplette Speichergröße zur Verfügung stellen können. Allerdings bedeutet dies auch, dass solche Speichermedien dazu neigen, innerhalb kürzester Zeit vollständig kaputtzugehen, | ||
+ | |||
+ | |||
+ | ---- | ||
+ | ===== Partitionen ===== | ||
+ | |||
+ | {{ :: | ||
+ | Betrachtet man die Speicherung von Daten auf einem Datenträger, | ||
+ | |||
+ | ==== MBR-Partitionierung ==== | ||
+ | {{ :: | ||
+ | Im ersten 512-Byte-Block eines partitionierten Datenträgers findet man in der Regel den Master Boot Record (MBR). Dabei handelt es sich um eine festgelegte Datenstruktur, | ||
+ | - 440 Byte für den Bootloader; Dabei handelt es sich um Byte-Code, der vom Prozessor gelesen und ausgeführt werden kann, damit von diesem Datenträger gebootet werden kann. | ||
+ | - 4 Byte für die Datenträgersignatur zur Identifizierung eines Datenträgers | ||
+ | - 2 Nullbytes, ungenutzt | ||
+ | - 64 Byte für die Partitionstabelle; | ||
+ | - 2 Byte MBR-Signatur, | ||
+ | |||
+ | ---- | ||
+ | === MBR-Partitionstabelle === | ||
+ | {{ :: | ||
+ | Die MBR-Partitionstabelle besteht aus insgesamt 64 Byte und ist in 4 Einträge zu je 16 Byte unterteilt. Somit können bei MBR-Partitionierung maximal 4 **primäre Partitionen** angelegt werden. Unter Zuhilfenahme einer sogenannten logischen Partition kann eine primäre Partition nochmal weiter unterteilt werden. Dazu wird am Beginn einer primären Partition einfach eine weitere, verschachtelte Partitionstabelle abgelegt um diese Partition nochmal zu unterteilen. | ||
+ | |||
+ | - 1 Byte zur Angabe ob die Partition bootbar ist (0x00 = nein, 0x80 = ja) | ||
+ | - 3 Byte für die veraltete CHS-Angabe des ersten Sektors | ||
+ | - 1 Byte für die Angabe des Partitionstyps (ob z. B. darin ein NTFS- oder FAT32-Dateisystem zu erwarten ist) | ||
+ | - 3 Byte für die veraltete CHS-Angabe des letzten Sektors | ||
+ | - 4 Byte für die Startadresse (LBA) der Partition | ||
+ | - 4 Byte für die Größe (in Blöcken) der Partition | ||
+ | |||
+ | Da man mit 4 Byte nur bis knapp 4,3 Milliarden zählen kann, ergibt sich bei einer Blockgröße von 512 Byte eine maximale Größe für eine Partition von 2 TiB. | ||
+ | |||
+ | Für eine genauere Beschreibung und eine Liste definierter Partitionstypen siehe auch den entsprechenden [[https:// | ||
+ | |||
+ | ==== GUID-Partitionierung ==== | ||
+ | {{ :: | ||
+ | Um den Einschränkungen der MBR-Partitionierung zu entgehen, wurde die **GUID Partition Table (GPT)** entwickelt. Datenträger mit GPT können nahezu beliebig viele Partitionen beinhalten, da die Anzahl der Partitionseinträge in einer GPT in deren Header variabel festgelegt werden kann. Außerdem stehen für die Größenangaben ausreichend viele Stellen zur Verfügung. | ||
+ | |||
+ | Die schematische Darstellung auf der rechten Seite zeigt den Aufbau eines Datenträgers mit GPT-Partitionierung. Dort ist folgendes zu sehen: | ||
+ | - im ersten Datenträgerblock (LBA 0) der sogenannte Protective MBR. Hierbei handelt es sich um eine MBR-ähnliche Struktur um abwärtskompatibel mit älteren Systemen zu bleiben, die die GPT nicht interpretieren können. Auf diese Weise wird verhindert, dass ein älteres Partitionierungs-Tool einen bereits GPT-partitionierten Datenträger mit MBR-Partitionierung überschreibt. | ||
+ | - im zweiten Datenträgerblock (LBA 1) der primäre GPT-Header. Darin wird beschrieben welcher Teil des Datenträgers für die Partitionierungstabelle belegt ist, wie groß diese ist und wo die Backup-Kopie der GPT zu finden ist. | ||
+ | - in den folgenden Datenträgerblöcken (bis LBA 33) insgesamt 128 mögliche Einträge für einzelne Partitionen | ||
+ | - ab LBA 34 (= ab 17 kiB) Platz für die eigentlichen Partitionen. | ||
+ | - in den letzten Blöcken (hier 33) des Datenträgers die Kopie der Partitionseinträge und des GPT-Headers als Backup | ||
+ | |||
+ | ---- | ||
+ | === Der GPT-Header === | ||
+ | {{ :: | ||
+ | Der GPT-Header beinhaltet unter anderem folgende Angaben (vgl. auch schematische Darstellung rechts) | ||
+ | * die LBA-Adresse wo sich dieser Header befindet | ||
+ | * die Anzahl, wie viele Partitionseinträge nach diesem Header folgen (z. B. 128 Stück) | ||
+ | * die Größe eines einzelnen Partitionseintrages (z. B. 128 Byte) | ||
+ | * Die Angabe der ersten und letzten LBA-Adresse, | ||
+ | * die LBA-Adresse, | ||
+ | |||
+ | ---- | ||
+ | === Ein GPT-Partitionseintrag === | ||
+ | {{ :: | ||
+ | Ein einzelner 128 Byte großer Eintrag für eine Partition folgt dem rechts abgebildeten schematischen Aufbau | ||
+ | - 16 Byte für die angabe des Partitionstyps | ||
+ | - 16 Byte für die eindeutige GUID der Partition, damit diese vom Betriebssystem wiedererkannt werden kann | ||
+ | - 8 Byte für die Startadresse der Partition | ||
+ | - 8 Byte für die Endadresse der Partition | ||
+ | - 8 Byte für Attributangaben zur Partition | ||
+ | - 72 Byte für den Namen der Partition | ||
+ | |||
+ | Ein Beispiel mit den ersten beiden Einträgen aus einer GPT: | ||
+ | {{ : |