diff options
| author | Marco Amadori <marco.amadori@gmail.com> | 2008-09-19 00:31:57 +0200 |
|---|---|---|
| committer | Daniel Baumann <daniel@debian.org> | 2011-03-09 17:48:02 +0100 |
| commit | 64db924e2232aa8a2bee5aa177d647fcc1589a4c (patch) | |
| tree | 8ba71dac07c858217efd29a67afe7cefa6e99c47 | |
| parent | f4902b112fbd2ab8cafe6fd1827a941cfe20fb8c (diff) | |
| download | live-boot-64db924e2232aa8a2bee5aa177d647fcc1589a4c.tar.gz live-boot-64db924e2232aa8a2bee5aa177d647fcc1589a4c.zip | |
live-snapshot: fixed include-list handling.
* When "/etc/live-snapshot.list" is present, all standard files and
directories listed there are saved on shutdown.
Now it saves them only if they are modified, and also handles
dangling symbolic links. This beaviour will be gentle to live-systems
upgrades on the same hardware since new unmodified to-be-snapshotted files
will be no more overwritten by old unnecessary saved cruft.
It still does not handle removal of deleted files.
| -rwxr-xr-x | bin/live-snapshot | 38 |
1 files changed, 32 insertions, 6 deletions
diff --git a/bin/live-snapshot b/bin/live-snapshot index f77541f..5606436 100755 --- a/bin/live-snapshot +++ b/bin/live-snapshot @@ -320,23 +320,49 @@ Mount_device () esac } +Entry_is_modified () +{ + # Returns true if file exists and it is also present in "cow" directory + # This means it is modified in respect to read-only media, so it deserve + # to be saved + + entry="${1}" + + if [ -e "${entry}" ] || [ -L "${entry}" ] + then + if [ -e "${DEF_SNAP_COW}/${entry}" ] || [ -L "${DEF_SNAP_COW}/${entry}" ] + then + return 0 + fi + fi + return 1 +} + Do_filelist () { - # BUGS: supports only cpio.gz types right now + # BUGS: supports only cpio.gz types, and do not handle deleted files yet + TMP_FILELIST=$1 if [ -f "${SNAP_LIST}" ] then # Generate include list for entry in $(cat "${SNAP_LIST}" | grep -v '^#.*$' | grep -v '^ *$') do - if [ -f "${entry}" ] - then - printf "%s\000" "${entry}" >> "${TMP_FILELIST}" - elif [ -d "${entry}" ] + if [ -d "${entry}" ] then cd / - find "${entry}" -print0 >> "${TMP_FILELIST}" + find "${entry}" | while read line + do + if Entry_is_modified "${line}" + then + printf "%s\000" "${line}" >> "${TMP_FILELIST}" + fi + done cd "${OLDPWD}" + elif Entry_is_modified "${entry}" + then + # if file exists and it is modified + printf "%s\000" "${entry}" >> "${TMP_FILELIST}" fi done |
