Hur man skapar en växlingsfil på Linux

By rik

Konfigurera eller utöka swap-utrymme i Linux utan krångliga partitioner

Den här guiden visar dig ett enkelt sätt att skräddarsy ditt swap-utrymme på din Linux-dator, antingen genom att skapa nytt eller utöka befintligt, utan att behöva mixtra med diskpartitioner.

Swap-filer jämfört med swap-partitioner

Det finns flera situationer där du kan behöva öka ditt swap-utrymme eller lägga till ett helt nytt på din Linux-maskin.

  • Kanske ditt swap-utrymme ofta är fullt eller nästan fullt.
  • Det är lätt att av misstag välja fel alternativ under installationen och missa att skapa swap-utrymme.
  • Du kanske tidigare trodde att du inte behövde swap på grund av mycket RAM, men har ångrat dig.
  • Ibland får du ärva ett system som saknar swap-utrymme, av anledningar som kan vara okända.

Den enkla lösningen i alla dessa fall är att skapa en swap-fil. Detta är en fil som i förväg allokeras och reserveras för att användas som swap-utrymme. Den kommer att fungera tillsammans med befintliga swap-filer eller swap-partitioner.

Tidigare medförde swap-filer en prestandaförlust jämfört med swap-partitioner. Detta är inte längre fallet tack vare förbättringar i prestanda för mekaniska hårddiskar och en effektivare hantering av swap-funktioner inom Linux-kärnan. Faktum är att många Linux-distributioner nu skapar swap-filer som standard istället för swap-partitioner.

Swap-utrymme är inte bara en nödlösning för att frigöra RAM vid minnesbrist. Det är en viktig del av ett väl fungerande system. Utan swap kan det bli mycket svårt för kärnan att hantera minnet på ett bra sätt. Låt oss utforska det enkla sättet att lägga till mer swap-utrymme.

Viktigt att veta innan du börjar: Btrfs och SSD

Innan vi fortsätter vill vi ta upp två viktiga punkter:

Filssystemet Btrfs har särskilda restriktioner gällande swap-filer. Tidigare fanns en konflikt mellan Btrfs copy-on-write-funktionalitet, och hur swap-filer behövde fungera. Vissa funktioner som swap-filer kräver var inte implementerade, och vissa antaganden om blocknumrering stämde inte överens med Btrfs. Därför var swap-filer inte fullt stödda.

Sedan kärna 5.0 är det möjligt att använda swap-filer i Btrfs-filsystem, men med följande krav:

  • De får inte använda copy-on-write (NOCOW).
  • De får inte vara komprimerade.
  • De får inte sträcka sig över flera diskar.

De flesta använder standardfilsystemet ext4, vilket gör att detta inte är något problem för dem.

När SSD-enheter först kom ut fanns det en oro för att de skulle slitas snabbt vid frekvent skrivning. Folk varnades därför för att ha swap-utrymme på SSD, och även för att logga systemdata till dem.

Detta är mycket mindre av ett problem nu, och de flesta SSD:er som säljs i dag har en förväntad livslängd som är längre än de flesta datorers. En swap-fil på en SSD kommer dessutom att ge mycket bättre prestanda än en swap-partition på en mekanisk hårddisk.

Kontrollera befintligt swap-utrymme

Innan du skapar nytt, låt oss kontrollera om du redan har något swap-utrymme. Vi gör det på två sätt.

Kommandot free visar information om använt och ledigt minne. Alternativet -h (human readable) gör att utskriften blir lättare att tolka.

free -h

Utskriften visar att det inte finns något swap-utrymme konfigurerat på den här maskinen.

När swap diskuteras dyker även RAM upp. Det är värt att notera att det lediga RAM-minnet är 237 MB. Detta är inte det totala tillgängliga RAM-minnet som ges av ”available”-värdet, som är 881 MB.

Linux använder ledigt RAM-minne för eget bruk, som filcachning och kärnbuffertar. Mängden RAM avsatt för detta visas av ”buff/cache”-värdet, som är 871 MB. Men detta minne räknas som ”available”, och kan snabbt ges till program som behöver det.

Ett annat sätt att kontrollera swap-utrymme är kommandot swapon. Alternativet --show ändrar inget, utan visar bara statistik.

swapon --show

Om det inte finns någon utskrift, så finns inget swap konfigurerat.

Om dessa kommandon visade att swap redan är konfigurerat, så bör du ta hänsyn till den befintliga storleken på swap-utrymmet när du bestämmer hur stor din nya swap-fil ska vara.

Hur mycket swap-utrymme behövs?

Det traditionella svaret var ”dubbelt så mycket som du har RAM”. Men det härstammar från tiden då datorer hade lite RAM-minne. I takt med att RAM blivit billigare och program kräver mer minne, så har datorer justerats efter det. Datorer med 32 GB RAM är inte ovanliga, och du vill inte avsätta 64 GB hårddiskutrymme för swap i det fallet. Det är helt enkelt för mycket.

Frågan om hur mycket swap som behövs är ett hett ämne. En av de mest vettiga diskussionerna vi har sett är i Ubuntu Swap FAQ. Den innehåller en tabell som ger rekommendationer för hur mycket swap som behövs beroende på hur mycket RAM ditt system har och om du använder viloläge eller inte.

Den goda nyheten är att det inte spelar någon större roll vilket värde du väljer. Vi kan alltid ta bort en swap-fil och ersätta den med en större eller mindre, eller bara lägga till en extra fil.

Välj en swap-filstorlek från tabellen och testa den. Övervaka hur ditt system använder swap. Om du behöver finjustera det, kan det enkelt göras. Med swap-filer är det en enkel process, till skillnad mot att justera partitioner på ett system som används.

Skapa swap-filen

