Làm thế nào để thiết lập không gian hoán đổi?


114

Raspberry Pi chỉ có 256 MB RAM, vì vậy tôi muốn sử dụng không gian trao đổi (trên thẻ SD hoặc bộ lưu trữ USB kèm theo). Làm thế nào để tôi thiết lập nó?


10
Hoán đổi trên Pi (và các thiết bị tương tự) có thể bị chậm một cách khó khăn và bất cứ điều gì thực sự kết thúc bằng cách sử dụng trao đổi rộng rãi trên thực tế sẽ khiến hệ thống đứng yên. Cẩn thận!
MattJ

1
Bạn biết điều gì sẽ tốt là ổ USB USB (không phải flash hay SSD nhưng chip ram dễ bay hơi thực tế chạy ở tốc độ USB) Nó sẽ rất tốt cho một trao đổi như vậy khá tốt.
Piotr Kula

3
@Tibor Câu hỏi là "Làm cách nào để thiết lập không gian hoán đổi?" Theo tôi, một câu trả lời đúng cần mô tả cách thực hiện cũng như gây chú ý đến một số cạm bẫy và cảnh báo chống lại việc sử dụng sai. Câu trả lời của bạn không chỉ là trong khi "phổ biến nhất" trả lời duy nhất cho bạn biết lý do tại sao bạn nên không bao giờ "làm điều này cả" (đó là ngu ngốc, bởi vì có một cách thích hợp để sử dụng nó, và nó thực sự hữu ích).
Andrew Larsson

1
Có khoảng một triệu cảnh báo chống lại việc sử dụng trao đổi với mâm xôi pi trên trang này, nhưng nếu bạn cần xây dựng một cái gì đó một lần, điều đó là không thể tránh khỏi.
Archonic

1
@Archonic - +1 . Thỉnh thoảng tôi hết bộ nhớ biên dịch tập tin . Một tệp hoán đổi nhỏ với độ hoán đổi thấp sẽ là một cải tiến so với tình hình hiện tại.
jww

Câu trả lời:


134

Raspbian sử dụng dphys-exchangefile , đây là một giải pháp dựa trên tệp hoán đổi thay vì giải pháp dựa trên phân vùng trao đổi "tiêu chuẩn". Nó dễ dàng hơn nhiều để thay đổi kích thước của trao đổi.

Tệp cấu hình là:

/etc/dphys-swapfile 

Nội dung rất đơn giản. Theo mặc định, Raspbian của tôi có 100 MB trao đổi:

CONF_SWAPSIZE=100

Nếu bạn muốn thay đổi kích thước, bạn cần sửa đổi số và khởi động lại dphys-exchangefile:

/etc/init.d/dphys-swapfile restart

Chỉnh sửa: Trên Raspbian, vị trí mặc định là / var / exchange, dĩ nhiên là trên thẻ SD. Tôi nghĩ rằng đó là một ý tưởng tồi, vì vậy tôi muốn chỉ ra rằng, / etc / dphys-exchangefile cũng có thể có tùy chọn sau: CONF_SWAPFILE = / media / btsync / exchangefile

Tôi chỉ có vấn đề với nó, bộ lưu trữ usb được tự động hóa, vì vậy một cuộc đua tiềm năng ở đây (automount so với hoán đổi)


2
Đây là câu trả lời chính xác. Không có câu trả lời nào khác đề cập đến dphys-exchangefile.
Kenji Noguchi

1
Tôi đã đưa ra câu trả lời này là câu trả lời thực sự chính xác. Gần đây đã học được tất cả những cách khó khăn đó, câu trả lời của bạn có thể giúp tôi tiết kiệm rất nhiều thời gian. ;-)
Drachenfels

Bạn có thể làm rõ tại sao sử dụng /var/swaplà một ý tưởng tồi?
Andrey Portnoy

