Fråga:
Hur ställer jag in swap-utrymme?
user13
2012-06-13 02:32:05 UTC
view on stackexchange narkive permalink

Raspberry Pi har bara 256 MB RAM-minne, så jag skulle vilja använda swap-utrymme (antingen på SD-kort eller anslutet USB-lagring). Hur ställer jag in det?

Byte på Pi (och liknande enheter) kan vara smärtsamt långsamt, och allt som faktiskt hamnar med att använda swap i stor utsträckning kommer praktiskt taget att stanna systemet. Försiktig!
@MattJ överens. Definitivt ingen bra idé.
Du vet vad som skulle vara bra är en USB RAM-enhet (inte flash eller SSD men faktiskt flyktigt RAM-chip som körs med USB-hastigheter) Det skulle göra bra för en sådan byte ganska bra.
@AndrewLarsson eftersom det motsatta svaret har fler röster.
@Tibor Frågan är "Hur ställer jag in swap-utrymme?" Enligt min mening bör ett korrekt svar beskriva hur man gör det samt uppmärksamma vissa fallgropar och varna för missbruk. Ditt svar gör just det medan det "mest populära" svaret bara berättar varför du aldrig skulle "göra detta alls" (vilket är dumt, för det finns ett korrekt sätt att använda det, och det är faktiskt * användbart).
Det finns ungefär en miljon varningar för att använda swap med en hallon pi på den här sidan, men om du behöver bygga något en gång är det oundvikligt.
@Archonic - *** + 1 ***. Jag [tar slut på minnet som kompilerar filer] (http://www.google.com/search?q=cc1plus+out+of+memory) ibland. En liten swap-fil med [low swapiness] (http://askubuntu.com/q/103915) kommer att vara en förbättring jämfört med den nuvarande situationen.
Fem svar:
#1
+152
asalamon74
2012-08-15 08:52:49 UTC
view on stackexchange narkive permalink

Raspbian använder dphys-swapfile, som är en swap-filbaserad lösning istället för den "standard" swap-partition baserade lösningen. Det är mycket lättare att ändra storleken på bytet.

Konfigurationsfilen är:

  / etc / dphys-swapfile  

Innehållet är väldigt enkelt. Som standard har min Raspbian 100 MB byte:

  CONF_SWAPSIZE = 100  

Om du vill ändra storlek måste du ändra numret och starta om dphys -swapfile:

  /etc/init.d/dphys-swapfile restart  

Edit: På Raspbian är standardplatsen / var / swap, vilket är (naturligtvis) på SD-kortet. Jag tycker att det är en dålig idé, så jag skulle vilja påpeka att / etc / dphys-swapfile också kan ha följande alternativ: CONF_SWAPFILE = / media / btsync / swapfile

Jag har bara problem med det, USB-lagringen är automatiserad, så en potentiell tävling här (automount vs swapon)

Detta är det rätta svaret. Inget av andra svar nämnde dphys-swapfilen.
Jag har röstat detta svar som riktigt korrekt. Lärde mig allt på det här hårda sättet ganska nyligen, ditt svar kan spara mycket tid. ;-)
Kan du klargöra varför det är en dålig idé att använda `/ var / swap`?
för att installera R-paket, som misslyckades tidigare på grund av "systemanrop misslyckades kan inte allokera minne": Ställ CONF_SWAPSIZE = 1024. Mindre räcker inte.
Eftersom detta bara är användbart en gång ett tag är en separat swap-fil en bättre lösning IMHO. Se [user13s svar] (https://raspberrypi.stackexchange.com/a/75/115622)
#2
+38
user13
2012-06-13 02:37:05 UTC
view on stackexchange narkive permalink

Du kan ställa in swap-utrymme helt enkelt. Till exempel, om din USB-enhet är / dev / sdx , skulle du använda (du måste vara root för detta):

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

Observera att detta skulle använda hela enheten och att du förmodligen kommer att förlora alla befintliga data på den.

Du kan också skapa en swap-fil ( genom att använda en loop -enhet) så här:

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

När du inte längre behöver byta filen (om du till exempel vill mata ut USB-enheten) måste du använda byta <device> . Om du inte gör det kommer det troligen att leda till systemkrasch.

Du bör vara försiktig dock . SD-kort har begränsade läs- / skrivgränser och det kommer att förkorta dess livslängd. Om du använder en extern hårddisk borde du ha det bra, men det kommer att gå mycket långsamt.

Varför lägga till loopback? Det är verkligen inte nödvändigt?
Du har rätt, det är det inte. Jag redigerade svaret för att spegla det.
Jag tror att du borde ändra detta för att undvika att användare kopierar och klistrar in och av misstag kör 'mkswap' på deras rotpartition. Jag tycker att 'sdx' är en bra konvention.
Användare som väljer att aktivera SWAP kan vara intresserade av att justera kärnan ** [swappiness] (http://www.hobbsknowledgebase.co.uk/wiki/How_To_Stop_Linux_Swapping_So_Much) **.
@earthmelon Raspbian Jessie har swappiness 1 som standard.
är swapon aktiverat vid omstart? om inte, hur konfigurerar jag?
#3
+33
finnw
2012-06-19 05:49:30 UTC
view on stackexchange narkive permalink

Gör inte det här alls.

Du bör inte aktivera swap på Raspberry Pi.

Även om det är möjligt, det är inte användbart. Även på ett SDHC-kort av klass 10 är det alldeles för långsamt. Du kommer också att minska SD-kortets livslängd.

På alla flashbaserade lagringsenheter (SD-kort, SDD, USB-minne) kommer du sannolikt att se pauser i hela systemet medan en stor grupp flash-block raderas.

Möjliga undantag:

  • Om du ansluter en (magnetisk) hårddisk (dock en USB-SATA- eller USB-IDE-adapter)
  • Om du använder ZRAM eller något liknande
utan tvekan att byta på en USB-bey kommer att döda din nyckel väldigt snabbt, att byta på SD-kortet är också farligt, även om nyare (klass 10) SD-kort kan stödja det bättre. [ZRAM] (http://raspberry.pi.gw.gd/t50-Using-ZRAM-Virtual-Swap-Compressed.html) är helt klart vägen att gå om du behöver mer RAM
Man skulle tro att med ReadyBoost-tekniken i Windows skulle någon göra en USB-enhet (eller eSata, inte säker på om ReadyBoost kan använda det, skulle vara till någon nytta för hallon pi, men skulle vara intressant) som använde verkligt RAM så att du kunde öka datorns prestanda. Även om det förmodligen skulle vara enklare och billigare att bara köpa ett nytt moderkort som stödde den mängd RAM du behöver.
Varför har det här svaret så många röster? Det finns många anledningar att använda swap. Jag använde en swap-fil på en extern enhet för att kompilera ett stort bibliotek under några dagar. Det är långsamt när döda apor flyter i melass, men det betyder inte att du inte "ska göra det alls."
@AndrewLarsson, Jag hoppas att din externa enhet inte är flash-baserad. Inte för att det är helt värdelöst, saken är att du alltid har bättre alternativ (magnetisk enhet, nätverksenhet, RAM-baserad SSD etc.)
@finnw Du måste bara vara försiktig, och ja, det finns vanligtvis bättre alternativ, men ibland gör du bara vad du måste göra.
Din varning, men väl menande, är alldeles för stark. Ta reda på "varför inte" och "varför" är precis vad Raspberry Pi är för: prova vad du vill med det och LÄR. Det finns också några goda skäl att använda en extern enhet för att byta också, till exempel att uppfylla ett högsta minneskrav för en engångsbibliotekskompilering; sökningen som förde mig hit. De gånger jag lärde mig mest är när jag förstörde något mindre och insåg varför. Tyvärr säger du att du inte är så hjälpsam som du tror att du är.
Alltför stark. "bäst inte", kanske, men "dåligt, slösaktigt, skadligt och värdelöst" är vilseledande. Allt bär med sig, kom ihåg att syre är giftigt och Raspbian ** använder ** en bytesfil. En avmattning är vanligtvis bättre än en krasch, och låter dig sammanställa stora saker en gång varannan månad. Ställ bara in låg swappiness så är du bra.
#4
+4
valentt
2013-02-26 02:49:52 UTC
view on stackexchange narkive permalink

Raspbmc använder /etc/init/swap.conf för att konfigurera swap via / swap-fil. Den kontrollerar först om det finns /home/pi/.enable_swap.

Om du tar bort /home/pi/.enable_swap är inte swap-filen skapad och sedan bara återskapa den med tryck på /home/pi/.enable_swap om du behöver byta på och starta om.

#5
+4
SlySven
2015-12-29 03:51:46 UTC
view on stackexchange narkive permalink

Det är synd att Raspberry Pis inte har GigaBit Ethernet men det är åtminstone teoretiskt möjligt att ha utbytesutrymme på en nätverksenhet - Linux Terminal Server Project kan erbjuda det från servern till klienterna enligt detta objekt på deras wiki.

Jag hittade ett ämne i Foundation Forum "Tips: Byt över nfs" som visar hur någon som hade redan några NFS-fästen redan på plats använt en swapfile på en av dem och monterat den via en loop-mount (eventuellt behövs eftersom Linux inte tillåter att ett NFS-mount används direkt). Med tanke på att fjärrbytesfilen kommer att innehålla data som OS inte får förlora skulle jag bara överväga detta för ett trådbundet Ethernet-nätverk - en trådlös länk skulle vara för ömtålig IMHO . Du får naturligtvis inte tillåta att fjärrservern stängs av utan att stänga av swap och låta den tömmas helt först!

RPi skulle inte dra nytta av GB Ethernet alls på grund av den begränsade bandbredden mellan Broadcom-chipet och Ethernet-styrenheten.
... och Ethernet-styrenheten _ som ett tillägg till USB-chipet_! Ja, men vi kan _drömma om en hypotetisk RPi-design där nätverkshårdvaran var en del av SoC-kärnanordningen. 8-P
Ethernet-styrenheter är ofta externa chips, men USB som en inter-chip-buss är verkligen dåligt för både hastighet och strömförbrukning.


Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...