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

use*_*167 74 linux kernel swap init

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

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

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

Aar*_*ley 112

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

人交换

  • 在某些系统上,您还必须重建`initrd` 存档,例如使用`dracut --regenerate-all --force` 或`mkinitrd`,否则系统将无法启动。感谢在 `alt.os.linux.suse` 上的 *JO Aho* 和 *Carlos ER*。 (2认同)

小智 14

过去只/etc/fstab自动使用交换分区,但是,systemd 可能会稍微改变这一点。您可能需要执行以下操作:

systemctl mask dev-sdXX.swap
Run Code Online (Sandbox Code Playgroud)

(更改 sdXX)到您真正格式化的交换分区,这就引出了一个问题,如果您不想使用它,为什么要使用交换分区...

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

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

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


sho*_*hok 12

如果您真的确定要禁用交换(注意:建议这样做,即使您非常确定物理 RAM 绰绰有余),请执行以下步骤:

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

  • 谢谢,这是有道理的。不过,我在想,如果“足够的内存”(例如:8 或 16 GB)已满,那么很可能是某种异常情况(存在内存泄漏或其他一些失控问题、DDOS 攻击等的应用程序),其中无论如何,即使交换最终也会不堪重负。也许我没有提出非常有说服力的论点,但是这不应该发生在轻量级桌面使用中。 (3认同)
  • 因为Linux主动使用交换分区来释放更多内存用于缓存。这可以提高性能。无论如何,它是一个可调参数。有关更多信息,请阅读[此处](https://en.wikipedia.org/wiki/Swappiness)。此外,无交换系统中内存分配的临时激增可能会触发内核 OOM 杀手。 (2认同)

小智 6

Raspbian 10 (Buster) 上,干净的答案是:

禁用它直到下一次重新启动,如中所述*/etc/fstab*

sudo /sbin/dphys-swapfile swapoff
Run Code Online (Sandbox Code Playgroud)

要在启动时禁用交换:

sudo systemctl disable dphys-swapfile
Run Code Online (Sandbox Code Playgroud)

(结果我在任何地方都找不到该信息......)