วิธีการตั้งค่าพื้นที่สว็อป?


114

Raspberry Pi มี RAM เพียง 256 MB ดังนั้นฉันต้องการใช้พื้นที่สว็อป (ทั้งในการ์ด SD หรือที่เก็บข้อมูล USB ที่ต่อพ่วง) ฉันจะตั้งค่าได้อย่างไร


10
การสลับบน Pi (และอุปกรณ์ที่คล้ายกัน) อาจช้าลงอย่างเจ็บปวดและสิ่งใดก็ตามที่จบลงด้วยการใช้ swap อย่างกว้างขวางจะทำให้ระบบหยุดนิ่ง ระวัง!
MattJ

1
คุณจะรู้ว่าสิ่งที่ดีคือไดรฟ์ USB RAM (ไม่ใช่แฟลชหรือ SSD แต่ชิปหน่วยความจำจริงระเหยที่ทำงานด้วยความเร็ว USB) มันจะดีสำหรับการแลกเปลี่ยนที่ดีทีเดียว
Piotr Kula

3
@Tibor คำถามคือ "วิธีการตั้งค่าพื้นที่สว็อป?" ในความคิดของฉันคำตอบที่ถูกต้องควรอธิบายถึงวิธีที่จะทำเช่นนั้นรวมทั้งให้ความสนใจกับข้อผิดพลาดบางอย่างและเตือนต่อการใช้ผิดประเภท คำตอบของคุณจะเป็นเช่นนั้นในขณะที่คำตอบที่ "ได้รับความนิยมมากที่สุด" จะบอกคุณเท่านั้นว่าทำไมคุณไม่ควร "ทำสิ่งนี้เลย" (ซึ่งเป็นสิ่งที่โง่เพราะมีวิธีการใช้ที่เหมาะสมและเป็นประโยชน์จริง ๆ)
Andrew Larsson

1
มีคำเตือนประมาณหนึ่งล้านข้อในการใช้ swap กับราสเบอร์รี่ pi ในหน้านี้ แต่ถ้าคุณต้องการสร้างอะไรซักอย่างหนึ่งครั้งก็หลีกเลี่ยงไม่ได้
Archonic

1
@Archonic - 1 ฉันใช้ไฟล์หน่วยความจำไม่เพียงพอในบางโอกาส ไฟล์ swap ขนาดเล็กที่มีการสลับต่ำจะเป็นการปรับปรุงในสถานการณ์ปัจจุบัน
jww

คำตอบ:


134

Raspbian ใช้dphys-swapfileซึ่งเป็นโซลูชันแบบแลกเปลี่ยนไฟล์แทนที่จะเป็นโซลูชันพื้นฐานของ swap-partition แบบมาตรฐาน มันง่ายกว่ามากในการเปลี่ยนขนาดของการแลกเปลี่ยน

ไฟล์การกำหนดค่าคือ:

/etc/dphys-swapfile 

เนื้อหานั้นง่ายมาก โดยค่าเริ่มต้น Raspbian ของฉันมีการแลกเปลี่ยน 100MB:

CONF_SWAPSIZE=100

หากคุณต้องการเปลี่ยนขนาดคุณจะต้องแก้ไขจำนวนและรีสตาร์ท dphys-swapfile:

/etc/init.d/dphys-swapfile restart

แก้ไข: บน Raspbian ตำแหน่งเริ่มต้นคือ / var / swap ซึ่ง (แน่นอน) อยู่ในการ์ด SD ฉันคิดว่ามันเป็นความคิดที่ไม่ดีดังนั้นฉันจึงอยากจะชี้ให้เห็นว่า / etc / dphys-swapfile สามารถมีตัวเลือกต่อไปนี้ได้เช่นกัน: CONF_SWAPFILE = / media / btsync / swapfile

ฉันมีปัญหากับมันเท่านั้นที่จัดเก็บข้อมูล usb นั้นเป็นแบบอัตโนมัติดังนั้นจึงมีการแข่งขันที่นี่ (automount vs. swapon)


2
นี่คือคำตอบที่ถูกต้อง ไม่มีคำตอบอื่น ๆ ที่กล่าวถึง dphys-swapfile
Kenji Noguchi

1
ฉัน upvoted คำตอบนี้เป็นคำตอบที่ถูกต้องจริงๆ เรียนรู้วิธีการทั้งหมดที่ยากมากเมื่อเร็ว ๆ นี้คำตอบของคุณสามารถช่วยฉันได้มาก ;-)
Drachenfels

คุณช่วยอธิบายได้ไหมว่าเพราะเหตุใดการใช้/var/swapจึงเป็นแนวคิดที่ไม่ดี
Andrey Portnoy

ในการติดตั้งแพ็กเกจ R ซึ่งล้มเหลวมาก่อนเนื่องจาก "การโทรของระบบล้มเหลวไม่สามารถจัดสรรหน่วยความจำ": ตั้งค่า CONF_SWAPSIZE = 1024 น้อยไม่พอ
มายากลแนวหน้า

