如何永久关闭交换?


64

交换使我的系统变慢,关闭它会使一切变得更加流畅。我有3.5 GB的RAM。

我知道如何通过sudo swapoff -a在终端中输入来关闭交换,但这仅适用于当前会话,因为重新启动交换后会重新打开。有什么办法可以永久关闭交换?


2
AFAIK交换用于休眠。只是
说说而已

1
是的,但是仍然可以使用。我有一个小脚本,可以在系统进入休眠状态时挂载交换分区,而在系统恢复休眠时将其挂载。在此期间,交换文件不需要处于活动状态。
animaletdesequia 2014年

只需将swapoff -a放在/etc/rc.local中,然后
忽略

1
@ user264467:启用交换功能只是在每次重新启动时都禁用它是很违反直觉的,永久禁用它更干净。
karatedog

Answers:


119

我可以建议一种更安全的方法吗?您永远都不知道交换何时可以使您免于崩溃。尽管交换确实确实会降低计算机的速度,但是如果您使用的程序耗尽了所有RAM,则具有交换功能可以使您免于硬重启。当计算机开始交换时,您会注意到并能够杀死有问题的应用程序。

因此,而不是完全禁用掉,只需确保您的操作系统互换非常罕见。这由中的vm.swappiness设置控制/etc/sysctl.conf。Ubuntu的默认设置是,60如果我没有记错的话,在大多数情况下,该设置太多了,即使在RAM仍然可用的情况下,也会导致您开始进行交换。如果减小此值,则仅在紧急情况下使用时,您将能够保留安全交换线。因此,打开文件:

sudo nano /etc/sysctl.conf

并添加以下行:

vm.swappiness=10

如果那仍然太多,请将10更改为1。现在,重新启动后,只有在绝对必要时才进行交换,而您只需忘记它即可。


我喜欢改变swappines,而且我已经好几年了。感谢您的提醒。sudo upvote turdon!
Darth Egregious

16
仅添加“更安全的方法”参数:当您没有交换并且系统内存不足时,将调用Linux OOM(内存不足)杀手。这将基于“不良”分数选择一个进程,然后...杀死它(终止,关闭),而应用程序没有机会保存其更改,清理等。因此,如果您关闭交换并用尽了如果在OOM杀手的眼中,重要过程的得分很低,那么您很容易冒失去工作的风险。所以,你应该只把关闭掉,如果你有信心,你将永远不会耗尽内存。
Reid 2014年

5
@Reid值得指出的是,如果交换空间也用完了,同样的事情也会发生。
o0'。

11
这实际上并不能回答问题。在具有16GB或32GB RAM的系统上,完全禁用交换功能很有意义。在需要内存的应用程序中,额外的几GB交换不会有任何好处,而大量的交换(例如20GB)会占用大量的硬盘/ SSD空间。另外,使用32GB RAM进行休眠也不一件好事
jmiserez 2014年

7
对于某些设置,一旦物理RAM用完并开始交换,系统就会开始“吸泥”并变得不可用。是的,从理论上讲,您可以介入并杀死罪犯,但是当改变UI的焦点需要20分钟以上,甚至需要更长的时间才能通过SSH获得密码提示时,OOMing最终是最好的选择(紧随其后的是重新启动,然后进入并解决问题)。
BCS

46

在/ etc / fstab中找到有关swap的行,并对其进行注释。我的是这样的:

UUID=6880a28d-a9dc-4bfb-ba47-0876b50e96b3 /               ext4    errors=remount-ro 0       1
UUID=7350e6f2-e3a7-4d80-9a95-8741c7db118f /home           ext4    defaults        0       2
UUID=E2E26AD1E26AAA0D /media/windows  ntfs    defaults,umask=007,gid=46 0       0

# Swap a usb extern (3.7 GB):
#/dev/sdb1 none swap sw 0 0

您可以使用gedit编辑该文件。首先备份它,以防万一:

sudo cp /etc/fstab /etc/fstab_backup
gksu gedit /etc/fstab

只需在交换所在行的开头添加#,然后重新启动计算机即可。

要么

尝试使用命令行方式注释掉/etc/fstab文件中的交换项,

sudo sed -i.bak '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

输入时会收到提示gksu gedit /etc/fstab # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> /host/ubuntu/disks/root.disk / ext4 loop,errors=remount-ro 0 1 /host/ubuntu/disks/swap.disk none swap loop,sw 0 0
Alex Li

1
所以,按照他的意思去做。注释掉引用“交换”的第一行。:P
cHao 2014年

13

只需从fstab删除条目(或在行前面使用#注释),然后重新启动即可。查找其中包含单词“ swap”的行。

sudo nano /etc/fstab

10
这样做也可以,但是我认为最好注释一下该行,而不是完全删除它,以防万一您要还原所做的更改。
animaletdesequia 2014年

1
我已经编辑了我的帖子。
mdalacu 2014年

11

错误..如果systemd在任何驱动器上找到SWAP分区,它将始终自动挂载它。奇怪的是没有人提到systemd。无论如何,解决方案非常简单。要永久禁用交换,您必须:

  1. 交换-a
  2. 编辑/ etc / fstab并注释所有交换项(如果存在)。
  3. 运行:sudo systemctl mask dev-sdXX.swap(其中XX是交换分区。对于所有可能的分区也有用,因此,如果任何其他驱动器上都有交换分区,将不会挂载)

和平了。


第三名获胜!
oneklc
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.