From b7c725f47df65ab18e5047a38974e5d1fba79670 Mon Sep 17 00:00:00 2001 From: azlux Date: Mon, 2 Oct 2017 20:37:46 +0200 Subject: [PATCH] Fix for #28 The init is useless and the mount was async. --- README.md | 2 -- install.sh | 1 - log2ram | 49 ++++++++++++++++++++++++++----------------------- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 7599484..ee9b12b 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ # Log2Ram Like ramlog for systemd (on debian 8 jessie for example). -READ THE ISSUE #24 (https://github.com/azlux/log2ram/issues/28) BEFORE INSTALL ! - Usefull for **Raspberry** for not writing all the time on the SD card. You need it because your SD card don't want to suffer anymore ! The script [log2ram](https://github.com/azlux/log2ram) can work on every linux system. So you can use it with your own daemon manager if you don't have systemd. diff --git a/install.sh b/install.sh index 97a5766..04e15c6 100644 --- a/install.sh +++ b/install.sh @@ -11,7 +11,6 @@ then systemctl enable log2ram cp log2ram.hourly /etc/cron.hourly/log2ram chmod +x /etc/cron.hourly/log2ram - /usr/local/bin/log2ram init echo "##### Reboot to activate log2ram #####" else diff --git a/log2ram b/log2ram index 4407959..0c55d97 100755 --- a/log2ram +++ b/log2ram @@ -2,33 +2,34 @@ . /etc/log2ram.conf -HDD_LOG=/var/log.hdd/ -RAM_LOG=/var/log/ -LOG2RAM_LOG="${HDD_LOG}log2ram.log" +HDD_LOG=/var/hdd.log +RAM_LOG=/var/log + +LOG2RAM_LOG="${HDD_LOG}/log2ram.log" 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 + [ -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 --exclude log2ram.log --links $RAM_LOG $HDD_LOG 2>&1 | $LOG_OUTPUT + rsync -aXWv --delete --exclude log2ram.log --links $RAM_LOG/ $HDD_LOG/ 2>&1 | $LOG_OUTPUT else - cp -rfup $RAM_LOG -T $HDD_LOG 2>&1 | $LOG_OUTPUT + 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 + 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 + 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 @@ -36,38 +37,40 @@ syncFromDisk () { fi if [ "$USE_RSYNC" = true ]; then - rsync -aXWv --delete --exclude log2ram.log --links $HDD_LOG $RAM_LOG 2>&1 | $LOG_OUTPUT + rsync -aXWv --delete --exclude log2ram.log --links $HDD_LOG/ $RAM_LOG/ 2>&1 | $LOG_OUTPUT else - cp -rfup $HDD_LOG -T $RAM_LOG 2>&1 | $LOG_OUTPUT + 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 +} case "$1" in start) - [ -d $HDD_LOG ] || mkdir $HDD_LOG + [ -d $HDD_LOG/ ] || mkdir $HDD_LOG/ rm $LOG2RAM_LOG - mount --bind $RAM_LOG $HDD_LOG - mount --make-private $HDD_LOG - mount -t tmpfs -o nosuid,noexec,nodev,mode=0755,size=$SIZE log2ram $RAM_LOG + mount --bind $RAM_LOG/ $HDD_LOG/ + mount --make-private $HDD_LOG/ + wait_for $HDD_LOG + mount -t tmpfs -o nosuid,noexec,nodev,mode=0755,size=$SIZE log2ram $RAM_LOG/ + wait_for $RAM_LOG syncFromDisk ;; stop) syncToDisk - umount -l $RAM_LOG - umount -l $HDD_LOG + umount -l $RAM_LOG/ + umount -l $HDD_LOG/ ;; write) syncToDisk ;; - init) - [ -d $HDD_LOG ] || mkdir $HDD_LOG - cp -rfup $RAM_LOG -T $HDD_LOG 2>&1 | $LOG_OUTPUT - ;; - *) echo "Usage: log2ram {start|stop|write}" >&2 exit 1