evobackup/lib/bkctld-incs-create

74 lines
2.2 KiB
Bash
Executable File

#!/bin/sh
#
# Description: Make dated copies (incs) of jails
# Usage: inc
#
# shellcheck source=./includes
LIBDIR="$(dirname $0)" && . "${LIBDIR}/includes"
create_inc_btrfs() {
jail_name=${1:?}
inc_name=${2:?}
jail_path=$(jail_path "${jail_name}")
inc_path=$(inc_path "${jail_name}" "${inc_name}")
if dry_run; then
echo "[dry-run] btrfs subvolume snapshot of ${jail_path} to ${inc_path}"
else
mkdir --parents "$(dirname "${inc_path}")"
# create a btrfs readonly snapshot from the jail
/bin/btrfs subvolume snapshot -r "${jail_path}" "${inc_path}" | debug
fi
}
create_inc_ext4() {
jail_name=${1:?}
inc_name=${2:?}
jail_path=$(jail_path "${jail_name}")
inc_path=$(inc_path "${jail_name}" "${inc_name}")
if dry_run; then
echo "[dry-run] copy of ${jail_path} to ${inc_path}"
else
mkdir --parents "$(dirname "${inc_path}")"
# create a copy of the jail with hard links
cp --archive --link --one-file-system "${jail_path}/" "${inc_path}"
fi
}
inc_name=$(date +"%Y-%m-%d-%H")
jails_list=$(jails_list)
jails_total=$(echo $jails_list | wc -w)
jails_count=0
for jail_name in ${jails_list}; do
jails_count=$((jails_count+1))
jail_path=$(jail_path "${jail_name}")
inc_path=$(inc_path "${jail_name}" "${inc_name}")
incs_policy_file=$(current_jail_incs_policy_file ${jail_name})
# If no incs policy is found, we don't create incs
if [ -n "${incs_policy_file}" ]; then
# If no incs directory is found, we don't create incs
if [ ! -d "${inc_path}" ]; then
info "Progress: jail ${jails_count} out of ${jails_total}"
notice "Create inc \`${inc_name}' for jail \`${jail_name}' : start"
if is_btrfs "${jail_path}"; then
create_inc_btrfs "${jail_name}" "${inc_name}"
else
create_inc_ext4 "${jail_name}" "${inc_name}"
fi
notice "Create inc \`${inc_name}' for jail \`${jail_name}' : finish"
else
warning "Skip inc \`${inc_name}' for jail \`${jail_name}' : it already exists."
fi
else
notice "Skip jail \`${jail_name}' : incs policy is missing"
fi
done