Jak skonfigurować przestrzeń wymiany?

114

Raspberry Pi ma tylko 256 MB pamięci RAM, więc chciałbym użyć przestrzeni wymiany (na karcie SD lub podłączonej pamięci USB). Jak to skonfigurować?


źródło
10
Zamiana na Pi (i podobnych urządzeniach) może być boleśnie powolna, a wszystko, co faktycznie zakończy się intensywnym używaniem zamiany, praktycznie zatrzyma system. Ostrożny!
MattJ
1
Wiesz, co byłoby dobre, to pamięć RAM USB (nie flash ani SSD, ale rzeczywisty układ pamięci RAM działający z prędkością USB) Przydałby się bardzo dobrze przy takiej zamianie.
Piotr Kula,
3
@ Tibor Pytanie brzmi: „Jak skonfigurować przestrzeń wymiany?” Moim zdaniem poprawna odpowiedź powinna opisywać, jak to zrobić, a także zwracać uwagę na niektóre pułapki i ostrzegać przed niewłaściwym użyciem. Twoja odpowiedź pokazuje, że choć „najbardziej popularna” odpowiedź mówi tylko, dlaczego nigdy nie powinieneś „robić tego w ogóle” (co jest głupie, ponieważ istnieje właściwy sposób jej użycia, a tak naprawdę jest użyteczny).
Andrew Larsson,
1
Na tej stronie znajduje się około miliona ostrzeżeń przed używaniem zamiany z malinowym pi, ale jeśli musisz kiedyś zbudować coś, jest to nieuniknione.
Archonic
1
@Archonic - +1 . I zabrakło pamięci opracowującym plików na okazję. Mały plik wymiany o niskiej zamianie będzie poprawą w stosunku do obecnej sytuacji.
jww

Odpowiedzi:

134

Raspbian używa dphys-swapfile , który jest rozwiązaniem opartym na plikach wymiany zamiast „standardowego” rozwiązania opartego na partycji wymiany. Znacznie łatwiej jest zmienić rozmiar zamiany.

Plik konfiguracyjny to:

/etc/dphys-swapfile 

Treść jest bardzo prosta. Domyślnie mój Raspbian ma 100 MB wymiany:

CONF_SWAPSIZE=100

Jeśli chcesz zmienić rozmiar, musisz zmodyfikować numer i zrestartować plik dphys-swap:

/etc/init.d/dphys-swapfile restart

Edycja: W Raspbian domyślną lokalizacją jest / var / swap, która (oczywiście) znajduje się na karcie SD. Myślę, że to zły pomysł, dlatego chciałbym zauważyć, że plik / etc / dphys-swap może mieć również następującą opcję: CONF_SWAPFILE = / media / btsync / swapfile

Mam tylko z tym problem, pamięć USB jest automatycznie montowana, więc potencjalny wyścig tutaj (automount vs. swapon)

asalamon74
źródło
2
To jest poprawna odpowiedź. Żadna z pozostałych odpowiedzi nie wspomniała o pliku wymiany dphys.
Kenji Noguchi
1
Poparłem tę odpowiedź jako naprawdę poprawną. Nauczyłem się tej trudnej drogi całkiem niedawno, twoja odpowiedź może mi zaoszczędzić dużo czasu. ;-)
Drachenfels
Czy możesz wyjaśnić, dlaczego używanie /var/swapjest złym pomysłem?
Andrey Portnoy
aby zainstalować pakiety R, które wcześniej nie działały z powodu „niepowodzenia połączenia systemowego nie można przydzielić pamięci”: Ustaw CONF_SWAPSIZE = 1024. Mniej nie wystarczy.
wertykalista
36

Możesz ustawić przestrzeń wymiany po prostu. Na przykład, jeśli masz napęd USB /dev/sdx, możesz użyć (musisz mieć uprawnienia roota):

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

Pamiętaj, że użyje to całego urządzenia i prawdopodobnie stracisz wszystkie istniejące na nim dane.

Możesz również utworzyć plik wymiany (przy użyciu loopurządzenia) w następujący sposób:

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

Jeśli nie potrzebujesz już pliku wymiany (jeśli chcesz na przykład wysunąć dysk USB), musisz go użyć swapoff <device>. W przeciwnym razie prawdopodobnie nastąpi awaria systemu.

Powinieneś jednak uważać . Karty SD mają ograniczone limity odczytu / zapisu i skróci ich żywotność. Jeśli używasz zewnętrznego dysku twardego, wszystko powinno być w porządku, ale będzie bardzo wolne.

Andrew Larsson
źródło
2
Po co dodawać sprzężenie zwrotne? Z pewnością to nie jest konieczne?
popey
Masz rację, nie jest. Zredagowałem odpowiedź, aby to odzwierciedlić.
2
Myślę, że powinieneś to zmienić, aby uniknąć kopiowania i wklejania przez użytkowników i przypadkowego uruchamiania mkswapich na partycji głównej. Myślę, że sdxto dobra konwencja.
Jivings,
3
Użytkownicy, którzy zdecydują się włączyć SWAP, mogą być zainteresowani dostosowaniem zamiany jądra .
earthmeLon
@earthmelon Raspbian Jessie ma domyślnie swappiness 1.
kaay
32

W ogóle tego nie rób.

Należy nie umożliwiają zamianę na Raspberry Pi.

