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

足以注释或删除/etc/fstab中的交换行以防止交换在启动时工作/挂载,还是应该重新编译不带Support for paging of anonymous memory (swap)的内核为100确定不能启用该功能吗?

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

评论

为什么交换未加密?

@MichaelHampton在我意识到最终将要发生的事情之前,我并没有看到时间上的需要。另外,我的系统在任何时候都不会使用交换功能,因此我可以随意删除它。

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

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

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

#1 楼


使用cat /proc/swaps标识已配置的交换设备和文件。
使用swapoff -a关闭所有交换设备和文件。
删除在/etc/fstab中找到的所有匹配引用。

可选:销毁在步骤1中发现的任何交换设备或文件,以防止它们重复使用。由于您担心泄漏敏感信息,您不妨考虑执行某种安全擦除。

man swapoff

评论


在某些系统上,您还必须重建initrd归档文件,例如使用dracut --regenerate-all --force或mkinitrd,否则系统将无法启动。感谢J.O. alt.os.linux.suse上的Aho和Carlos E.R.

– Ant_222
18/12/19在9:06



#2 楼

过去是仅自动使用/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
15年4月22日在19:14

另外,它可能是systemctl mask swapfile.swap。

–dess
20年1月28日在15:49

#3 楼

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


运行swapoff -a:这将立即禁用swap
/etc/fstab中删除任何交换条目


reboot系统。如果交换消失了,那就好。如果由于某种原因它仍然在此处,则必须删除交换分区。重复步骤1和2,然后使用fdiskparted删除(现已未使用)交换分区。请格外小心:删除错误的分区会造成灾难性的后果!

reboot


评论


为什么即使您有足够的内存也不建议禁用交换?

–罗夫
18年5月6日在11:24



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

–shodanshok
18年5月6日在22:03



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

–罗夫
18年5月8日在16:23



由于使用交换,SSD驱动器磨损了怎么办?

– Peter Mortensen
20 Jan 31'2:46



@PeterMortensen虽然可能,但似乎极不可能出现结果,尤其是如果使用高质量的TLC驱动器。

–shodanshok
20年1月31日在6:44

#4 楼

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

要禁用它,直到下次重启,如*/etc/fstab*中所述:

sudo /sbin/dphys-swapfile swapoff


要在启动时禁用交换:

sudo systemctl disable dphys-swapfile


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

评论


非常感谢你。我一生都无法解决这个问题

– Erik K
20年5月9日在18:44

#5 楼

在我的Linux Mint盒(版本19.3(Tricia),基于Ubuntu 18.04(Bionic Beaver))上,没有交换分区或根本没有任何交换的情况下,systemctl报告swapfile.swap在每次启动时都失败了。可以使用以下命令禁用它:

sudo systemctl disable swapfile.swap


swapfile.swap是systemd的“特殊”部分,您可以使用man systemd.special命令在mand中进行阅读。 。

#6 楼

当我在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