#!/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" btrfs subvolume delete "${TARGET_SUBVOLUME}" fi echo "Snapshotting ${SNAPSHOT_PATH} into ${TARGET_SUBVOLUME}" btrfs subvolume snapshot "${SNAPSHOT_PATH}" "${TARGET_SUBVOLUME}"