Come impostare lo spazio di swap?


114

Raspberry Pi ha solo 256 MB di RAM, quindi vorrei utilizzare lo spazio di scambio (su scheda SD o memoria USB collegata). Come lo installo?


10
Lo scambio su Pi (e dispositivi simili) può essere dolorosamente lento e tutto ciò che effettivamente finisce per usare ampiamente lo swap praticamente farà fermare il sistema. Attento!
MattJ,

1
Sai cosa sarebbe buono è un'unità RAM USB (non flash o SSD ma chip RAM volatile reale che funziona a velocità USB) Farebbe abbastanza bene per un tale scambio.
Piotr Kula,

3
@Tibor La domanda è "Come impostare lo spazio di swap?" A mio avviso, una risposta corretta dovrebbe descrivere come farlo, nonché attirare l'attenzione su alcune insidie ​​e mettere in guardia contro l'uso improprio. La tua risposta fa proprio questo, mentre la risposta "più popolare" dice solo perché non si dovrebbe mai "fare questo a tutti" (che è muto, perché c'è un modo corretto di usarlo, e in realtà è utile).
Andrew Larsson,

1
Ci sono circa un milione di avvertimenti contro l'uso di swap con un lampone pi in questa pagina, ma se hai bisogno di costruire qualcosa una volta, è inevitabile.
Archonic

1
@Archonic - +1 . A volte esaurisco la memoria compilando i file . Un piccolo file di swap con una bassa swapiness migliorerà la situazione attuale.
jww

Risposte:


134

Raspbian utilizza dphys-swapfile , che è una soluzione basata su file di scambio anziché la soluzione "standard" basata su partizione di scambio. È molto più facile cambiare la dimensione dello swap.

Il file di configurazione è:

/etc/dphys-swapfile 

Il contenuto è molto semplice Di default il mio Raspbian ha 100 MB di swap:

CONF_SWAPSIZE=100

Se si desidera modificare le dimensioni, è necessario modificare il numero e riavviare dphys-swapfile:

/etc/init.d/dphys-swapfile restart

Modifica: su Raspbian la posizione predefinita è / var / swap, che si trova (ovviamente) sulla scheda SD. Penso che sia una cattiva idea, quindi vorrei sottolineare che il file / etc / dphys-swap può avere anche la seguente opzione: CONF_SWAPFILE = / media / btsync / swapfile

Ho solo un problema, l'archiviazione USB è montata automaticamente, quindi una potenziale corsa qui (automount vs. swapon)


2
Questa è la risposta corretta Nessuna delle altre risposte menzionava il file dphys-swap.
Kenji Noguchi,

1
Ho valutato questa risposta come veramente corretta. Ho imparato tutto molto di recente abbastanza di recente, la tua risposta potrebbe farmi risparmiare molto tempo. ;-)
Drachenfels,

Potresti chiarire perché usare /var/swapè una cattiva idea?
Andrey Portnoy,

per installare i pacchetti R, che non sono riusciti prima a causa di "la chiamata di sistema non riuscita non può allocare memoria": Impostare CONF_SWAPSIZE = 1024. Meno non è abbastanza.
vertikalista il

36

Puoi impostare lo spazio di swap in modo abbastanza semplice. Ad esempio, se il tuo drive USB è /dev/sdx, dovresti usare (devi essere root per questo):

$ mkswap /dev/sdx
$ swapon /dev/sdx

Nota che questo userebbe l'intero dispositivo e probabilmente perderai tutti i dati esistenti su di esso.

Puoi anche creare un file di scambio (usando un loopdispositivo) in questo modo:

$ dd if=/dev/zero of=/path/to/swapfile bs=1M count=1024 # For 1GB swap file
$ mkswap /path/to/swapfile
$ swapon /path/to/swapfile

