Comment configurer un espace d'échange?

114

Raspberry Pi ne disposant que de 256 Mo de RAM, je souhaite utiliser l’espace de permutation (sur une carte SD ou sur un périphérique de stockage USB connecté). Comment puis-je le configurer?


la source
10
La permutation sur le Pi (et autres appareils similaires) peut être extrêmement lente, et tout ce qui finit par utiliser intensément la permutation intervertira pratiquement le système. Prudent!
MattJ
1
Vous savez ce qui serait bien est un lecteur USB RAM (pas de flash ou SSD mais une puce RAM volatile fonctionnant à des vitesses USB) Cela ferait du bien pour un échange de ce type.
Piotr Kula
3
@Tibor La question est "Comment configurer un espace d'échange?" À mon avis, une réponse correcte devrait décrire comment le faire, attirer l'attention sur certains pièges et mettre en garde contre les utilisations abusives. Votre réponse ne fait que cela, alors que la réponse "la plus populaire" ne vous indique que la raison pour laquelle vous ne devriez jamais "faire cela du tout" (ce qui est stupide, car il existe une manière appropriée de l'utiliser, et c'est en fait utile).
Andrew Larsson
1
Il y a environ un million d'avertissements contre l'utilisation de swap avec un framboise pi sur cette page, mais si vous devez créer quelque chose une fois, c'est inévitable.
Archonic
1
@Archonic - +1 . Je manque de mémoire pour compiler des fichiers à l'occasion. Un petit fichier d'échange à faible permutation sera une amélioration par rapport à la situation actuelle.
jww

Réponses:

134

Raspbian utilise dphys-swapfile , une solution basée sur un fichier d'échange plutôt que sur la solution "standard" basée sur une partition d'échange. Il est beaucoup plus facile de changer la taille du swap.

Le fichier de configuration est:

/etc/dphys-swapfile 

Le contenu est très simple. Par défaut, mon Raspbian dispose de 100 Mo d’échange:

CONF_SWAPSIZE=100

Si vous souhaitez modifier la taille, vous devez modifier le nombre et redémarrer dphys-swapfile:

/etc/init.d/dphys-swapfile restart

Edit: Sur Raspbian, l’emplacement par défaut est / var / swap, qui est (bien sûr) situé sur la carte SD. Je pense que c'est une mauvaise idée et je tiens à préciser que le fichier / etc / dphys-swapfile peut également avoir l'option suivante: CONF_SWAPFILE = / media / btsync / swapfile

J'ai seulement un problème avec cela, le stockage usb est monté automatiquement, donc une course potentielle ici (montage automatique vs swapon)

asalamon74
la source
2
C'est la bonne réponse. Aucune autre réponse ne mentionne le fichier swph de dphys.
Kenji Noguchi
1
J'ai voté pour que cette réponse soit vraiment correcte. Vous avez appris cette méthode très récemment, votre réponse pourrait me faire gagner beaucoup de temps. ;-)
Drachenfels
Pourriez-vous préciser pourquoi l'utilisation /var/swapest une mauvaise idée?
Andrey Portnoy
installer les packages R, qui avaient échoué auparavant en raison de "l'échec de l'appel système ne peut pas allouer de mémoire": Définissez CONF_SWAPSIZE = 1024. Moins n'est pas suffisant.
Vertikaliste
36

Vous pouvez configurer un espace d'échange très simplement. Par exemple, si votre clé USB est /dev/sdxutilisée, vous utiliseriez (vous devez être root pour cela):

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

Notez que cela utiliserait l’ensemble du périphérique et vous perdrez probablement toutes les données existantes.

Vous pouvez également créer un fichier d'échange (à l'aide d'un looppériphérique) comme ceci:

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

Lorsque vous n'avez plus besoin du fichier d'échange (si vous souhaitez éjecter le lecteur USB, par exemple), vous devez l'utiliser swapoff <device>. Ne pas le faire entraînera probablement un plantage du système.

Vous devriez faire attention cependant . Les cartes SD ont des limites de lecture / écriture limitées, ce qui raccourcira sa durée de vie. Si vous utilisez un disque dur externe, ça devrait aller, mais ce sera très lent.

Andrew Larsson
la source
2
Pourquoi ajouter le bouclage? Ce n'est sûrement pas nécessaire?
popey
Vous avez raison, ce n'est pas. J'ai édité la réponse pour refléter cela.
2
Je pense que vous devriez changer cela pour éviter aux utilisateurs de copier-coller et d’exécuter accidentellement mkswapsur leur partition racine. Je pense que sdxc'est une bonne convention.
Jivings
3
Les utilisateurs qui choisissent d'activer SWAP peuvent être intéressés par l'ajustement de la permutation du noyau .
earthmeLon
@earthmelon Raspbian Jessie a swappiness 1 par défaut.
Kaay
32

Ne faites pas ça du tout.

Vous ne devez pas activer l'échange sur le Raspberry Pi.

