|
- #!/usr/bin/env sh
-
- . /etc/log2ram.conf
-
- HDD_LOG=/var/hdd.log
- RAM_LOG=/var/log
-
- LOG_NAME="log2ram.log"
- LOG2RAM_LOG="${RAM_LOG}/${LOG_NAME}"
- LOG_OUTPUT="tee -a $LOG2RAM_LOG"
-
- isSafe () {
- [ -d $HDD_LOG/ ] || echo "ERROR: $HDD_LOG/ doesn't exist! Can't sync."
- [ -d $HDD_LOG/ ] || exit 1
- }
-
- syncToDisk () {
- isSafe
-
- if [ "$USE_RSYNC" = true ]; then
- rsync -aXWv --delete --links $RAM_LOG/ $HDD_LOG/ 2>&1 | $LOG_OUTPUT
- else
- cp -rfup $RAM_LOG/ -T $HDD_LOG/ 2>&1 | $LOG_OUTPUT
- fi
- }
-
- syncFromDisk () {
- isSafe
-
- if [ ! -z "$(du -sh -t "$SIZE" $HDD_LOG/ | cut -f1)" ]; then
- echo "ERROR: RAM disk too small. Can't sync."
- umount -l $RAM_LOG/
- umount -l $HDD_LOG/
- if [ "$MAIL" = true ]; then
- echo "LOG2RAM : No place on RAM anymore, fallback on the disk" | mail -s 'Log2Ram Error' root;
- fi
- exit 1
- fi
-
- if [ "$USE_RSYNC" = true ]; then
- rsync -aXWv --delete --links $HDD_LOG/ $RAM_LOG/ 2>&1 | $LOG_OUTPUT
- else
- cp -rfup $HDD_LOG/ -T $RAM_LOG/ 2>&1 | $LOG_OUTPUT
- fi
- }
-
- wait_for () {
- while ! grep -qs "$1" /proc/mounts; do
- sleep 0.1
- done
- }
-
- createZramLogDrive () {
- # Check Zram Class created
- if [ ! -d "/sys/class/zram-control" ]; then
- modprobe zram
- RAM_DEV='0'
- else
- RAM_DEV=$(cat /sys/class/zram-control/hot_add)
- fi
- echo ${COMP_ALG} > /sys/block/zram${RAM_DEV}/comp_algorithm
- echo ${LOG_DISK_SIZE} > /sys/block/zram${RAM_DEV}/disksize
- echo ${SIZE} > /sys/block/zram${RAM_DEV}/mem_limit
- mke2fs -t ext4 /dev/zram${RAM_DEV}
- }
-
- case "$1" in
- start)
- [ -d $HDD_LOG/ ] || mkdir $HDD_LOG/
- mount --bind $RAM_LOG/ $HDD_LOG/
- mount --make-private $HDD_LOG/
- wait_for $HDD_LOG
- if [ "$ZL2R" = true ]; then
- createZramLogDrive
- mount -t ext4 -o nosuid,noexec,nodev,user=log2ram /dev/zram${RAM_DEV} ${RAM_LOG}/
- else
- mount -t tmpfs -o nosuid,noexec,nodev,mode=0755,size=${SIZE} log2ram $RAM_LOG/
- fi
- wait_for $RAM_LOG
- syncFromDisk
- ;;
-
- stop)
- syncToDisk
- #ZRAM_LOG=$(awk '$2 == "/var/log" {print $1}' /proc/mounts)
- #ZRAM_LOG=$(echo ${ZRAM_LOG} | grep -o -E '[0-9]+')
- umount -l $RAM_LOG/
- umount -l $HDD_LOG/
- # Unsure as even with Root permision denied
- #echo ${ZRAM_LOG} > /sys/class/zram-control/hot_remove
- ;;
-
- write)
- syncToDisk
- ;;
-
- *)
- echo "Usage: log2ram {start|stop|write}" >&2
- exit 1
- ;;
- esac
|