Quando non è più necessario il file di scambio (ad esempio se si desidera espellere l'unità USB), è necessario utilizzare swapoff <device>. In caso contrario, probabilmente si verificherà un arresto anomalo del sistema.

Dovresti stare attento però . Le schede SD hanno limiti di lettura / scrittura limitati e ne ridurranno la durata. Se stai usando un disco rigido esterno, dovresti andare bene, ma sarà molto lento.


2
Perché aggiungere il loopback? Sicuramente non è necessario?
popey,

Hai ragione, non lo è. Ho modificato la risposta per riflettere ciò.

2
Penso che dovresti cambiarlo per evitare che gli utenti copino e incollino e possano correre accidentalmente mkswapsulla loro partizione di root. Penso che sdxsia una buona convenzione.
Jivings,

3
Gli utenti che scelgono di abilitare SWAP potrebbero essere interessati a regolare lo swappiness del kernel .
earthmeLon

@earthmelon Raspbian Jessie ha la swappiness 1 di default.
Kaay

32

Non farlo affatto.

Si dovrebbe non consentire di swap sul Raspberry Pi.

Sebbene sia possibile, non è utile. Anche su una scheda SDHC di classe 10, è troppo lento. Inoltre ridurrai la durata della scheda SD.

Su qualsiasi dispositivo di archiviazione basato su flash (scheda SD, SDD, chiavette USB) è anche probabile che vengano visualizzate pause a livello di sistema mentre viene cancellato un ampio gruppo di blocchi flash.

Possibili eccezioni:

  • Se si collega un disco rigido (magnetico) (tramite un adattatore USB-SATA o USB-IDE)
  • Se usi ZRAM o qualcosa di simile

3
senza dubbio lo scambio su un USB bey ucciderà la tua chiave molto velocemente, anche lo scambio sulla scheda SD è pericoloso, anche se le nuove schede SD (classe 10) potrebbero supportarlo meglio. ZRAM è chiaramente la strada da percorrere se hai bisogno di più RAM
neofutur il

1
Penseresti che con la tecnologia ReadyBoost in Windows qualcuno avrebbe creato un'unità USB (o eSata, non sono sicuro che ReadyBoost potesse usarlo, non sarebbe di alcuna utilità per raspberry pi, ma sarebbe interessante) che utilizzava RAM effettiva in modo da poter migliora le prestazioni del tuo computer. Anche se probabilmente sarebbe più facile ed economico acquistare una nuova scheda madre che supporta la quantità di RAM necessaria.
Kibbee,

33
Perché questa risposta ha così tanti voti positivi? Ci sono molte ragioni per usare lo swap. Ho usato un file di scambio su un'unità esterna per compilare una grande libreria nel corso di pochi giorni. È lento come scimmie morte che galleggiano nella melassa, ma ciò non significa che non dovresti "farlo affatto".
Andrew Larsson,

10
Il tuo avvertimento, sebbene ben intenzionato, è troppo forte. Scoprire "why not" e "why" è esattamente lo scopo di Raspberry Pi: prova quello che vuoi con esso e IMPARA. Ci sono anche alcuni buoni motivi per usare un'unità esterna anche per lo scambio, come soddisfare un requisito di memoria di picco per una compilazione di librerie una tantum; la ricerca che mi ha portato qui. Le volte che ho imparato di più è quando ho rovinato qualcosa di minore e ho capito perché. Mi dispiace dirlo, non sei stato utile come pensi di essere.
Chris Hatton,

2
Troppo forte. "Meglio non", forse, ma "cattivo, dispendioso, dannoso e inutile" è fuorviante. Tutto indossa con l'uso, tenere a mente l'ossigeno è tossico, e Raspbian fa utilizzare un file di swap. Un rallentamento di solito è meglio di un arresto anomalo e ti consente di compilare cose enormi una volta ogni pochi mesi. Basta impostare bassa swappiness e sei bravo.
Kaay

4

Raspbmc utilizza /etc/init/swap.confper configurare lo scambio tramite il file / swap. Per prima cosa controlla la presenza di /home/pi/.enable_swap.

Se si elimina, il /home/pi/.enable_swapfile di scambio non viene creato, quindi ricrearlo con touch /home/pi/.enable_swapse è necessario attivare e riavviare lo scambio.


4

È un peccato che Raspberry Pis non abbia GigaBit Ethernet ma almeno teoricamente è possibile avere spazio di swap su un dispositivo di rete - il Linux Terminal Server Project può offrirlo dal server ai client secondo questo articolo sul loro wiki .

Ho trovato un argomento del Forum della Fondazione "Suggerimento: Scambia su nfs" che mostra come qualcuno che aveva già alcuni montaggi NFS già in atto utilizzava un file di scambio su uno di essi e lo montava tramite un loop-mount (probabilmente necessario perché Linux non consente un Attacco NFS da utilizzare direttamente). Dato che il file di scambio remoto conterrà dati che il sistema operativo non deve perdere, lo prenderei in considerazione solo per una rete Ethernet cablata: un collegamento wireless sarebbe troppo fragile IMHO. Inoltre, ovviamente non devi consentire lo spegnimento del server remoto senza disattivare lo swap e consentirne prima lo svuotamento completo!


RPi non trarrebbe alcun vantaggio da GB Ethernet, a causa della larghezza di banda limitata tra il chip Broadcom e il controller Ethernet.
Dmitry Grigoryev,

1
... e il controller Ethernet come componente aggiuntivo del chip USB ! Sì, ma possiamo sognare un ipotetico progetto RPi in cui l'hardware di rete faceva parte del dispositivo principale SoC. 8-P
SlySven,

I controller Ethernet sono spesso chip esterni, ma l'USB come bus inter-chip è effettivamente dannoso sia per la velocità che per il consumo energetico.
Dmitry Grigoryev il
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.