swap (Italiano)
Definizione dello swap tratta da quest'articolo All about Linux swap space[link interrotto 2020-08-06]:
- Linux suddivide la memoria fisica RAM (Memoria ad accesso casuale) in blocchi chiamate pagine. Lo swapping è il processo durante il quale una pagina di memoria viene copiata su uno spazio di disco, chiamata area di swap, per liberare memoria RAM. Le dimensioni combinate della memoria fisica e dell'area di swap è la quantità di memoria virtuale disponibile.
Area di swap
L'area di swap è di solito una partizione del disco, ma può anche essere un file. Gli utenti possono creare uno spazio di swap durante l'installazione di Arch Linux o in qualsiasi momento in caso di necessità. Lo spazio di swap è generalmente raccomandato per gli utenti con meno di 1 GB di RAM, ma diventa più una questione di preferenza personale su sistemi con una quantità di RAM fisica gratuiti (anche se è necessaria per poter utilizzare la sospensione su disco).
Per verificare lo stato dello swap, usare il seguente comando:
$ swapon -s
Oppure:
$ free -m
Partizione dello swap
Una partizione dello swap può essere creata con la maggior parte dei programmi di gestioni delle partizioni (ad es. fdisk
, cfdisk
). Queste partizioni hanno come numero identificativo 82.
Per impostare un'area di swap, si utilizza il comando mkswap
:
# mkswap /dev/sda2
Per abilitare la partizione per lo swap:
# swapon /dev/sda2
Per abilitare la partizione per lo swap durante l'avvio del sistema, aggiungere questa riga al file fstab:
/dev/sda2 none swap defaults 0 0
File dello swap
Come alternativa alla creazione di una partizione, un file di scambio offre la possibilità di variare la dimensione al volo, e lo si può rimuovere più facilmente. Questo può essere particolarmente utile se lo spazio su disco è prezioso (ad esempio un SSD di modeste dimensioni).
Creazione di un file di swap
Da root utilizzare fallocate
per creare un file di swap di dimensioni a tua scelta (M = Megabytes, G = Gigabytes) (Si può utilizzare anche dd
, ma richiede più tempo). Ad esempio, per creare un file di swap di 512 MB:
# fallocate -l 512M /swapfile # dd if=/dev/zero of=/swapfile bs=1M count=512
Impostare le autorizzazioni giuste (un file di swap leggibile da tutti è una grande vulnerabilità di sicurezza):
# chmod 600 /swapfile
Dopo aver creato il file dalle dimensioni adeguate, formattarlo:
# mkswap /swapfile
Attivare il file di swap:
# swapon /swapfile
Modificare il file /etc/fstab
e aggiungere questa riga:
/swapfile none swap defaults 0 0
Rimuovere il file di swap
Per rimuovere il file di swap, bisogna prima disattivarlo.
Da root:
# swapoff -a
Cancellare il file di swap:
# rm -rf /swapfile
Ripristino dal file di swap
Per ripristinare il sistema da un file di swap dopo un'ibernazione, richiede l'aggiunta di un parametro al kernel. Questo parametro è resume_offset=<Swap File Offset>
.
Il valore di <Swap File Offset>
può essere ricavato dal comando filefrag -v
che mostrerà una tabella. Il valore richiesto si trova alla colonna physical
della prima riga. Ad esempio:
# filefrag -v /swapfile Filesystem type is: ef53 File size of /swapfile is 4290772992 (1047552 blocks, blocksize 4096) ext logical physical expected length flags 0 0 7546880 6144 1 6144 7557120 7553023 2048 2 8192 7567360 7559167 2048 ...
Dall'esempio, il valore di <Swap FIle Offset>
è 7546880
.
resume
bisogna inserire la partizione (es. resume=/dev/sda1
), non il percorso al file di swap! Il parametro resume_offset
serve ad indicare il blocco sul disco dove inizia il file di swap (es. resume_offset=7546880
).Swap su una periferica USB
Grazie alla modularità offerta da Linux, siamo in grado di avere una partizione di swap su diversi dispositivi. Se si dispone di un disco rigido molto pieno, il dispositivo USB può essere utilizzato come partizione temporaneamente. Questo metodo ha qualche svantaggio:
- Il dispositivo USB è più lento del disco rigido.
- Le memorie flash hanno cicli limitati di scrittura. Utilizzandole come partizione di swap ridurranno la loro vita.
- Quando un altro dispositivo è collegato al computer, non può essere utilizzato lo swap.
Per aggiungere un dispositivo USB per lo swap, in primo luogo prendere un flash USB e formattarlo con una partizione di swap. E' possibile utilizzare programmi come Gparted o fdisk. Assicurarsi di etichettare la partizione come swap prima di scrivere la tabella delle partizioni.
Successivamente, modificare il file fstab
# nano /etc/fstab
Aggiungere una riga sotto l'attuale partizione di swap:
UUID=... none swap defaults,pri=10 0 0
Dove UUID è ottenuto dal comando:
ls -l /dev/disk/by-uuid/ | grep /dev/sdc1
Sostituire sdc1 con la partizione di swap su USB. sdb1
Infine, aggiungere
pri=0
nella voce attuale dello swap nel file fstab, per utilizzare il file di swap sull'hard disk quando la partizione su USB è piena.
Ottimizzazione delle prestazioni
I parametri dello swap possono essere regolati per aumentare le prestazioni.
Swappiness
Il parametro dello swappiness sysctl rappresenta la preferenza (o l'inibizione) del kernel di utilizzare lo spazio di swap. Swappiness può avere un valore compreso tra 0 e 100. L'impostazione di questo parametro ad un valore basso riduce lo scambio di RAM, ed è noto per migliorare la risposta su molti sistemi.
/etc/sysctl.d/90-swappiness.conf
vm.swappiness=1 vm.vfs_cache_pressure=50
Priorità
Se si dispone di più di un file di swap o una partizione di swap si dovrebbe prendere in considerazione l'assegnazione di un valore di priorità (da 0 a 32767) per ogni area di swap. Il sistema utilizzerà aree di swap di priorità più elevata prima di utilizzare aree di swap di priorità inferiore. Ad esempio, se si dispone di un disco più veloce (/dev/sda
) ed un disco lento (/dev/sdb
), assegnare una priorità superiore per l'area di swap trova sul dispositivo veloce. Le priorità possono essere assegnati in fstab attraverso il parametro pri
:
/dev/sda1 none swap defaults,pri=100 0 0 /dev/sdb2 none swap defaults,pri=10 0 0
Oppure attraverso il parametro di swapon −p
(o −−priority
):
# swapon -p 100 /dev/sda1
Se due o più aree hanno la stessa priorità, ed è la massima priorità disponibili, le pagine sono allocate su un round-robin tra di loro.