Come aumentare lo spazio di scambio?


128

Ho, per impostazione predefinita, 250 MB di spazio di swap in Ubuntu e voglio espanderlo a dimensioni maggiori. Ho bisogno di 800 MB, che credo basteranno per aprire diverse applicazioni senza dover raggiungere l'attuale limite di scambio. Spero che qualcuno mi possa aiutare.


2
Apri Gparted e pubblica uno screenshot di ciò che vedi qui.
Aaron Hill,

Se la partizione di swap può essere espansa nello spazio non allocato adiacente, utilizzare gparted. Se tale spazio non è disponibile, forse perché la partizione attiva (avviata) utilizza tutto lo spazio non swap, gpartednon sarà possibile ridurre le dimensioni della partizione attiva per creare spazio non allocato. In questo caso puoi reinstallare Ubuntu per creare uno spazio di scambio più ampio.
H2ONaCl

Risposte:


172

Puoi sempre creare un file di scambio

per aggiungere più spazio di swap. Questo non è lo stesso (in tutti gli aspetti) della partizione di swap ma sarà facile e dinamico.

Cambia /media/fasthdd/swapfile.imgin qualsiasi cosa ti piaccia, ad esempio può anche essere /swap.img. /media/fasthdd/swapfile.imgè solo un esempio di nome file, se lo stai usando, ovviamente ci deve essere una directory /media/fasthdd/con abbastanza spazio libero per il tuo nuovo file di scambio.

Utilizzare una qualsiasi delle applicazioni terminali per eseguire comandi. Tutti i comandi devono essere eseguiti con i privilegi di root , per fare ciò è possibile aggiungere sudoall'inizio di ogni comando o eseguire sudo bashprima di eseguire i comandi.

1. Crea un file vuoto:
questo file conterrà i contenuti della memoria virtuale, quindi rendi il file abbastanza grande per le tue esigenze. Questo creerà un file da 1 GB che significa + 1 GB di spazio di scambio per il tuo sistema:

dd if=/dev/zero of=/media/fasthdd/swapfile.img bs=1024 count=1M

Se si desidera creare un file 3Gb, modificare il valore di conteggio in count=3M. Vedi man ddper maggiori informazioni.

2. Crea file di scambio: il
seguente comando farà "file system di scambio" all'interno del tuo nuovo file di scambio.

mkswap /media/fasthdd/swapfile.img

3. Apri all'avvio:
per assicurarti che il tuo nuovo spazio di swap sia attivato durante l'avvio del computer, dovresti aggiungerlo al file di configurazione del filesystem /etc/fstab. Aggiungilo alla fine del file, questo è raccomandato perché altri filesystem ( almeno uno che contiene file di scambio ) devono essere montati in modalità lettura-scrittura prima di poter accedere a qualsiasi file.

# Add this line to /etc/fstab
/media/fasthdd/swapfile.img swap swap sw 0 0

4. Attiva:
è possibile riavviare il computer o attivare manualmente il nuovo file di scambio con il seguente comando:

swapon /media/fasthdd/swapfile.img


Se tutto va bene

dovresti vedere che è disponibile più spazio di swap per l'uso. Puoi utilizzare i seguenti comandi per controllare il tuo nuovo scambio e confermare che è attivo:

cat /proc/swaps
  Filename                           Type       Size    Used    Priority
  /media/fasthdd/swapfile.img        file       8388604 2724    -1

grep 'Swap' /proc/meminfo
  SwapCached:         4772 kB
  SwapTotal:       8388604 kB
  SwapFree:        8355812 kB

5
Per modificare /etc/fstabprovare questo dalla riga di comando:sudo gedit /etc/fstab
Ben

Mi ha aiutato moltissimo, grazie mille signore.
Rika,

come disattivare il file di swap appena creato?
Rika,

1
ottenuto il suo swapoff!
Rika,

2
usa il comando "swapon -s" per vedere lo stato piuttosto che "cat / proc / swaps". quindi il comando "gratuito" fornisce anche informazioni sull'utilizzo dello scambio.
Paul M,

40

Metodo GUI per aumentare le dimensioni della partizione di swap

Un altro modo per aumentare le dimensioni dello swap è utilizzare l' editor delle partizioni GParted . In breve, ridimensiona la partizione di swap, quindi fai clic destro su di essa e scegli "Scambia".

È più facile avviare gparted-live-disk o un disco live di Ubuntu (in modo che tutte le /dev/sdapartizioni vengano smontate). Se esegui Ubuntu live disk, devi installare gparted eseguendo i comandi seguenti:

sudo apt-get update
sudo apt-get install gparted && sudo gparted

È necessario essere in grado di aumentare le dimensioni della partizione di swap solo se è presente uno spazio non allocato prima o dopo la partizione di swap. Se non c'era spazio non allocato (lo spazio che stiamo cercando di aggiungere con la partizione di swap) sotto o sopra la partizione di swap, allora dobbiamo ridimensionare le partizioni e ottenere quello spazio non allocato.

