FAT32 disk structuur © 2007 stam.blogs.com
Master Boot Record De Master Boot Record is vrijwel hetzelfde voor alle besturingssystemen. Het ligt binnen de eerste sector van de harddisk: Cylinder 0, Head 0, Sector 1. Het is de eerste code die de computer verwerkt tijdens het opstarten. Bovendien bevat de Master Boot Record de partitietabel. Als er iets mis gaat met deze 512 bytes code dan is de computer totaal onbruikbaar. De eerste sector is als volgt opgebouwd: Positie 000h Executable code (hier boot de computer): 446 bytes
Positie 1BEh 1e partitie entry: 16 bytes
Positie 1CEh 2e partitie entry: 16 bytes
Positie 1DEh 3e partitie entry: 16 bytes
Positie 1EEh 4e partitie entry: 16 bytes
Positie 1FEh Boot Record Signature: 2 bytes
Partitie entries Zoals uit afbeeldingen 2, 3 en 4 blijkt bestaat een partitie entry uit 16 bytes. Deze 16 bytes zijn als volgt onderverdeeld (wellicht ten overvloede, de partitie entries maken dus deel uit van de Master Boot Record en staan in de eerste sector): Positie 00h Huidige status van de partitie: 1 byte
Positie 01h Start van de partitie - head: 1 byte
Positie 02h Start van de partitie – Cylinders / Sectoren: 1 Word
Positie 04h Type partitie: 1 byte
Positie 05h Einde van de partitie – head: 1 byte
Positie 06h Einde van de partitie – Cylinders / Sectoren: 1 Word
Positie 08h Aantal sectoren tussen de MBR en de eerste sector in de partitie: 1 Double word
Positie 0Ch Aantal sectoren in de partitie: 1 Double word
FAT32 Boot sector Deze informatie staat in de eerste sector van iedere partitie (en maakt dus ook weer deel uit van de Master Boot Record): Positie 00h Jump code + NOP: 3 bytes
Positie 03h OEM naam: 8 bytes
Positie 0Bh Bytes per sector: 1 Word
Voorbeeld: Voorste en achterste bytes van plaats verwisselen, hetgeen wordt: 02 00 02 00h is hetzelfde als 512 decimaal, hetgeen correct is voor het aantal bytes per sector in dit geval
Positie 0Dh Sectoren per cluster: 1 byte
Voorbeeld: 20h is hetzelfde als 32 decimaal, hetgeen correct is voor het aantal sectoren per cluster in dit geval
Positie 0Eh Gereserveerde sectoren: 1 Word
Positie 10h Aantal kopieën van de FAT: 1 byte
Voorbeeld: 02h is hetzelfde als 2 decimaal, hetgeen correct is voor het aantal kopieën van de FAT in dit geval
Positie 11h Maximum root directory entries (niet beschikbaar in FAT32): 1 Word
Positie 13h Aantal sectoren in de partitie, kleiner dan 32MB (niet beschikbaar voor FAT32): 1 Word
Positie 15h Media Descriptor (F8h voor harddisks): 1 byte
Positie 16h Sectoren per FAT in oudere FAT systemen (niet beschikbaar voor FAT32): 1 Word
Positie 18h Sectoren per track: 1 Word
Voorbeeld: Voorste en achterste bytes van plaats verwisselen, hetgeen wordt: 00 3F 00 3Fh is hetzelfde als 63 decimaal, hetgeen correct is voor het aantal sectoren per track in dit geval
Positie 1Ah Aantal heads: 1 Word
Positie 1Ch Aantal hidden sectors in de partitie: 1 Double word
Positie 20h Aantal sectoren in de partitie: 1 Double word
Voorbeeld: 15 a3 44 03 Vanwege de wijze waarop de computer zijn berekeningen doet moeten we een verrekening maken tussen Big Endian en Little Endian. We moeten de onderlinge bytes en vervolgens ook nibbles van plaats wisselen, hetgeen wordt: 03 44 a3 15 Als je deze reeks omzet naar decimaal dan krijg je de volgende waarde te zien: 54.829.845 Ter controle: dit is ook de waarde die FTK Imager laat zien onder Drive Geometry
Positie 24h Aantal sectoren per FAT
Positie 28h Flags (bits 0-4 geven een actieve FAT kopie aan, bit 7 geeft aan of Fat mirroring is ingesteld of niet (leeg is ‘ingesteld’)): 1 Word
Positie 2Ah Versie van de FAT32 drive: 1 Word
Positie 2Ch Cluster nummer van het begin van de root directory: 1 Double word
Positie 30h Sector nummer van de File System Information Sector: 1 Word
Positie 32h Sector nummer van de Backup Boot sector: 1 Word
Positie 34h Gereserveerd: 12 bytes
Positie 40h Logische drive nummer van de partitie: 1 byte
Positie 41h Niet gebruikt: 1 byte
Positie 42h Extended signature (29h): 1 byte
Positie 43h Serienummer van de partitie; 1 Double word
Positie 47h Volumenaam van de partitie: 11 bytes
Positie 52h FAT naam (FAT32): 8 bytes
Positie 5Ah Executable code: 420 bytes
Positie 1FEh Boot record signature (55 AAh): 2 bytes
File System Information Sector Over het algemeen staat deze informatie in de tweede sector van de partitie Positie 00h (200h) Eerste signature (52 52 61 41h): 1 Double word
Positie 04h (204h) Onbekend, geen gegevens: 480 bytes
Positie 1E4h (3E4h) Signature van FSInfo sector (72 72 41 61h): 1 Double word
Positie 1E8h (3E8h) Aantal vrije clusters: 1 Double word
Voorbeeld: Voorste en achterste bytes en nibbles van plaats verwisselen, hetgeen wordt: 00 0C 17 23 02 00h is hetzelfde als 512 decimaal, hetgeen correct is voor het aantal bytes per sector in dit geval
Positie 1ECh (3ECh) Cluster nummer van het cluster dat het meest recent is gealloceerd: 1 Double word
Positie 1F0h (3F0h) Gereserveerd: 12 bytes
Positie 1FCh (3FCh) Onbekend, geen gegevens: 2 bytes
Positie 1FEh (3FEh) Boot Record Signature nummer (55 AAh): 2 bytes
Ter verduidelijking: Sommige menselijke talen worden van links naar rechts geschreven. Andere menselijke talen worden weer van rechts naar links geschreven. Hetzelfde kom je tegen in computertalen, en wel op de manier waarop nummers worden weggeschreven. Endianness is het attribuut van een systeem dat aangeeft of integers worden weergegeven van links naar rechts danwel van rechts naar links. Iedere keer dat een hardware of software architectuur wordt ontwikkeld moet hierin een keuze worden gemaakt. Aangezien er geen natuurwetten zijn die hierbij behulpzaam kunnen zijn is het geen eenvoudige keuze, waardoor verschillen ontstaan. Endianness kent twee varieteiten: big en little. Een big-endian representatie kent een multibyte integer waarbij de twee most significant bytes uiterst links staan; een nummer dat op deze wijze wordt gepresenteerd is voor Engels sprekende mensen eenvoudig te lezen. Een little-endian representatie plaatst echter de most significant byte uiterst rechts. Big endian betekent dat de most significant byte van elke multibyte data field is opgeslagen in het laagste geheugenadres. Little endian betekent dat de least significant byte van elke multibyte data field is opgeslagen in het laagste geheugenadres. Alle processoren moeten dusdanig worden ontwikkeld dat ze ofwel big endian ofwel little endian begrijpen. Intel's 80x86 processoren en hun clonen zijn little endian. Sun's SPARC, Motorola's 68K en de PowerPC families zijn big endian. De Java Virtual Machine is eveneens big endian. Sommige processoren hebben een bit in het register die aan de programmeur de keus laat tussen little en big endian. De termen little en big endian hebben hun oorsprong in Gulliver's reizen (1726). In 1981 werd de term "little end" uit het verhaal voor bovenstaand doel 'geadopteerd'. Helaas genieten beide implementaties evenveel voorkeur onder de programmeurs. We moeten dus rekenschap houden met het bestaan ervan. Wat is de least significant bit (lsb). Deze least significant bit is de bit in een binaire reeks die aangeeft of het een even danwel een oneven reeks is: 10010101 de bovenstaande binaire reeks is gelijk aan 149 decimaal. De meest rechtse bit (1) is de least significant bit, gewoonweg omdat deze bit de minste waarde vertegenwoordigt (hoe verder naar links, hoe groter de waarde van een bit). Deze bit wordt ook wel right-most bit genoemd. Least significant bits worden veelal gebruikt om berekeningen uit te voeren (hash, checksums etc.)
LSB (hoofdletters) kan ook staan voor "Least Significant Byte". De least significant byte heeft de positie met de minste waarde en staat ook het meest rechts in een reeks.