summaryrefslogtreecommitdiff
path: root/scripts/live-bottom/08persistence_excludes
diff options
context:
space:
mode:
authorMarco Amadori <marco.amadori@gmail.com>2008-09-28 00:51:04 +0200
committerDaniel Baumann <daniel@debian.org>2011-03-09 17:48:02 +0100
commita298ae49a77f528b0d57e013343473bb5162cd61 (patch)
tree06013b5b33865f4ad73c63c7e3aabcc75af0c65f /scripts/live-bottom/08persistence_excludes
parent6fd3b2db8ca683513709560744aebd4cff3d378d (diff)
downloadlive-boot-a298ae49a77f528b0d57e013343473bb5162cd61.tar.gz
live-boot-a298ae49a77f528b0d57e013343473bb5162cd61.zip
Implemented a persistence exclude list.
* This finally enables one of the most requested feature to exclude things like disk caches and temporary files from the persistence images in order to speed things up and saves precious writes of flash based storages. This works at boot by bind mounting tmpfs clones of paths listed on "/etc/live-persistence.binds".
Diffstat (limited to 'scripts/live-bottom/08persistence_excludes')
-rwxr-xr-xscripts/live-bottom/08persistence_excludes77
1 files changed, 77 insertions, 0 deletions
diff --git a/scripts/live-bottom/08persistence_excludes b/scripts/live-bottom/08persistence_excludes
new file mode 100755
index 0000000..bc5c4d8
--- /dev/null
+++ b/scripts/live-bottom/08persistence_excludes
@@ -0,0 +1,77 @@
+#!/bin/sh
+
+# Persistence enhancer script
+# This script saves precious time on slow persistence devices/image files
+# and writes on flash based device.
+# a tmpfs on $PERSTMP is mounted and directories listed in
+# /etc/live-persistence.binds will be copied there and then bind mounted back.
+
+#set -e
+
+# initramfs-tools header
+
+PREREQ=""
+
+prereqs()
+{
+ echo "${PREREQ}"
+}
+
+case "${1}" in
+ prereqs)
+ prereqs
+ exit 0
+ ;;
+esac
+
+# live-initramfs header
+
+if [ -z "${PERSISTENT}" ] || [ -n "${NOPERSISTENT}" ] || [ -z "${PERSISTENCE_IS_ON}" ] || [ ! -f /root/etc/live-persistence.binds ]
+then
+ exit 0
+fi
+
+. /scripts/live-functions
+
+# live-initramfs script
+
+dirs="$(cat /root/etc/live-persistence.binds | grep -v '^#.*$' | grep -v '^ *$' | tr '\n' '\0')"
+if [ -z "${dirs}" ]
+then
+ exit 0
+fi
+
+log_begin_msg "Moving persistence bind mounts"
+
+PERSTMP="/root/live/persistence-binds"
+CPIO="/bin/cpio"
+
+if [ ! -d "${PERSTMP}" ]
+then
+ mkdir -p "${PERSTMP}"
+fi
+
+mount -t tmpfs tmpfs "${PERSTMP}"
+
+for dir in $(echo "${dirs}" | tr '\0' '\n')
+do
+ if [ ! -e "/root/${dir}" ] && [ ! -L "/root/${dir}" ]
+ then
+ # directory do not exists, create it
+ mkdir -p "/root/${dir}"
+ elif [ ! -d "/root/${dir}" ]
+ then
+ # it is not a directory, skip it
+ break
+ fi
+
+ # Copy previous content if any
+ cd "/root/${dir}"
+ find . -print0 | ${CPIO} -pumd0 "${PERSTMP}/${dir}"
+ cd "${OLDPWD}"
+
+ # Bind mount it to origin
+ mount -o bind "${PERSTMP}/${dir}" "/root/${dir}"
+done
+
+log_end_msg