Как настроить пространство подкачки?

114

Raspberry Pi имеет только 256 МБ ОЗУ, поэтому я хотел бы использовать пространство подкачки (либо на SD-карте, либо на USB-накопителе). Как мне это настроить?


источник
10
Обмен на Pi (и аналогичные устройства) может быть мучительно медленным, и все, что на самом деле заканчивается интенсивным использованием swap, практически остановит систему. Осторожный!
MattJ
1
Вы знаете, что было бы хорошо, если бы USB RAM-накопитель (не флэш-память или SSD, а реальный энергозависимый чип оперативной памяти, работающий на скоростях USB) был бы хорош для такого подкачки.
Петр Кула
3
@Tibor Вопрос "Как настроить пространство подкачки?" На мой взгляд, правильный ответ должен описывать, как это сделать, а также привлекать внимание к некоторым подводным камням и предупреждать против неправильного использования. Ваш ответ делает только , что в то время как «самый популярный» ответ только говорит вам , почему вы никогда не должны «делать это на всех» (который является немым, потому что есть правильный способ , чтобы использовать его, и это на самом деле это полезно).
Эндрю Ларссон
1
На этой странице содержится около миллиона предупреждений против использования swap с малиновым пи, но если вам нужно что-то построить один раз, это неизбежно.
Archonic
1
@ Archonic - +1 . Иногда мне не хватает памяти для компиляции файлов . Небольшой файл подкачки с низкой подкачкой будет улучшением по сравнению с текущей ситуацией.
июня

Ответы:

134

Raspbian использует dphys-swapfile , который является решением на основе файла подкачки вместо «стандартного» решения на основе раздела подкачки. Гораздо проще изменить размер свопа.

Файл конфигурации:

/etc/dphys-swapfile 

Содержание очень просто. По умолчанию мой Raspbian имеет 100 МБ подкачки:

CONF_SWAPSIZE=100

Если вы хотите изменить размер, вам нужно изменить номер и перезапустить dphys-swapfile:

/etc/init.d/dphys-swapfile restart

Изменить: В Raspbian расположение по умолчанию / var / swap, которое (конечно) находится на SD-карте. Я думаю, что это плохая идея, поэтому я хотел бы отметить, что / etc / dphys-swapfile также может иметь следующую опцию: CONF_SWAPFILE = / media / btsync / swapfile

У меня только проблемы с этим, USB-хранилище автоматически смонтировано, так что потенциальная гонка здесь (автомонта против swapon)

asalamon74
источник
2
Это правильный ответ. Ни один из других ответов не упомянул dphys-swapfile.
Кэндзи Ногучи
1
Я назвал этот ответ действительно правильным. Совсем недавно выучив все это нелегко, ваш ответ может сэкономить мне много времени. ;-)
Драхенфельс
Не могли бы вы уточнить, почему использование /var/swapявляется плохой идеей?
Андрей Портной
для установки пакетов 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
Зачем добавлять петлю? Конечно, это не обязательно?
Попей
Ты прав, это не так. Я отредактировал ответ, чтобы отразить это.
2
Я думаю, вы должны изменить это, чтобы пользователи не копировали и не вставляли и не запускали случайно mkswapна своем корневом разделе. Я думаю, что sdxэто хорошая конвенция.
Jivings
3
Пользователи, которые решили включить SWAP, могут быть заинтересованы в настройке перестановки ядра .
EarthmeLon
@earthmelon Raspbian Джесси имеет swappiness 1 по умолчанию.
Каай
32

Не делай этого вообще.

Вы не должны включать своп на Raspberry Pi.

Хотя это возможно, это не полезно. Даже на SDHC-карте класса 10 она слишком медленная. Также вы уменьшите срок службы SD-карты.

На любом флэш-накопителе (SD-карта, SDD, флэш-накопитель USB) вы также можете увидеть паузы в масштабе всей системы, пока стирается большая группа флэш-блоков.

Возможные исключения:

  • Если вы подключаете (магнитный) жесткий диск (через адаптер USB-SATA или USB-IDE)
  • Если вы используете ZRAM или что-то подобное
