Come Creare la Memoria Swap in Linux

Per creare un file di swap in Linux, prepara un file sul tuo storage, inizializzalo con mkswap, e poi attivalo con swapon. Lo swap aiuta a ridurre la pressione sulla memoria, ma è più lento della RAM e non risolve tutti i problemi di carenza di memoria né garantisce il normale funzionamento dei programmi.

Cos'è lo Swap?

Lo swap è uno spazio che consente di posizionare alcune delle pagine di memoria in uso sullo storage. Puoi utilizzare un file su disco o una partizione separata. Questo articolo spiega come aggiungere un file, e i 2 GiB nell'esempio sono a scopo pratico. La dimensione richiesta dovrebbe essere determinata considerando la RAM, il carico di lavoro, lo spazio disponibile e se viene utilizzata l'ibernazione.

Il sistema potrebbe già utilizzare lo swap. Controlla gli elementi attualmente attivati e lo stato della memoria con il seguente comando.

swapon --show
free -h

Controlla il nome, la dimensione e l'utilizzo in swapon --show e osserva l'utilizzo totale nella riga Swap di free -h. Anche se aumenti lo swap, le prestazioni possono diminuire se c'è un accesso frequente allo storage. Se la memoria è costantemente insufficiente, considera anche il carico di lavoro e l'espansione della RAM.

Cose da controllare prima di iniziare

La seguente procedura è un esempio per Linux usando strumenti GNU e util-linux, dove il file system root è il comune ext4 e ha spazio libero sufficiente. Sono necessari privilegi di amministratore. I container o i server gestiti possono limitare l'attivazione dello swap, quindi controllare prima le politiche operative.

findmnt -T / -o TARGET,FSTYPE,SOURCE,OPTIONS
df -h /

Controllare il tipo di file system e lo spazio disponibile. Oltre al file di swap da 2 GiB, lasciare spazio libero sufficiente per il normale funzionamento. Non utilizzare il percorso di esempio /swap-manualfactory se un file o un collegamento simbolico esiste già lì. Reinizializzare o sovrascrivere un file di swap esistente può causare perdita di dati e problemi su un sistema in esecuzione.

Btrfs ha restrizioni separate relative al Copy-on-Write e agli snapshot, quindi non applicare direttamente la procedura ext4 riportata di seguito. Per i metodi e le condizioni specifiche di creazione in Btrfs, controlla il documento sul file di swap Btrfs . I file system di rete o altri file system potrebbero avere anche condizioni di supporto diverse.

Creazione e Attivazione di un File di Swap

Il seguente è un esempio di creazione di un file da 2GiB quando /swap-manualfactory non esiste. Il conv=excl in GNU dd fallirà se il target esiste già, impedendo la sovrascrittura. Se fallisce o viene interrotto, non procedere al passaggio successivo; verifica la causa e il file generato.

sudo dd if=/dev/zero of=/swap-manualfactory bs=1M count=2048 conv=excl status=progress

Se il comando ha successo, controlla la dimensione e il percorso del file, impostalo in modo che solo l'amministratore possa leggerlo e scriverlo, e poi inizializzalo come area di swap. mkswap modifica il file specificato, quindi assicurati di verificare che il percorso sia il file che hai appena creato.

sudo ls -lh /swap-manualfactory
sudo chmod 600 /swap-manualfactory
sudo mkswap /swap-manualfactory

Esegui il passo successivo solo se ciascun passo precedente ha successo. Dopo aver attivato con il comando sottostante, verifica che il nuovo percorso appaia nell'elenco.

sudo swapon /swap-manualfactory
swapon --show
free -h

La dimensione del file visualizzata potrebbe non corrispondere esattamente alla dimensione del file creato a causa dell'intestazione di swap e di altri fattori. Se swapon fallisce, controllare l'errore e non aggiungerlo alle impostazioni di avvio. Un file di swap non deve avere buchi e, a seconda del file system, un file creato con fallocate potrebbe non essere adatto. Il manuale util-linux swapon spiega i vincoli per ogni file system.

Attivarlo dopo l'avvio

Aggiungere elementi a /etc/fstab solo dopo averlo attivato correttamente. Poiché questo file contiene anche altre impostazioni di mount, eseguire un backup prima di modificarlo e assicurarsi che i percorsi non duplichino voci di swap esistenti. Se il percorso di backup sottostante esiste già, scegliere un nuovo nome diverso.

sudo cp -a -n /etc/fstab /etc/fstab.before-swap
sudo nano /etc/fstab

Mantieni il contenuto esistente nell'editor e aggiungi la riga qui sotto, quindi salva. Se hai creato un percorso di esempio con un nome diverso, usa il percorso effettivo.

/swap-manualfactory none swap defaults 0 0

Dopo aver salvato, controlla di nuovo il contenuto del file e, nei sistemi dove disponibile, verifica le impostazioni con il comando seguente. Questo controllo non garantisce un riavvio riuscito.

sudo findmnt --verify --verbose
sudo systemctl daemon-reload

daemon-reload fa sì che i sistemi che usano systemd ricarichino le impostazioni modificate. Se ci sono errori di validazione, correggili e assicurati di non aver cambiato accidentalmente altre voci. Riavvia in un momento di manutenzione appropriato e poi conferma con swapon --show che il file sia stato riattivato. Puoi anche controllare le procedure di registrazione e validazione nella documentazione Red Hat sulla gestione dello swap.

Disattiva e ripristina

Prima di spegnere lo swap, controlla l'uso e la memoria disponibile con swapon --show e free -h. Se non c'è spazio sufficiente per spostare le pagine in uso in un'altra memoria o swap, la disattivazione potrebbe fallire o mettere sotto sforzo il sistema. Su un sistema in funzione, procedi solo dopo aver assicurato capacità disponibile e tempo di manutenzione.

sudo swapoff /swap-manualfactory
swapon --show

Assicurati che l'elemento target non sia più nella lista attiva. Per evitare che venga riattivato all'avvio, rimuovi solo la riga aggiunta da questa operazione in /etc/fstab e, in un ambiente systemd, esegui sudo systemctl daemon-reload. Per eliminare il file di swap, conferma prima che la disattivazione sia riuscita e che la riga di configurazione aggiunta sia stata rimossa, quindi elimina solo il file che hai creato. Lascia invariati gli altri elementi di swap o le impostazioni esistenti.