Bien que ce soit possible, ce n'est pas utile. Même sur une carte SDHC de classe 10, elle est trop lente. Aussi, vous réduirez la durée de vie de la carte SD.

Sur n'importe quel périphérique de stockage à mémoire flash (carte SD, SDD, clés USB), vous risquez également de voir des pauses à l'échelle du système lorsqu'un groupe important de blocs flash est effacé.

Exceptions possibles:

  • Si vous connectez un disque dur (magnétique) (via un adaptateur USB-SATA ou USB-IDE)
  • Si vous utilisez ZRAM ou quelque chose de similaire
finnw
la source
3
Nul doute que permuter sur une clé USB tuera votre clé très rapidement, permuter sur une carte SD est également dangereux, même si de nouvelles cartes SD (classe 10) pourraient mieux la prendre en charge. ZRAM est clairement la voie à suivre si vous avez besoin de plus de mémoire RAM
neofutur Le
1
On pourrait penser qu'avec la technologie ReadyBoost de Windows, quelqu'un fabrique un lecteur USB (ou eSata, ne sachant pas si ReadyBoost peut l'utiliser, ne serait d'aucune utilité pour raspberry pi, mais serait intéressant) qui utilisait de la RAM réelle pour pouvoir améliorer les performances de votre ordinateur. Même s’il serait probablement plus facile et moins coûteux d’acheter une nouvelle carte mère prenant en charge la quantité de RAM dont vous avez besoin.
Kibbee
33
Pourquoi cette réponse a-t-elle tant de votes positifs? Il y a beaucoup de raisons d'utiliser swap. J'ai utilisé un fichier d'échange sur un lecteur externe pour compiler une grande bibliothèque en quelques jours. C'est lent comme des singes morts flottant dans la mélasse, mais cela ne signifie pas que vous ne devriez pas "faire ça du tout".
Andrew Larsson
10
Votre avertissement, bien que bien intentionné, est beaucoup trop fort. Connaître «pourquoi pas» et «pourquoi» est exactement ce à quoi le Raspberry Pi est destiné: essayez ce que vous voulez et APPRENEZ. Il existe également de bonnes raisons d'utiliser un lecteur externe pour le swap, par exemple pour satisfaire un besoin en mémoire maximum pour une compilation de bibliothèque unique; la recherche qui m'a amené ici. Les temps que j'ai le plus appris sont ceux où j'ai bousillé quelque chose de mineur et compris pourquoi. Désolé de dire que vous n'êtes pas aussi utile que vous le pensez.
Chris Hatton
2
Bien trop fort. "mieux ne pas", peut-être, mais "mauvais, inutile, dommageable et inutile" est trompeur. Tout porte avec l' utilisation, gardez à l' esprit d' oxygène est toxique, et Raspbian fait utiliser un fichier d' échange. Un ralentissement est généralement préférable à un accident et vous permet de compiler des choses énormes une fois par mois. Il suffit de définir faible swappiness et vous êtes bon.
Kaay
4

Raspbmc utilise /etc/init/swap.confpour configurer l’échange via un fichier / swap. Il vérifie d'abord la présence de /home/pi/.enable_swap.

Si vous supprimez, le /home/pi/.enable_swapfichier d'échange n'est pas créé, puis recréez-le simplement touch /home/pi/.enable_swapsi vous devez activer le swap et redémarrer.

valentt
la source
4

Il est dommage que les serveurs Raspberry Pis ne disposent pas d’Ethernet GigaBit, mais il est au moins théoriquement possible d’avoir de l’espace de permutation sur un périphérique réseau - le projet Linux Terminal Server peut l’offrir du serveur aux clients en fonction de cet élément sur leur wiki. .

J'ai trouvé un sujet du forum de la fondation "Conseil: permuter sur nfs" qui montre comment une personne possédant déjà des montages NFS déjà en place utilisait un fichier d'échange sur l'un d'entre eux et le montait via un montage en boucle (éventuellement nécessaire car Linux ne permet pas Montage NFS à utiliser directement). Etant donné que le fichier d'échange distant contiendra des données que le système d'exploitation ne doit pas perdre, je n'envisagerais ceci que pour un réseau Ethernet câblé - une liaison sans fil serait un IMHO trop fragile. En outre, vous ne devez bien sûr pas autoriser l’arrêt du serveur distant sans désactiver le swap et lui permettre de se vider complètement au préalable!

SlySven
la source
En raison de la bande passante limitée entre la puce Broadcom et le contrôleur Ethernet, RPi ne bénéficierait pas du tout d’Ethernet GB.
Dmitry Grigoryev
1
... et le contrôleur Ethernet en complément de la puce USB ! Oui, mais nous pouvons rêver d’une conception hypothétique de RPi où le matériel de réseau faisait partie du dispositif de base du SoC. 8-P
SlySven
Les contrôleurs Ethernet sont souvent des puces externes, mais l’USB en tant que bus inter-puces est en effet mauvais pour la vitesse et la consommation électrique.
Dmitry Grigoryev