Hur man skapar en växlingsfil på Linux

Lägg till swap-utrymme på en Linux-dator, eller utöka swap-utrymmet som redan finns, utan att krångla med partitioner. Vi visar dig det enkla sättet att skräddarsy ditt bytesutrymme.

Byt filer vs. Byt partitioner

Det finns flera scenarier där du kanske vill utöka befintligt eller lägga till nytt bytesutrymme till din Linux-dator.

Kanske kör ditt bytesutrymme ofta på max eller nära max.
Det är lätt att klicka på fel alternativ under installationsprocessen och att avvisa att lägga till swap till ditt system av misstag.
Kanske har du tidigare bestämt dig för att du hade så mycket random access minne (RAM) du behövde inget byte och du har ändrat dig.
Ibland ärver du administrationen av ett system som inte har något utbyte, av skäl som du aldrig kommer att kunna upptäcka.

Den enkla lösningen på alla dessa är att lägga till en byta fil till din dator. Detta är en speciell fil, förallokerad och reserverad för användning som swap-utrymme. En swap-fil kommer att fungera tillsammans med alla befintliga swap-filer du kan ha, oavsett om det är en swap-fil eller en swap-partition.

En gång var det en prestandaträff för att använda en växlingsfil jämfört med en växlingspartition. Det är inte längre fallet med förbättringar av prestandan hos mekaniska (snurrande) hårddiskar och mer effektivitet i växlingsfunktionerna inom operativsystemet Linux. Faktum är att vissa Linux-distributioner nu som standard skapar växlingsfiler istället för växlingspartitioner.

Swap används inte bara som ett sätt att frigöra RAM-minne när du har ont om minne. Det är en viktig del av ett väl fungerande system. Utan något utbyte blir det mycket svårt för kärnan att hantera minneshantering. Låt oss titta på det enkla sättet att lägga till lite bytesutrymme.

Innan vi dyker in: Btrfs och SSDs

Det finns två punkter som vi skulle vilja diskutera snabbt.

De Btrfs filsystem har vissa varningar om swap-filer. En gång var det en konflikt mellan kopiera-på-skriva karaktären hos Btrfs, som ville fungera på ett sätt och byta filer som behövde fungera på ett annat. Vissa funktioner som växlingsfiler är beroende av implementerades inte, och vissa antaganden som gjordes om blocknumrering i växlingsfilerna stämde inte med Btrfs. Så swap-filer stöddes inte.

Sedan kärnan 5.0 har du kan ha växlingsfiler i Btrfs filsystem om de är inställda med följande krav:

Inga kopiera-på-skriv-filer (NOCOW).
De är inte komprimerade.
De går inte över olika hårddiskar.

De flesta läsare kommer att använda standardfilsystemet ext4, så detta kommer inte att vara ett problem för dem.

När Solid-State Drives (SSD) först var tillgängliga, fanns det en oro över att använda dem i situationer där filsystemet ofta skrevs. Människor varnades från att lägga bytesutrymme på SSD-enheter, och till och med för att undvika systemloggning till SSD-enheter.

Detta är mycket mindre oroande nuförtiden, och många SSD-enheter som säljs har en förväntad livslängd som kommer att vara längre än de flesta datorer. En swap-fil på en SSD kommer att ha en mycket bättre prestanda än en swap-partition på en mekanisk hårddisk.

Kontrollerar befintligt växlingsutrymme

Titta innan du hoppar. Låt oss kontrollera vilket växlingsutrymme som finns tillgängligt på din dator. Du kan göra detta på två sätt, och vi använder båda. Kommandot ledig visar det använda och lediga minnet. Alternativet -h (läsbart för människor) kommer att göra att fria att använda förnuftiga enheter när det visar minnesvärdena.

free -h

Utdata från gratis visar att det inte finns något bytesutrymme konfigurerat på den här maskinen.

