Partitioneren
Een schijf kan
worden ingedeeld in verschillende partities (of volumes), welke
benaderbaar zijn met een drive-letter, alsof het een aparte disk
is. Een besturingssysteem heeft een partitie nodig om deze te
kunnen formatteren. Bij dit formatteren wordt een filesystem
(bestandssysteem) op de schijf geplaatst. Een filesystem bepaalt
de wijze waarop bestanden op de schijf worden geplaatst, en hoe
wordt bijgehouden waar die bestanden staan. Ook bepaalt het
bestandssysteem hoe de bestanden mogen heten.
Vanuit
DOS wordt gepartitioneerd met het DOS-programma FDISK.EXE. Bij
XP wordt dat gedaan met Disk Management (Schijf Beheer) in
Computer Management (Computer Beheer), een onderdeel van de
Administrative Tools (Beheer tools) of met de command-line
utility Diskpart.exe. Het initiële partitioneren gebeurt
meestal tijdens de installatie van het OS (Operating System /
besturingssysteem).
Sommige OS-en
(besturingssystemen) kennen beperkingen in de maximale omvang
van een partitie welke voor een bepaald filesysteem gebruikt kan
worden. Het door het OS te gebruiken filesystem bepaalt dan ook
vaak de wijze van partitioneren.
Een andere
belangrijke factor is de clustergrootte. Deze is afhankelijk van
de partitiegrootte in combinatie met het te gebruiken filesystem.
Een cluster is een groepje sectoren welke door het filesystem
als kleinst benaderbare eenheid wordt beschouwd. Elke cluster
heeft per partitie een vaste grootte. Clustergroote varieert van
bijv. 0,5KB tot 64KB. Voor veel kleine files zijn kleine
clusters economischer, want een 1KB file op een disk met
64KB-volume, gebruikt toch een volledig cluster, waardoor dus
63KB ruimte niet benut kan worden. Voor veel grote files zijn
grote clusters gunstiger. Hierdoor zijn minder verwijzigen nodig
op de disk waar het bestand staat. Daardoor wordt een groot
bestand sneller en efficiënter opgeslagen en teruggelezen.
OS |
Maximum FAT |
Maximum FAT32 |
Maximum NTFS |
MS DOS |
2 GB |
n.v.t. |
n.v.t. |
MS Windows 95a |
2 GB |
n.v.t |
n.v.t. |
MS Windows 95 OSR2/98/ME |
2 GB |
127,5 GB |
n.v.t. |
MS Windows ME |
2 GB |
± 2 TB (theoretisch meer) |
n.v.t. |
MS Windows NT 4.0 |
4 GB |
n.v.t. |
|
MS Windows 2000 |
4 GB |
32 GB |
232 clusters - 1 cluster (*) |
MS Windows XP |
4 GB |
32 GB |
232 clusters - 1 cluster (*) |
(*) 232
is een implementatie waarde. Theoretisch kan dit 264
clusters - 1 cluster zijn. Clustergroottes kunnen variëren,
waardoor de maximale volumegrootte ook kan variëren.
Basic-
en Dynamic disks
Microsoft heeft
voor zijn laatste OS-en (vanaf Windows 2000) een nieuwe methode
van partitioneren geïntroduceerd. Disks welke op deze wijze
worden gepartitioneerd worden Dynamic Disks genoemd in
het OS. Een disk welke op de oude methode is gepartitioneerd
heet een Basic Disk. Een dynamic disk bevat
feitelijk één partitie, waarop volumes worden
aangemaakt. Elk volume ziet er uit als een basic partition.
Alleen het Systeemvolume en het Bootvolume (als ze
niet hetzelfde zijn) worden als aparte partities in de MBR
opgenomen.
Het systeemvolume
is de partitie waarmee het systeem (de computer) opstart. Het bootvolume
is de partitie met de software om het besturingssysteem op te
starten (standaard de partitie met de map \windows of \winnt ).
Dit is Microsoft terminologie en een beetje krom. Het systeem boot
immers van wat Microsoft de systeempartitie noemt en het
besturingssysteem staat op wat Microsoft de bootpartitie
noemt.
Dynamic Disks
hebben meer mogelijkheden op het gebied van partitioneren:
vergroten van volumes, disk-ruimte van een andere disk toevoegen
aan een bestaand volume, softwarematige RAID-volumes (RAID 0,
1 en 5, maar alleen onder de Server-software van Microsoft),
enz.. Om de extra functionaliteit op het gebied van
partities/volumes in Windows 2000, Windows XP en Windows Server
2003 te kunnen benutten, moet een basic disk geconverteerd
worden naar een dynamic disk.
Basic disks
kunnen worden geconverteerd naar Dynamic met behoud van data.
Andersom niet. Dat kan alleen door de disk volledig te wissen en
nieuwe (basic) partities aan te maken.
[Waarschuwing:
Tot hier bevat deze pagina welke over het algemeen voldoende is
voor de meeste gebruikers. Het volgende deel over partitioneren
gaat erg diep op de materie in en is daarom niet echt geschikt
leesvoer voor een beginner. Het kan zonder problemen worden
overgeslagen.]
MBR
(Master Boot Record)
Bij het
partitioneren wordt een partitietabel gemaakt. Oorspronkelijk
ontworpen voor de IBM-PC in het eind van de 80-er jaren wordt
een disk met zo'n standaard partitietabel een MBR-disk genoemd.
MBR staat voor Master Boot Record. In het MBR staat vanaf welke
partitie het OS moet starten (booten) Dat wordt de actieve
partitie genoemd en wordt gespecificeerd door een flag. De
partitietabel zelf is een eenvoudige tabel met 4 records. Elke
record specificeert waar een partitie start, eindigt en wat voor
soort partitie het is.
In een MBR
partitie tabel kunnen 3 soorten partities opgenomen worden.
Een primary
partition (primaire partitie), waarmee een computer kan
worden opgestart. Een primary partition krijgt direct een
drive-letter toegewezen.
Maximaal één extended
partition (uitgebreide partitie), waarmee een computer (in
principe) niet kan worden opgestart, maar welke gebruikt kan
worden om de schijf verder op te delen. Binnen een extended
partition kunnen logical drives (logische stations) worden
aangemaakt. Geïntroduceerd als EBR (Extended Boot
Record), een aanvulling op MBR om van de beperking van 4
partitions af te zijn). Hiermee wordt het mogelijk meer dan 4
partities (het maximum van de partitietabel) op een disk te
maken. Een extended partition krijgt dan ook geen drive-letter
toegewezen. Logical drives (bijgehouden in de EBR) krijgen wel
een drive-letter toegewezen.
De beperking dat
op een MBR-disk maar 4 partities kunnen worden gemaakt typeert
het eigenlijk als verouderd. Compatibiliteit zorgt er evenwel
voor dat deze techniek voorlopig niet zal verdwijnen. Er kleven
evenwel behoorlijk wat nadelen en eigenaardigheden aan.
Partitiebeheer is dan ook lastig. Er zijn evenwel goede tools
waarmee partities kunnen worden beheerd, zoals Partition Magic
van PowerQuest.
Wijzigingen in de
partitie tabel hebben vrijwel altijd een reboot nodig (vanaf
Windows 2000 niet meer bij gebruik van dynamic disks), maar er
kan meestal niet zo veel gewijzigd worden zonder verlies van
data.
Een MBR-disk
bevat aan het begin van de disk een sector (sector 1, track 0)
van 512 bytes met de naam Master Boot Record. Deze sector bevat
een kleine hoeveelheid uitvoerbare programmacode, genaamd Master
Boot Code (offset 000), MBR foutmeldingen (offset 008B), de
partitietabel (offset 01BE), de disk signature (offset 01FE) en
wordt afgesloten met een end-of-sector markering (2 bytes:
0x55AA).
Het EBR wordt
aangemaakt op de eerste sector van elke logical drive in de
extended partition.

