Odroid: Swap on USB-stick

Swap is used when the kernel runs out of memory and need to swap less used information to the disc to make space for information currently in use. In a good setup the swap will never be used but if it’s needed and not existing it will make processes crash.
I have just started out testing BitTorrent Sync (btsync) on my Odroid-C1 and noticed that all the memory was allocated more or less straight away after starting the btsync service. So just to be safe during my test, to avoid crashes, I added a 8Gb USB stick to use for swap space. You can of course use the SD-card but that will take up space needed for the system as well as shorten the life of your SD-card.
First we check how much swap we currently have.
[bash]#free -m
total used free shared buffers cached
Mem: 836 772 64 14 24 525
-/+ buffers/cache: 222 614
Swap: 0 0 0[/bash]
Then we plug in the usb stick and run dmesg to find the device.
[bash][16573.684715@3] usb-storage 1-1.1:1.0: USB Mass Storage device detected
[16573.686215@3] scsi0 : usb-storage 1-1.1:1.0
[16574.907717@3] scsi 0:0:0:0: Direct-Access PNY USB 2.0 FD 1100 PQ: 0 ANSI: 4
[16574.909157@0] sd 0:0:0:0: [sda] 15826944 512-byte logical blocks: (8.10 GB/7.54 GiB)
[16574.909858@0] sd 0:0:0:0: [sda] Write Protect is off
[16574.909871@0] sd 0:0:0:0: [sda] Mode Sense: 43 00 00 00
[16574.910478@0] sd 0:0:0:0: [sda] No Caching mode page found
[16574.910518@0] sd 0:0:0:0: [sda] Assuming drive cache: write through
[16574.923530@0] sd 0:0:0:0: [sda] No Caching mode page found
[16574.923581@0] sd 0:0:0:0: [sda] Assuming drive cache: write through
[16574.933317@1] sda: sda1
[16574.937732@1] sd 0:0:0:0: [sda] No Caching mode page found
[16574.937776@1] sd 0:0:0:0: [sda] Assuming drive cache: write through
[16574.944985@2] sd 0:0:0:0: [sda] Attached SCSI removable disk[/bash]
So here we can see the 8GB usb-stick plugged in and picked up. So now we need to partition it to use as swap. We see that it’s recognized as /dev/sda.
[bash]root@BTSYNCOD:/# fdisk /dev/sda
Command (m for help): d
Selected partition 1
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-15826943, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-15826943, default 15826943):
Using default value 15826943
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.[/bash]
As you can see we use the default answer on all questions. Then we create the swap on the partition.
[bash]root@BTSYNCOD:~# mkswap /dev/sda1
Setting up swapspace version 1, size = 7912444 KiB
no label, UUID=81a92281-cc1d-4687-a0c9-13dc234d1657[/bash]
Here we make a note of, or copy, the UUID that we need to make the swap mount on boot in fstab. We then use nano /etc/fstab to edit the mount table and add:
[bash]UUID</span><span class="crayon-o">=</span><span class="crayon-v">b69cf517</span><span class="crayon-o">-</span><span class="crayon-cn">5d6e</span><span class="crayon-o">-</span><span class="crayon-cn">4388</span><span class="crayon-o">-</span><span class="crayon-v">bb69</span><span class="crayon-o">-</span><span class="crayon-e">e24d5cb1b338 </span><span class="crayon-e">none </span><span class="crayon-e">swap </span><span class="crayon-i">sw</span><span class="crayon-h"> </span><span class="crayon-cn">0</span><span class="crayon-h"> </span><span class="crayon-cn">0[/bash]
Of course you need to replace UUID=b69cf517–5d6e–4388–bb69–e24d5cb1b338 with your own UUID. Then we can enable the swap.
[bash]swapon /dev/sda1[/bash]
As I wrote in the intro this is just a fail safe. If the system is forced to use the swap it will decrease performance and my application should make use of a machine with more memory. This has been running for more then 24h now and no swap space is used so far.