¿Cómo configurar el espacio de intercambio?


114

Raspberry Pi tiene solo 256 MB de RAM, por lo que me gustaría utilizar el espacio de intercambio (ya sea en la tarjeta SD o en el almacenamiento USB conectado). ¿Cómo lo configuro?


10
El intercambio en el Pi (y dispositivos similares) puede ser extremadamente lento, y cualquier cosa que realmente termine usando un intercambio extenso prácticamente detendrá el sistema. ¡Cuidado!
MattJ

1
Usted sabe que lo que sería bueno es una unidad de memoria RAM USB (no flash o SSD, sino un chip ram real volátil que funciona a velocidades USB) Sería bueno para un intercambio de este tipo bastante bueno.
Piotr Kula

3
@Tibor La pregunta es "¿Cómo configurar el espacio de intercambio?" En mi opinión, una respuesta correcta debería describir cómo hacerlo, así como llamar la atención sobre algunas trampas y advertir contra el mal uso. Su respuesta hace exactamente eso, mientras que la respuesta "más popular" solo le dice por qué nunca debe "hacer esto en absoluto" (lo cual es tonto, porque hay una forma adecuada de usarlo, y en realidad es útil).
Andrew Larsson

1
Hay alrededor de un millón de advertencias contra el uso de swap con una frambuesa pi en esta página, pero si necesita construir algo una vez, es inevitable.
Archonic

1
@Archonic - +1 . En ocasiones me quedo sin memoria compilando archivos . Un pequeño archivo de intercambio con poco intercambio será una mejora con respecto a la situación actual.
jww

Respuestas:


134

Raspbian utiliza dphys-swapfile , que es una solución basada en archivos de intercambio en lugar de la solución basada en la partición de intercambio "estándar". Es mucho más fácil cambiar el tamaño del intercambio.

El archivo de configuración es:

/etc/dphys-swapfile 

El contenido es muy simple. Por defecto, mi Raspbian tiene 100 MB de intercambio:

CONF_SWAPSIZE=100

Si desea cambiar el tamaño, debe modificar el número y reiniciar dphys-swapfile:

/etc/init.d/dphys-swapfile restart

Editar: en Raspbian, la ubicación predeterminada es / var / swap, que (por supuesto) se encuentra en la tarjeta SD. Creo que es una mala idea, por lo que me gustaría señalar que / etc / dphys-swapfile también puede tener la siguiente opción: CONF_SWAPFILE = / media / btsync / swapfile

Solo tengo un problema, el almacenamiento usb está montado automáticamente, por lo que una carrera potencial aquí (automount vs. swapon)


2
Esta es la respuesta correcta. Ninguna de las otras respuestas mencionó el dphys-swapfile.
Kenji Noguchi

1
He votado esta respuesta como realmente correcta. Aprendí todo ese camino difícil recientemente, tu respuesta podría ahorrarme mucho tiempo. ;-)
Drachenfels

¿Podría aclarar por qué usar /var/swapes una mala idea?
Andrey Portnoy

para instalar paquetes R, que fallaron antes debido a que "la llamada al sistema falló no puede asignar memoria": Configure CONF_SWAPSIZE = 1024. Menos no es suficiente.
vertikalista

36

Puede configurar el espacio de intercambio de manera bastante simple. Por ejemplo, si su unidad USB es /dev/sdx, usaría (debe ser root para esto):

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

Tenga en cuenta que esto usaría todo el dispositivo y probablemente perderá todos los datos existentes en él.

También puede crear un archivo de intercambio (mediante un loopdispositivo) como este:

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

Cuando ya no necesite el archivo de intercambio (por ejemplo, si desea expulsar la unidad USB), debe usarlo swapoff <device>. No hacerlo probablemente provocará un bloqueo del sistema.

Sin embargo, debes tener cuidado . Las tarjetas SD tienen límites de lectura / escritura limitados y acortará su vida útil. Si está utilizando un disco duro externo, debería estar bien, pero será muy lento.


2
¿Por qué agregar el loopback? ¿Seguramente eso no es necesario?
papa

Tienes razón, no lo es. Edité la respuesta para reflejar eso.

2
Creo que debería cambiar esto para evitar que los usuarios copien y peguen y se ejecuten accidentalmente mkswapen su partición raíz. Creo que sdxes una buena convención.
Jivings

3
Los usuarios que eligen habilitar SWAP pueden estar interesados ​​en ajustar el intercambio de kernel .
earthmeLon

@earthmelon Raspbian Jessie tiene swappiness 1 por defecto.
kaay

32

No hagas esto en absoluto.

