Options test #12
59
snapsh
59
snapsh
|
@ -29,16 +29,15 @@ DESCRIPTION=""
|
||||||
|
|
||||||
|
|
||||||
help() {
|
help() {
|
||||||
printf "Usage:\n
|
printf "Usage:
|
||||||
snapsh [OPTIONS]
|
snapsh [OPTIONS]
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
-h, --help Display this help message
|
-h, --help Display this help message
|
||||||
-s SUBVOL, --snapshot SUBVOL Take a snapshot of subvolume named SUBVOL.
|
|
||||||
-d STR, --description STR Add a description for the snapshot displayed in the
|
-d STR, --description STR Add a description for the snapshot displayed in the
|
||||||
snapshots listing.
|
snapshots listing. Must be used before -s, e.g.
|
||||||
-t TYPE, --type TYPE Set the type of snapshot, where TYPE=manual|auto|boot|backup
|
snapsh -d \"A snapshot\" -s root
|
||||||
Can be used with -l, --list to filter results
|
-s SUBVOL, --snapshot SUBVOL Take a snapshot of subvolume named SUBVOL.
|
||||||
-l, --list List snapshots
|
-l, --list List snapshots
|
||||||
-r NUMBER, --remove NUMBER Remove snapshot NUMBER. See snapshot numbers with
|
-r NUMBER, --remove NUMBER Remove snapshot NUMBER. See snapshot numbers with
|
||||||
snapsh -l
|
snapsh -l
|
||||||
|
@ -66,11 +65,6 @@ snapshot() {
|
||||||
EXIT_CODE=1
|
EXIT_CODE=1
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
# TYPE defaults to manual
|
|
||||||
if [[ -z "${SET_TYPE}" ]]; then
|
|
||||||
SET_TYPE="manual"
|
|
||||||
fi
|
|
||||||
|
|
||||||
printf "Creating snapshot of subvolume ${SUBVOLUME} as ${SUBVOLUME}_snapshot_${TIMESTAMP}\n"
|
printf "Creating snapshot of subvolume ${SUBVOLUME} as ${SUBVOLUME}_snapshot_${TIMESTAMP}\n"
|
||||||
|
|
||||||
# Create info file for listing snapshots
|
# Create info file for listing snapshots
|
||||||
|
@ -78,7 +72,7 @@ snapshot() {
|
||||||
printf "DATE=\"$(date)\"
|
printf "DATE=\"$(date)\"
|
||||||
SOURCE_SUBVOLUME=\"${SUBVOLUME}\"
|
SOURCE_SUBVOLUME=\"${SUBVOLUME}\"
|
||||||
DESCRIPTION=\"${DESCRIPTION}\"
|
DESCRIPTION=\"${DESCRIPTION}\"
|
||||||
TYPE=\"${SET_TYPE}\"\n" > ${TOPLEVEL}/${SUBVOLUME}/.snapsh
|
TYPE=\"manual\"\n" > ${TOPLEVEL}/${SUBVOLUME}/.snapsh
|
||||||
|
|
||||||
# Create readonly subvolume
|
# Create readonly subvolume
|
||||||
${BTRFS_EXECUTABLE} subvolume snapshot -r ${TOPLEVEL}/${SUBVOLUME} ${SNAPSHOTS_LOCATION}/${SUBVOLUME}_snapshot_${TIMESTAMP}
|
${BTRFS_EXECUTABLE} subvolume snapshot -r ${TOPLEVEL}/${SUBVOLUME} ${SNAPSHOTS_LOCATION}/${SUBVOLUME}_snapshot_${TIMESTAMP}
|
||||||
|
@ -91,7 +85,7 @@ snapshot() {
|
||||||
DATE=$(date)
|
DATE=$(date)
|
||||||
SOURCE_SUBVOLUME=${SUBVOLUME}
|
SOURCE_SUBVOLUME=${SUBVOLUME}
|
||||||
DESCRIPTION=${DESCRIPTION}
|
DESCRIPTION=${DESCRIPTION}
|
||||||
TYPE=\"${SET_TYPE}\"\n"
|
TYPE=\"manual\"\n"
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -105,14 +99,8 @@ list() {
|
||||||
NUM=1
|
NUM=1
|
||||||
printf "%6s %s %s %26s %s %s %6s %s %s\n" "Number" "|" "Time:" "|" "Source" "|" "Type" "|" "Description"
|
printf "%6s %s %s %26s %s %s %6s %s %s\n" "Number" "|" "Time:" "|" "Source" "|" "Type" "|" "Description"
|
||||||
for snapshot in ${SNAPSHOTS_LOCATION}/*/; do
|
for snapshot in ${SNAPSHOTS_LOCATION}/*/; do
|
||||||
if [[ -z "${SET_TYPE}" ]]; then
|
|
||||||
. ${snapshot}/.snapsh
|
. ${snapshot}/.snapsh
|
||||||
printf "%8s %32s %8s %8s %s\n" "${NUM} |" "${DATE} |" "${SOURCE_SUBVOLUME} |" "${TYPE} |" "${DESCRIPTION}"
|
printf "%8s %32s %8s %8s %s\n" "${NUM} |" "${DATE} |" "${SOURCE_SUBVOLUME} |" "${TYPE} |" "${DESCRIPTION}"
|
||||||
elif [[ -n "${SET_TYPE}" ]]; then
|
|
||||||
. ${snapshot}/.snapsh
|
|
||||||
[[ "${SET_TYPE}" == "${TYPE}" ]] && printf "%8s %32s %8s %8s %s\n" "${NUM} |" "${DATE} |" "${SOURCE_SUBVOLUME} |" "${TYPE} |" "${DESCRIPTION}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
let NUM=NUM+1
|
let NUM=NUM+1
|
||||||
done
|
done
|
||||||
exit 0
|
exit 0
|
||||||
|
@ -136,7 +124,7 @@ remove() {
|
||||||
TARGET=${SNAPSHOTS[${INDEX}]}
|
TARGET=${SNAPSHOTS[${INDEX}]}
|
||||||
. ${TARGET}/.snapsh
|
. ${TARGET}/.snapsh
|
||||||
|
|
||||||
printf "Delete snapshot ${REMOVE_TARGET}: ${DATE}, source subvolume ${SOURCE_SUBVOLUME}, ${TYPE}, ${DESCRIPTION} (y/n)? "
|
printf "Delete snapshot ${REMOVE_TARGET}: ${DATE}, subvolume ${SOURCE_SUBVOLUME}, ${DESCRIPTION} (y/n)? "
|
||||||
read -n 1
|
read -n 1
|
||||||
if [[ "${REPLY}" == "y" ]]; then
|
if [[ "${REPLY}" == "y" ]]; then
|
||||||
printf "\n"
|
printf "\n"
|
||||||
|
@ -227,11 +215,11 @@ fi
|
||||||
|
|
||||||
|
|
||||||
# Options parsing:
|
# Options parsing:
|
||||||
OPTIONS=$(getopt -a -n snapsh -o hs:d:lr:t: --long help,snapshot:,description:,list,remove:,rollback:,type: -- "$@")
|
OPTIONS=$(getopt -a -n snapsh -o hs:d:lr: --long help,snapshot:,description:,list,remove:,rollback: -- "$@")
|
||||||
|
|
||||||
# Invalid options (getopt returns nonzero)
|
# Invalid options (getopt returns nonzero)
|
||||||
if [[ "$?" -ne 0 ]]; then
|
if [[ "$?" -ne 0 ]]; then
|
||||||
printf "Invalid options.\n"
|
printf "Error Parsing options\n"
|
||||||
help
|
help
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
@ -253,12 +241,12 @@ while true; do
|
||||||
|
|
||||||
-s | --snapshot)
|
-s | --snapshot)
|
||||||
SUBVOLUME="$2"
|
SUBVOLUME="$2"
|
||||||
SNAPSHOT=true
|
snapshot
|
||||||
shift 2
|
shift 2
|
||||||
;;
|
;;
|
||||||
|
|
||||||
-l | --list)
|
-l | --list)
|
||||||
LIST=true
|
list
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
@ -274,33 +262,8 @@ while true; do
|
||||||
shift 2
|
shift 2
|
||||||
;;
|
;;
|
||||||
|
|
||||||
-t | --type)
|
|
||||||
case "$2" in
|
|
||||||
manual)
|
|
||||||
SET_TYPE="manual";;
|
|
||||||
auto)
|
|
||||||
SET_TYPE="auto";;
|
|
||||||
boot)
|
|
||||||
SET_TYPE="boot";;
|
|
||||||
backup)
|
|
||||||
SET_TYPE="backup";;
|
|
||||||
*)
|
|
||||||
printf "\nIncorrect type value.\n"
|
|
||||||
exit 1;;
|
|
||||||
esac
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
|
|
||||||
--)
|
|
||||||
shift
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
|
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
if [[ -n "${SNAPSHOT}" ]]; then
|
|
||||||
snapshot
|
|
||||||
elif [[ -n "${LIST}" ]]; then
|
|
||||||
list
|
|
||||||
fi
|
|
Loading…
Reference in New Issue