Partisjon

Fra Wikipedia, den frie encyklopedi.

Denne artikkelen forklarer hva en partisjon er. Se artikkelen partisjonere for å lage partisjoner.

En partisjon er en logisk del av et fysisk lagringsmedium, for eksempel en harddisk eller minnepinne.

Innholdsfortegnelse

Teori

Katalogstrukturen i Linux bruker ikke begrepet om «stasjoner» – C:, D:, E: osv. – som man kanskje er vant til fra Windows. I Linux vil alle lagringsenheter; harddisker, diskettstasjoner, CD-ROM-stasjoner, tape-stasjoner, minnepinner og minnekortlesere være en logisk del av det samme filsystemet. Det er ingen synlig sammenheng mellom de fysiske lagringsenhetene og det man som bruker opplever. En CD-ROM-stasjon kan f.eks. være montert som /home/hemmelig-enhet, selv om det vanligste vil være å montere den som /mnt/cdrom.

LVM, raid og ikke minst større harddisker har endret mye på hvordan man partisjonerer.

Lagringsenhetene

Alle fysiske lagringsenheter blir i Linux gitt et navn – en kombinasjon av bokstaver og også noen ganger tall som unikt identifiserer enheten og hvilken type enhet det er snakk om. I tillegg er det vanlig at alle logiske deler av hver enkelt lagringsenhet får et nummer. Disse navnene dukker opp i katalogen /dev eller en i underkatalog der.

Den mest brukte partisjoneringsstandarden tillater opptil fire primære eller utvidede partisjoner, i tillegg til inntil 12 logiske partisjoner. Informasjon om hvordan partisjonene er strukturert fins i partisjonstabeller. Partisjonstabellen med de fire første er en del av lagringsmediets Master Boot Record (MBR), mens de øvrige er spredt utover i den utvidede partisjonen.

IDE

Alle IDE-harddisker får navnet hd pluss en alfabetisk bokstav fra og med a, slik at den første harddisken får navnet hda. For at harddisken skal være brukbar, og for at Linux skal kunne benytte den i filsystemet, må den inneholde minst ett logisk område, en partisjon. Primære partisjoner får nummer fra 1 til 4, mens logiske partisjoner får nummer fra 5 og opp.

Konkret innebærer dette at første harddisk får navnet hda, mens den første partisjonen på den første harddisken normalt får navnet hda1, og det er denne betegnelsen, hda1, som benyttes når Linux referer til enheten. I Linux er det svært vanlig å dele opp en harddisk i flere logiske enheter (partisjoner).

Det er verdt å merke seg at hda er Primary Master og at hdb er Primary Slave. Hvis man f.eks. setter en disk på Primary Master og en på Secondary Master, vil den første disken hete hda mens den neste vil hete hdc, selv om man ikke har noen hdb. På IDE har man altså «reservert» to harddiskenheter per IDE-kanal.

SCSI

SCSI-harddisker får navn etter hvilken posisjon de har på SCSI-bussen(e). Den laveste SCSI-ID-en får navn /dev/sda, den neste får /dev/sdb, etc.

Mens IDE-CD-ROM-spillere stiller på linje med IDE-harddisker hva angår navnestandard, får SCSI-CD-ROM-spillere egne navn: scd pluss posisjonen på SCSI-bussen(e). Første CD-spiller blir /dev/scd1, neste blir /dev/scd2.

minnepinner

minnepinner er som SCSI-disker å regne. Man må ha støtte for SCSI-harddisker som modul eller direkte i kjernen. Det er også ofte en fordel å ha støtte for «Probe all LUNs» under SCSI i kjernen, dette er ikke tilgjengelig som modul. Har man en minnepinne og setter den i en Linux-maskin, vil denne få tildelt første ledige SCSI-enhet, f.eks. /dev/sda. Fins det andre SCSI-enheter på maskinen fra før, vil den komme lengre ut i rekka, f.eks. /dev/sdc hvis man har to andre SCSI-harddisker fra før. De fleste minnepinner er partisjonert slik at den eneste partisjonen er første partisjon, gjerne formatert som vfat (windows FAT32 med støtte for lange filnavn). Man kan montere denne på lik linje med en floppy og bruke f.eks. enheten /dev/sda1.

ZIP-disker