Usted debe no permita el intercambio en la Raspberry Pi.

Aunque es posible, no es útil. Incluso en una tarjeta SDHC de clase 10, es demasiado lenta. También reducirá la vida útil de la tarjeta SD.

En cualquier dispositivo de almacenamiento basado en flash (tarjeta SD, SDD, memorias USB) también es probable que vea pausas en todo el sistema mientras se borra un gran grupo de bloques de flash.

Posibles excepciones:

  • Si conecta un disco duro (magnético) (a través de un adaptador USB-SATA o USB-IDE)
  • Si usa ZRAM o algo similar

3
sin duda, el intercambio en un USB bey matará su clave muy rápido, el intercambio en la tarjeta SD también es peligroso, incluso si las tarjetas SD más nuevas (clase 10) podrían admitirlo mejor. ZRAM es claramente el camino a seguir si necesita más RAM
neofutur

1
Pensaría que con la tecnología ReadyBoost en Windows alguien haría una unidad USB (o eSata, no estoy seguro de si ReadyBoost puede usar eso, no sería útil para Raspberry Pi, pero sería interesante) que usara RAM real para que usted pudiera Mejora el rendimiento de tu computadora. Aunque probablemente sería más fácil y más barato comprar una nueva placa base que admita la cantidad de RAM que necesita.
Kibbee

33
¿Por qué esta respuesta tiene tantos votos positivos? Hay muchas razones para usar swap. Utilicé un archivo de intercambio en una unidad externa para compilar una gran biblioteca en el transcurso de unos días. Es lento como los monos muertos que flotan en la melaza, pero eso no significa que "no debas hacer esto en absoluto".
Andrew Larsson

10
Su advertencia, aunque bien intencionada, es demasiado fuerte. Descubrir 'por qué no' y 'por qué' es exactamente para lo que sirve la Raspberry Pi: prueba lo que quieras con ella y APRENDE. También hay algunas buenas razones para usar una unidad externa para el intercambio, como satisfacer un requisito de memoria máxima para una compilación de biblioteca única; La búsqueda que me trajo aquí. Las veces que más aprendí es cuando arruiné algo menor y me di cuenta por qué. Lamento decir que no estás siendo tan útil como crees que eres.
Chris Hatton

2
Demasiado fuerte. "mejor no", tal vez, pero "malo, derrochador, perjudicial e inútil" es engañoso. Todo se desgasta con el uso, tener en cuenta el oxígeno es tóxico, y Raspbian hace utilizar un archivo de intercambio. Una desaceleración suele ser mejor que un bloqueo, y le permite compilar cosas enormes una vez cada pocos meses. Simplemente establece un intercambio bajo y estarás bien.
kaay

4

Raspbmc utiliza /etc/init/swap.confpara configurar el intercambio a través de / archivo de intercambio. Primero comprueba la presencia de /home/pi/.enable_swap.

Si elimina /home/pi/.enable_swap, el archivo de intercambio no se crea, y luego vuelva a crearlo touch /home/pi/.enable_swapsi necesita activar el intercambio y reiniciar.


4

Es una pena que Raspberry Pis no tenga GigaBit Ethernet, pero al menos es teóricamente posible tener espacio de intercambio en un dispositivo de red: el Proyecto Terminal Server de Linux puede ofrecerlo desde el servidor a los clientes de acuerdo con este elemento en su wiki .

Encontré un tema del Foro de la Fundación "Sugerencia: intercambiar sobre nfs" que muestra cómo alguien que ya tenía algunos montajes NFS ya instalados usó un archivo de intercambio en uno de ellos y lo montó a través de un montaje en bucle (posiblemente necesario porque Linux no permite un Montaje NFS para ser utilizado directamente). Dado que el intercambio de archivos remoto será contener datos que el sistema operativo no debe perder sólo consideraría esto para una red Ethernet cableada - un enlace inalámbrico sería demasiado frágil en mi humilde opinión. Además, por supuesto, no debe permitir que el servidor remoto se apague sin apagar el intercambio y permitir que se vacíe por completo primero.


RPi no se beneficiaría de GB Ethernet en absoluto, debido al ancho de banda limitado entre el chip Broadcom y el controlador Ethernet.
Dmitry Grigoryev

1
... y el controlador de Ethernet como complemento del chip USB . Sí, pero podemos soñar con un diseño hipotético de RPi donde el hardware de red era parte del dispositivo central SoC. 8-P
SlySven

Los controladores de Ethernet a menudo son chips externos, pero el USB como bus entre chips es realmente malo tanto para la velocidad como para el consumo de energía.
Dmitry Grigoryev