Raspberry Pi has only 256 MB of RAM, so I would like to use swap space (either on SD card or attached USB storage). How do I set it up?
Raspbian uses dphys-swapfile, which is a swap-file based solution instead of the "standard" swap-partition based solution. It is much easier to change the size of the swap.
The configuration file is:
The content is very simple. By default my Raspbian has 100MB of swap:
If you want to change the size, you need to modify the number and restart dphys-swapfile:
Edit: On Raspbian the default location is /var/swap, which is (of course) located on the SD card. I think it is a bad idea, so I would like to point out, that the /etc/dphys-swapfile can have the following option too: CONF_SWAPFILE=/media/btsync/swapfile
I only problem with it, the usb storage is automounted, so a potential race here (automount vs. swapon)
You can set up swap space quite simply. For example, if your USB drive is
/dev/sdx, you would use (you must be root for this):
$ mkswap /dev/sdx
$ swapon /dev/sdx
Note that this would use the whole device and you will probably lose all the existing data on it.
You can also create a swap file (by using a
loop device) like this:
$ dd if=/dev/zero of=/path/to/swapfile bs=1M count=1024 # For 1GB swap file
$ mkswap /path/to/swapfile
$ swapon /path/to/swapfile
When you no longer need the swap file (if you want to eject the USB drive for example), you must use
swapoff <device>. Not doing so will probably result in system crash.
You should be careful though. SD cards have limited read/write limits and it will shorten its lifespan. If you are using an external hard drive, you should be fine, but it will be very slow.
Do not do this at all.
You should not enable swap on the Raspberry Pi.
Although it is possible, it is not useful. Even on a class 10 SDHC card, it is just too slow. Also you will reduce the lifespan of the SD card.
On any flash-based storage device (SD card, SDD, USB thumb drives) you are also likely to see system-wide pauses while a large group of flash blocks is erased.
- If you connect a (magnetic) hard drive (though a USB-SATA or USB-IDE adapter)
- If you use ZRAM or something similar
It is a pity that the Raspberry Pis do not have GigaBit Ethernet but it is at least theoretically possible to have swap space on a network device - the Linux Terminal Server Project can offer it from the server to the clients according to this item on their wiki.
I found a Foundation Forum topic "Tip: Swap over nfs" that shows how someone who already had some NFS mounts already in place used a swapfile on one of them and mounted it via a loop-mount (possibly needed because Linux does not allow a NFS mount to be used directly). Given that the remote swap-file will hold data that the OS must not lose I'd only consider this for a wired Ethernet network - a wireless link would be too fragile IMHO. Also, of course you must not allow the remote server to be shut-down without turning the swap off and allowing it to completely empty first!