36

คุณสามารถตั้งค่าพื้นที่สว็อปได้ค่อนข้างง่าย ตัวอย่างเช่นหากไดรฟ์ USB ของคุณคือ/dev/sdxคุณจะใช้ (คุณต้องเป็น root สำหรับสิ่งนี้):

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

โปรดทราบว่านี่จะใช้อุปกรณ์ทั้งหมดและคุณอาจสูญเสียข้อมูลที่มีอยู่ทั้งหมดในนั้น

คุณสามารถสร้างไฟล์สลับ (โดยใช้loopอุปกรณ์) เช่นนี้:

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

เมื่อคุณไม่จำเป็นต้องแลกเปลี่ยนไฟล์ (ถ้าคุณต้องการที่จะดึงไดรฟ์ USB ตัวอย่าง) swapoff <device>คุณต้องใช้ การไม่ทำเช่นนั้นอาจส่งผลให้ระบบขัดข้อง

คุณควรจะระมัดระวังแม้ว่า การ์ด SD มีข้อ จำกัด ในการอ่าน / เขียนที่ จำกัด และจะทำให้อายุการใช้งานสั้นลง หากคุณใช้ฮาร์ดไดรฟ์ภายนอกคุณควรใช้ได้ แต่จะช้ามาก


2
ทำไมต้องเพิ่มลูปแบ็ค แน่นอนว่าไม่จำเป็น
popey

คุณพูดถูก ฉันแก้ไขคำตอบเพื่อสะท้อนว่า

2
ฉันคิดว่าคุณควรเปลี่ยนสิ่งนี้เพื่อหลีกเลี่ยงผู้ใช้คัดลอกและวางและทำงานmkswapบนพาร์ทิชันรากของพวกเขาโดยไม่ตั้งใจ ฉันคิดว่าsdxเป็นการประชุมที่ดี
Jivings

3
ผู้ใช้ที่เลือกที่จะเปิด SWAP อาจจะสนใจในการปรับเคอร์เนลswappiness
earthmeLon

@earthmelon Raspbian Jessie มีความรวดเร็ว 1 โดยค่าเริ่มต้น
kaay

32

อย่าทำเช่นนี้เลย

คุณไม่ควรเปิดใช้งานการสลับบน Raspberry Pi

แม้ว่าจะเป็นไปได้ แต่ก็ไม่มีประโยชน์ แม้แต่ในการ์ด SDHC ระดับ 10 มันช้าเกินไป นอกจากนี้คุณจะลดอายุการใช้งานของการ์ด SD

สำหรับอุปกรณ์เก็บข้อมูลแบบแฟลช (SD card, SDD, USB thumb drive) คุณมีแนวโน้มที่จะเห็นการหยุดชั่วคราวของระบบในขณะที่กลุ่มแฟลชบล็อกขนาดใหญ่จะถูกลบ

ข้อยกเว้นที่เป็นไปได้:

  • หากคุณเชื่อมต่อฮาร์ดไดรฟ์ (แบบแม่เหล็ก) (แม้ว่าจะเป็นอะแดปเตอร์ USB-SATA หรือ USB-IDE)
  • หากคุณใช้ZRAMหรือสิ่งที่คล้ายกัน

3
ไม่ต้องสงสัยเลยว่าการสลับไปมาบน USB Bey จะฆ่าคีย์ของคุณอย่างรวดเร็วการแลกเปลี่ยนบนการ์ด SD นั้นก็เป็นอันตรายเช่นกันแม้ว่าการ์ด SD รุ่นใหม่ (คลาส 10) จะรองรับได้ดีกว่า ZRAMเห็นได้ชัดว่าเป็นวิธีที่จะไปหากคุณต้องการ RAM มากขึ้น
neofutur

1
คุณจะคิดว่าด้วยเทคโนโลยี ReadyBoost ใน Windows ที่ใครบางคนจะสร้างไดรฟ์ USB (หรือ eSata ไม่แน่ใจว่า ReadyBoost สามารถใช้งานได้นั้นจะไม่มีประโยชน์กับราสเบอร์รี่ pi แต่น่าสนใจ) ที่ใช้ RAM จริงเพื่อให้คุณ เพิ่มประสิทธิภาพคอมพิวเตอร์ของคุณ แม้ว่ามันอาจจะง่ายและราคาถูกลงเพียงซื้อเมนบอร์ดใหม่ที่รองรับปริมาณ RAM ที่คุณต้องการ
Kibbee

33
ทำไมคำตอบนี้มี upvotes มากมาย มีเหตุผลมากมายที่จะใช้การสลับ ฉันใช้ไฟล์ swap ในไดรฟ์ภายนอกเพื่อรวบรวมไลบรารีขนาดใหญ่ในช่วงสองสามวัน มันช้าเหมือนลิงตายที่ลอยอยู่ในกากน้ำตาล แต่นั่นไม่ได้หมายความว่าคุณควรจะ "ไม่ทำแบบนี้เลย"
Andrew Larsson

