Nästa Föregående Innehållsförteckning

3. Hårddiskgeometri och partitioner

Om du har flera operativsystem på dina hårddiskar använder var och en av dem en eller flera partitioner. Om operativsystemen inte är överens om hur partitionerna ligger kan konsekvenserna bli katastrofala.

MBR innehåller en partitionstabell som beskriver var (de primära) partitionerna finns. Det finns 4 poster i tabellen för 4 primära partitioner, och varje post ser ut som

struct partition {
        char active;    /* 0x80: bootbar, 0: ej bootbar */
        char begin[3];  /* CHS för första sektorn */
        char type;
        char end[3];    /* CHS för sista sektorn */
        int start;      /* sektornummer (32-bitarstal, med början på 0) */
        int length;     /* antal sektorer (32-bitarstal) */
};
(där CHS står för cylinder/huvud/sektor).

Sålunda är informationen redundant: stället partitionen ligger på är givet både av de 24-bitars begin- och end-fälten och av de 32-bitars start- och length-fälten.

Linux använder bara start- och length-fälten och kan därför hantera partitioner som inte är större än 2^32 sektorer, det vill säga högst 2 TB stora partitioner. Det är hundra gånger större än hårddiskarna som är tillgängliga idag, så det kanske räcker för de nästkommande 80 åren, eller så.

Olyckligtvis använder INT13-BIOS-anropet CHS kodad som tre byte, med 10 bitar för antal cylindrar, 8 bitar för antal huvuden och 6 bitar för antal sektorer. Möjliga värden för antal cylindrar är 0-1023, möjliga värden för antal huvuden är 0-255 och möjliga värden för antal sektorer är 1-63 (ja, sektorer på ett spår räknas med början på 1, inte 0). Med dessa 24 bitar kan man adressera 8455716864 byte (7,875 GB), tvåhundra gånger större än hårddiskarna som fanns tillgängliga 1983.

Ännu mer olyckligt är att standardmässiga IDE-gränssnitt tillåter 256 sektorer/spår, 65536 cylindrar och 16 huvuden. Detta i sig själv tillåter åtkomst till 2^37 = 137438953472 byte (128 GB), men kombinerat med BIOS-begränsningarna (högst 63 sektorer och 1024 cylindrar) ger detta att bara 528482304 byte (504 MB) kan adresseras.

Detta är räcker inte för dagens hårddiskar, och folk får ta till alla sorters trick, både hårdvaru- och mjukvarumässiga.


Nästa Föregående Innehållsförteckning