81

I am running a custom compiled 3.18.9 kernel and I am wondering about the best way to disable swap on the system. I also use init if it makes a difference.

Is it enough to comment or remove the swap line in /etc/fstab to prevent swap from working/mounting at boot or should I recompile the kernel without Support for paging of anonymous memory (swap) to be 100% sure it does not get enabled?

I run encrypted partitions and want to prevent accidental leakage to the hard disk. My system specifications are also great enough that I can survive in a swap-less environment.

Peter Mortensen
  • 2,319
  • 5
  • 23
  • 24
user283167
  • 813
  • 1
  • 7
  • 7
  • Why isn't your swap encrypted? – Michael Hampton Apr 22 '15 at 18:46
  • @MichaelHampton I didn't see a need at the point in time until I realized what was eventually going to happen. Plus my system doesn't reach a point in any time that the swap was used, so I feel I am free to remove it. – user283167 Apr 22 '15 at 19:09
  • I'd remove the feature from the kernel then. Otherwise someone can plug an USB-stick and start swapping to it again. – ott-- Apr 22 '15 at 21:03
  • @ott Doesn't the user require super user access to use the swapon/swapoff executable? I might disable it again just in case, but I am uncertain a unprivileged user can create swap files. – user283167 Apr 22 '15 at 21:32
  • Indeed, he needs super user access, which he could with an exploit e.g.. But are you watching your server 24/7? – ott-- Apr 22 '15 at 21:44
  • @ott-- this is for a laptop so I will be in control of it 24/7. If someone has gotten physical access to it or managed to exploit it to gain access to my unprivileged users there would be worse problems than worrying about a swap file being created. Thanks for the clarification though! – user283167 Apr 22 '15 at 21:52

7 Answers7

120
  1. Identify configured swap devices and files with cat /proc/swaps.
  2. Turn off all swap devices and files with swapoff -a.
  3. Remove any matching reference found in /etc/fstab.
  4. Optional: Destroy any swap devices or files found in step 1 to prevent their reuse. Due to your concerns about leaking sensitive information, you may wish to consider performing some sort of secure wipe.

man swapoff

Aaron Copley
  • 12,345
  • 5
  • 46
  • 67
  • 3
    On some systems you must also rebuild the `initrd` archive, e.g. with `dracut --regenerate-all --force` or `mkinitrd`, or the system will not boot. Thanks to *J.O. Aho* and *Carlos E.R.* on `alt.os.linux.suse`. – Anton Shepelev Dec 19 '18 at 09:06
  • Something along `sudo sed -i '/\tswap\t/d' /etc/fstab` to automate it. – Ciro Santilli OurBigBook.com Jun 07 '21 at 09:08
  • This doesn't solve it for me, the system boots every time with swap enabled, even though there's no fstab entry for it. It's incredibly annoying. – Owl Jul 05 '22 at 01:10
15

It used to be that only swap partitions in /etc/fstab were used automatically, however, systemd may be changing that slightly. You might need to do:

systemctl mask dev-sdXX.swap

(change sdXX) to your real formatted swap partition, which, begs the question of why you have a swap partition if you don't want it used...

If you are not using systemd, then, removing the swap entries from /etc/fstab should be sufficient (as far as I know).

Maybe the real solution is to get rid of the swap partitions, so they won't be used accidentally. To remove the swap partitions, I would use fdisk to change the partition type from swap to something else, and then reformat the partition or use: dd if=/dev/zero of=/dev/old-swap-partition in order to zero it out and prevent its use.

See also Set up use of swap partition with systemd.

Peter Mortensen
  • 2,319
  • 5
  • 23
  • 24