Caso 1: spazio non allocato presente prima o dopo la partizione di swap

Partizioni GParted

Nello screenshot sopra, avevo 11,4 GB di spazio non allocato prima di Linux-Swap e 12,8 GB dopo la partizione di swap.

  • Per ridimensionare, fare clic con il tasto destro sulla partizione di swap (/ dev / sda9 qui) e fare clic sull'opzione Ridimensiona / Sposta. Sarà simile a questo:

    inserisci qui la descrizione dell'immagine

  • Trascinando le frecce del dispositivo di scorrimento verso sinistra o destra, quindi fare clic sul pulsante Ridimensiona / Sposta. La partizione di swap verrà ridimensionata.


Caso 2 - lo spazio non allocato è tra le partizioni

inserisci qui la descrizione dell'immagine

Nello screenshot sopra, lo spazio non allocato che vogliamo aggiungere alla partizione di swap era tra dev/sda7e /dev/sda8. Per spostare lo spazio non allocato da quello alla partizione di swap appena sopra, dobbiamo seguire i semplici passaggi indicati di seguito,

  • Fare clic con il tasto destro sulla partizione / dev / sda8 e fare clic sull'opzione Ridimensiona / Sposta .

    inserisci qui la descrizione dell'immagine

  • fai clic e sposta il dispositivo di scorrimento all'estrema sinistra, in modo che lo spazio non allocato che era appena sopra la /dev/sda8partizione verrà sotto /dev/sda8. Successivamente fai clic sul pulsante Ridimensiona / Sposta.

  • E ora lo spazio non allocato era appena sopra la partizione di swap che era come il caso 1. Ora segui il caso 1.


Caso 3 - se lo spazio non allocato era presente all'esterno della partizione estesa)

inserisci qui la descrizione dell'immagine