Chociaż jest to możliwe, nie jest przydatne. Nawet na karcie SDHC klasy 10 jest po prostu zbyt wolny. Zmniejszysz także żywotność karty SD.

Na dowolnym urządzeniu pamięci flash (karta SD, SDD, pamięć USB) możesz również zobaczyć przerwy systemowe, gdy duża grupa bloków pamięci flash zostanie skasowana.

Możliwe wyjątki:

  • Jeśli podłączysz (magnetyczny) dysk twardy (choć adapter USB-SATA lub USB-IDE)
  • Jeśli używasz ZRAM lub czegoś podobnego
finnw
źródło
3
bez wątpienia zamiana na pamięć USB zabije twój klucz bardzo szybko, zamiana na kartę SD jest również niebezpieczna, nawet jeśli nowsze karty SD (klasy 10) mogłyby ją lepiej obsługiwać. ZRAM jest zdecydowanie najlepszym rozwiązaniem, jeśli potrzebujesz więcej pamięci RAM
neofutur
1
Można by pomyśleć, że dzięki technologii ReadyBoost w systemie Windows ktoś zrobi napęd USB (lub eSata, nie jestem pewien, czy ReadyBoost może z niego korzystać, nie przydałby się Raspberry Pi, ale byłoby interesujące), który używałby faktycznej pamięci RAM, abyś mógł zwiększyć wydajność komputera. Chociaż prawdopodobnie łatwiej i taniej byłoby po prostu kupić nową płytę główną obsługującą potrzebną ilość pamięci RAM.
Kibbee
33
Dlaczego ta odpowiedź ma tak wiele pozytywnych opinii? Istnieje wiele powodów, aby używać swap. Użyłem pliku wymiany na dysku zewnętrznym do skompilowania dużej biblioteki w ciągu kilku dni. Jest powolny jak martwe małpy unoszące się w melasie, ale to nie znaczy, że „nie powinieneś tego robić”.
Andrew Larsson,
10
Twoje ostrzeżenie, choć słuszne, jest zbyt silne. Dowiedz się „dlaczego nie”, a także „dlaczego” jest dokładnie tym, do czego służy Raspberry Pi: spróbuj z nim, czego chcesz i UCZ SIĘ. Istnieją również dobre powody, aby używać zewnętrznego dysku do wymiany, na przykład spełnienie maksymalnego zapotrzebowania na pamięć dla jednorazowej kompilacji biblioteki; poszukiwania, które mnie tu przywiodły. Czego się najbardziej nauczyłem, kiedy spieprzyłem coś drobnego i zrozumiałem, dlaczego. Przykro mi to mówić, ale nie jesteś tak pomocny, jak ci się wydaje.
Chris Hatton
2
O wiele za silny. Być może „najlepiej nie”, ale „złe, marnotrawne, niszczące i bezużyteczne” wprowadza w błąd. Wszystko nosi z użyciem pamiętać tlen jest toksyczny, a Raspbian robi użyć plik wymiany. Spowolnienie jest zwykle lepsze niż awaria i pozwala kompilować ogromne rzeczy raz na kilka miesięcy. Po prostu ustaw niską swapiness i jesteś dobry.
kaay
4

Raspbmc używa /etc/init/swap.confdo konfiguracji wymiany poprzez plik / swap. Najpierw sprawdza obecność /home/pi/.enable_swap.

Jeśli usuniesz /home/pi/.enable_swapplik wymiany, plik wymiany nie zostanie utworzony, a następnie po prostu utwórz go ponownie, touch /home/pi/.enable_swapjeśli potrzebujesz zamiany włączonej i uruchom ponownie.

Valentt
źródło
4

Szkoda, że ​​Raspberry Pis nie ma GigaBit Ethernet, ale teoretycznie możliwe jest posiadanie przestrzeni wymiany na urządzeniu sieciowym - Linux Terminal Server Project może zaoferować ją od serwera klientom zgodnie z tym elementem na swojej wiki .

Znalazłem temat na forum Foundation „Wskazówka: Zamień na nfs”, który pokazuje, w jaki sposób ktoś, kto miał już niektóre podłączenia NFS, zastosował plik wymiany na jednym z nich i zamontował go za pomocą podłączenia pętli (prawdopodobnie potrzebne, ponieważ Linux nie pozwala na Montaż NFS do bezpośredniego użycia). Biorąc pod uwagę, że zdalny plik wymiany będzie przechowywał dane, których system operacyjny nie może utracić , rozważę to tylko w przypadku przewodowej sieci Ethernet - połączenie bezprzewodowe byłoby zbyt delikatne IMHO. Oczywiście nie wolno także zezwalać na zamykanie zdalnego serwera bez wyłączania wymiany i uprzedniego całkowitego opróżnienia!

SlySven
źródło
RPi w ogóle nie skorzystałoby z GB Ethernet z powodu ograniczonej przepustowości między układem Broadcom a kontrolerem Ethernet.
Dmitrij Grigoriew
1
... i kontroler Ethernet jako dodatek do układu USB ! Tak, ale możemy marzyć o hipotetycznym projekcie RPi, w którym sprzęt sieciowy był częścią podstawowego urządzenia SoC. 8-P
SlySven,
Kontrolery Ethernet są często zewnętrznymi układami scalonymi, ale USB jako magistrala między układami jest rzeczywiście niekorzystny zarówno pod względem szybkości, jak i zużycia energii.
Dmitrij Grigoryev,