Linux swap spaces

In linux kan een swapspace zowel in een partitie als een bestand gestopt worden. Een partitie is beter, omdat er dan geen filesystem-overhead plaats vind. Een bestand maak je echter sneller aan dan een partitie en is dynamischer. Zowel het bestand als de partitie moeten een vaste grootte hebben en kunnen niet van omvang veranderen zodra ze als swap in gebruik genomen zijn.

Net zoals alle andere partities staan swap partities gewoon in \etc\fstab.

Er zijn twee versies swapspace. Het verschil hiertussen wordt aangegeven door de laatste 10 bytes van de eerste pagina: SWAP_SPACE of SWAPSPACE2.

Versie 1: SWAP_SPACE

De eerste pagina van deze swapspace is een bitmap: er staat een 1 voor elke bruikbare pagina en een 0 voor elke onbruikbare pagina. Alle pagina's moeten een bit in de eerste pagina hebben, waardoor er een maximum is aan het aantal pagina's: 8*(S-10)-1, waar S de grootte is van de pagina's in bytes. Met S=4096 (i386) zijn er dus maximaal 32687 pagina's mogelijk, wat een maximum swapgrootte oplevert van bijna 128 MiB. Met S=8192 (sparc64, alpha) zijn er maximaal 65455 pagina's, een maximum swapgrootte van bijna 512 MiB. Is de swappartitie groter, dan wordt de overbodige ruimte niet gebruikt.

Versie 2: SWAPSPACE2

De oude partitieindeling liet de eerste pagina voor het grootste deel verloren gaan en werkte omslachtig, want deze was gevuld met allemaal enen tot het einde van de partitie, vervolgens allemaal nullen. Een betere manier is om de grootte van de swapspace aan te geven met een integer en onbruikbare delen (bad-blocks op de harde schijf) gewoon op te schrijven. Dit gebruikt het nieuwe swapsysteem. Dit vergrootte de maximale beschikbare ruimte tot 512MiB op een MIPS tot 3TiB op een sparc64.

Sinds linux versie 2.1.117 gebruikt de kernel 2 bytes per swappagina aan geheugen, dus om een swap van 2 GiB te hebben met een paginagrootte van 2KiB, heb je 2 MiB aan kernelgeheugen nodig.

Op dit moment kunnen er maximaal 8 verschillende swap bestanden of partities zijn. Alle swap locaties staan in /proc/swaps (vanaf linux 2.1.25), met de grootte, hoeveel er in gebruik is en wat de prioriteit is.

Een swap-bestand mag niet gefragmenteerd zijn, en moet aangemaakt worden voordat het tot een swapindeling gezegend mag worden. Een leeg bestand aanmaken zonder gaten erin kan met dd.