10
คำเตือนของคุณแม้ว่าจะมีความหมายดีแล้วก็แข็งแกร่งเกินไป ค้นหา 'ทำไมไม่' และ 'ทำไม' เป็นสิ่งที่ Raspberry Pi มีไว้สำหรับ: ลองสิ่งที่คุณต้องการด้วยและเรียนรู้ นอกจากนี้ยังมีเหตุผลที่ดีในการใช้ไดรฟ์ภายนอกสำหรับการสลับเช่นการตอบสนองความต้องการหน่วยความจำสูงสุดสำหรับการรวบรวมไลบรารีแบบครั้งเดียว การค้นหาที่นำฉันมาที่นี่ เวลาที่ฉันเรียนรู้มากที่สุดคือเมื่อฉันทำให้บางสิ่งบางอย่างเล็กน้อยและรู้ว่าทำไม ขออภัยที่จะบอกว่าคุณไม่ได้มีประโยชน์เท่าที่คุณคิด
Chris Hatton

2
ทางที่แข็งแกร่งเกินไป "ดีที่สุดไม่ใช่" บางที แต่ "ไม่ดีสิ้นเปลืองเสียหายและไร้ประโยชน์" กำลังสร้างความเข้าใจผิด ทุกสิ่งที่สวมกับการใช้หมีในใจออกซิเจนเป็นพิษและ Raspbian ไม่ใช้ swapfile การชะลอตัวมักจะดีกว่าความผิดพลาดและช่วยให้คุณสามารถรวบรวมสิ่งที่ยิ่งใหญ่ทุก ๆ เดือน เพียงตั้งค่า swappiness ต่ำและคุณทำได้ดี
kaay

4

Raspbmc ใช้/etc/init/swap.confเพื่อกำหนดค่าการแลกเปลี่ยนผ่านไฟล์ / swap /home/pi/.enable_swapมันตรวจสอบก่อนการปรากฏตัวของ

หากคุณลบ/home/pi/.enable_swapไฟล์ swap จะไม่ถูกสร้างขึ้นจากนั้นเพียงสร้างไฟล์ขึ้นมาใหม่touch /home/pi/.enable_swapหากคุณต้องการ swap และเปิดเครื่องใหม่


4

เป็นเรื่องน่าเสียดายที่ Raspberry Pis ไม่มี GigaBit Ethernet แต่อย่างน้อยก็เป็นไปได้ในทางทฤษฎีที่จะมีพื้นที่สว็อปบนอุปกรณ์เครือข่าย - โครงการ Linux Terminal Server สามารถให้บริการได้จากเซิร์ฟเวอร์ไปยังลูกค้าตามรายการนี้ในวิกิของพวกเขา .

ฉันพบหัวข้อฟอรัมรากฐาน"เคล็ดลับ: สลับไปยัง nfs"ซึ่งแสดงว่าคนที่มี NFS เมานต์อยู่แล้วใช้ swapfile บนหนึ่งในนั้นและติดตั้งผ่านลูป - เมานต์ (อาจจำเป็นเนื่องจาก Linux ไม่อนุญาต NFS mount ที่จะใช้โดยตรง) ระบุว่าไฟล์ swap ระยะไกลจะเก็บข้อมูลที่ระบบปฏิบัติการต้องไม่สูญเสียฉันเพียงแค่พิจารณาเรื่องนี้สำหรับเครือข่ายอีเธอร์เน็ตแบบใช้สาย - ลิงค์ไร้สายจะเป็น IMHO ที่บอบบางเกินไป นอกจากนี้แน่นอนว่าคุณจะต้องไม่อนุญาตให้รีโมตเซิร์ฟเวอร์ปิดเครื่องโดยไม่ต้องปิดสวิตช์และปล่อยให้ว่างเปล่าก่อน!


RPi จะไม่ได้รับประโยชน์จาก GB Ethernet เลยเนื่องจากมีแบนด์วิดท์ จำกัด ระหว่างชิป Broadcom และคอนโทรลเลอร์อีเธอร์เน็ต
Dmitry Grigoryev

1
... และคอนโทรลเลอร์อีเธอร์เน็ตเป็นส่วนเสริมสำหรับชิป USB ! ใช่ แต่เราสามารถฝันถึงการออกแบบ RPi สมมุติที่ฮาร์ดแวร์เครือข่ายเป็นส่วนหนึ่งของอุปกรณ์หลัก SoC 8-P
SlySven

คอนโทรลเลอร์อีเธอร์เน็ตมักจะเป็นชิปภายนอก แต่ USB ในฐานะที่เป็นบัสระหว่างชิปย่อมไม่ดีต่อทั้งความเร็วและการใช้พลังงาน
Dmitry Grigoryev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.