default_ssh_args_add=""
default_rsync_args_add=""
default_exclude_args_add=""
+default_exclude_dirs_add=""
default_compress=1
default_ping=1
default_local=0
echo
echo "When no <system> is given, all defined systems are used."
echo
- echo "Configuration file is \"$conf\","
- echo "using \"$conf_d\" as configuration directory."
+ echo -e $config_info
echo
exit 2
}
[ -r "$conf" ] && break
done
+# Read in configuration file
+config_info="Configuration file is \"$conf\""
+if [ -r "$conf" ]; then
+ source "$conf"
+else
+ config_info="${config_info} (not readable, using defaults)"
+fi
+config_info="${config_info},\nusing \"$conf_d\" as configuration directory."
+
while [ $# -gt 0 ]; do
case "$1" in
"-n"|"--dry-run")
esac
done
-trap GotSignal SIGINT
-
echo -n "Started: "; date
+echo -e $config_info
-# Read in configuration file
-if [ -r "$conf" ]; then
- echo "Reading configuration: \"$conf\" ..."
- source "$conf"
-else
- echo "No configuration file found, using defaults."
+# Check rsync and its protocol version
+rsync=$(which "rsync" 2>/dev/null)
+if [ $? -ne 0 ]; then
+ echo "Failed to detect rsync(1)! Is it installed in your \$PATH?"
+ exit 1
fi
+rsync_proto=$($rsync --version 2>/dev/null | head -n 1 | sed 's/.* protocol version \([0-9]*\)$/\1/')
+if [ $? -ne 0 ]; then
+ echo "Failed to detect protocol version of $rsync!"
+ exit 1
+fi
+echo "Rsync command is $rsync, protocol version $rsync_proto."
echo
+trap GotSignal SIGINT
+
if [ $# -ge 1 ]; then
for s in "$@"; do
if [ ! -r "${conf_d}/$s" ]; then
ssh_args_add="$default_ssh_args_add"
rsync_args_add="$default_rsync_args_add"
exclude_args_add="$default_exclude_args_add"
+ exclude_dirs_add="$default_exclude_dirs_add"
compress="$default_compress"
ping="$default_ping"
local="$default_local"
fi
# prepare (remote) command ...
- cmd="rsync --archive"
+ cmd="$rsync --archive"
[ "$compress" -ne 0 ] && cmd="$cmd --compress"
[ "$local" -eq 0 ] && cmd="$cmd --rsh=\"$ssh_cmd\""
cmd="$cmd --delete --delete-excluded --sparse"
[ "$VERBOSE" -gt 0 ] && cmd="$cmd --progress"
if [ "$source_root" = "$default_source_root" ]; then
- cmd="$cmd --exclude=/dev --exclude=/proc --exclude=/sys"
- cmd="$cmd --exclude=/run --exclude=/tmp --exclude=/var/tmp"
- cmd="$cmd --exclude=/media --exclude=/mnt --exclude=/net"
- cmd="$cmd --exclude=/var/cache/apt --exclude=/var/log"
+ for dir in \
+ "/dev/**" \
+ "/media/**" \
+ "/mnt/**" \
+ "/net/**" \
+ "/proc/**" \
+ "/run/**" \
+ "/sys/**" \
+ "/tmp/**" \
+ "/var/cache/apt/**" \
+ "/var/log/**" \
+ "/var/tmp/**" \
+ ; do
+ cmd="$cmd --exclude=$dir"
+ done
fi
[ -n "$exclude_args_add" ] && cmd="$cmd $exclude_args_add"
+ for dir in $exclude_dirs_add; do
+ cmd="$cmd --exclude=$dir"
+ done
[ -n "$rsync_args_add" ] && cmd="$cmd $rsync_args_add"
[ "$local" -eq 0 ] \
sync
-paths=$( echo $destinations | sed -e 's/ /\n/g' | sort | uniq )
-if [ "$DRYRUN" -eq 0 -a -n "$paths" ]; then
- df -h $paths
- echo
+if [ "$DRYRUN" -eq 0 ]; then
+ paths=""
+ paths_zfs=""
+ for dest in $(echo $destinations | sed -e 's/ /\n/g' | sort | uniq); do
+ fs=$(GetFS "$dest")
+ case $fs in
+ "zfs" )
+ paths_zfs="$paths_zfs $dest"
+ ;;
+ *)
+ paths="$paths $dest"
+ esac
+ done
+ if [ -n "$paths" ]; then
+ df -h $paths
+ echo
+ fi
+ if [ -n "$paths_zfs" ]; then
+ zfs list $paths_zfs
+ echo
+ fi
fi
CleanUp
echo "-----> THERE HAVE BEEN ERRORS! <-----"
echo
exit 6
+elif [ $count_all -ne $count_started ]; then
+ exit 7
fi
# -eof-