在Linux中禁用交换的最佳方法


53

我正在运行一个自定义的已编译3.18.9内核,我想知道在系统上禁用交换的最佳方法。如果有区别,我也会使用init。

在注释掉或删除掉交换行/etc/fstab以防止交换在启动时无法正常工作/挂载是否足够?我是否应该重新编译内核,而不必Support for paging of anonymous memory (swap)百分百确定它没有启用?

我运行加密分区,并希望防止意外泄漏到硬盘上。我的系统规格也足够出色,可以在无交换环境中生存。


为什么交换未加密?
迈克尔·汉普顿

@MichaelHampton在我意识到最终将要发生的事情之前,我并没有看到这个需要。另外,我的系统在任何时候都不会使用交换,所以我可以随意删除它。
user283167 2015年

然后,我将从内核中删除该功能。否则,有人可以插入USB记忆棒,然后再次开始交换。
ott-- 2015年

@ott用户是否不需要超级用户权限才能使用swapon / swapoff可执行文件?我可能会再次禁用它,以防万一,但是我不确定没有特权的用户可以创建交换文件。
user283167

确实,他需要超级用户访问权限,例如,他可以利用漏洞利用。但是,您是否在24/7观看服务器?
ott--

Answers:


76
  1. 用标识已配置的交换设备和文件cat /proc/swaps
  2. 使用关闭所有交换设备和文件swapoff -a
  3. 删除中找到的所有匹配参考/etc/fstab
  4. 可选:销毁在步骤1中找到的所有交换设备或文件,以防止它们重复使用。由于担心泄漏敏感信息,您不妨考虑执行某种安全擦除。

换人


在某些系统上,还必须重建initrd归档文件,例如使用dracut --regenerate-all --forcemkinitrd,否则系统将无法启动。感谢JO AhoCarlos ER在上alt.os.linux.suse
Ant_222 '18

10

如果您确实确定要禁用交换功能(请注意:即使您非常确定物理内存已足够,也不建议这样做),请按照以下步骤操作:

  1. 运行swapoff -a:这将立即禁用交换
  2. 从中删除任何交换条目 /etc/fstab
  3. reboot系统。如果交换不见了,那就好。如果由于某种原因它仍然在这里,则必须删除交换分区。重复步骤1和2,然后使用fdiskparted删除(现在未使用的)交换分区。在这里要格外小心:删除错误的分区会造成灾难性的后果!
  4. reboot

1
为什么即使您有足够的内存也不建议禁用交换?
罗尔夫(Rolf)'18年

1
因为Linux主动使用交换分区释放更多内存用于缓存。这样可以提高性能。无论如何,它是一个可调参数。有关更多信息,请阅读此处。此外,无交换系统中内存分配的临时增加会触发内核OOM杀手。
shodanshok '18年

1
谢谢,这很合理。不过,我当时想,如果“足够的内存”(例如:8或16 GB)已满,则可能会出现某种特殊情况(应用程序出现内存泄漏或其他失控问题,DDOS攻击等)。这种情况下,即使互换也最终将不知所措。也许我并没有提出令人信服的论点,但是这种情况在桌面使用率不高的情况下不应该发生。
罗尔夫

9

过去只是/etc/fstab自动使用了交换分区,但是,systemd可能会稍作更改。您可能需要做:

systemctl mask dev-sdXX.swap

(将sdXX更改)到实际格式化的交换分区,这就引出了一个问题,即如果您不希望使用交换分区,为什么要拥有交换分区...

如果您没有使用systemd,那么从中删除交换项/etc/fstab就足够了(据我所知)。

也许真正的解决方案是摆脱掉交换分区,所以它们不会被意外使用。要删除交换分区,我将使用fdisk将分区类型从swap更改为其他类型,然后重新格式化该分区或使用: dd if=/dev/zero of=/dev/old-swap-partition以将其归零并阻止其使用。

另请参阅使用systemd设置交换分区的使用


我仍然通过openRC使用init,我故意从安装中清除了systemd。至于交换问题,我一直进行常规安装,直到决定使用cryptsetup / luks将格式化为ext4的加密文件挂载到文件系统之上。如果您善于使用init禁用交换的方法,我将不胜感激。
user283167

0

当我在Raspbian上查看/ etc / fstab文件时,我看到一条评论说

a swapfile is not a swap partition, no line here
  use dphys-swapfile swap[on|off] for that

但是要完全禁用预先配置的交换文件,这可以很好地工作:

swapoff -a
chmod -x /etc/init.d/dphys-swapfile
reboot

这个解决方案对我来说似乎有点麻烦,但是,您可以使用以下方法重新启用它:

chmod +x /etc/init.d/dphys-swapfile
reboot
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.