Avevo uno spazio non allocato di 18 GB appena sotto alla partizione estesa . Per aggiungere questo spazio alla partizione linux-swap (che era presente all'interno della partizione estesa), dobbiamo seguire i passaggi seguenti,

  • Fare clic con il tasto destro sulla partizione estesa e selezionare l' opzione Ridimensiona / Sposta , sarà come lo screenshot qui sotto

    inserisci qui la descrizione dell'immagine

  • Fare clic e trascinare la freccia all'estrema destra e fare clic su Ridimensiona / Sposta , in modo che lo spazio non allocato di 18 GB arriverà nella parte inferiore della partizione estesa. Avevo già 14,80 GB di spazio non allocato già presenti nella parte inferiore e ora i 18.34 GB si combina con quello per creare uno spazio non allocato di (18,34 + 14,80 GB) nella parte inferiore della partizione estesa.

  • Ora c'era uno spazio non allocato appena sotto alla partizione di swap, sarà come il caso 1 , quindi segui il caso 1.

NOTA: non dimenticare di eseguire il backup di tutti i tuoi dati importanti prima di procedere con le operazioni precedenti.


2
Ottima guida agli strumenti della GUI, merita ++ così com'è. Tuttavia, forse ci dovrebbe essere qualche avvertimento sui possibili rischi associati alla modifica delle partizioni. Una semplice guida di backup MBR o un collegamento a tale guida sarebbe un'ottima aggiunta, gli errori potrebbero essere improbabili ma i costi potrebbero aumentare + l' esecuzione dei backup MBR non consumerà troppo tempo o spazio e potrebbe risparmiare molto lavoro, spazio e tempo se eseguita correttamente.
Sampo Sarrala,

2
Non dimenticare di scambiare, fai clic con il pulsante destro del mouse sulla partizione di scambio uno swapon
user3752281

30

È inoltre possibile utilizzare fallocatese si desidera riservare spazio per il file di scambio, senza la necessità di riempire il file da 0 a dd.

Dalla manpagina:

DESCRIPTION
   fallocate  is  used  to preallocate blocks to a file.  For filesystems which support the fallocate system call, this is done quickly by
   allocating blocks and marking them as uninitialized, requiring no IO to the data blocks.  This is much faster than creating a  file  by
   filling it with zeros.

Se hai già swapdefinito, puoi rimuoverlo o mantenerlo e il tuo * nix lo gestirà (ancora meglio definendo una swaponpriorità). Questo potrebbe essere utile, nel caso in cui si desideri distribuire lo scambio tra diversi dispositivi, unità (in base alla loro velocità o ad altre esigenze personalizzate, vedere Qual è lo scopo di più file di scambio su StackExchange ).

fallocateUtilizzo semplice per l'aggiunta di un secondo file di scambio

Controlla la situazione di swap:

$ sudo swapon -s
Filename                Type        Size    Used    Priority
/swapfile               file        262140  246276  -1

Crea un file di scambio 4G

Modo standard per creare e attivare un file di scambio.

$ size="4G" && file_swap=/swapfile_$size.img && sudo touch $file_swap && sudo fallocate -l $size /$file_swap && sudo mkswap /$file_swap && sudo swapon -p 20 /$file_swap

Rendi permanente il tuo scambio

Aggiungi una riga nel tuo /etc/fstabfile in modo che lo swap venga inizializzato al prossimo riavvio (aggiorniamo anche qui la priorità dello spazio di swap appena creato e aggiorniamo la priorità del vecchio file di swap).

Nel tuo file / etc / fstab, nota che la priorità dello scambio precedente è ora 10.

/swapfile    none    swap    sw,pri=10      0       0
/swapfile_4G.img     none    swap    sw,pri=20      0       0

Controlla la situazione di scambio dopo il riavvio:

$ sudo swapon  -s
Filename       Type     Size        Used    Priority
/swapfile      file     262140      0       10
/swapfile_4G.img       file     4194300     0       20

Rimuovere uno spazio di swap (ad esempio 256 Mb originali)

modificare /etc/fstab

Rimuovere la linea relativa allo swap che si desidera rimuovere.

Elimina questo scambio

Elimina e rimuovi il file di scambio.

sudo swapoff /mnt/swapfile && sudo rm /mnt/swapfile

risorse:


3
1 su fallocate, molto meglio che ddse la tua fs lo supporta. Quei one-liner si sentono ancora difficili da leggere, potrebbe essere più facile da studiare se quelli fossero suddivisi in comandi reali?
Sampo Sarrala,

3
Questo è un esempio di risposta perfetta, molto semplice da capire, molto semplice da implementare. Ha funzionato come un incantesimo in Ubuntu 18
Damián Rafael Lattenero il

7

Nel mio caso avevo già un file di scambio che pensavo fosse 1 GB, ma quando lo guardavo più da vicino era grande solo 256 MB e quando pre-compilando le mie risorse di rotaie il server esauriva la memoria

Errno::ENOMEM: Cannot allocate memory - nodejs

Ho creato il mio file di scambio come descritto qui: https://stackoverflow.com/a/34885004/784318

Ora la linea che crea un file vuoto chiamato /swapfileè la seguente:

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

Ora per ridimensionare il file di scambio ho dovuto fare questi semplici passaggi:

# Reboot the system to be able to switch swapping off
sudo reboot

# Turn swap off
sudo swapoff -a

# Delete the `/swapfile`
rm -f /swapfile

# Recreate the swapfile but with double file size memory
sudo dd if=/dev/zero of=/swapfile bs=1024 count=512k

# Turn swap back on
sudo swapon -s

# Change the permission to non-world-readable
sudo chown root:root /swapfile 
sudo chmod 0600 /swapfile

# Use the swap file
sudo mkswap /swapfile
sudo swapon /swapfile

Il file è stato creato (536870912/1024/1024 = 512 MB):

ls -lia /swapfile 
768 -rw------- 1 root root 536870912 Apr 27 07:54 /swapfile

Usando il free -mcomando ho potuto vedere che il file ora è 512 MB come previsto:


Non dovresti usare il pericoloso -r flag con il comando rm per rimuovere un singolo file. rm -f dovrebbe essere più che sufficiente.
Sampo Sarrala,

1
@SampoSarrala Grazie per l'heads-up, ho modificato la sceneggiatura di conseguenza.
Besi,

@Besi Grazie! Questo era esattamente ciò di cui avevo bisogno per aumentare le dimensioni del file di scambio sul mio sistema Ubuntu 18.04 LTS. Ha funzionato esattamente come l'hai scritto tu. Ottimo aiuto !!!
Radicale B,

Mi piace questa soluzione perché è a riga di comando, non richiede il partizionamento e spiega cosa fare se esiste già un file di scambio.
cxrodgers il

3

come aggiungere un file di scambio

  1. file creat .img

    sudo dd if = / dev / zero of = / swap.img bs = 1M count = 1000

nota !: bs = 1M count = 1000 ==> 1GB

(bs * count = dimensione in megabyte)

altro esempio:

sudo dd if = / dev / zero of = / swap.img bs = 10M count = 100

  1. formato file .img

    sudo mkswap /swap.img

  2. abilita il file di scambio

    sudo swapon /swap.img

  3. aggiungi il file di scambio a fstab

aggiungi questa linea al tuo fstab (/ etc / fstab)

/swap.img   none            swap    sw              0       0

Di solito imposto un'etichetta su swap, ad esempio "mkswap -L SWAP2".
Paul M,

Nota: questa è la stessa risposta della risposta accettata / più votata da Sampo Sarria, ma con meno contesto e con lo swap img aggiunto direttamente a root anziché / media / fasthdd
steel

0

Ridimensiona Scambia a 8 GB

# Turn swap off
# This moves stuff in swap to the main memory and might take several minutes
sudo swapoff -a

# Create an empty swapfile
# Note that "1G" is basically just the unit and count is an integer.
# Together, they define the size. In this case 8GB.
sudo dd if=/dev/zero of=/swapfile bs=1G count=8

sudo mkswap /swapfile  # Set up a Linux swap area
sudo swapon /swapfile  # Turn the swap on

Controlla se ha funzionato

grep Swap /proc/meminfo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.