From 4a1e6c8cb3959e2cda0d405a1bf6b0368e58cd17 Mon Sep 17 00:00:00 2001 From: Adrien Date: Mon, 8 Oct 2018 08:36:03 +0200 Subject: [PATCH] Externalize zram role --- files/etc/systemd/system/zram-config.service | 14 ++++ files/usr/local/sbin/zram-swap.sh | 77 ++++++++++++++++++++ tasks/main.yml | 13 ++++ 3 files changed, 104 insertions(+) create mode 100644 files/etc/systemd/system/zram-config.service create mode 100755 files/usr/local/sbin/zram-swap.sh create mode 100644 tasks/main.yml diff --git a/files/etc/systemd/system/zram-config.service b/files/etc/systemd/system/zram-config.service new file mode 100644 index 0000000..a804ce3 --- /dev/null +++ b/files/etc/systemd/system/zram-config.service @@ -0,0 +1,14 @@ +[Unit] +Description=ZRAM Swap +#After=syslog.target NetworkManager.service + +[Service] +ExecStart=/usr/local/sbin/zram-swap.sh start +ExecStop=/usr/local/sbin/zram-swap.sh stop +#KillMode=process +#Restart=off +Type=oneshot +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target diff --git a/files/usr/local/sbin/zram-swap.sh b/files/usr/local/sbin/zram-swap.sh new file mode 100755 index 0000000..f4cfc9f --- /dev/null +++ b/files/usr/local/sbin/zram-swap.sh @@ -0,0 +1,77 @@ +#!/bin/bash +# +# zram-config Start zram-config +# +# chkconfig: 2345 08 92 +# description: Starts, stops and saves zram-config +# +# +### BEGIN INIT INFO +# Provides: zram-config +# Required-Start: +# Required-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: start and stop zram-config +# Description: Start, stop and save zram-config +### END INIT INFO + +# http://askubuntu.com/questions/130374/ramdisk-compressed-writeable-no-swap +# https://kernel.org/doc/Documentation/blockdev/zram.txt + +#NRDEVICES=$[$(grep ^physical\ id /proc/cpuinfo | sort -u | wc -l)*$(grep ^core\ id /proc/cpuinfo | sort -u | wc -l)] +#if [ $NRDEVICES -eq 0 ]; then +# NRDEVICES=$(grep -c '^processor\s*:' /proc/cpuinfo) +#fi +#NRDEVICES=1 +case "$1" in + start) + if [ $(grep -c /dev/zram /proc/swaps) -gt 1 ]; then + echo "Already running" >&2 + exit 2 + fi + if [ $(lsmod | grep -c zram) -eq 0 ]; then + modprobe zram + ZRAMID=0 + else + ZRAMID=$(cat /sys/class/zram-control/hot_add) + fi + MEM=$(free -k | grep -e "^Mem:" | awk '{printf("%d\n",$2/1.2)}') + # echo 1 > /sys/block/zram${ZRAMID}/reset + if [ -e /sys/block/zram${ZRAMID}/comp_algorithm ]; then + if [ $(grep -c lz4 /sys/block/zram${ZRAMID}/comp_algorithm) -eq 1 ]; then + echo lz4 > /sys/block/zram${ZRAMID}/comp_algorithm + fi + fi + if [ -e /sys/block/zram${ZRAMID}/mem_limit ]; then + echo $[${MEM}*2]k > /sys/block/zram${ZRAMID}/disksize + echo ${MEM}k > /sys/block/zram${ZRAMID}/mem_limit + else + echo ${MEM}k > /sys/block/zram${ZRAMID}/disksize + fi + mkswap /dev/zram${ZRAMID} + swapon -p 10 /dev/zram${ZRAMID} + ;; + stop) + # Suppression zram + # echo X > /sys/class/zram-control/hot_remove ou X=0 pour zram0 + for ZRAMID in $(grep /dev/zram /proc/swaps | awk '{print $1}' | cut -c10-); do + swapoff /dev/zram${ZRAMID} + echo 1 > /sys/block/zram${ZRAMID}/reset + echo ${ZRAMID} > /sys/class/zram-control/hot_remove + done + modprobe -r zram + ;; +esac +#mke2fs -q -m 0 -b 4096 -O sparse_super -L zram /dev/zram0 +#mount -o relatime,noexec,nosuid /dev/zram0 /mnt/zram +#chmod 1777 /mnt/zram/ + +# cat /sys/block/zram0/mem_used_total + + +# https://www.google.fr/search?q=sysem+to+ram+pivot_root&ie=utf-8&oe=utf-8&rls=org.mozilla:fr:unofficial&client=seamonkey-a&gws_rd=cr&ei=ThHLVs3WA4H9acbUtNAH#q=system+to+ram+pivot_root +#http://dreamlayers.blogspot.fr/2012/10/running-linux-from-ram.html +#http://unix.stackexchange.com/questions/126217/when-would-you-use-pivot-root-over-switch-root +#https://wiki.gentoo.org/wiki/Zram + diff --git a/tasks/main.yml b/tasks/main.yml new file mode 100644 index 0000000..95b6493 --- /dev/null +++ b/tasks/main.yml @@ -0,0 +1,13 @@ +--- +- name: Install script zram-swap.sh + copy: src=files/usr/local/sbin/zram-swap.sh dest=/usr/local/sbin/zram-swap.sh owner=root group=root mode=0755 +- name: Install service zram-config.service + copy: src=files/etc/systemd/system/zram-config.service dest=/etc/systemd/system/zram-config.service owner=root group=root mode=0644 + when: ansible_service_mgr == "systemd" +- name: Install zram-config link service in init.d + file: src=/usr/local/sbin/zram-swap.sh dest=/etc/init.d/zram-config owner=root group=root state=link + when: ansible_service_mgr != "systemd" +- name: start zram-config service + service: name=zram-config enabled=yes state=started +# when: ansible_service_mgr == "systemd" +