我怎样才能永久关闭交换?

我怎样才能永久关闭交换?

Swap 让我的系统变得很慢,关闭它会让一切变得更顺畅。我有 3.5 GB 的 RAM。

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

答案1

我可以建议一种更安全的方法吗?你永远不知道交换何时可以防止计算机崩溃。虽然交换确实会降低计算机的速度,但如果你使用的程序会占用所有 RAM,那么交换功能可以让你免于硬重启。当计算机开始交换时,你会注意到并能够终止有问题的应用程序。

因此,无需完全禁用交换,只需确保您的操作系统交换非常vm.swappiness很少。这由中的设置控制/etc/sysctl.conf。如果我没记错的话,Ubuntu 的默认设置是,60这对于大多数情况来说太多了,并且会导致您在 RAM 仍然可用时开始交换。如果减少此值,您将能够保持交换的安全线,同时仅在紧急情况下使用它。因此,打开文件:

sudo nano /etc/sysctl.conf

并添加以下行:

vm.swappiness=10

如果还是太多,就把 10 改为 1。现在,重新启动后,您只会在绝对必要时进行交换,然后就可以忘掉它了。

答案2

在 /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

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

或者

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

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

答案3

错了……如果 systemd 在任何驱动器上发现 SWAP 分区,它无论如何都会自动挂载它。奇怪的是没有人提到 systemd。解决方案很简单;要永久禁用交换,您必须:

  1. swapoff -a
  2. 如果存在,请编辑/etc/fstab并注释任何交换条目(您可能可以跳过此步骤 2,而没有步骤 2 的步骤 3 可能适合您)。
  3. 运行:(sudo systemctl mask "dev-sdXX.swap" 其中 XX 是交换分区。笔记,如果名称中有转义字符/反斜杠,则应在单元名称周围使用引号。对所有可能的分区执行此操作也很有用,这样如果任何其他驱动器上有交换分区,它将不会被挂载。)

平安。

答案4

补充Zibri 的回答

  • swapoff -a将暂时禁用所有交换。
  • 如果您有一些交换/etc/fstab,只需将其注释掉并重新启动。
  • 在我的例子中(OdroidMC1+Armbian),交换由 systemctl 控制。要找到负责人,请使用systemctl --type swap

例子:

# systemctl --type swap

UNIT           LOAD   ACTIVE SUB    DESCRIPTION                                                                                                                                                                     
dev-zram1.swap loaded active active /dev/zram1                                                                                                                                                                      

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

1 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
  • 通过以下方式禁用masksysctl
# systemctl mask dev-zram1.swap

Created symlink /etc/systemd/system/dev-zram1.swap → /dev/null.

相关内容