Swap diskuteras aldrig utan att RAM och gratis RAM dyker upp. Så det är värt att notera att det fria RAM-minnet ges till 237 MB. Missta inte det för det totala RAM-minnet som är tillgängligt för användning. Det värdet tillhandahålls av siffran ”tillgänglig”, som är 881 MB.

Linux använder gratis RAM-minne för sina egna syften, såsom filcachelagring och kärnbuffertar. Mängden RAM dedikerad till det är ”buff/cache”-siffran, som är 871 MB. Men det minnet betraktas fortfarande som – och räknas som – ”tillgängligt”. Innehållet i ”buff/cache”-RAM-minnet kan kasseras omedelbart och användas av alla program som behöver lite minne.

Ett annat sätt att kontrollera om swap-utrymme är tillgängligt är att använda swapon-kommandot. Alternativet –show gör inga ändringar av bytet på din dator. Det ger bara statistik.

swapon --show

Om det inte finns någon utdata från det här kommandot, finns inget swap konfigurerat.

Om dessa kommandon hade avslöjat att något växlingsutrymme redan är konfigurerat, bör storleken på det befintliga växlingsutrymmet tas med i beslut om storleken på växlingsfilen du ska skapa.

Hur mycket bytesutrymme behöver jag?

Det traditionella svaret var ”dubbelt så mycket RAM-minne du har.” Men detta myntades när datorer brukade ha väldigt begränsat RAM-minne. I takt med att RAM-minnet har blivit billigare och program och spel kräver mer minne, har PC-specifikationerna justerats därefter. Hemdatorer med 32 GB RAM är inte ovanliga nuförtiden. Och du kommer inte att tilldela 64 GB hårddiskutrymme för att byta utrymme om du har 32 GB RAM. Det är helt klart överdrivet.

Mängden utbyte du behöver är som ett brännande ämne, jämförbart med ”vilken är den bästa redigeraren.” En av de mest förnuftiga diskussionerna vi har sett om detta ämne är i Vanliga frågor om Ubuntu-byte. Det är ett kort och sunt förnuft (även om de, som många människor, missförstår hur swappiness fungerar på Linux). Det finns en praktisk tabell som visar en rekommenderad mängd swap-utrymme för mängden RAM-minne ditt system har, och om du lägger din dator i viloläge eller inte.

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

Plocka en växlingsfilstorlek från tabellen, och kör det ett tag. Övervaka ditt systems användning av växlingsutrymmet. Om finjustering krävs kan ändringar enkelt göras. Med växlingsfiler är det ett två minuters jobb. Jämför det med att justera partitioner på en live Linux-dator.

Skapar växlingsfilen

Du bör inte använda kommandot fallocate för att skapa din swapfil. Det här är från mansidan för swapon:

The swap file implementation in the kernel expects to be able to write to
the file directly, without the assistance of the file system. 

This is a problem on files with holes or on copy-on-write files on file 
systems like Btrfs. Commands like cp(1) or truncate(1) create files with 
holes. These files will be rejected by swapon. 

Preallocated files created by fallocate(1) may be interpreted as files 
with holes too depending of the filesystem. Preallocated swap files are 
supported on XFS since Linux 4.18. 

The most portable solution to create a swap file is to use dd(1) and 
/dev/zero.

Så även om fallocate är snabbare, använder vi dd till skapa växlingsfilen. Maskinen som används för att undersöka den här artikeln har två GB RAM. Vi kommer att skapa en en GB swap-fil.

Alternativen är:

if: Indatafilen. I det här exemplet använder vi /dev/zero som ger en ström av noll byte.
av: Utdatafilen. Vi kommer att skapa en fil i rotkatalogen, kallad swapfile.
bs: Blockstorleken i byte. Detta anger hur många byte som ska läsas från indatafilen och att skriva till utdatafilen, åt gången.
count: Hur många block att läsa och skriva. Multiplicera detta tal med bs-värdet för att få filstorleken.

sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576

Viss statistik tillhandahålls när filen skapas.

