summaryrefslogtreecommitdiff
path: root/scripts/boot/snapshot.sh
diff options
context:
space:
mode:
authorDaniel Baumann <daniel@debian.org>2012-06-06 18:29:07 +0200
committerDaniel Baumann <daniel@debian.org>2012-06-06 18:43:56 +0200
commite243babf191d5b42efe58e90e74a22bd8063be8d (patch)
treed29c3630f8235f98395450b4b3c499580b1f625e /scripts/boot/snapshot.sh
parentf04ab476c668ad513f1ec68beaa948a26c862e05 (diff)
downloadlive-boot-e243babf191d5b42efe58e90e74a22bd8063be8d.tar.gz
live-boot-e243babf191d5b42efe58e90e74a22bd8063be8d.zip
Dropping snapshot functionality, superseeded by awesome custom mount persistence.
See the following threads for more information: * http://lists.debian.org/debian-live/2012/04/msg00110.html * http://lists.debian.org/debian-live/2012/06/msg00039.html
Diffstat (limited to 'scripts/boot/snapshot.sh')
-rwxr-xr-xscripts/boot/snapshot.sh173
1 files changed, 0 insertions, 173 deletions
diff --git a/scripts/boot/snapshot.sh b/scripts/boot/snapshot.sh
deleted file mode 100755
index 568fda7..0000000
--- a/scripts/boot/snapshot.sh
+++ /dev/null
@@ -1,173 +0,0 @@
-#!/bin/sh
-
-#set -e
-
-do_snap_copy ()
-{
- fromdev="${1}"
- todir="${2}"
- snap_type="${3}"
- size=$(fs_size "${fromdev}" "" "used")
-
- if [ -b "${fromdev}" ]
- then
- log_success_msg "Copying snapshot ${fromdev} to ${todir}..."
-
- # look for free mem
- if [ -n "${HOMEMOUNTED}" -a "${snap_type}" = "HOME" ]
- then
- todev=$(awk -v pat="$(base_path ${todir})" '$2 == pat { print $1 }' /proc/mounts)
- freespace=$(df -k | awk '/'${todev}'/{print $4}')
- else
- freespace=$(awk '/^MemFree:/{f=$2} /^Cached:/{c=$2} END{print f+c}' /proc/meminfo)
- fi
-
- tomount="/mnt/tmpsnap"
-
- if [ ! -d "${tomount}" ]
- then
- mkdir -p "${tomount}"
- fi
-
- fstype=$(get_fstype "${fromdev}")
-
- if [ -n "${fstype}" ]
- then
- # Copying stuff...
- mount -o ro -t "${fstype}" "${fromdev}" "${tomount}" || log_warning_msg "Error in mount -t ${fstype} -o ro ${fromdev} ${tomount}"
- cp -a "${tomount}"/* ${todir}
- umount "${tomount}"
- else
- log_warning_msg "Unrecognized fstype: ${fstype} on ${fromdev}:${snap_type}"
- fi
-
- rmdir "${tomount}"
-
- if echo ${fromdev} | grep -qs loop
- then
- losetup -d "${fromdev}"
- fi
-
- return 0
- else
- log_warning_msg "Unable to find the snapshot ${snap_type} medium"
- return 1
- fi
-}
-
-try_snap ()
-{
- # copy the contents of previously found snapshot to ${snap_mount}
- # and remember the device and filename for resync on exit in live-boot.init
-
- snapdata="${1}"
- snap_mount="${2}"
- snap_type="${3}"
- snap_relpath="${4}"
-
- if [ -z "${snap_relpath}" ]
- then
- # root snapshot, default usage
- snap_relpath="/"
- else
- # relative snapshot (actually used just for "/home" snapshots)
- snap_mount="${2}${snap_relpath}"
- fi
-
- if [ -n "${snapdata}" ] && [ ! -b "${snapdata}" ]
- then
- log_success_msg "found snapshot: ${snapdata}"
- snapdev="$(echo ${snapdata} | cut -f1 -d ' ')"
- snapback="$(echo ${snapdata} | cut -f2 -d ' ')"
- snapfile="$(echo ${snapdata} | cut -f3 -d ' ')"
-
- if ! try_mount "${snapdev}" "${snapback}" "ro"
- then
- break
- fi
-
- RES="0"
-
- if echo "${snapfile}" | grep -qs '\(squashfs\|ext2\|ext3\|ext4\|jffs2\)'
- then
- # squashfs, jffs2 or ext2/ext3/ext4 snapshot
- dev=$(get_backing_device "${snapback}/${snapfile}")
-
- do_snap_copy "${dev}" "${snap_mount}" "${snap_type}"
- RES="$?"
- else
- # cpio.gz snapshot
-
- # Unfortunately klibc's cpio is incompatible with the
- # rest of the world; everything else requires -u -d,
- # while klibc doesn't implement them. Try to detect
- # whether it's in use.
- cpiopath="$(which cpio)" || true
- if [ "$cpiopath" ] && grep -aq /lib/klibc "$cpiopath"
- then
- cpioargs=
- else
- cpioargs='--unconditional --make-directories'
- fi
-
- if [ -s "${snapback}/${snapfile}" ]
- then
- BEFOREDIR="$(pwd)"
- cd "${snap_mount}" && zcat "${snapback}/${snapfile}" | $cpiopath $cpioargs --extract --preserve-modification-time --no-absolute-filenames --sparse 2>/dev/null
- RES="$?"
- cd "${BEFOREDIR}"
- else
- log_warning_msg "${snapback}/${snapfile} is empty, adding it for sync on reboot."
- RES="0"
- fi
-
- if [ "${RES}" != "0" ]
- then
- log_warning_msg "failure to \"zcat ${snapback}/${snapfile} | $cpiopath $cpioargs --extract --preserve-modification-time --no-absolute-filenames --sparse\""
- fi
- fi
-
- umount "${snapback}" || log_warning_msg "failure to \"umount ${snapback}\""
-
- if [ "${RES}" != "0" ]
- then
- log_warning_msg "Impossible to include the ${snapfile} Snapshot file"
- fi
-
- elif [ -b "${snapdata}" ]
- then
- # Try to find if it could be a snapshot partition
- dev="${snapdata}"
- log_success_msg "found snapshot ${snap_type} device on ${dev}"
- if echo "${dev}" | grep -qs loop
- then
- # strange things happens, user confused?
- snaploop=$( losetup ${dev} | awk '{print $3}' | tr -d '()' )
- snapfile=$(basename ${snaploop})
- snapdev=$(awk -v pat="$( dirname ${snaploop})" '$2 == pat { print $1 }' /proc/mounts)
- else
- snapdev="${dev}"
- fi
-
- if ! do_snap_copy "${dev}" "${snap_mount}" "${snap_type}"
- then
- log_warning_msg "Impossible to include the ${snap_type} Snapshot (i)"
- return 1
- else
- if [ -n "${snapfile}" ]
- then
- # it was a loop device, user confused
- umount ${snapdev}
- fi
- fi
- else
- log_warning_msg "Impossible to include the ${snap_type} Snapshot (o)"
- return 1
- fi
-
- if [ -z ${PERSISTENCE_READONLY} ]
- then
- echo "export ${snap_type}SNAP=${snap_relpath}:${snapdev}:${snapfile}" >> snapshot.conf # for resync on reboot/halt
- fi
- return 0
-}