47 lines
1 KiB
Text
47 lines
1 KiB
Text
|
#!/usr/bin/env bash
|
||
|
|
||
|
set -e
|
||
|
|
||
|
ROOT_DIRECTORY=$1
|
||
|
SUBVOLUME=$2
|
||
|
|
||
|
TARGET_SUBVOLUME="${ROOT_DIRECTORY}/${SUBVOLUME}"
|
||
|
SNAPSHOT_DIRECTORY="${ROOT_DIRECTORY}/@snapshots"
|
||
|
|
||
|
if [ "${ROOT_DIRECTORY}" == "" ]
|
||
|
then
|
||
|
echo "No root directory provided"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
if [ ! -d "${SNAPSHOT_DIRECTORY}" ]
|
||
|
then
|
||
|
echo "No snapshot directory in root ${ROOT_DIRECTORY}"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
if [ "${SUBVOLUME}" == "" ]
|
||
|
then
|
||
|
echo "No subvolume provided"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
LATEST_SNAPSHOT=$(ls ${ROOT_DIRECTORY}/@snapshots/ | grep "${SUBVOLUME}\." | awk '{ print length, $0 }' | sort | tail -n 1 | awk '{ print $2 }')
|
||
|
|
||
|
SNAPSHOT_PATH="${SNAPSHOT_DIRECTORY}/${LATEST_SNAPSHOT}"
|
||
|
|
||
|
if [ ! -d "${SNAPSHOT_PATH}" ] || [ "${LATEST_SNAPSHOT}" == "" ]
|
||
|
then
|
||
|
echo "Couldn't find latest snapshot for subvolume ${SUBVOLUME}"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
if [ -d "${TARGET_SUBVOLUME}" ]
|
||
|
then
|
||
|
echo "Removing existing subvolume"
|
||
|
sudo btrfs subvolume delete "${TARGET_SUBVOLUME}"
|
||
|
fi
|
||
|
|
||
|
echo "Snapshotting ${SNAPSHOT_PATH} into ${TARGET_SUBVOLUME}"
|
||
|
sudo btrfs subvolume snapshot "${SNAPSHOT_PATH}" "${TARGET_SUBVOLUME}"
|