Vi kan se antalet block (poster) som skrevs till filen, storleken på filen, tiden det tar att skapa filen och den effektiva dataöverföringshastigheten.

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

ls /

Förbereder växlingsfilen

Vi måste förbered växlingsfilen med kommandot mkswap innan det kan användas. Vi behöver inte ange några parametrar för att mkswap förutom sökvägen och namnet på filen:

sudo mkswap /swapfile

Filen är förberedd för användning som en växlingsfil. Observera varningen om filbehörigheter. Vi måste ändra dessa så att rotanvändaren är den enda som kan läsa och skriva till växlingsfilen.

Använda växlingsfilen

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

sudo chmod 600 /swapfile

Detta tar bort alla behörigheter från filgruppsmedlemmarna och andra, men tillåter filägaren, root, att läsa och skriva till filen.

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

sudo swapon /swapfile

Växlingsfilen är nu aktiv.

Lägger till växlingsfilen till fstab

För att säkerställa att din växlingsfil är tillgänglig efter en omstart, lägg till den i filen /etc/fstab. Du kan använda vilken textredigerare du föredrar, men vi visar processen med den grafiska Gedit-textredigeraren.

sudo gedit /etc/fstab

Raden vi 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å växlingsfilen.
Monteringspunkt: Filen är inte monterad som ett filsystem, så posten är ”ingen”.
Typ: Det här är ”byte”.
Alternativ: Vid uppstart kommer swapon -a (starta alla enheter markerade som swap) att anropas från ett av startskripten. Det här alternativet säger åt Linux att behandla denna post som en växlingsresurs som bör komma under kontroll av det swapon -a-kommandot. Det är vanligt att ”defaults” används här eftersom det finns en felaktig uppfattning bland vissa Linux-användare att detta fält ignoreras. Som vi ska se är så inte fallet. Så det är vettigt att använda rätt alternativ.
Dump: Detta kan ställas in på noll. Det är irrelevant i det här fallet.
Godkänt: Detta kan ställas in på noll. Det är irrelevant i det här fallet.

Spara ändringarna och stäng redigeraren.

Kontrollerar Swap-användning

För att se om ditt bytesutrymme används, använd swaponkommandot med alternativet –show:

swapon --show

Kolumnerna är:

Namn: Namnet på växlingspartitionen eller växlingsfilen.
Typ: Typen av växlingsenhet.
Storlek: Storleken på bytesresursen.
Används: Mängden använt bytesutrymme.
Prio: Prioriteten för detta bytesutrymme.

Prioriteten Swap Space

Varje bytesutrymme tilldelas en prioritet. Om du inte tillhandahåller en tilldelas en automatiskt. Automatiskt tilldelade prioriteringar är alltid negativa. Utbudet av prioriteringar som kan tilldelas manuellt är 0 till 32767. Byt resurser med högre prioritet används först.

Om mer än ett bytesutrymme har samma prioritet används de omväxlande tills de båda är fulla, då letar systemet efter bytesutrymmet med näst lägst prioritet. Om du bara har ett enda bytesutrymme så är prioriteringen irrelevant förstås. Men vi kommer att ändra prioritet för swapfilen vi har skapat för att visa hur man gör det.

För att ställa in en prioritet, lägg till alternativet pri= (prioritet) till /etc/fstab-posten. Redigera 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 alternativfältet, separerat från ”sw” med ett kommatecken. Lämna inga mellanslag mellan ”sw”, kommatecken och ”pri=10”. Starta om din dator och använd kommandot swapon –show:

swapon -- show

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

Byt plats på ett enkelt sätt

Genom att skära igenom beskrivningen och förklaringen kan vi skapa en ny växlingsfil lika enkelt och snabbt som detta:

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

Och låt oss kontrollera att det fungerade:

swapon --show

Om du vill göra det permanenta släppet, lägger du det till din /etc/fstab-fil.

Bom. Jobb klart.