#!/bin/bash # $HeadURL: https://svn.pasta.freemyip.com/main/miniade/trunk/bin/nop-sh $ $LastChangedRevision: 10133 $ # Modules . $(miniade) || { echo "${0##*/}: ERROR: miniade failed (hint: run 'miniade' to see error)" >&2; exit 1; } # Configurable stuff SRC_VTAPE=vtape009 DST_VTAPE=vtape008 # Other globals main() { local MY_ARGS # Defaults for options # Process options miniade_process_options MY_ARGS "$@" && set -- "${MY_ARGS[@]}" # Process arguments [ $# = 0 ] || usage # Sanity checks and derivations # Guts while read SRC_ZFS; do # Skip filesystems not on the *source* vtape. [[ $SRC_ZFS =~ $SRC_VTAPE ]] || continue # For testing #[[ $SRC_ZFS =~ damson ]] || continue DST_ZFS=${SRC_ZFS/$SRC_VTAPE/$DST_VTAPE} echo "$SRC_ZFS --> $DST_ZFS ..." my_zfs_mount $SRC_ZFS if ! zfs list $DST_ZFS > /dev/null 2>&1; then miniade_evaler "zfs create -p $DST_ZFS" miniade_evaler "zfs set acltype=posixacl $DST_ZFS" fi my_zfs_mount $DST_ZFS miniade_evaler "rsync -axHAX --delete /srv/$SRC_ZFS/ /srv/$DST_ZFS/" miniade_evaler "zfs umount $DST_ZFS" miniade_evaler "zfs umount $SRC_ZFS" done < <(zfs list -o name | egrep "^$SRC_VTAPE.*/.*") } my_zfs_mount() { [ "X$(zfs get -H -o value mounted $1 2>/dev/null)" != Xyes ] || return 0 miniade_evaler "zfs mount $1" } main "$@"