![我怎样才能永久关闭交换?](https://linux22.com/image/1045615/%E6%88%91%E6%80%8E%E6%A0%B7%E6%89%8D%E8%83%BD%E6%B0%B8%E4%B9%85%E5%85%B3%E9%97%AD%E4%BA%A4%E6%8D%A2%EF%BC%9F.png)
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。解决方案很简单;要永久禁用交换,您必须:
swapoff -a
- 如果存在,请编辑
/etc/fstab
并注释任何交换条目(您可能可以跳过此步骤 2,而没有步骤 2 的步骤 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'.
- 通过以下方式禁用
mask
它sysctl
:
# systemctl mask dev-zram1.swap
Created symlink /etc/systemd/system/dev-zram1.swap → /dev/null.