Iomegas (http://www.iomega.com/) ZIP-disker har egne moduler i kjernen. Hvilke moduler som trengs er avhengig av modell. ZIP-disker dukker også opp som SCSI-enheter, men her er det siste primærpartisjon som benyttes, altså for eksempel /dev/sda4.

Partisjonstabellen

Den primære partisjonstabellen, som fins i MBR-en, har plass til opptil fire primære partisjoner, hvorav én kan være en utvidet partisjon. Denne utvidede partisjonen har, ved hjelp av kjedede partisjonstabeller, plass til inntil 12 logiske partisjoner. Totalt kan partisjonstabellen altså beskrive inntil 15 partisjoner – 15 og ikke 16 fordi én av de primære partisjonene brukes som en utvidet med 12 logiske i. Begrensningen med 15 partisjoner er imidlertid ikke knyttet til fysiske begrensninger, men adresseringen: Det er bare satt av ett heksadesimalt siffer (fire bits) til partisjonsnummeret, altså fra 0x0 til 0xf, og 0x0 brukes ikke.

På den utvidede partisjonen finner vi i praksis to dataområder: Ett område der partisjonstabellen fins, og et område der den første logiske partisjonen fins. Denne partisjonstabellen har imidlertid bare plass til to partisjoner, så den peker bare til den første logiske partisjonen og en eventuell ny partisjonstabell for neste logiske partisjon. Sårbarheten i denne modellen er åpenbar: Hvis første partisjonstabell på den utvidede partisjonen får problemer, mister lagringsmediet samtlige logiske partisjoner.

Figuren under viser hvordan partisjonstabellene er fordelt. Primær partisjonstabell, øverst til venstre på figuren, har bare plass til fire partisjoner. Den siste blir da en utvidet partisjon, og partisjonstabellene for partisjonene inne i denne er koblet videre i en kjede av tabeller.

Bilde:Linuxguiden_partisjonstabell_med_extended.png

Primære partisjoner

Disse kan det bare finnes maksimalt fire av per lagringsmedium, på grunn av plassbegrensning i MBR-en. Oppstartslastere som for eksempel lilo tar sikkerhetskopi av den primære partisjonstabellen. Denne partisjonstabellen fins også alltid på samme sted, i motsetning til partisjonstabellene for de logiske partisjonene, slik at det er lett å kunne ta sikkerhetskopi selv.

Utvidede partisjoner

En utvidet partisjon kan det bare finnes én av per primære partisjonstabell, altså en per fysiske lagringsmedium. Dens funksjon er å tilrettelegge for å bruke logiske partisjoner, så alt den gjør er å peke til hvor første partisjonstabell for de logiske partisjonene ligger.

Logiske partisjoner

Logiske partisjoner fins på den utvidede partisjonen. Hver logiske partisjon har sin egen partisjonstabell, som peker på partisjonen og neste partisjonstabell.

Partisjonstyper

Partisjoner som er primære eller logiske har også alltid en partisjonstype.

I fdisk listes disse slik (med de vanligste uthevet):

 0  Empty               1c  Hidden Win95 FA 65  Novell Netware  bb  Boot Wizard hid
 1  FAT12               1e  Hidden Win95 FA 70  DiskSecure Mult c1  DRDOS/sec (FAT-
 2  XENIX root          24  NEC DOS         75  PC/IX           c4  DRDOS/sec (FAT-
 3  XENIX usr           39  Plan 9          80  Old Minix       c6  DRDOS/sec (FAT-
 4  FAT16 <32M          3c  PartitionMagic  81  Minix / old Lin c7  Syrinx
 5  Extended            40  Venix 80286     82  Linux swap      da  Non-FS data
 6  FAT16               41  PPC PReP Boot   83  Linux           db  CP/M / CTOS / .
 7  HPFS/NTFS           42  SFS             84  OS/2 hidden C:  de  Dell Utility
 8  AIX                 4d  QNX4.x          85  Linux extended  df  BootIt
 9  AIX bootable        4e  QNX4.x 2nd part 86  NTFS volume set e1  DOS access
 a  OS/2 Boot Manag     4f  QNX4.x 3rd part 87  NTFS volume set e3  DOS R/O
 b  Win95 FAT32         50  OnTrack DM      8e  Linux LVM       e4  SpeedStor
 c  Win95 FAT32 (LBA)   51  OnTrack DM6 Aux 93  Amoeba          eb  BeOS fs
 e  Win95 FAT16 (LBA)   52  CP/M            94  Amoeba BBT      ee  EFI GPT
 f  Win95 Ext'd (LBA)   53  OnTrack DM6 Aux 9f  BSD/OS          ef  EFI (FAT-12/16/
10  OPUS                54  OnTrackDM6      a0  IBM Thinkpad hi f0  Linux/PA-RISC b
11  Hidden FAT12        55  EZ-Drive        a5  FreeBSD         f1  SpeedStor
12  Compaq diagnost     56  Golden Bow      a6  OpenBSD         f4  SpeedStor
14  Hidden FAT16 <3     5c  Priam Edisk     a7  NeXTSTEP        f2  DOS secondary
16  Hidden FAT16        61  SpeedStor       a9  NetBSD          fd  Linux raid autodetect
17  Hidden HPFS/NTF     63  GNU HURD or Sys b7  BSDI fs         fe  LANstep
18  AST SmartSleep      64  Novell Netware  b8  BSDI swap       ff  BBT

Når du lager partisjoner, må du altså tilegne dem en type. Swap-partisjoner må ha typen «Linux Swap» (82), vanlige partisjoner «Linux» (83). «Extended» (5) settes av partisjoneringsverktøyene når du lager en utvidet partisjon. «Linux raid autodetect» (fd) brukes når du setter opp RAID, og «Win95 FAT32» (c) og «NTFS» (7) brukes i Windows.

Partisjonstabellens struktur

Partisjonstabellen består av fire 16-bytes linjer som hver er bygd opp som vist her:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Boot Start C/H/S Type Slutt C/H/S Partisjonens startsektor Partisjonens størrelse
  • Boot: Hvorvidt partisjonen kan brukes til å starte operativsystemet fra. Verdien 80 betyr at den er aktiv, verdien 00 betyr at den ikke er aktiv.
  • Start C/H/S: Sylinder, hode og sektor hvor partisjonen begynner
  • Type: Numerisk partisjonstype, angitt heksadesimalt: 0x83 er «Linux» (vanlig partisjon), 0x82 er «Linux swap», 0x05 er utvidet partisjon under Linux, 0x07 er NTFS, etc.
  • Slutt C/H/S: Sylinder, hode og sektor hvor partisjonen slutter
  • Partisjonens startsektor: Sektoren hvor partisjonen begynner
  • Partisjonens størrelse: Antall sektorer partisjonen benytter

Eksemplet under viser partisjonstabellen på et Linux-system, vist med fdisk.

# fdisk -l /dev/hda

Disk /dev/hda: 80.0 GB, 80026361856 bytes
16 heads, 63 sectors/track, 155061 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1         484      243904+  83  Linux
/dev/hda2             485        1511      517608   83  Linux
/dev/hda3            1512      127457    63476784   83  Linux
/dev/hda4          127458      148616    10664136    5  Extended
/dev/hda5          127458      144896     8789224+  83  Linux
/dev/hda6          144897      147027     1073992+  83  Linux
/dev/hda7          147028      147260      117400+  83  Linux
/dev/hda8          147261      148616      683392+  82  Linux swap

Partisjonstabellens mer grisete detaljer

Et dypdykk inn i MBR-en på samme harddisk viser partisjonstabellen (men bare de fire første partisjonene, jfr. logiske partisjoners kaskade-pregede partisjonstabeller) i heksadesimal representasjon. Vi kjenner igjen noen av kolonnene, for eksempel om partisjonen har boot-flagget satt (Bt), og partisjonstypen (Id).

      Bt C/H/S    Id C/H/S    Startsekt.  Ant. sekt.
      -- -------- -- -------- ----------- -----------
hda1: 80 01 01 00 83 0f 7f e3 3f 00 00 00 81 71 07 00
hda2: 00 00 41 e4 83 0f ff ff c0 71 07 00 d0 cb 0f 00
hda3: 00 0f ff ff 83 0f ff ff 90 3d 17 00 60 28 91 07
hda4: 00 0f ff ff 05 0f ff ff f0 65 a8 07 90 71 45 01

Hvis vi regner om verdien som angir antall sektorer til desimaltall, vil vi finne en overensstemmelse med hva fdisk gav oss. Tallene i partisjonstabellen er imidlertid angitt som Least Significant Byte, så vi må konvertere i motsatt rekkefølge. La oss ta for oss hda1, hvor disse tallene er 81 71 07 00:

0x81 = 129 -> 129 x 2560 =    129
0x71 = 113 -> 113 x 2561 =  28928
0x07 =   7 ->   7 x 2562 = 458752
0x00 =   0 ->   0 x 2563 =      0
                           ------
                           487809

Dette stemmer ikke umiddelbart med tallet vi fikk på første partisjon i fdisk, nemlig 243904+. Men når vi tar i betraktning at fdisk angir størrelsen i 1024-bytes blokker, mens partisjonstabellen angir størrelsen i 512-bytes sektorer, får vi riktig svar ved å dele på 2:

487807 / 2 = 243904,5

Kommandoen som ble kjørt for å få ut partisjonstabellen er for øvrig følgende:

# dd if=/dev/hda count=1 bs=512| od -x | perl -pe 's/(\s)(..)(..)/$1$3$2/g'

Dataene har siden blitt massert noe for leselighet.



Se også: Partisjonere


Personal tools