mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-28 09:50:09 +00:00
109 lines
2.3 KiB
Bash
Executable File
109 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/bash
|
|
|
|
# XXX need:
|
|
# - protocol (command) to create archive root
|
|
# manually:
|
|
# - copy tree
|
|
# - run snapshot.sh
|
|
# script:
|
|
# XXX
|
|
# - protocol to create snapshots
|
|
# - sync-flash.sh ???
|
|
# - protocol to restore stuff -- simply copy???
|
|
# - protocol to fully delete something -- i.e. delete snapshots???
|
|
# - a way to list deleted files
|
|
# - a way to list available file versions
|
|
# - a way to restore specicifc file(s)
|
|
# - a way to maintain a set number of snapshots...
|
|
#
|
|
|
|
usage(){
|
|
echo "Usage:"
|
|
# XXX
|
|
echo " $(basename "$0")"
|
|
}
|
|
printHelp(){
|
|
usage
|
|
# XXX
|
|
}
|
|
|
|
# handle args...
|
|
for arg in "$@" ; do
|
|
case $arg in
|
|
-h|--help)
|
|
printHelp
|
|
exit
|
|
;;
|
|
esac
|
|
done
|
|
|
|
|
|
SNAPSHOT_DIR=.snapshots
|
|
SUBVOLUME_DIR=media
|
|
SNAPSHOT_COUNT=5
|
|
|
|
|
|
# run in script dir (not cwd)...
|
|
DIR=`dirname "$0"`
|
|
if ! [ -z "$DIR" ] ; then
|
|
cd "$DIR"
|
|
fi
|
|
|
|
# check if on btrfs filesystem...
|
|
# XXX also check if btrfs command is available...
|
|
if ! btrfs filesystem usage . > /dev/null 2>&1 ; then
|
|
exit
|
|
fi
|
|
|
|
|
|
|
|
# create ./media...
|
|
# XXX check if not a directory...
|
|
if ! [ -e "$SUBVOLUME_DIR" ] ; then
|
|
btrfs subvolume create "$SUBVOLUME_DIR"
|
|
# XXX build tree -- ImageGrid
|
|
|
|
# convert ./media to a subvolume...
|
|
elif ! [ "$(stat --format=%i "$SUBVOLUME_DIR")" == 256 ] ; then
|
|
mkdir bak
|
|
mv "$SUBVOLUME_DIR" bak/
|
|
btrfs subvolume create "$SUBVOLUME_DIR"
|
|
cp --archive --one-file-system --reflink=always \
|
|
./bak/"$SUBVOLUME_DIR"/{,.}* \
|
|
"$SUBVOLUME_DIR"/
|
|
fi
|
|
mkdir -p "$SNAPSHOT_DIR"
|
|
|
|
|
|
# XXX should this be more human readable???
|
|
# ...a date + number maybe???
|
|
SNAPSHOT=$((
|
|
$( ls "$SNAPSHOT_DIR/" \
|
|
| sort -n \
|
|
| tail -n 1 ) \
|
|
+ 1 ))
|
|
|
|
#btrfs subvolume snapshot -r "$SUBVOLUME_DIR" "${SNAPSHOT_DIR}/${SNAPSHOT}"
|
|
btrfs subvolume snapshot "$SUBVOLUME_DIR" "${SNAPSHOT_DIR}/${SNAPSHOT}"
|
|
|
|
|
|
if [[ $SNAPSHOT_COUNT =~ [0-9]* ]] \
|
|
&& [ "$SNAPSHOT_COUNT" != 0 ] ; then
|
|
SNAPSHOTS=($(\
|
|
ls "$SNAPSHOT_DIR/" \
|
|
| sort -n ))
|
|
remove=$(( ${#SNAPSHOTS[@]} - $SNAPSHOT_COUNT - 1 ))
|
|
while (( $remove >= 0 )) ; do
|
|
# XXX can we avoid sudo here???
|
|
# XXX is 'btrfs subvolume delete ...' the same as 'rm -rf ..'
|
|
#sudo btrfs subvolume delete -c ${SNAPSHOT_DIR}/${SNAPSHOTS[$remove]}
|
|
echo Removing snapshot: ${SNAPSHOT_DIR}/${SNAPSHOTS[$remove]}
|
|
rm -rf ${SNAPSHOT_DIR}/${SNAPSHOTS[$remove]}
|
|
remove=$(( $remove - 1 ))
|
|
done
|
|
fi
|
|
|
|
|
|
|
|
# vim:set nowrap nospell :
|