Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Install zRAM on Debian(8)
#!/bin/bash
#
not_root() {
echo "ERROR: You have to be root to execute this script"
exit 1
}
zram_exists() {
echo "ERROR: /etc/init.d/zram already exists"
exit 1
}
# Check if user is root
[ $EUID != 0 ] && not_root
# Check if zram file already exists
[ -f /etc/init.d/zram ] && zram_exists
cat >/etc/init.d/zram <<EOL
#!/bin/sh
### BEGIN INIT INFO
# Provides: zram
# Required-Start: $local_fs
# Required-Stop: $local_fs
# Default-Start: S
# Default-Stop: 0 1 6
# Short-Description: Use compressed RAM as in-memory swap
# Description: Use compressed RAM as in-memory swap
### END INIT INFO
# Author: Antonio Galea <antonio.galea@gmail.com>
# Thanks to Przemysław Tomczyk for suggesting swapoff parallelization
FRACTION=75
MEMORY=\`perl -ne'/^MemTotal:\s+(\d+)/ && print \$1*1024;' < /proc/meminfo\`
CPUS=\`grep -c processor /proc/cpuinfo\`
SIZE=\$(( MEMORY * FRACTION / 100 / CPUS ))
case "\$1" in
"start")
param=\`modinfo zram|grep num_devices|cut -f2 -d:|tr -d ' '\`
modprobe zram \$param=\$CPUS
for n in \`seq \$CPUS\`; do
i=\$((n - 1))
echo \$SIZE > /sys/block/zram\$i/disksize
mkswap /dev/zram\$i
swapon /dev/zram\$i -p 10
done
;;
"stop")
for n in \`seq \$CPUS\`; do
i=$((n - 1))
swapoff /dev/zram\$i && echo "disabled disk \$n of \$CPUS" &
done
wait
sleep .5
modprobe -r zram
;;
*)
echo "Usage: \`basename \$0\` (start | stop)"
exit 1
;;
esac
EOL
chmod +x /etc/init.d/zram
insserv zram
/etc/init.d/zram start
exit 0
@alexmyczko

This comment has been minimized.

Copy link

alexmyczko commented Jun 12, 2017

what about adding

"status")
swapon -s
;;

?

and one for systemd based on what's installed? systemd or sysv?

@viperidae

This comment has been minimized.

Copy link

viperidae commented Nov 7, 2017

You should probably put a back-slash on the $ in line 56, like you have line 48

@Yashalta

This comment has been minimized.

Copy link

Yashalta commented Feb 8, 2018

Thanks for your script but, how to add your service in startup it mean "service zram start"? Because every time after startup system i have to do this comand "sudo service zram start".
my system Debian 9,3

@robgrzel

This comment has been minimized.

Copy link

robgrzel commented Jul 6, 2018

it should startup on reboot with this: insserv zram

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.