finnw
источник
3
без сомнения, замена USB-бей очень быстро убьет ваш ключ, замена на SD-карту также опасна, даже если более новые (класс 10) SD-карты могли бы лучше ее поддерживать. Очевидно, что ZRAM - это то, что нужно, если вам нужно больше оперативной памяти
neofutur
1
Можно подумать, что с технологией ReadyBoost в Windows кто-то может создать USB-накопитель (или eSata, не уверенный в том, что ReadyBoost может его использовать, бесполезно для raspberry pi, но было бы интересно), который использует реальную оперативную память, чтобы вы могли повысить производительность вашего компьютера. Хотя, вероятно, было бы проще и дешевле купить новую материнскую плату, поддерживающую необходимый объем оперативной памяти.
Кибби
33
Почему в этом ответе так много голосов? Есть много причин, чтобы использовать своп. Я использовал файл подкачки на внешнем диске для компиляции большой библиотеки в течение нескольких дней. Это медленно, как мертвые обезьяны плавают в патоке, но это не значит, что вы не должны «делать это вообще».
Эндрю Ларссон
10
Ваше предупреждение, хотя и имеет смысл, слишком сильно. Выяснение «почему нет», а также «почему» - это именно то, для чего предназначен Raspberry Pi: попробуйте с ним все, что захотите, и ВЫУЧИТЕ. Есть также несколько веских причин использовать внешний диск для подкачки, например, удовлетворение пиковой потребности в памяти для одноразовой компиляции библиотеки; поиск, который привел меня сюда. Времена, которые я выучил больше всего, это когда я напортачил что-то незначительное и понял почему. К сожалению, вы не так полезны, как вы думаете.
Крис Хаттон
2
Слишком сильный. «лучше нет», может быть, но «плохо, расточительно, вредно и бесполезно» вводит в заблуждение. Все носит с использованием, иметь в виду кислород токсичен, и Raspbian делает использование файла подкачки. Замедление обычно лучше, чем сбой, и позволяет собирать огромные вещи раз в несколько месяцев. Просто установите низкий уровень swappiness и все хорошо.
Каай
4

Raspbmc использует /etc/init/swap.confдля настройки своп через файл / swap. Сначала проверяется наличие /home/pi/.enable_swap.

Если вы удалите, /home/pi/.enable_swapто файл подкачки не будет создан, а затем просто создайте его заново, touch /home/pi/.enable_swapесли вам нужно включить своп и перезагрузиться.

valentt
источник
4

Жаль, что Raspberry Pis не имеет GigaBit Ethernet, но теоретически возможно иметь пространство подкачки на сетевом устройстве - Linux Terminal Server Project может предложить его с сервера клиентам в соответствии с этим пунктом в их вики ,

Я нашел тему Foundation Forum «Совет: Swap over nfs», в которой показано, как кто-то, у кого уже есть некоторые монтируемые NFS, использовал swapfile на одном из них и монтировал его через монтирование (возможно, потому что Linux не позволяет Монтирование NFS для непосредственного использования). Учитывая, что удаленный файл подкачки будет содержать данные, которые ОС не должна потерять, я бы рассмотрел это только для проводной сети Ethernet - беспроводное соединение было бы слишком хрупким ИМХО. Кроме того, конечно, вы не должны позволять отключать удаленный сервер, не отключив своп и не позволив ему полностью опустошиться!

SlySven
источник
RPi не выиграет от GB Ethernet вообще из-за ограниченной пропускной способности между чипом Broadcom и контроллером Ethernet.
Дмитрий Григорьев
1
... и контроллер Ethernet как дополнение к USB-чипу ! Да, но мы можем мечтать о гипотетическом дизайне RPi, где сетевое оборудование было частью основного устройства SoC. 8-P
SlySven
Контроллеры Ethernet часто являются внешними микросхемами, но USB как межчиповая шина действительно плох как по скорости, так и по энергопотреблению.
Дмитрий Григорьев