#!/bin/bash -e # This script adds a 1GB swapfile to the system function do_err() { code=$? echo "Command failed with code $code: $BASH_COMMAND" exit $code } trap do_err ERR function set_swappiness() { if ! grep -q '^vm.swappiness' /etc/sysctl.conf; then echo -n 'Setting ' sysctl -w vm.swappiness=10 echo vm.swappiness = 10 >> /etc/sysctl.conf fi } function get_new_swapfile() { for i in `seq 0 99`; do if [ ! -e /swapfile.$i ]; then echo /swapfile.$i return fi done # Seriously? 100 swapfiles already exist? echo "too many swapfiles" exit 1 } [ `id -u` -eq 0 ] || { echo "You must be root to run this script"; exit 1; } # how big? default 1GB declare -i num_gb num_gb="${1-1}" [ $num_gb -lt 1 ] && { echo "Please specify an integer >= 1"; exit 1; } echo "Creating a ${num_gb}GB swapfile..." set_swappiness SWAPFILE=$(get_new_swapfile) umask 077 dd if=/dev/zero of=$SWAPFILE bs=1k count=$(($num_gb * 1024 * 1024)) conv=excl mkswap $SWAPFILE swapon $SWAPFILE echo "$SWAPFILE swap swap auto 0 0" >> /etc/fstab echo 1GiB swapfile successfully added