|
- #!/usr/bin/env sh
-
- . /etc/log2ram.conf
-
- LOG_NAME="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 -aXv --inplace --no-whole-file --delete-after $RAM_LOG/ $HDD_LOG/ 2>&1 | tee -a $LOG2RAM_LOG
- else
- cp -rfup --preserve=context $RAM_LOG/ -T $HDD_LOG/ 2>&1 | tee -a $LOG2RAM_LOG
- fi
- }
-
- syncFromDisk () {
- isSafe
-
- TP_SIZE=$SIZE
- if [ "$ZL2R" = true ]; then
- TP_SIZE=$LOG_DISK_SIZE
- then
-
- if [ ! -z "$(du -sh -t "$TP_SIZE" $HDD_LOG/ | cut -f1)" ]; then
- echo "ERROR: RAM disk for "$HDD_LOG/" too small. Can't sync."
- umount -l $RAM_LOG/
- umount -l $HDD_LOG/
- if [ "$MAIL" = true ]; then
- echo "LOG2RAM : No place on RAM for "$HDD_LOG/" anymore, fallback on the disk" | mail -s 'Log2Ram Error' root;
- fi
- exit 1
- fi
-
- if [ "$USE_RSYNC" = true ]; then
- rsync -aXv --inplace --no-whole-file --delete-after $HDD_LOG/ $RAM_LOG/ 2>&1 | tee -a $LOG2RAM_LOG
- else
- cp -rfup --preserve=context $HDD_LOG/ -T $RAM_LOG/ 2>&1 | tee -a $LOG2RAM_LOG
- 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)
- IFS=';'
- for i in $PATH_DISK; do
- PATH_FIRST_PART=$( echo ${i%/*} )
- PATH_LAST_PART=$( echo ${i##/*/} )
- RAM_LOG=$i
- HDD_LOG=$PATH_FIRST_PART/hdd.$PATH_LAST_PART
- LOG2RAM_LOG="${RAM_LOG}/${LOG_NAME}"
-
- [ -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
- done
- ;;
-
- stop)
- IFS=';'
- for i in $PATH_DISK; do
- PATH_FIRST_PART=$( echo ${i%/*} )
- PATH_LAST_PART=$( echo ${i##/*/} )
- RAM_LOG=$i
- HDD_LOG=$PATH_FIRST_PART/hdd.$PATH_LAST_PART
- LOG2RAM_LOG="${RAM_LOG}/${LOG_NAME}"
-
- 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
- done
- ;;
-
- write)
- IFS=';'
- for i in $PATH_DISK; do
- PATH_FIRST_PART=$( echo ${i%/*} )
- PATH_LAST_PART=$( echo ${i##/*/} )
- RAM_LOG=$i
- HDD_LOG=$PATH_FIRST_PART/hdd.$PATH_LAST_PART
- LOG2RAM_LOG="${RAM_LOG}/${LOG_NAME}"
-
- syncToDisk
- done
- ;;
-
- *)
- echo "Usage: log2ram {start|stop|write}" >&2
- exit 1
- ;;
- esac
|