我在我的笔记本电脑和台式机上安装了 Archlinux x86_64。在安装时,我使用 fdisk 创建了一个交换分区,并使用sudo swapon /dev/sda3
.
但即使sysctl vm.swappiness
设置为0
,当我的系统内存使用一半时,我的系统仍然会写入交换分区,并且当时我将一个大文件复制/移动到某个地方,这使得系统非常慢。在这种情况下,我曾经使用 关闭交换sudo swapoff /dev/sda3
。
如今,我通常在启动后关闭交换,并在真正需要交换时启用它(并且我有一个 ruby 脚本来监视 RAM 使用情况,并在需要时打开交换)。下次启动时交换会再次激活。我在有关交换中没有条目/etc/fstab
。
有没有办法永久禁用交换设备而不删除设备?
答案1
这建筑维基百科提到 Archlinux 上的交换是由 systemd 管理的,并描述了如何通过屏蔽负责交换的 systemd 单元来禁用自动激活。因此,在 Archlinux 上,以下内容应该可以实现您正在寻找的内容:
- 使用
#swapoff -a
特定交换禁用交换或传递特定设备/文件名。此时交换已禁用,但将在下次启动时自动重新激活并启用。 - 为了防止自动激活交换,请使用 查找交换 systemd 单元
#systemctl --type swap
。对于每个*.swap
发现的单位,它使用 进行掩码#systemctl mask <unit_name>
。
systemctl unmask <unit_name>
只需在先前屏蔽的单元上运行,然后使用打开交换即可撤消此过程swapon
。
这取自以下两篇 Archwiki 文章:
- ArchWiki:交换:禁用交换
- ArchWiki:Systemd:使用单位(参见屏蔽和取消屏蔽部分)
答案2
/lib/systemd/system/turnswapoff.service
您可以让 systemd 通过创建包含以下内容的文件来完成此操作:
[Unit]
Description=Turn swap off
[Service]
ExecStart=/sbin/swapoff -a
[Install]
WantedBy=multi-user.target
并确保它在启动时运行sudo systemctl enable turnswapoff
的位置可能swapoff
不是/sbin/swapoff
。您可以检查which swapoff
并在必要时更改它