Använd inte kommandot fallocate för att skapa swap-filen. Manualsidan för swapon förklarar det så här:

  Swapfilsimplementeringen i kärnan förväntar sig att kunna skriva direkt till filen, utan hjälp av filsystemet.

  Detta är ett problem med filer som har hål, eller med copy-on-write-filer i Btrfs. Kommandon som cp(1) eller truncate(1) skapar filer med hål. Dessa filer kommer inte att accepteras av swapon.

  Förallokerade filer som skapats med fallocate(1) kan också tolkas som filer med hål beroende på filsystemet. Förallokerade swapfiler stöds på XFS sedan Linux 4.18.

  Den mest portabla lösningen för att skapa en swapfil är att använda dd(1) och /dev/zero.
  

Så även om fallocate är snabbare använder vi dd för att skapa swap-filen. Vi skapar en 1 GB swap-fil på en maskin med 2 GB RAM.

Alternativen för dd är:

  • if: Indatafil. Vi använder /dev/zero som ger en ström av noll-byte.
  • of: Utdatafil. Vi skapar en fil i rotkatalogen som heter swapfile.
  • bs: Blockstorlek i byte. Detta bestämmer hur många byte som läses från indata och skrivs till utdata.
  • count: Hur många block som ska läsas och skrivas. Multiplicera detta tal med bs för att få filstorleken.
sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576

Viss statistik visas när filen skapas.

Vi kan se antalet block (poster) som skrevs, filens storlek, tiden det tog och överföringshastigheten.

Använd kommandot ls för att se filen i rotkatalogen:

ls /

Förbereda swap-filen

Vi måste förbereda swap-filen med kommandot mkswap innan den kan användas. Vi behöver bara ange sökvägen och filnamnet.

sudo mkswap /swapfile

Filen är nu förberedd för att användas som swap-fil. Notera varningen om filbehörigheter, vi måste ändra dem så att bara root-användaren kan läsa och skriva till swap-filen.

Använda swap-filen

Standardbehörigheterna är för generösa, vi måste begränsa dem så att bara root kan använda swapfilen. Använd chmod för att ändra filbehörigheterna:

sudo chmod 600 /swapfile

Detta tar bort behörigheter för alla andra än filägaren, root, som kan läsa och skriva till filen.

Vi behöver använda kommandot swapon för att låta Linux veta att det finns en ny swap-fil tillgänglig. Vi behöver bara ange sökvägen och filnamnet.

sudo swapon /swapfile

Swap-filen är nu aktiv.

Lägga till swap-filen till fstab

För att säkerställa att din swap-fil är tillgänglig efter en omstart, lägg till den i filen /etc/fstab. Du kan använda valfri textredigerare. Här visar vi processen med den grafiska redigeraren Gedit.

sudo gedit /etc/fstab

Raden du behöver lägga till längst ner i filen är:

/swapfile  none  swap  sw  0  0

Fälten är:

  • Filsystem: Sökvägen och namnet på swap-filen.
  • Monteringspunkt: Filen monteras inte som ett filsystem, så den är none.
  • Typ: Detta är swap.
  • Alternativ: Vid uppstart anropas swapon -a (starta alla enheter som är markerade som swap). Det här alternativet säger åt Linux att hantera den här posten som en swap-resurs. Det är vanligt att använda defaults här, men det finns en missuppfattning om att detta fält ignoreras. Som vi kommer att se, så är det inte fallet.
  • Dump: Detta kan ställas in på noll. Det är inte relevant i detta fall.
  • Godkänt: Detta kan ställas in på noll. Det är inte relevant i detta fall.

Spara ändringarna och stäng redigeraren.

Kontrollera swap-användning

För att se om ditt swap-utrymme används, använd swapon med alternativet --show:

swapon --show

Kolumnerna är:

  • Namn: Namnet på swap-partitionen eller swap-filen.
  • Typ: Typen av swap-enhet.
  • Storlek: Storleken på swap-resursen.
  • Används: Mängden använt swap-utrymme.
  • Prio: Prioriteten för detta swap-utrymme.

Prioritet på swap-utrymme

Varje swap-utrymme tilldelas en prioritet. Om du inte anger en, så tilldelas en automatiskt. Automatiskt tilldelade prioriteter är alltid negativa. Prioriteter kan tilldelas manuellt i spannet 0 till 32767. Swap-resurser med högre prioritet används först.

Om flera swap-utrymmen har samma prioritet används de i tur och ordning, tills de båda är fulla, då systemet letar efter swap-utrymmet med näst lägst prioritet. Om du bara har ett swap-utrymme är prioriteten irrelevant, men vi ändrar prioriteten för swapfilen för att visa hur man gör.

För att ställa in en prioritet, lägg till alternativet pri= (prioritet) till posten i /etc/fstab. Ändra raden du lade till i /etc/fstab så att den ser ut så här:

/swapfile  none  swap  sw,pri=10  0  0

Det vill säga, lägg till pri=10 i fältet Alternativ, separerat från sw med ett kommatecken. Lämna inga mellanslag mellan sw, kommat och pri=10. Starta om datorn och använd kommandot swapon --show:

swapon -- show

Prioriteten för detta swap-utrymme har höjts till 10. Vilket är ett bevis på att fältet Alternativ i posten i /etc/fstab inte ignoreras.

Skapa swap enkelt

För att skippa förklaringarna kan vi skapa en ny swap-fil enkelt och snabbt så här:

sudo dd if=/dev/zero /of=/swapfile2 bs=1024 count=104857
sudo mkswap /swapfile2
sudo chmod 600 /swapfile2
sudo swapon /swapfile2

Låt oss kolla att det fungerade:

swapon --show

Om du vill göra den permanent, lägg till den i /etc/fstab.

Klart!