如何设置交换空间?


114

Raspberry Pi仅具有256 MB的RAM,因此我想使用交换空间(在SD卡或连接的USB存储设备上)。如何设置?


10
在Pi(及类似设备)上的交换可能会非常缓慢,而实际上最终大量使用交换的任何事物实际上都会使系统陷入瘫痪。小心!
MattJ 2012年

1
您知道USB RAM驱动器(不是闪存或SSD,而是实际以USB速度运行的易失性ram芯片)会很好的做法,这样的交换会非常好。
Piotr Kula 2012年

3
@Tibor问题是“如何设置交换空间?” 我认为,正确的答案应该描述如何做到,并应引起注意,并警告不要滥用。你的回答就是这样做的,而“最受欢迎”的答案只是告诉你,为什么你不应该“在做了这一切”(这是愚蠢的,因为使用它一个适当的方式,它实际上有用的)。
安德鲁·拉尔森

1
在此页面上,大约有一百万警告禁止将树莓派与swap一起使用,但是如果您需要构建一次,这是不可避免的。
Archonic

1
@Archonic- +1。有时我的内存不足,无法编译文件交换性的小交换文件将是对当前情况的一种改进。
jww '16

Answers:


134

Raspbian使用dphys-swapfile,它是基于交换文件的解决方案,而不是基于“标准”交换分区的解决方案。更改交换的大小要容易得多。

配置文件为:

/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存储设备是自动安装的,因此这里有潜在的竞争(自动安装与swapon)


2
这是正确的答案。没有其他答案提到dphys-swapfile。
2014年

1
我认为这个答案是正确的。最近才了解到所有这些困难的方法,您的答案可以为我节省很多时间。;-)
Drachenfels

您能说明为什么使用/var/swap一个不好的主意吗?
安德烈·波特诺伊

安装R软件包,此软件包之前由于“系统调用失败而无法分配内存”而失败:设置CONF_SWAPSIZE = 1024。少是不够的。
vertikalist

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 2012年

您说得对,事实并非如此。我编辑了答案以反映这一点。

2
我认为您应该更改此设置,以避免用户复制和粘贴以及意外mkswap在其根分区上运行。我认为这sdx是个好习惯。
Jivings 2012年

3
谁选择启用SWAP用户可能感兴趣的调整内核swappiness
EarthmeL12年

@earthmelon Raspbian Jessie默认情况下具有swappiness 1。
kaay

32

完全不要这样做。

您应该启用的树莓派掉。

尽管有可能,但没有用。即使在10级SDHC卡上,它也太慢了。另外,您还会缩短SD卡的使用寿命。

在任何基于闪存的存储设备(SD卡,SDD,USB拇指驱动器)上,擦除大量闪存块时,您还可能会看到系统范围内的暂停。

可能的例外:

  • 如果连接(磁性)硬盘驱动器(通过USB-SATA或USB-IDE适配器)
  • 如果您使用ZRAM或类似的东西

3
毫无疑问,更换USB随身碟会很快杀死您的密钥,即使更新的(第10类)SD卡可以更好地支持它,在SD卡上进行更换也是危险的。ZRAM显然是您需要更多RAM的
必经之路

1
您可能会认为,使用Windows中的ReadyBoost技术,有人会制作一个使用实际RAM的USB驱动器(或eSata,不确定ReadyBoost是否可以使用它,对树莓派没有用,但很有趣),因此您可以提高您的计算机性能。尽管购买支持您所需RAM数量的新主板可能会更容易,更便宜。
基比

33
为什么这个答案有这么多投票?有很多使用交换的理由。在几天的过程中,我使用了外部驱动器上的交换文件来编译大型库。死猴子在糖蜜中漂浮时,速度很慢,但这并不意味着您“根本不应该这样做”。
安德鲁·拉尔森

10
您的警告虽然含义深刻,但过于强烈。找出“为什么不”以及“为什么”正是Raspberry Pi的目的:尝试使用它,并尝试学习。也有一些很好的理由也可以使用外部驱动器进行交换,例如满足一次性库编译的峰值内存要求。将我带到这里的搜索。我学到的最多的时候是我弄错了一些小东西并意识到了原因。抱歉地说,您没有像您认为的那样乐于助人。
克里斯·哈顿

2
太强了。“也许不是最好的”,但是“不好,浪费,破坏性和无用的”是令人误解的。一切都随着使用而磨损,请记住氧气是有毒的,Raspbian 确实使用了交换文件。放慢速度通常比崩溃好,它使您每隔几个月编译一次大的事情。只需设置低交换性就可以了。
kaay

4

Raspbmc用于/etc/init/swap.conf通过/ swap文件配置交换。它首先检查的存在/home/pi/.enable_swap

如果删除,/home/pi/.enable_swap则不会创建交换文件,然后在touch /home/pi/.enable_swap需要打开交换并重新启动时重新创建它。


4

遗憾的是,Raspberry Pis没有千兆以太网,但是至少在理论上可以在网络设备上拥有交换空间-Linux Terminal Server Project可以根据其Wiki上的此项,从服务器向客户端提供此空间。 。

我发现了一个基金会论坛主题“技巧:交换nfs”,该主题显示已经安装了一些NFS的人如何在其中一个上使用交换文件并通过循环安装将其挂载(可能是必要的,因为Linux不允许NFS挂载以直接使用)。鉴于远程交换文件保存操作系统不会丢失的数据,我只考虑在有线以太网网络中使用-无线链接太脆弱了,恕我直言。同样,当然,您必须不允许关闭远程服务器而不关闭交换,并先使其完全清空!


由于Broadcom芯片和以太网控制器之间的带宽有限,RPi根本不会从GB以太网中受益。
德米特里·格里戈里耶夫

1
...以及将以太网控制器作为USB芯片的附件!是的,但我们可以梦想一个假设RPI设计,其中网络硬件是SoC的核心器件的一部分。8-P
SlySven

以太网控制器通常是外部芯片,但是USB作为芯片间总线的确对速度和功耗都不利。
德米特里·格里戈里耶夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.