diff options
| author | Marco Amadori <marco.amadori@gmail.com> | 2008-09-28 00:51:04 +0200 |
|---|---|---|
| committer | Daniel Baumann <daniel@debian.org> | 2011-03-09 17:48:02 +0100 |
| commit | a298ae49a77f528b0d57e013343473bb5162cd61 (patch) | |
| tree | 06013b5b33865f4ad73c63c7e3aabcc75af0c65f /scripts | |
| parent | 6fd3b2db8ca683513709560744aebd4cff3d378d (diff) | |
| download | live-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')
| -rwxr-xr-x | scripts/live | 7 | ||||
| -rwxr-xr-x | scripts/live-bottom/08persistence_excludes | 77 |
2 files changed, 84 insertions, 0 deletions
diff --git a/scripts/live b/scripts/live index 5be6fe2..0f4ef0d 100755 --- a/scripts/live +++ b/scripts/live @@ -1151,9 +1151,16 @@ setup_unionfs () # snapshots to be sure to really store some e.g key config files, # but not on the same media blacklistdev="${cowprobe}" + PERSISTENCE_IS_ON="Yes" + export PERSISTENCE_IS_ON fi # homecow just mount something on /home, this should be generalized some way homecow=$(find_cow_device "${home_persistence}" "${blacklistdev}") + if [ -b "${homecow}" ] + then + PERSISTENCE_IS_ON="Yes" + export PERSISTENCE_IS_ON + fi root_snapdata=$(find_snap "${root_snapshot_label}" "${blacklistdev}") # This second type should be removed when snapshot will get smarter, # hence when "/etc/live-snapshot*list" will be supported also by 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 |
