|
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
|
|