Category Archives: ubuntu

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

*Ubuntu potrebbe (?) rompere il tuo hard disk

HardDisk icon by everaldo.comC’è stata una piccola tempesta nei vari blog/siti 2.0/del.icio.us/newswine (…) relativo alla supposizione che *ubuntu possa portare a un logoramento prematuro degli hard disk.

Tutto è partito da un post di linux-hero (opportunamente amplificato da digg.com) che faceva riferimento al bug #104535 di Ubuntu: il riassunto del bug è che quando viene collegato alla batteria Ubuntu attiverebbe delle impostazioni che portano a un continuo arresto e riavvio dell’hard disk, cosa che da una parte aumenta l’autonomia del sistema, dall’altra causa uno stress meccanico che può accorciare la vita utile dell’hard disk.

Inizialmente il caos ha regnato e tutti hanno iniziato a incolpare Ubuntu della rottura del proprio hard disk. In realtà le cose sono un po’ più complicate di così (come ha segnalato Matthew Garrett — sviluppatore per Debian e lead developer per Ubuntu). Per sapere se il fantomatico bug vi affligge eseguendo il comando:

grep ENABLE_LAPTOP_MODE /etc/default/acpi-support

se vi viene restituito “false” allora non correte alcun pericolo.

laptop_mode è una variabile con cui si comunica al kernel Linux che si intendono attivare alcuni comportamenti che portano a un “miglioramento” del comportamento del sistema sui laptop (ad esempio bufferizzando le scritture su disco e scrivendole a burst, diminuendo così gli accessi all’hd e allungando conseguentemente la durata della batteria).

Tale variabile si può impostare modificando il file /etc/default/acpi-support . Il problema nasce dal fatto che quando viene alimentato dalla batteria, Ubuntu esegue il file /etc/acpi/power.sh , che contiene tra le altre cose il codice:

function laptop_mode_enable {...$HDPARM -S $SPINDOWN_TIME /dev/$drive 2>/dev/null

$HDPARM -B 1 /dev/$drive 2>/dev/null

}

Se vengono avviati, questi comandi cambiano le impostazioni del risparmio energetico dell’hard disk. Il primo comando riduce il tempo di spindown, cioè il tempo che deve passare dall’ultimo accesso prima che l’hard disk smetta di ruotare. Il valore di default, che si può leggere nel file /etc/default/acpi-support , è di appena 12 secondi. Questo continuo fermarsi e ripartire causa stress meccanico all’hard disk, accorciandone la vita utile. Il secondo comando invece imposta la politica di ACPI per l’hard disk al valore più aggressivo (eseguite man hdparm per ulteriori informazioni).

Ma questa funzione viene richiamata solo da un’altra funzione:

if [ x$ENABLE_LAPTOP_MODE = xtrue ]; then
    (sleep 5 && laptop_mode_enable)&
fi

Questo vuol dire che se la variabile ENABLE_LAPTOP_MODE allora verrà richiamata la funzione laptop_mode_enable riportata sopra. Di default, come si può controllare sempre nel file /etc/default/acpi-support , tale variabile è impostata a false, per cui l’odiatissimo codice che corrode gli hard disk non verrà abilitato.

Questo vuol dire che di default Ubuntu non modifica le impostazioni di risparmio energetico, e coloro che hanno osservato un aumento del valore di load_cycle_count (visualizzabile con sudo smartctl -A /dev/sda dove sda potrebbe cambiare e essere hda, hdb,… o sdb, sdc…) sono “vittime” delle impostazioni aggressive per il risparmio energetico impostate nel bios o nel firmware presente sui laptop. Ubuntu, di default, non modifica alcunché per questo aspetto.

Come osserva Matthew Garret, si potrebbe affermare che Ubuntu dovrebbe forzare politiche che non portino all’usura dell’hardware, ma del resto si suppone che il produttore del portatile ne sappia più degli sviluppatori di Linux su cosa quell’hardware possa o non possa fare.