Gregor
  • 456
  • 2
  • 11
  • 1
    I still use init via openRC, I purposefully purged systemd from the install. And as for the swap question, I was doing a regular install until I made the decision to use cryptsetup/luks to mount encrypted files formatted to ext4 over top of my filesystem. If you could be so kind to touch upon the way to disable swap when using init I would appreciate it. – user283167 Apr 22 '15 at 19:14
  • Also, it could be `systemctl mask swapfile.swap`. – dess Jan 28 '20 at 15:49
  • Removing the /etc/fstab isn't sufficient unfortunately. It's been disabled for years on my system, and still every single damn time debian starts up with swap. Systemctl is pissing me off, it just does whatever it wants ignoring the operating system files. – Owl Jul 05 '22 at 01:17
12

If you are really sure you want to disable swapping (note: this is not recommended, even where you are pretty sure that physical RAM is more than enough), follow these steps:

  1. run swapoff -a: this will immediately disable swap
  2. remove any swap entry from /etc/fstab
  3. reboot the system. If the swap is gone, good. If, for some reason, it is still here, you had to remove the swap partition. Repeat steps 1 and 2 and, after that, use fdisk or parted to remove the (now unused) swap partition. Use great care here: removing the wrong partition will have disastrous effects!
  4. reboot
Tom Klino
  • 601
  • 1
  • 7
  • 14
shodanshok
  • 44,038
  • 6
  • 98
  • 162
  • 1
    Why is it not recommended to disable swap even if you have enough ram? – Rolf May 06 '18 at 11:24
  • 1
    Because Linux proactively uses the swap partition to free more memory for caching. This can improve performance. Anyway, it is a tunable parameter. For more information, read [here](https://en.wikipedia.org/wiki/Swappiness). Moreover, an improvvise surge in memory allocation in a swapless system can trigger the kernel OOM killer. – shodanshok May 06 '18 at 22:03
  • 3
    Thanks, this is reasonable. Nevertheless, I was thinking that if "enough ram" (eg: 8 or 16 GB) is full then it is likely some kind of exceptional situation (application with a memory leak or some other runaway issue, DDOS attack, etc.) in which case even swap would eventually be overwhelmed anyway. Maybe I'm not making a very convincing argument however this should not happen in light-ish desktop use. – Rolf May 08 '18 at 16:23
  • 1
    What about SSD drives wearing out due to use of swap? – Peter Mortensen Jan 31 '20 at 02:46
  • @PeterMortensen while possible, it seems an highly unlikely outcome, especially if using a quality TLC drive. – shodanshok Jan 31 '20 at 06:44
  • This doesn't solve the problem. Systemctl starts swap anyway even though it's disabled in fstab. – Owl Jul 05 '22 at 01:15
6

On Raspbian 10 (Buster), the clean answer would be:

To disable it until the next reboot, as stated in */etc/fstab*:

sudo /sbin/dphys-swapfile swapoff

To disable swap on boot:

sudo systemctl disable dphys-swapfile

(It turns out I couldn't find that information anywhere...)

Peter Mortensen
  • 2,319
  • 5
  • 23
  • 24
2

On my Linux Mint box (version 19.3 (Tricia), based on Ubuntu 18.04 (Bionic Beaver)) without a swap partition or without any swap at all, systemctl reported that swapfile.swap failed during every start. It could be disabled with the command:

sudo systemctl disable swapfile.swap

The swapfile.swap is a 'special' part of systemd, which you can read about in man, using the man systemd.special command.

Peter Mortensen
  • 2,319
  • 5
  • 23
  • 24
piotao
  • 121
  • 4
0

I know this is probably not the right answer for THIS question, but to be complete: If you just want to prevent starting swapping on SOME devices at boot, without removing them from fstab, you can add noauto as a flag after sw (sw,noauto).

Camion
  • 97
  • 1
0

When I view the /etc/fstab file on Raspbian I see a comment saying

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

But to completely disable the preconfigured swap file this works perfectly fine:

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

This solution looks a bit quick and dirty to me, however, you can simply reenable it with:

chmod +x /etc/init.d/dphys-swapfile
reboot
Ilka
  • 1
  • 2