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


