remote=$1
remote_fs=$2
remote_pool=${2%%/*}
-hostname=`hostname`
# Setup our cleanup and exit trap
cleanup() {
# Make sure the local backup pool and local receiving filesystem exist, or print some errors
zpool list -H "$backup_pool" >/dev/null 2>&1
if [ $? != 0 ]; then
- fatal_and_exit "-E- The local backup pool, '$backup_pool' doesn't seem to exist." $mailto
+ fatal_and_exit "-E- The local backup pool on $hostname, '$backup_pool' doesn't seem to exist." $mailto
fi
zfs list "$backup_pool/$remote_pool" >/dev/null 2>&1
if [ $? != 0 ]; then
echo >&2 " Creating the local filesystem to receive the remote pool into: $backup_pool/$remote_pool"
$zfs create $backup_pool/$remote_pool
if [ $? != 0 ]; then
- fatal_and_exit "-E- remote $zfs create command failed" $mailto
+ fatal_and_exit "-E- remote $zfs on $hostname create command failed" $mailto
fi
fi
backup_pool_guid=`zpool get guid $backup_pool 2>&1 | grep $backup_pool | awk '{ print $3 }'`
zpool get guid $backup_pool > /dev/null 2>&1
if [ $? != 0 ]; then
- fatal_and_exit "-E- Unable to extract the guid for the local backup pool: $backup_pool" $mailto
+ fatal_and_exit "-E- Unable to extract the guid for the local backup pool on $hostname: $backup_pool" $mailto
fi
# Turn on shell verbosity
# We've exceeded our maximum while loop count
echo "-E- The zfs filesystem has been locked down. Skipping replicate operation."
fail_msg=`$ssh $remote ls -ld $lockdir 2>&1`
- fatal_and_exit "zfs-replicate-all unable to obtain zfs admin lock:\n$fail_msg" $mailto
+ fatal_and_exit "zfs-replicate-all on $hostname unable to obtain zfs admin lock:\n$fail_msg" $mailto
fi
done
grep ^${remote_fs}@ |
awk '{print$1}' > $remote_list
if [ $? != 0 ]; then
- fatal_and_exit "-E- remote $zfs list command failed" $mailto
+ fatal_and_exit "-E- remote $zfs list on $hostname command failed" $mailto
fi
# List the snapshots on the local machine.
grep -v ^${backup_pool}/${current_backup_marker} |
awk "{gsub(/^$backup_pool./,\"\",\$1); print\$1}" > $local_list
if [ $? != 0 ]; then
- fatal_and_exit "-E- local $zfs list command failed" $mailto
+ fatal_and_exit "-E- local $zfs list on $hostname command failed" $mailto
fi
# Destroy the current backup marker snapshot on the remote system if it exists
if [ $? == 0 ]; then
$ssh $remote $zfs destroy ${current_backup_marker}
if [ $? != 0 ]; then
- fatal_and_exit "-E- remote $zfs destroy command failed" $mailto
+ fatal_and_exit "-E- remote $zfs destroy on $hostname command failed" $mailto
fi
fi
# Create the current backup marker snapshot on the remote system
$ssh $remote $zfs snapshot ${current_backup_marker}
if [ $? != 0 ]; then
- fatal_and_exit "-E- remote $zfs snapshot command failed" $mailto
+ fatal_and_exit "-E- remote $zfs snapshot on $hostname command failed" $mailto
fi
# Check to see if the previous backup marker exists in the remote snapshot list.
# previous backup marker again from a previously interrupted replicate.
$zfs rollback -r ${backup_pool}/${previous_backup_marker}
if [ $? != 0 ]; then
- fatal_and_exit "-E- remote incremental $zfs rollback command failed" $mailto
+ fatal_and_exit "-E- remote incremental $zfs rollback command failed on $hostname" $mailto
fi
# Now it should be safe to send the snaps
if [[ $throttle_enable == 1 && -e $throttle ]]; then
$zfs receive -vF -d ${backup_pool}/${remote_pool}
fi
if [ $? != 0 ]; then
- fatal_and_exit "-E- remote incremental $zfs send command failed" $mailto
+ fatal_and_exit "-E- remote incremental $zfs send command failed on $hostname" $mailto
fi
else
# We didn't find any backup markers, next check to see if we have a common snapshot.
$zfs receive -vF -d ${backup_pool}/${remote_pool}
fi
if [ $? != 0 ]; then
- fatal_and_exit "-E- remote incremental $zfs send command failed" $mailto
+ fatal_and_exit "-E- remote incremental $zfs send command failed on $hostname" $mailto
fi
else
# We did not find any markers or a common snapshot
if [[ $destroy_local_filesystem_on_full_replicate == 1 ]]; then
$zfs destroy -r ${backup_pool}/${remote_fs}
if [ $? != 0 ]; then
- fatal_and_exit "-E- remote full $zfs destroy command failed" $mailto
+ fatal_and_exit "-E- remote full $zfs destroy command failed on $hostname" $mailto
fi
else
echo "-W- We need to destroy a local filesystem before receiving a full stream."
echo " However, since the option is set to prevent this, skipping replicate operation."
- fatal_and_exit "unable to destroy local filesystem:\n$zfs destroy -r ${backup_pool}/${remote_fs} not able to run" $mailto
+ fatal_and_exit "unable to destroy local filesystem:\n$zfs destroy -r ${backup_pool}/${remote_fs} not able to run on $hostname" $mailto
fi
fi
# Send the full filesystem
$zfs receive -vF -d ${backup_pool}/${remote_pool}
fi
if [ $? != 0 ]; then
- fatal_and_exit "-E- remote full $zfs send command failed" $mailto
+ fatal_and_exit "-E- remote full $zfs send command failed on $hostname" $mailto
fi
fi
fi
# Rename the current backup marker to be the previous backup marker
$zfs rename ${backup_pool}/${current_backup_marker} ${backup_pool}/${previous_backup_marker}
if [ $? != 0 ]; then
- fatal_and_exit "-E- local $zfs rename command failed" $mailto
+ fatal_and_exit "-E- local $zfs rename command failed on $hostname" $mailto
fi
$ssh $remote $zfs rename ${current_backup_marker} ${previous_backup_marker}
if [ $? != 0 ]; then
- fatal_and_exit "-E- remote $zfs rename command failed" $mailto
+ fatal_and_exit "-E- remote $zfs rename command failed on $hostname" $mailto
fi
if [[ $import_export_backup_pool == 1 ]]; then
zpool import $backup_pool
if [ $? != 0 ]; then
- fatal_and_exit "-E- unable to import the backup pool $backup_pool" "$mailto"
+ fatal_and_exit "-E- unable to import the backup pool $backup_pool on $hostname" "$mailto"
fi
else
- fatal_and_exit "-E- The local backup pool, '$backup_pool' doesn't seem to exist." "$mailto"
+ fatal_and_exit "-E- The local backup pool on $hostname, '$backup_pool' doesn't seem to exist." "$mailto"
fi
fi
backup_pool_guid=`zpool get guid $backup_pool 2>&1 | grep $backup_pool | awk '{ print $3 }'`
zpool get guid $backup_pool > /dev/null 2>&1
if [ $? != 0 ]; then
- fatal_and_exit "-E- Unable to extract the guid for the local backup pool: $backup_pool" "$mailto"
+ fatal_and_exit "-E- Unable to extract the guid for the local backup pool on $hostname: $backup_pool" "$mailto"
fi
# Setup our backup marker names
if [[ $import_export_backup_pool == 1 ]]; then
zpool export $backup_pool
if [ $? != 0 ]; then
- fatal_and_exit "-E- unable to export the local backup pool $backup_pool" "$mailto"
+ fatal_and_exit "-E- unable to export the local backup pool $backup_pool on $hostname" "$mailto"
fi
fi