Remote backups using ssh and dump

Mel fbsd.questions at rachie.is-a-geek.net
Mon Apr 7 14:39:40 UTC 2008


On Friday 04 April 2008 19:59:27 Paul Schmehl wrote:

> Has anyone done this?

/usr/local/etc/periodic/daily/201.backup-disks:

#!/bin/sh
# vim: ts=4 sw=4 noet ai
#
# The following tunables are supported:
# daily_backup_disks_enable (bool):
#   Turn backup on/off.
#   Default: Off
# daily_backup_disks_mounts (list):
#   The mount points to backup daily.
#   Default: / /var /home /usr
# daily_backup_disks_compress_local (bool):
#   Compress the backup on the local machine.
#   Default: Compress on receiving machine.
# daily_backup_disks_compressor (program path):
#   The compress program to use.
#   Default: /usr/bin/bzip2
# daily_backup_disks_ext (string):
#   The extension to use for the filename.
#   Default: bz2
# daily_backup_disks_islocal (bool):
#   If this is a backup to a local disk.
#   Default: NO
# daily_backup_disks_host (hostname):
#   Hostname to backup to.
#   Default: backup
# daily_backup_disks_machid (string):
#   Machine id of this machine, used as prefix on backup files.
#   Default: `hostname -s`
# daily_backup_disks_transporter (program path):
#   Program used to transport the backup. Arguments must be compatible with
#   ssh(1).
#   Default: /usr/bin/ssh
# daily_backup_disks_backuproot (path):
#   Path to the directory where backups are stored on the receiving machine.
#   Default: /backup

if [ -r /etc/defaults/periodic.conf ]
then
    . /etc/defaults/periodic.conf
    source_periodic_confs
fi
# Set defaults
daily_backup_disks_compress_local=${daily_backup_disks_compress_local:-"NO"}
daily_backup_disks_mounts=${daily_backup_disks_mounts:-"/ /var /home /usr"}
daily_backup_disks_compressor=${daily_backup_disks_compressor:-"/usr/bin/bzip2"}
daily_backup_disks_ext=${daily_backup_disks_ext:="bz2"}
daily_backup_disks_islocal=${daily_backup_disks_islocal:="NO"}
daily_backup_disks_hostname=${daily_backup_disks_hostname:="backup"}
daily_backup_disks_machid=${daily_backup_disks_machid:=`hostname -s`}
daily_backup_disks_transporter=${daily_backup_disks_transporter:="/usr/bin/ssh"}
daily_backup_disks_backuproot=${daily_backup_disks_backuproot:="/backup"}

case "$daily_backup_disks_enable" in
    [Yy][Ee][Ss])
  level=$(/bin/date +%w)
  date=$(/bin/date +%Y%m%d)
  echo ''
  for disk in ${daily_backup_disks_mounts}; do
    dname=${disk#"/"}
    test -z "$dname" && dname=root
    dname=$(echo $dname | /usr/bin/tr '/' '_')
    fname="${daily_backup_disks_machid}.${dname}.${level}"
    fname="${fname}.${date}.dump.${daily_backup_disks_ext}"
    fpath="${daily_backup_disks_backuproot}/${fname}"
    if test ${daily_backup_disks_islocal} = "NO"; then
      echo -n "Processing ${disk} to ${daily_backup_disks_host}:"
      echo    "${daily_backup_disks_backuproot}/${fname}"
      if test ${daily_backup_disks_compress_local} = "NO"; then
        # dd is necessary, because bzip2 cannot "compress STDIN to
        # named file"
        /sbin/dump -${level}uaLf - ${disk} | \
          ${daily_backup_disks_transporter} \
          ${daily_backup_disks_host} \
          "${daily_backup_disks_compressor} -c - | /bin/dd of=${fpath}"
      else
        # dd is now necessary, because scp cannot copy STDIN.
        /sbin/dump -${level}uaLf - ${disk} | \
          ${daily_backup_disks_compressor} -c - | \
          ${daily_backup_disks_transporter} \
          ${daily_backup_disks_host} "/bin/dd of=${fpath}"
      fi
    else
      echo "Processing ${disk} to ${fpath}"
      /sbin/dump -${level}uaLf - ${disk} | \
        ${daily_backup_disks_compressor} -c - >${fpath}
    fi
    rc=$(($rc + $?))
  done
  ;;
    *)  rc=0;;
esac

exit $rc

-- 
Mel

Problem with today's modular software: they start with the modules
    and never get to the software part.


More information about the freebsd-questions mailing list