#!/bin/sh # # Remove old incremtal inc of all jails # Usage: rm # # shellcheck source=./config LIBDIR="$(dirname $0)" && . "${LIBDIR}/config" relative_date() { format=$(echo $1 | cut -d'.' -f1) time_jump=$(echo $1 | cut -d'.' -f2) reference_date=$(date "${format}") past_date=$(date --date "${reference_date} ${time_jump}" +"%Y-%m-%d") echo ${past_date} } remove_inc() { jail=$1 inc=$2 start=$(date +"%H:%M:%S") inc_inode=$(stat --format=%i "${INCDIR}/${jail}/${inc}") if [ "${inc_inode}" -eq 256 ]; then /bin/btrfs subvolume delete "${INCDIR}/${jail}/${inc}" | debug end=$(date +"%H:%M:%S") notice "${jail} : deleted ${inc} inc [${start}/${end}]" else lock="/run/lock/bkctld/rm-${jail}.lock" if [ -f "${lock}" ]; then warning "${jail} : trying to run already running rm" else ( empty="/tmp/bkctld-${$}-$(date +%N)" mkdir -p /run/lock/bkctld && touch "${lock}" && mkdir -p "${empty}" trap "rm -f ${lock} && rmdir ${empty}" 0 rsync -a --delete "${empty}/" "${INCDIR}/${jail}/${inc}/" rmdir "${INCDIR}/${jail}/${inc}/" end=$(date +"%H:%M:%S") notice "${jail} : deleted ${inc} inc [${start}/${end}]" ) fi fi } for jail in $("${LIBDIR}/bkctld-list"); do incs=$(ls "${INCDIR}/${jail}") if [ -f "${CONFDIR}/${jail}.d/incs_policy" ]; then incs_policy_file="${CONFDIR}/${jail}.d/incs_policy" elif [ -f "${CONFDIR}/${jail}" ]; then incs_policy_file="${CONFDIR}/${jail}" else incs_policy_file="" fi if [ -n "${incs_policy_file}" ]; then incs_policy_keep_file="$(mktemp)" # loop for each line in jail configuration for incs_policy_line in $(cat ${incs_policy_file}); do # inc date in ISO format incs_policy_date=$(relative_date ${incs_policy_line}) echo ${incs_policy_date} >> "${incs_policy_keep_file}" done for inc in $(echo "${incs}" | grep -v -f "${incs_policy_keep_file}"); do remove_inc "${jail}" "${inc}" done rm "${incs_policy_keep_file}" fi done