để cài đặt các gói R, bị lỗi trước đó do "cuộc gọi hệ thống không thể phân bổ bộ nhớ": Đặt CONF_SWAPSIZE = 1024. Ít hơn là không đủ.
leo núi

36

Bạn có thể thiết lập không gian hoán đổi khá đơn giản. Ví dụ: nếu ổ USB của bạn là /dev/sdx, bạn sẽ sử dụng (bạn phải root cho cái này):

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

Lưu ý rằng điều này sẽ sử dụng toàn bộ thiết bị và bạn có thể sẽ mất tất cả dữ liệu hiện có trên thiết bị.

Bạn cũng có thể tạo một tệp hoán đổi (bằng cách sử dụng một loopthiết bị) như thế này:

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

Khi bạn không còn cần tệp hoán đổi (nếu bạn muốn đẩy ổ USB chẳng hạn), bạn phải sử dụng swapoff <device>. Không làm như vậy có thể sẽ dẫn đến sự cố hệ thống.

Bạn nên cẩn thận mặc dù . Thẻ SD có giới hạn đọc / ghi hạn chế và nó sẽ rút ngắn tuổi thọ của nó. Nếu bạn đang sử dụng ổ cứng ngoài, bạn sẽ ổn, nhưng nó sẽ rất chậm.


2
Tại sao thêm loopback? Chắc chắn là không cần thiết?
popey

Bạn nói đúng, không phải vậy. Tôi chỉnh sửa câu trả lời để phản ánh điều đó.

2
Tôi nghĩ bạn nên thay đổi điều này để tránh người dùng sao chép và dán và vô tình chạy mkswaptrên phân vùng gốc của họ. Tôi nghĩ sdxlà một quy ước tốt.
Jivings

3
Người dùng chọn để cho phép SWAP có thể quan tâm đến việc điều chỉnh kernel swappiness .
earthmeLon

@earthiwi Raspbian Jessie có swappiness 1 theo mặc định.
kaay

32

Đừng làm điều này cả.

Bạn không nên kích hoạt trao đổi trên Raspberry Pi.

Mặc dù có thể, nó không hữu ích. Ngay cả trên thẻ SDHC lớp 10, nó cũng quá chậm. Ngoài ra, bạn sẽ giảm tuổi thọ của thẻ SD.

Trên bất kỳ thiết bị lưu trữ dựa trên flash nào (thẻ SD, SDD, ổ USB), bạn cũng có thể thấy các khoảng dừng trên toàn hệ thống trong khi một nhóm lớn các khối flash bị xóa.

Trường hợp ngoại lệ có thể:

  • Nếu bạn kết nối ổ cứng (từ tính) (mặc dù là bộ chuyển đổi USB-SATA hoặc USB-IDE)
  • Nếu bạn sử dụng ZRAM hoặc một cái gì đó tương tự

3
không nghi ngờ gì khi trao đổi trên USB bey sẽ giết khóa của bạn rất nhanh, trao đổi trên thẻ SD cũng rất nguy hiểm, ngay cả khi thẻ SD mới hơn (lớp 10) có thể hỗ trợ tốt hơn. ZRAM rõ ràng là con đường để đi nếu bạn cần thêm RAM
neofutur

1
Bạn sẽ nghĩ rằng với công nghệ ReadyBoost trong Windows, ai đó sẽ tạo USB Drive (hoặc eSata, không chắc liệu ReadyBoost có thể sử dụng điều đó, sẽ không có ích gì với raspberry pi, nhưng sẽ rất thú vị) sử dụng RAM thực tế để bạn có thể tăng hiệu suất máy tính của bạn. Mặc dù có thể sẽ dễ dàng hơn và rẻ hơn nếu chỉ mua một bo mạch chủ mới hỗ trợ dung lượng RAM bạn cần.
Kibbee

