2023-01-27 00:08:51 +00:00
|
|
|
#!/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"
|
2023-01-27 21:21:33 +00:00
|
|
|
btrfs subvolume delete "${TARGET_SUBVOLUME}"
|
2023-01-27 00:08:51 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
echo "Snapshotting ${SNAPSHOT_PATH} into ${TARGET_SUBVOLUME}"
|
2023-01-27 21:21:33 +00:00
|
|
|
btrfs subvolume snapshot "${SNAPSHOT_PATH}" "${TARGET_SUBVOLUME}"
|