mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
05da9001b9
Signed-off-by: Vinit Agnihotri <vagnihotri@ddn.com> Signed-off-by: Martin Schwenke <mschwenke@ddn.com> Reviewed-by: Amitay Isaacs <amitay@gmail.com>
124 lines
2.4 KiB
Bash
Executable File
124 lines
2.4 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Backup persistent CTDB TDBs into the given directory.
|
|
|
|
# Copyright: DataDirect Networks, 2024
|
|
# Authors: Vinit Agnihotri <vagnihotri@ddn.com>
|
|
# Martin Schwenke <mschwenke@ddn.com>
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
|
|
# Options:
|
|
#
|
|
# -l: Only do the backup if this node is the leader node, otherwise
|
|
# exit with 0.
|
|
#
|
|
# -L <rc>: Only do the backup if this node is the leader node, otherwise
|
|
# exit with <rc>.
|
|
|
|
#
|
|
# Option/argument handling
|
|
#
|
|
|
|
die()
|
|
{
|
|
echo "ERROR: $1"
|
|
exit 1
|
|
}
|
|
|
|
usage()
|
|
{
|
|
die "usage: $0 [-l | -L <rc> ] <dir>"
|
|
}
|
|
|
|
leader_only=false
|
|
leader_only_rc=0
|
|
dir=""
|
|
|
|
while getopts "L:lh?" opt; do
|
|
case "$opt" in
|
|
L)
|
|
leader_only=true
|
|
leader_only_rc="$OPTARG"
|
|
;;
|
|
l)
|
|
leader_only=true
|
|
;;
|
|
\? | h)
|
|
usage
|
|
;;
|
|
esac
|
|
done
|
|
shift $((OPTIND - 1))
|
|
|
|
if [ $# -ne 1 ]; then
|
|
usage
|
|
fi
|
|
|
|
dir="$1"
|
|
|
|
if [ ! -d "$dir" ]; then
|
|
die "No such directory ${dir}"
|
|
fi
|
|
|
|
if $leader_only; then
|
|
this_node=$(ctdb pnn)
|
|
leader_node=$(ctdb leader)
|
|
if [ "$this_node" != "$leader_node" ]; then
|
|
exit "$leader_only_rc"
|
|
fi
|
|
fi
|
|
|
|
#
|
|
# Backups TDBs in timestamped subdirectory
|
|
#
|
|
|
|
dt=$(date "+%Y%m%d%H%M%S")
|
|
prefix="ctdb-persistent-db-backup-${dt}"
|
|
outdir="${dir}/${prefix}"
|
|
|
|
# Clean up temporary directory on failure"
|
|
trap 'rm -rf ${outdir}' 0
|
|
|
|
mkdir -p "$outdir"
|
|
|
|
if ! db_map=$(ctdb getdbmap -X); then
|
|
die "Failed to list databases"
|
|
fi
|
|
db_list=$(echo "$db_map" | awk -F '|' '$5 == "1" { print $3 }')
|
|
|
|
cd "$outdir" || die "Failed to change directory to ${dir}"
|
|
|
|
for db in $db_list; do
|
|
if ! ctdb backupdb "$db" "${db}.backup"; then
|
|
die "Failed to backup ${db}"
|
|
fi
|
|
done
|
|
|
|
#
|
|
# Create tarball
|
|
#
|
|
|
|
cd "$dir" || die "Failed to change directory to ${dir}"
|
|
|
|
tarball="${prefix}.tgz"
|
|
|
|
if ! tar -c -z -f "$tarball" "$prefix"; then
|
|
die "Failed to create tarball"
|
|
fi
|
|
|
|
echo "Created backup tarball ${dir}/${tarball}"
|
|
|
|
exit 0
|