33
Tại sao câu trả lời này có rất nhiều upvote? Có rất nhiều lý do để sử dụng trao đổi. Tôi đã sử dụng một tập tin trao đổi trên một ổ đĩa ngoài để biên dịch một thư viện lớn trong vài ngày. Nó chậm như những con khỉ chết trôi nổi trong mật đường, nhưng điều đó không có nghĩa là bạn "không nên làm điều này chút nào."
Andrew Larsson

10
Cảnh báo của bạn, mặc dù cũng có ý nghĩa, là cách quá mạnh mẽ. Tìm hiểu 'tại sao không' cũng như 'tại sao' chính xác là những gì Raspberry Pi dành cho: thử bất cứ điều gì bạn muốn với nó và TÌM HIỂU. Ngoài ra còn có một số lý do tốt để sử dụng ổ đĩa ngoài để trao đổi, chẳng hạn như đáp ứng yêu cầu bộ nhớ cao nhất cho biên dịch thư viện một lần; Tìm kiếm đã đưa tôi đến đây. Những lần tôi học được nhiều nhất là khi tôi làm hỏng một cái gì đó nhỏ và nhận ra lý do tại sao. Rất tiếc phải nói rằng, bạn không hữu ích như bạn nghĩ.
Chris Hatton

2
Cách quá mạnh. "tốt nhất không", có thể, nhưng "xấu, lãng phí, gây tổn hại và vô dụng" là sai lệch. Tất cả mọi thứ mặc với việc sử dụng, hãy nhớ oxy là chất độc hại, và Raspbian không sử dụng một swapfile. Làm chậm thường tốt hơn so với sự cố và cho phép bạn biên dịch những thứ khổng lồ cứ sau vài tháng. Chỉ cần đặt swappiness thấp và bạn tốt.
kaay

4

Raspbmc sử dụng /etc/init/swap.confđể cấu hình trao đổi qua tập tin / swap. Nó đầu tiên kiểm tra sự hiện diện của /home/pi/.enable_swap.

Nếu bạn xóa /home/pi/.enable_swapthì tệp hoán đổi không được tạo, và sau đó chỉ cần tạo lại nó touch /home/pi/.enable_swapnếu bạn cần bật hoán đổi và khởi động lại.


4

Thật đáng tiếc khi Raspberry Pis không có GigaBit Ethernet nhưng ít nhất về mặt lý thuyết là có thể trao đổi không gian trên một thiết bị mạng - Dự án Máy chủ Đầu cuối Linux có thể cung cấp nó từ máy chủ cho khách hàng theo mục này trên wiki của họ .

Tôi đã tìm thấy một chủ đề Diễn đàn Foundation "Mẹo: Hoán đổi trên nfs" cho thấy cách một người đã có một số gắn kết NFS đã sử dụng một tệp hoán đổi trên một trong số họ và gắn kết nó thông qua một vòng lặp (có thể cần thiết vì Linux không cho phép Gắn kết NFS được sử dụng trực tiếp). Vì tệp hoán đổi từ xa sẽ giữ dữ liệu mà HĐH không bị mất, tôi chỉ xem xét điều này đối với mạng Ethernet có dây - một liên kết không dây sẽ quá mong manh IMHO. Ngoài ra, tất nhiên bạn không được phép tắt máy chủ từ xa mà không tắt trao đổi và cho phép nó hoàn toàn trống trước!


RPi hoàn toàn không được hưởng lợi từ GB Ethernet, do băng thông hạn chế giữa chip Broadcom và bộ điều khiển Ethernet.
Dmitry Grigoryev

1
... Và bộ điều khiển Ethernet như một phần bổ sung cho chip USB ! Vâng, nhưng chúng ta có thể về một thiết kế RPi giả định trong đó phần cứng mạng là một phần của thiết bị lõi SoC. 8-P
SlySven

Bộ điều khiển Ethernet thường là chip ngoài, nhưng USB như một bus liên chip thực sự không tốt cho cả tốc độ và mức tiêu thụ điện.
Dmitry Grigoryev
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.