Aggiungere spazio swap “al volo”

HardDisk icon by everaldo.comLo swap è un’area di memoria, tipicamente una partizione dell’hard disk o un file, utilizzata dal sistema operativo per “parcheggiare” dati e processi non in uso in quel momento. Il Memory Manager di Linux tenta per quanto possibile di tenere tutti i processi in RAM, poiché l’accesso al disco è molto più lento di quello alla memoria, e quindi “svegliare” un processo dallo swap è una operazione che porta via molto tempo. Quando la RAM scarseggia ricorre necessariamente allo swap.

Cosa succede quando la RAM e lo swap sono utilizzati completamente? Entra in azione l’Out-of-Memory Killer (questo è il comportamento di default, che può essere modificato tramite /proc). Quello che fa l’OOMKiller e’ selezionare un processo che ritiene particolarmente dannoso o inutile e ucciderlo. Questo può essere Apache, il database server, la vostra sessione di vim… non c’è modo di predire dove colpirà la follia omicida del killer. Una possibilità, ovviamente, è quella di disabilitare il maniaco. Un’altra è quella di aumentare al volo lo spazio di swap disponibile. Per fare questo per fortuna non serve aumentare lo spazio della partizione di swap, ma si può indicare al kernel un file da utilizzare come swap. Per farlo è necessario eseguire i seguenti comandi da root. Poiché uso Ubuntu (no, Kubuntu, ma sono search engine friendly), avvio una shell di root eseguendo sudo -s (detesto mettere sudo davanti a tutte le istruzioni), sulle altre distribuzioni eseguite invece su -.

Il primo passo è creare un file della dimensione desiderata da usare come swap. Supponendo di voler creare il file da 512MiB img.swp nella cartella radice /, il comando da eseguire è:

dd if=/dev/zero of=/img.swp bs=1M count=512

dd è un programma molto versatile che consente di copiare dati da un file all’altro. In questo caso lo usiamo per copiare dal device virtuale /dev/zero (if=/dev/zero, if sta per input file) al file /img.swp (of=/img.swp, of sta per output file) 512 blocchi (count=512) da 1MiB (bs=1M).

Il comando successivo serve per formattare il file in modo che sia adeguato a ospitare lo swap:

mkswap /img.swp

Il file di swap non deve contenere “buchi”, e generalmente se il disco è sufficientemente capiente è possibile trovare una sequenza di blocchi contigui per ospitarlo. Si noti che su Windows una classica causa di rallentamenti è la frammentazione del file di swap: un problema in meno per Linux.

Ora bisogna dire al kernel che c’è un nuovo file di swap da utilizzare:

swapon /img.swp

Opzionalmente, se desiderate rendere persistente la decisione, potete “registrarla” modificando il file /etc/fstab:

nano /etc/fstab

aggiungendo la linea

/img.swp none swap sw 0 0

Utilizzate il comando free -m per verificare che il kernel stia effettivamente utilizzando il nuovo spazio swap: il valore nella colonna “total” della riga “Swap” dovrebbe essere aumentato di una quantità pari alla dimensione in megabyte del file di swap che avete aggiunto (nel nostro caso 512). Per disattivare il file di swap eseguite:

swapoff /img.swp

oppure, se avete modificato /etc/fstab, ri-modificatelo cancellando

/img.swp none swap sw 0 0

Posted in kubuntu, linux, ubuntu.

4 Responses to “Aggiungere spazio swap “al volo””

  1. Tip & Tricks Linux at Lapini’s Blog Says:

    [...] Aggiungere Spazio Swap al volo [...]

  2. ferdinando Says:

    agiugere 1 g

  3. FFrancesco Says:

    Ho virtualizzato un server Suse con PartImage per usarlo con VMware e sono rimasto senza swap. I tuoi suggerimenti sono proprio quello che cercavo! Grazie! :-)

  4. IppatsuMan Says:

    @FFrancesco

    Felice d’essere stato d’aiuto :)

Leave a Reply

94 commenti spam bloccati. Non provarci neanche.