Links een
voorbeeld van een harrdisk, gepartitioneerd in 4 partities. Drie
primaire partities en één extended (is ook het maximum).
Elke partitie
(volume) heeft in de eerste sector een Partition Boot Record (of
Volume Boot Sector). Deze bevat een Disk Parameter Block en
Volume Boot Code. Dit wordt aangemaakt bij het formatteren van
een partitie en is OS-specifiek.
[Afbeelding:
Microsoft]
Het starten van
een systeem verloopt in vier (versimpelde) stappen:
-
Het BIOS van
de PC start de Code in het Master Boot Record van de eerste
aanwezig disk in de PC.
-
De Master
Boot Code (op sector 1) bepaalt welke partitie de actieve
partitie is en en geeft de controle over aan de code in de
eerste sector van die partitie. Daarop staat het Partition
Boot Record (PBR).
-
De code in
het PBR is specifiek voor een OS en zoekt waar de
bootbestanden van het OS staan. Het PBR bevat een parameter
table, waarin de layout en het filesysteem van de partitie
staan, waardoor het PBR in staat is de boot-bestanden te
vinden. (Hierin staat o.a. het aantal sectoren tussen het
begin van de disk (LBA 0) en het begin van de partitie)
-
De
bootbestanden van het OS op de systeempartitie nemen de
controle over en starten het OS (Bij Windows NT versies, dus
ook XP, zorgt NTLDR (NT-loader) daar voor.
[Opmerking:
De Microsoft MBR-code kijkt alleen of een primaire partitie
in het MBR actief is, en zal daar de controle aan geven. Omdat
alleen primaire partities actief gemaakt kunnen worden met de
MS-software, lijkt het daardoor of een computer niet van een
logisch drive (in het EBR) kan worden geboot. Dat kan wel als de
redelijk simplistische MBR-code wordt vervangen door wat
slimmere software. Boot-manager-software van derden (niet
Microsoft) is daar vaak wel toe in staat.]
Partitie
tabel (Basic disk)
De partitie tabel
is maar klein en heeft altijd een vaste grootte van 64 bytes. Er
kunnen dus 4 records van 16 bytes in, één voor elke partitie.
Vanaf het begin
van de sector (= offset) begint elke partitie record op een
vaste positie:
Partitie 1 op 0x01BE
Partitie 2 op 0x01CE
Partitie 3 op 0x01DE
Partitie 4 op
0x01FE
Is een partitie
niet aanwezig dan is het record gevuld met 0-en. De waardes zijn
hexadecimale
waarden.
x: 0 1 2 3 4 5 6 7 - 8 9 A B C D E F
000001Bx: 80 01 ..
000001Cx: 01 00 07 FE BF 09 3F 00 - 00 00 4B F5 7F 00 00 00 ......?...K.....
000001Dx: 81 0A 07 FE FF FF 8A F5 - 7F 00 3D 26 9C 00 00 00 ..........=&....
000001Ex: C1 FF 05 FE FF FF C7 1B - 1C 01 D6 96 92 00 00 00 ................
000001Fx: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 55 AA ..............U.
|
Hierboven een
partitietabel met 3 partities. De eerste is de actieve partitie.
Herkenbaar aan het feit dat deze met 80
begint. 00 op die plaats geeft een niet bootable partitie aan.
55
AA geeft het einde van de sector aan.
Eerste
kop/head (H)
x: 0 1 2 3 4 5 6 7 - 8 9 A B C D E F
000001Bx: 80 01 ..
000001Cx: 01 00 07 FE BF 09 3F 00 - 00 00 4B F5 7F 00 ......?...K...
|
Geeft aan met
welke leeskop moet worden begonnen.
Eerste sector
(S)
x: 0 1 2 3 4 5 6 7 - 8 9 A B C D E F
000001Bx: 80 01 ..
000001Cx: 01 00 07 FE BF 09 3F 00 - 00 00 4B F5 7F 00 ......?...K...
|
Alleen de eerste
6 bits worden gebruikt. De 2 hoogste bits worden gebruikt voor
het volgende veld, waarmee de eerste cilinder wordt aangegeven.
Omdat de twee hoogste bits worden gebruikt voor de eerste
cilinder, geeft de waarde die hier staat niet altijd de eerste
sector aan. Daarvoor moeten de hoogste bits er eerst afgehaald
worden. Het maximum wat kan worden aangegeven met 6 bits is 64.
Omdat de eerste sector sector 1 is en niet 0, zijn alleen
sectoren 1 t/m 63 benaderbaar.
Eerste
cylinder (C)
x: 0 1 2 3 4 5 6 7 - 8 9 A B C D E F
000001Bx: 80 01 ..
000001Cx: 01 00 07 FE BF 09 3F 00 - 00 00 4B F5 7F 00 ......?...K...
|
Samen met de 2
bits van het vorige veld zijn dus 10 bits beschikbaar voor het
aangeven van de eerste cilinder. Hierdoor is het maximaal aantal
benaderbare cilinder 1024 (0 t/m 1023)
Is de waarde
groter dan één byte, dan wordt de waarde in het z.g. little
andian formaat (of omgekeerde-byte volgorde) weergegeven.
Dat is een methode waarbij het minst significante bit links in
de hexadecimale weergave komt te staan. (zie het veld voor
de relatieve sector)
System
ID
x: 0 1 2 3 4 5 6 7 - 8 9 A B C D E F
000001Bx: 80 01 ..
000001Cx: 01 00 07 FE BF 09 3F 00 - 00 00 4B F5 7F 00 ......?...K...
|
07
geeft de System ID, daarmee wordt gespecificeerd wat voor soort
partitie het is.
System ID |
Soort partitie
|
0x01 |
FAT12 primaire partitie of
logisch station (minder dan 32.680 sectors in het
volume) |
0x04 |
FAT16 partitie of logisch
station (32,680–65,535 sectors of 16 MB–33 MB) |
0x05 |
Uitgebreide partitie |
0x06 |
BIGDOS FAT16 partitie of
logisch station (33 MB–4 GB) |
0x07 |
Installeerbaar File System
(NTFS partitie of logisch station) |
0x0B |
FAT32 partitie of logisch
station |
0x0C |
FAT32 partitie of logisch
station welke BIOS INT 13h extensies gebruikt |
0x0E |
BIGDOS FAT16 partitie of
logisch station welke BIOS INT 13h extensies gebruikt |
0x0F |
Uitgebreide partitie welke
BIOS INT 13h extensies gebruikt |
0x12 |
EISA partitie of OEM
partitie |
0x42 |
Dynamisch volume |
0x84 |
Power management
hibernation partitie |
0x86 |
Multidisk FAT16 volume
gemaakt met Windows NT 4.0 |
0x87 |
Multidisk NTFS volume
gemaakt met Windows NT 4.0 |
0xA0 |
Laptop hibernation partitie |
0xDE |
Dell OEM partitie |
0xFE |
IBM OEM partitie |
0xEE |
GPT partitie |
0xEF |
EFI Systeem partitie op een
MBR disk |
[Windows
XP ondersteund geen multidisk partities gemaakt door NT
4.0 (ID 0x86 en 0x87).]
Laatste kop
x: 0 1 2 3 4 5 6 7 - 8 9 A B C D E F
000001Bx: 80 01 ..
000001Cx: 01 00 07 FE BF 09 3F 00 - 00 00 4B F5 7F 00 ......?...K...
|
Geeft aan met
welke leeskop moet worden geëindigd.
Laatste sector
x: 0 1 2 3 4 5 6 7 - 8 9 A B C D E F
000001Bx: 80 01 ..
000001Cx: 01 00 07 FE BF 09 3F 00 - 00 00 4B F5 7F 00 ......?...K...
|
Ook hierbij
worden alleen de eerste 6 bits gebruikt (de rechter, minst
significante, bits). De 2 hoogste bits worden voor de laatste
cilinder (volgende veld) gebruikt.
Laatste
cylinder
x 0 1 2 3 4 5 6 7 - 8 9 A B C D E F
000001Bx: 80 01 ..
000001Cx: 01 00 07 FE BF 09 3F 00 - 00 00 4B F5 7F 00 ......?...K...
|
Samen met de 2
bits van het vorige veld zijn ook hierbij 10 bits beschikbaar
voor het aangeven van de eerste cilinder. Hierdoor is het
maximaal aantal benaderbare cilinder 1024 (0 t/m 1023)
Relatieve
sector
x: 0 1 2 3 4 5 6 7 - 8 9 A B C D E F
000001Bx: 80 01 ..
000001Cx: 01 00 07 FE BF 09 3F 00 - 00 00 4B F5 7F 00 ......?...K...
|
Geeft het vanaf
het begin van de disk de sector aan waar het volume begint.
Is de waarde
groter dan één byte, dan wordt de waarde in het little
endian formaat (of omgekeerde-byte volgorde) weergegeven.
Dat is een methode waarbij het minst significante bit links in
de hexadecimale weergave komt te staan. De hexadecimale waarde
0x3F000000 is de little endian weergave voor 0x0000003F
(decimaal 63).
Totaal aantal
sectoren
x: 0 1 2 3 4 5 6 7 - 8 9 A B C D E F
000001Bx: 80 01 ..
000001Cx: 01 00 07 FE BF 09 3F 00 - 00 00 4B F5 7F 00 ......?...K...
|
Dit geeft het
aantal sectoren in een volume aan.
Het
CHS-probleem. (BIOS INT 13h Extensions)
De velden voor de
eerste en laatste cilinders, koppen (heads) en sectoren worden
de CHS-velden genoemd. De beperkte afmetingen van de velden
zorgt voor een maximum van 1024 cylinders, waarop maximaal 63
sectoren kunnen worden gespecificeerd en 256 koppen (heads).
Hierdoor is de maximale grootte van een disk welke in een
partitie tabel kan worden benaderd: #cilinders x #koppen x
#sectoren/track x sectorgrootte
Ingevuld met
maximale waarden komt dat op 1024 x 256 x 63 x 512 byte
(standaard sectorgrootte)
Dat is
8.455.716.864 bytes ofwel 7.8 GB.
Een BIOS en een
OS welke BIOS INT 13h Extensions ondersteunen, kunnen de eerste
en laatste CHS-velden negeren en de disk "logisch"
anders indelen. Alleen de relatieve sector en het totaal aantal
sectoren worden dan gebruikt. DOS, WfW (Windows for Workgroups)
en oudere Windows-versies ondersteunen dit niet. Windows
95/98/ME wel, maar gebruiken de velden wel voor compatibiliteit
met DOS en WfW. Windows 2000 en hoger negeert die CHS-velden.
Worden de 4-byte
velden voor relatieve sector en totaal aantal sectoren gebruikt,
dan kunnen 8 bits meer gebruikt worden voor het totaal aantal
sectoren (wordt dan max. 232 sectoren). Daardoor kunnen
partities gemaakt worden tot 2TB (2.199.023.255.522 bytes).
LBA
(Logical Block Addressing)
Oude BIOS-en
hebben in het verleden voor verschillende beperkingen gezorgd
met IDE disks. De belangrijkste was de beperking bij disks met
meer dan 504 MB uit 1994. Het BIOS is als eerste
verantwoordelijk voor het lezen van de geometrie (indeling in
cilinders, tracks en koppen) van de disk. Deze informatie wordt
opgeslagen in het CMOS van het systeem. Bij de oude harddisks
werd hiervoor de echte fysieke geometrie gebruikt. Tegenwoordig
wordt hiervoor een logische geometrie gebruikt, waardoor die
oude problematiek niet meer voorkomt.
Uit voorgaand
verhaal over de partitie tabel is (hoop ik) duidelijk geworden
dat voor de opslag van informatie over cilinders, heads en
sectoren een bepaalde hoeveelheid bits beschikbaar zijn voor de
opslag van waarden. Deze "ruimte" zorgt voor
beperkingen in de waarden. Door slechte planning en gebrek aan
overleg hebben software- en hardware-producenten verschillende
ruimten gespecificeerd, waardoor de beperkingen in mogelijke
waarden voor C-H-S nog verder toenamen. De IDE/ATA specificaties
hebben namelijk andere "ruimten" gespecificeerd voor
CHS dan het BIOS.
|
Cilinders |
Heads |
Sectoren |
Totaal
voor CHS |
|
Bits |
Max |
Bits |
Max |
Bits |
Max |
Bits |
Max (512 bytes/sector) |
BIOS INT13 |
10 |
1024 |
8 |
256 |
6 |
63 |
24 |
7.88 GB |
IDE/ATA |
16 |
65.536 |
4 |
16 |
8 |
256 |
28 |
128 GB |
Effectief
(de minste van de 2) |
10 |
1024 |
4 |
16 |
6 |
63 |
20 |
504 MB |
Het niet
overeenkomen van de specificaties, zorgt er voor dat de minste
van de twee specificaties gebruikt kan worden, wat een enorme
beperking oplevert. Bij de berekening is C x H x S x 512 bytes
gebruikt, met de maximale waarden voor C, H en S.
Op verschillende
wijzen is gepoogd deze beperking weg te werken. O.a met Extended
CHS adressering (Large Mode), waarbij één of meer
vertaalslagen worden gemaakt in de CHS-aantallen. Hiervoor
worden evenwel nog steeds de CHS waarden gebruikt.
ECHS (of Large
Mode) gebruikt bit shift translation. Dat werkt volgens het
principe dat het BIOS veel meer ruimte heeft bij het aantal
heads dan wat IDE kan specificeren, terwijl dit voor het aantal
cilinders precies andersom is. Het aantal cilinders wordt daarom
gedeeld door een heel getal, zodat het aantal cilinders uitkomt
op een waarde welke in de ruimte van het BIOS past, en het
aantal heads wordt dan vermenigvuldigd met dit zelfde getal.
|
Cilinders |
Heads |
Sectoren |
Totaal voor CHS |
|
Max |
Max |
Max |
Max |
IDE/ATA limiet |
65.536 |
16 |
256 |
128 GB |
Een disk voorbeeld |
6136 |
16 |
63 |
2.95 GB |
Translation factor |
deel door
8 |
maal 8 |
|
|
Vertaalde disk |
767 |
128 |
|
2.95 Gb |
BIOS INT13 limiet |
1024 |
256 |
63 |
7.88 GB |
Het vertaalde
resultaat heeft daardoor waarden, welke binnen de grenzen van
het BIOS uitkomen.
Uitgaande van de
BIOS beperkingen zou maximaal als translation factor 16 gebruikt
kunnen worden.
|
Cilinders |
Heads |
Sectoren |
Totaal voor CHS |
BIOS INT13 limiet |
1024 |
256 |
63 |
7.88 GB |
Translation factor |
maal 16 |
deel door
16 |
|
|
IDE/ATA practische limiet |
16383 |
16 |
63 |
7.88 GB |
Hierdoor komen we
weer uit op een maximale grootte voor IDE-disks van ± 8 GB.
Grotere disks
kunnen dus eenvoudigweg niet benaderd worden middels hun fysieke
parameters, ongeacht de trucks welke gebruikt worden. De moderne
drives met meer dan 16383 cilinders rapporteren daarom allemaal
16838 cilinders aan de BIOS, maar ze worden benaderd op een
andere manier via LBA en de BIOS INT13 Extensions.
Bij Logical
Block Addressing wordt een totaal andere methode gebruikt
voor het adresseren van de sectoren. In plaatst van een sector
te adresseren met zijn CHS-waarde, krijgt elke sector een uniek
nummer. Zowel de disk, het BIOS als het OS moet dit
ondersteunen. Maar dat lost evenwel de beperkingen niet op, want
als het maximum voor het aantal cilinders 1024 (of vertaald
16383) is, dan blijft dat zo bij een logische omzetting naar
unieke sectornummers. LBA is alleen maar een andere wijze van
adresseren van dezelfde geometrie.
M.a.w er moet ook
nog een vertaalslag gemaakt worden in de CHS-waarden. LBA-mode
doet dat dan ook. Tegenwoordig vrijwel standaard door de
beperkingen van de BIOS INT13 beperking te omzeilen met de BIOS
INT13 Extensions. Verder is in de meeste grote harddisk ook al
een vertaalslag ingebouwd.
De belangrijkste
wijziging zit in de adresserings-ruimte voor de sectoren. In
plaatst van de CHS-ruimte (10+8+6=24bits) te gebruiken, worden
64 bits gebruikt, waar de relatieve sectoren en totaal aantal
sectoren mee werden aangegeven. Potentieel is dat 264
x 512 bytes = 9.444.732.965.739.290.427.392 bytes. Daarmee
kunnen we even voort voor wat de maximale capaciteit van een
disk betreft. De 64 bits worden nu evenwel nog voor 2 waarden
gebruikt, waardoor 32 bits voor één waarde beschikbaar is.
Daarmee kom je nog op een aardige maximum capaciteit van 232 x
512 bytes = 2.199.023.255.552 bytes, ofwel 2 TB.
Voor alle
duidelijkheid moet evenwel nog even benadrukt worden dat LBA
zelf dus de beperkingen niet oplost.
Dat doen de BIOS
INT13 Extensions.
Direct Disk
Access
Een andere manier
om van de BIOS-beperkingen af te komen, zou zijn de BIOS te
omzeilen door rechtstreeks vanuit het OS de disk te benaderen
voor lezen en schrijven. De BIOS wordt gewoonlijk aangesproken
voor het benaderen van de harddisk. Een extra schakel is evenwel
een vertragende factor. Daarom hebben de nieuwere Windows
versies allemaal de mogelijkheid om via eigen 32-bit protected
mode disk access routines de disk direct te benaderen. Dit lost
evenwel de beperkingen van BIOS-en niet op, want i.v.m.
compatibiliteit met oudere OS-en, applicaties moet de BIOS nog
steeds op de oude manier gebruikt kunnen worden.
EBR:
Extended Boot Record
Een EBR bestaat
uit een een uitgebreide partitie tabel (Extended Partition
Table) en een einde-sector-markering (signature word). Elk
logisch station heeft een EBR. In de uitgebreide partitie bevat
de eerste sector

het EBR voor het
eerste logische station.
Het eerste record
van een EPT wijst naar de eigen boot sector van het logische
station (meestal te vinden op relatieve sector 32 of 63).
Het tweede record
wijst naar het eventueel aanwezige EBR van het volgende logische
station. Is die er niet, dan is dat record gevuld met 0-en.
Het derde en
vierde record worden niet gebruikt.
Op het tweede
logische station is weer een EBR aanwezig, waar de records op
identiek wijze worden gebruikt.
De afbeelding
hiernaast geeft dus een extended partition weer met drie
logische stations.
De indeling van
de records (de velden) worden op identieke wijze als bij het MBR
gebruikt.
Het MBR en de EBR
zijn kwetsbaar. Gaat deze informatie verloren, dan is de disk
niet meer benaderbaar. Het is daarom ook doelwit nummer 1 voor
virussen. Maak daarom regelmatig backups en zorg voor goede
actuele antivirussoftware. De bescherming welke een BIOS soms
biedt tegen het wijzigen van de bootsectors is niet afdoende,
omdat er ook andere manieren zijn om de disk te beschrijven dan
via de BIOS.
Partitie
tabel (Dynamic disk)
x: 0 1 2 3 4 5 6 7 - 8 9 A B C D E F
000001Bx: 80 01 .....,Dc!.!.....
000001Cx: 01 00 42 FE 7F 04 3F 00 - 00 00 86 FA 3F 00 00 00 ..B...?.....?...
000001Dx: 41 05 42 FE FF 02 C5 FA - 3F 00 7E 04 7D 00 00 00 A.B.....?.~.}...
000001Ex: C1 03 42 FE FF FF 43 FF - BC 00 58 53 54 00 00 00 ..B...C...XST...
000001Fx: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 55 AA ..............U.
|
Deze komt
grotendeels overeen met een Master Partition Table van een Basic
disk. Er zijn evenwel geen EBR's. Er wordt een aparte volume
opgenomen voor het systeem volume, één voor het eventuele boot
volume als dat niet het systeem volume is, en één voor alle
overige volumes. (Partities worden op een Dynamic disk volumes
genoemd). Bovenstaand voorbeeld toont een systeemvolume, een
bootvolume en een data-container volume, waarin
verschillende data-volumes kunnen worden opgenomen. Alle volumes
worden geïdentificeerd met SystemID 42. Ook hier wordt de
actieve bootable partitie aangegeven met 80
als eerste byte. 55AA sluit de
tabel weer af.
GPT
(GUID Partition Table)
Een samenwerking
tussen Microsoft en Intel heeft de Extensible
Firmware Interface (EFI) geïntroduceerd. Hierin wordt een
GUID Partition Table (GPT) beschreven. De 64-bit edities van
Windows booten (starten) een Itanium-systeem alleen nog maar op
vanaf een GPT-disk, maar ook Windows XP ondersteunt het gebruik
van GPT-disks. Echter alleen de 64-bit versie van XP kan van een
GPT-disk booten (niet meer van een MBR-disk). De 32-bit versie
heeft een MBR-disk nodig en herkent de GPT-disk niet.
GPT
vult de oude MBR partitie methode aan door zeer grote disks te
ondersteunen met (theoretisch) een onbeperkt aantal partities
(zonder de logische volumes, die zijn geïntroduceerd om de
beperkingen van het MBR op te lossen). GPT heeft een primaire en
een backup partitietabel voor redundantie, en gebruikt een CRC32
veld voor het verbeteren van de integriteit.
Verder heeft GPT
een versienummer en velden voor groottes voor toekomstige
uitbreidingen. Elke partitie heeft een GUID (Globally Unique
IDentifier), het type inhoud wordt gespecificeerd en een Unicode
naam van 36 tekens kan worden gespecificeerd.
Een GPT-disk is
zelf-identificerend; alle informatie over de partities staat dus
op de disk.
Een GPT-disk
heeft een "Protective MBR", welke begint op sector 0
en vooraf gaat aan de GPT. In de Protective MBR staat één
(0xEE) partitie welke de hele disk omvat. (Tenzij de disk groter
is dan het maximum wat door de MBR wordt ondersteund). Dit is
bedoeld voor oudere software (FDISK of de NT Disk Administrator)
welke de partitietabel benadert en kan bewerken. Deze herkent de
disk als "onbekende partities" i.p.v.
"ongepartitioneerd".
De
EFI-implementatie in XP kan verschillende bijzondere partities
bevatten. ESP, OEM-specific en MSR. Dat is nodig omdat er geen
verborgen sectoren, zoals op een MBR-disk, mogelijk zijn. Op een
MBR-disk werd daar door sommige computerleveranciers gebruik van
gemaakt voor diverse toepassingen. (B.v. Compac gebruikte een
verborgen partitie met een kopie van de initiële installatie
voor systeemherstel.)
De adressering
vindt plaats op basis van LBA,
i.p.v. met sectoren.
Protective
MBR
LBA 0 (de eerste
sector) wordt gebruikt voor compatibility met oudere systemen,
zodat de disk wordt herkend als gepartitioneerd, i.p.v. leeg of
corrupt. In principe wordt hier een normale MBR voor gemaakt,
welke de disk beschrijft als gepartitioneerd met één partitie
met identificatiecode 0xEE.
x: 0 1 2 3 4 5 6 7 - 8 9 A B C D E F
000001Bx: 00 00 00 00 00 00 00 00 - 04 06 04 06 00 00 00 00 ................
000001Cx: 02 00 EE FF FF FF 01 00 - 00 00 FF FF FF FF 00 00 ................
000001Dx: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
000001Ex: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
000001Fx: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 55 AA ..............U.
|
Byte
offset
|
omvang
(bytes)
|
Uitleg
|
0x01BE
|
1
|
Boot
indicator. Staat op 00 om aante geven dat er niet van
geboot kan worden.
|
0x01BF
|
1
|
Eerste
kop (head). Komt overeen met het eerste LBA
|
0x01BF
|
1
|
Eerste
sector. Komt overeen met het eerste LBA
|
0x01BF
|
1
|
Eerste
cilinder. Komt overeen met het eerste LBA
|
0x01BF
|
1
|
System
ID staat op 0xEE om te
specificeren dat het een GPT-disk is. Vanaf Windows 2000
SP1 wordt een dergelijke partitie beschermd en kan niet
worden gewist.
|
0x01BF
|
1
|
Laatste
kop. Komt overeen met het laatste LBA op de disk. Staat
op 0xFF als de waarde niet in één byte past.
|
0x01BF
|
1
|
Laatste
sector. omt overeen met het laatste LBA op de disk.
Staat op 0xFF als de waarde niet in één byte past.
|
0x01BF
|
1
|
Laatste
cilinder. omt overeen met het laatste LBA op de disk.
Staat op 0xFF als de waarde niet in één byte past.
|
0x01BF
|
4
|
Eerste
LBA. Staat altijd op 0x01000000 (Little endian notatie,
dus eigenlijk 0x00000001)
|
0x01BF
|
4
|
Aantal
LBA's. MOet op 0xFFFFFFFF gezet worden als het aantal
hier niet in past.
|
De
primaire GPT Header
Deze staat op LBA
1, direct na de Protective MBR. Tevens wordt een kopie hiervan
op de laatste sector van de disk geplaatst. De juistheid van de
tabel wordt gewaarborgd met een CRC32 checksum (Cyclical
Redundancy Check van 32 bits). Dat is een berekende waarde op
basis van de inhoud van de tabel. Wordt de tabel om wat voor
reden dan ook gewijzigd, dan klopt die CRC32 niet meer en kan de
backup eventueel terug gezet worden. Disktools waarmee de GPT
header kunnen worden gewijzigd moeten dus in staat zijn om een
nieuwe CRC32 checksum uit te rekenen en deze ook te wijzigen in
de header.
x: 0 1 2 3 4 5 6 7 - 8 9 A B C D E F
0000000x: 45 46 49 20 50 41 52 54 - 00 00 01 00 5C 00 00 00 EFI PART....\...
0000001x: 27 6D 9F C9 00 00 00 00 - 01 00 00 00 00 00 00 00 'm..............
0000002x: 37 C8 11 01 00 00 00 00 - 22 00 00 00 00 00 00 00 7....... ".......
0000003x: 17 C8 11 01 00 00 00 00 - 00 A2 DA 98 9F 79 C0 01 .............y..
0000004x: A1 F4 04 62 2F D5 EC 6D - 02 00 00 00 00 00 00 00 ...b/..m........
0000005x: 80 00 00 00 80 00 00 00 - 27 C3 F3 85 00 00 00 00 ........'.......
0000006x: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
|
Byte
Offset |
omvang
(bytes)
|
Uitleg
|
0x00 |
8 |
Signature.
Wordt gebruikt om alle EFI-compatible GPT headers te
identificeren. Moet altijd 0x4546492050415254 zijn. (=
"EFI PART")
|
0x08 |
4 |
Het
revisienummer van de EFI specificatie waar deze GPT
header bij hoort. Voor versie 1.0 is de waarde
0x00000100.
|
0x0C |
4 |
De
omvang van de GPT header. Dat is altijd 0x5C000000 ofwel
92 bytes. Het restant van LBA 1 is gereserveerd.
|
0x10 |
4 |
CRC32
Checksum. Voor de controle op de integriteit van de GPT
header.
|
0x14 |
4 |
Gereserveerd.
Moet 0 zijn
|
0x18 |
8 |
Het
LBA met de primaire GPT header. Is altijd gelijk aan LBA 1.
|
0x20 |
8 |
Het
LBA adres van de backup GPT header. Dit is altijd gelijk
aan het laatste LBA op de disk.
|
0x28 |
8 |
Het
eerst bruikbare LBA voor een GUID partitie ingang. De
eerste partitie begint daar dus. In Windows XP
64-Bit Edition is dit altijd LBA 34.
|
0x30 |
8 |
Het
laatst bruikbare LBA voor een GUID partitie tabelingang.
|
0x38 |
16 |
Disk
GUID. Een unieke identificatie voor de disk.
|
0x48 |
8 |
Het
eerste LBA voor de array (reeks) GUID partities. Is
altijd LBA 2.
|
0x50 |
4 |
Het
maximale aantal GUID partitie-ingangen in de array. In
Windows XP 64-Bit Edition is dit 128.
|
0x54 |
4 |
De
grootte in bytes van elke ingang in de GUID partitie
array. Elke ingang in de array is 128 bytes.
|
0x58 |
4 |
Partition
Entry Array CRC32. Dit is een voor integriteit controle
van de GUID partitie array.
|
0x5C |
420 |
Gereserveerd.
Moet 0 zijn.
|
De
GUID partition Entry Array
Voor de partities
wordt een array (reeks) gebruikt. Elke ingang in die array is
een partitie. Voor de array worden LBA's 3 t/m 33 gebruikt. Ook
van de array wordt een backup gemaakt aan het eind van de disk.
Deze backup start na de laatst bruikbare LBA voor
een GUID partitie tabelingang (een veld in de header), en
eindigt vóór de backup van de header.
Net als bij MBR
disks wordt elke entries in de array geïdentificeerd met een
code om het soort partitie aan te geven. Bij GPT is dat een
GUID.
Partitie
soort |
GUID
Value |
Ongebruikt
ingang |
0x00000000000000000000000000000000 |
EFI
Systeem partitie (ESP) |
0x28732AC11FF8D211BA4B00A0C93EC93B |
Microsoft
Reserved partition (MSR) |
0x16E3C9E35C0BB84D817DF92DF00215AE |
Primaire
partitie op een basic disk |
0xA2A0D0EBE5B9334487C068B6B72699C7 |
LDM
Metadata partitie op een dynamic disk |
0xAAC808588F7EE04285D2E1E90434CFB3 |
LDM
Data partitie op een dynamic disk |
0xA0609BAF3114624FBC683311714A69AD |
Een voorbeeld in
de vorm van gedeeltelijke hex-dump van een Basic GPT disk met
drie partities: De ESP, de MSR en een primaire partitie.
x:
0 1 2 3 4 5 6
7 - 8 9 A B C D
E F
0000000x:
28 73 2A C1 1F
F8 D2 11 - BA 4B 00 A0 C9 3E C9 3B
(s*......K...>.;
0000001x: C0 94 77 FC 43 86 C0 01 - 92 E0 3C 77 2E
43 AC 40 ..w.C.....<w.C.@
0000002x: 3F 00 00 00 00 00 00 00 - CC 2F 03 00 00 00 00
00 ?......../......
0000003x: 00 00 00 00 00 00 00 00 - 45 00 46 00 49 00 20
00 ........E.F.I. .
0000004x: 73 00 79 00 73 00 74 00 - 65 00 6D 00 20 00 70
00 s.y.s.t.e.m. .p.
0000005x: 61 00 72 00 74 00 69 00 - 74 00 69 00 6F 00 6E
00 a.r.t.i.t.i.o.n.
0000006x: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00
00 ................
0000007x: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00
00 ................
0000008x: 16
E3 C9 E3 5C 0B B8 4D - 81 7D F9 2D F0 02 15 AE
....\..M.}.-....
0000009x: 80 BC 80 FC 43 86 C0 01 - 50 7B 9E 5F 80 78 F5
31 ....C...P{._.x.1
000000Ax: CD 2F 03 00 00 00 00 00 - D0 2A 04 00 00 00 00
00 ./.......*......
000000Bx: 00 00 00 00 00 00 00 00 - 4D 00 69 00 63 00 72
00 ........M.i.c.r.
000000Cx: 6F 00 73 00 6F 00 66 00 - 74 00 20 00 72 00 65
00 o.s.o.f.t. .r.e.
000000Dx: 73 00 65 00 72 00 76 00 - 65 00 64 00 20 00 70
00 s.e.r.v.e.d. .p.
000000Ex: 61 00 72 00 74 00 69 00 - 74 00 69 00 6F 00 6E
00 a.r.t.i.t.i.o.n.
000000Fx: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00
00 ................
0000010x: A2 A0
D0 EB E5 B9 33 44 - 87 C0 68 B6 B7 26 99 C7
......3D..h..&..
0000011x: C0 1B
0B 00 44 86 C0 01 - F1 B3 12 71 4F 75 88 21
....D......qOu.!
0000012x: D1 2A
04 00 00 00 00 00 - 4E
2F 81 00 00 00 00 00 .*......N/......
0000013x: 00 00
00 00 00 00 00 00 - 42
00 61 00 73 00 69 00 ........B.a.s.i.
0000014x: 63 00
20 00 64 00 61 00 - 74 00 61 00 20 00 70 00
c. .d.a.t.a. .p.
0000015x: 61 00
72 00 74 00 69 00 - 74 00 69 00 6F 00 6E 00
a.r.t.i.t.i.o.n.
0000016x: 00 00
00 00 00 00 00 00 - 00 00 00 00 00 00 00 00
................
0000017x: 00 00
00 00 00 00 00 00 - 00 00 00 00 00 00 00 00
................
|
Elke ingang in de
array heeft de volgende indeling (de derde partitie wordt als
voorbeeld genomen)
Byte
Offset |
omvang
(bytes)
|
Uitleg
|
0x00 |
16 |
Partition Type
GUID. Identifeert het type partitie volgens voorgaande
tabel. |
0x10 |
16 |
Unieke
Partitie GUID. Elke partitie krijgt een unieke
identificatie. |
0x20 |
8 |
De eerste LBA
van deze partitie. |
0x28 |
8 |
De laatste LBA
van deze partitie. |
0x30 |
8 |
Attribuut
Bits. Deze beschrijven hoe de partitie wordt gebruikt
Windows XP
64-Bit Edition gebruikt dit attribuut als volgt:
bitnr
|
Uitleg
|
0 |
Specificeert of een
partitie vereist is om het platform te laten
functioneren |
48-63 |
Gereserveerd door
Microsoft voor de ESP, MSR, Basic Primairy, LDM
Metadata en LDM Data partities |
|
0x38 |
72 |
Een Unicode
string van 36 tekens voor de naam van de partitie. |
De bootsector
voor een partitie is niet anders bij een GPT-disk als bij een
MBR-disk. Deze is OS-afhankelijk en wordt bij het formatteren
van een partitie aangemaakt.
ESP
(EFI System Partition)
Microsoft OS-en
gebruiken vanaf XP een EFI System Partition (ESP). Deze partitie
wordt gebruikt voor het opstarten van het OS en bevat o.a.
NTLDR, HAL, BOOT.INI, NTDETECT.COM.
De partitie GUID
definieert de ESP.
DEFINE_GUID (PARTITION_SYSTEM_GUID, 0xC12A7328L,
0xF81F,0x11D2, 0xBA, 0x4B, 0x00, 0xA0, 0xC9, 0x3E, 0xC9, 0x3B)
|
Zowel GPT-disks
als MBR-disk kunnen een ESP hebben. EFI specificeert het booten
zowel van een GPT-disk als van een MBR-disk (Windows XP boot ESP
niet vanaf een MBR-disk.)
Op een MBR-disk
krijgt de ESP als partitietype 0xEF.
De ESP-grootte is
afhankelijk van de grootte van de disk: 1% van de grootte van de
disk maar minimaal 100MB en maximaal 1GB. De ESP moet alleen
files bevatten welke nodig zijn tijdens het booten.
OEM-specific
partition
Computerleveranciers
kunnen een aparte partitie gebruiken voor bijzondere
toevoegingen. Deze partitie wordt netjes afgeschermd. Als een
gebruiker de partitie dreigt te wissen, dan krijgt de
gebruiker een waarschuwing.
Deze partitie
wordt na een eventuele ESP op een GPT-disk geplaatst, maar vóór
de MSR.
MSR
Microsoft Reserved Partition
Dit is een aparte
partitie voor gebruik door het OS voor diverse doeleinden, en
wordt op elke disk geplaatst. Elke GPT-disk bevat een MSR, welke
door de Windows setup wordt aangemaakt, de eerste keer dat de
partitietabel op de disk wordt geplaatst. (Niet later, want dan
is er geen ruimte meer).
De
GUID-identificaties is
DEFINE_GUID (PARTITION_MSFT_RESERVED_GUID, 0xE3C9E316L,
0x0B5C,0x4DB8, 0x81, 0x7D, 0xF9, 0x2D, 0xF0, 0x02, 0x15, 0xAE)
|
Als b.v. een
Basic disk wordt geconverteerd naar een Dynamic disk, dan wordt
de MSR kleiner gemaakt en wordt de vrijgemaakt ruimte benut voor
een partitie, waarop de Dynamic Disk Database wordt geplaatst.
Ook de grootte
van de MSR is afhankelijk van de disk-grootte:
disk < 16 GB
dan MSR = 16 MB
disk >=16 Gb
dan MSR = 128 MB
Elke met Windows
XP bootable disk moet een ESP, een MSR en minstens één Basic
data partitie bevatten met het OS.
Een data disk
moet een MSR en minstens één Basic data partitie bevatten. bij
gebruik van meer data-partities moeten deze aaneengesloten op de
disk staan (geen bijzondere partities ertussen).
Primaire
GPT-partitie op een BASIC disk
Een basic data
partitie wordt gedefinieerd door:
DEFINE_GUID (PARTITION_BASIC_DATA_GUID, 0xEBD0A0A2L,
0xB9E5, 0x4433, 0x87, 0xC0, 0x68, 0xB6, 0xB7, 0x26, 0x99, 0xC7)
|
Dit komt overeen
met een primaire MBR-partitie, getypeerd door 0x6 voor een
FAT partitie, 0x7 voor een NTFS partitie en 0xB voor een FAT32
partitie.
GPT
Partities op een Dynamic disk
Na conversie tot
Dynamic disk, zijn er twee GPT partities:
Eén met de Dynamic
configuration database:
DEFINE_GUID (PARTITION_LDM_METADATA_GUID, 0x5808C8AAL,
0x7E8F, 0x42E0, 0x85, 0xD2, 0xE1, 0xE9, 0x04, 0x34, 0xCF, 0xB3);
|
Eén data-container-partitie
(overeenkomstig met een MBR partitie 0x42)
DEFINE_GUID (PARTITION_LDM_DATA_GUID, 0xAF9B60A0L,
0x1431, 0x4F62, 0xBC, 0x68, 0x33, 0x11, 0x71, 0x4A, 0x69, 0xAD);
|
In de
data-container-partitie worden volumes gemaakt. In de
data-container-partitie worden alle niet-bootable partities
geplaatst, waarbinnen volumes worden aangemaakt, één voor elke
oude basic partitie.
MBR-disks en
GPT-disks kunnen zonder beperkingen door elkaar gebruikt worden.
Windows heeft de
Diskpart.exe (een command-line-tool) en de Disk Administrator
(een MMC-snapin met GUI) voor het partitioneren van disks. Met
deze tool kunnen MBR-partities en GPT-partities gemaakt worden.
flag |
Een bitje wat gebruikt
wordt om een bepaalde instelling te specificeren. Is het
bitje 1 dan is de flag gezet en staat iets AAN, is het
bitje 0 dan staat het UIT |
CRC |
Cyclic Redundancy Check.
Een berekening op basis van de data, waarmee
gecontroleerd kan worden of de data nog correct is. Als
de data wordt gewijzigd, dan klopt de CRC niet meer. |
CRC32 |
een 32 bit CRC waarde,
wordt berekend volgens een vast algoritme. |
booten |
Het starten van een OS op
een computer |
MMC |
Microsoft Management
Console, een grafische tool voor "snap-ins" |
Snap-in |
Een module welke kan worden
geladen met een bepaalde functionaliteit voor het beheer
van hardware of software. |
GUI |
Graphical User Interface,
de grafische , met muis bedienbare, interface |
|