如何禁用交换?


83

我在ram中有一些敏感数据,我不希望它们不在磁盘上。如何禁用交换?我有更多的公羊。如果ram过高,终止进程将没有问题。如何禁用交换?

注意:我没有交换分区,该分区正在VM(VMWare)中运行

swap 

2
即使您有大量RAM,也不进行交换而完全工作也不是最好的主意(例如,参见alexonlinux.com/swap-vs-no-swap)。根据您的要求,您可以考虑将交换分区放在dm-crypt安全设备上,以便写入其中的所有内容都将被加密。在这种情况下,您必须确保在启用加密卷后启用交换功能,并在禁用设备映射之前禁用交换功能(我想这是Ubuntu的默认设置,但我不确定)。只需在网络上搜索“加密交换”即可找到大量指南。
soulsource

1
Apropos:askubuntu.com/questions/248158/…在您需要交换之前,不需要交换。然后,您真的需要它。

cryptswap呢?/ dev / mapper / cryptswap1

Answers:


121

使用

sudo swapoff -a  

是关闭交换的常用方法,使用swapon -a命令将其重新打开。请参阅man swapoff 有关有关为显式设备关闭交换的更多信息。


7
这似乎在重启后仍无法持续吗?
ebyrob

19
永久更改交换通常在/ etc / fstab中进行。
ubfan1

我们是否只是将其复制到/ etc / fstab
Max

6
否。您可以在/ etc / fstab中注释掉交换行。
Torsten Bronger

您可以阅读其他答案如何注释掉它。
卡洛斯(Carolus)'18

25

您可以在重启后通过仅注释掉/etc/fstab文件中的交换项(在行前面添加#)来禁用交换。这将防止重新启动后自动安装交换分区。要在单个命令中执行此操作:

sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

或者简单地:

sudo sed -i '/ swap / s/^/#/' /etc/fstab

现在,您的交换条目/etc/fstab将类似于以下内容:

#UUID=xxxxxxxx-xxxx-xxxxx-xxx-xxxxxxxxxxx none            swap    sw              0       0

使用您自己的特定数字和小写字母代替字母“ x”。


2
为什么您引用的UUID有一些具体数字?对于所有UUID,它们是否应该相同?我的分区的UUID与您指定的数字没有任何巧合。
罗斯兰

如果字段由制表符(而不是空格)分隔,则您的sed命令不起作用。最好将其写为sed -ri '/\sswap\s/s/^#?/#/' /etc/fstabPS:我还添加#?了防止行已禁用时对/ etc / fstab进行其他更改的功能。
Alek_A

4

如果您担心交换的内容,则可以始终按通常的方式将其关闭sudo swapoff -a,然后使用dd向交换设备填充零或随机数据。

首先使用fstab的内容来查找您的交换文件或设备(less /etc/fstab

找到它并在sda5或/swapfile (在17.04及更高版本中,交换分区默认替换为swapfile)中对其位置进行了两次和三次检查。

如果是交换分区或驱动器:(以/ dev开头),请发出“ disk destroyer”命令(不要轻易使用)

sudo dd if=/dev/zero of=swap用您位于的交换设备或文件替换“ 交换 ”一词/etc/fstab

爆满零或

sudo dd if=/dev/random of=swap再次用您位于的交换设备或文件替换“ 交换 ”一词/etc/fstab

爆破它的随机数据。

对于交换文件(仅以路径开头):您可以使用rm /path/to/swapfile

下次您打开与

swapon -a

系统将再次愉快地使用它。如果您有足够的RAM,则可能根本不需要交换。发出命令

free 当系统承受重负载时,请查看使用了多少进行此确定。

如果您确定永久不需要交换(用于休眠或其他任何方式),则可以按照此处的建议在fstab中将该行注释掉

自由


3

这可能是la脚的解决方案,但我经常使用它。您只需键入

sudo -s
crontab -e

并添加

@reboot sudo swapoff -a  

因此,它将在启动时自动禁用。


4
我希望不用说这是一个非常糟糕的方法。为什么要创建一个启动时任务以关闭另一个选项,而又有一个文件可以编辑以阻止它首先被打开
underscore_d

也许在美学上不那么令人愉悦,但是这并不算差。如果您已经非常习惯使用crontab,那么与简单地将其他用户在SE上告诉您执行的操作简单地复制到/ etc / fstab相比,该解决方案会更轻松一些,并且更有意义。而且,您仍然会记得如何在新计算机上进行操作而不必再次运行Google。我碰巧几乎不知道crontab是什么,反正对磁盘分区更加熟悉,但是逻辑仍然存在。
Nicholas Pipitone

实际上,这可能是更好的解决方案。因为/ etc / fstab建议仅适用于交换分区。该解决方案适用于linux安装程序,无论它们是否使用分区或交换文件。
Nicholas Pipitone

2
sudo swapoff -a

上面的命令仅对当前会话禁用交换,您需要在/ etc / fstab文件中注释掉交换分区。为此,您只需要在交换行的开头添加“#”(注释行)即可。步骤如下:

  1. 打开fstab文件,sudo gedit /etc/fstab在终端中输入。

文件的内容如下所示:

proc            /proc           proc    nodev,noexec,nosuid 0       0
/host/ubuntu/disks/root.disk /               ext4    loop,errors=remount-ro 0       1
/host/ubuntu/disks/swap.disk none            swap    loop,sw         0       0
#/dev/sda10 /media/ASD  vfat    defaults    0   0
#/dev/sda1  /media/98   vfat    defaults    0   0
  1. 只需在交换分区行的开头添加哈希(#),则该行的外观如下:

#/host/ubuntu/disks/swap.disk none swap loop,sw 0 0

  1. 重新启动电脑

0

进入终端并执行以下命令:gnome-disks。并非在所有发行版中都已安装。如果是这样,请按照印刷说明进行安装,然后重试。在左窗格中查找带有单词“ swap”的设备。它的大小通常与您的物理内存相同。单击方形按钮将其禁用。使用您的root密码验证此更改。

截图:http//imgur.com/Og6igqb

在系统监视器应用程序(gnome-system-monitor)中,您将看到它报告交换区域为“不可用”。交换区域被禁用,但未被删除。您将来可以再次轻松启用它。删除交换空间对我的系统没有危害,但是如果您决定以后再返回它(休眠),则将为您自己做更多的工作。

编辑:为防止启动时挂载,应进入gnome磁盘中的“编辑挂载选项...”,然后取消选中“启动时挂载”。


1
您是否认为这回答了用户对交换分区上具有敏感数据的担忧?你能告诉我们为什么吗?
极客长老

1
用户的重点是询问如何禁用交换。如果您有敏感数据,则最好使用引导前加密。
user170544

1
我谨不同意。当我阅读问题时,我遇到的第一句话是“我在ram中有一些敏感数据,我不希望它们不在磁盘上。” 我相信这是他的主要担忧,这就是为什么他开始这样做。无论如何,我相信我已经在回答中涵盖了他的问题的各个方面。认为这是一个有用的例子。
极客长老

0

更换defaultssw,noauto其中包括文件中的交换项的行/etc/fstab

/dev/mapper/centos-swap swap  swap    sw,noauto        0 0

(路径/dev/mapper/centos-swap可能与您不同)。

现在,在重新启动后检查输出,您的交换将永远不会挂载:

$ free -m
              total        used        free      shared  buff/cache   available
Mem:           3791         100        3408           8         282        3483
**Swap:             0           0           0**
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.