dirvish - linux "rsync hardlink" backup to disk

Dirvish - Linux Backup to Disk

http://www.dirvish.org/

Nice tutorial and tipps: http://wiki.edseek.com/howto:dirvish

Execution

  • dirvish-runall

Master configuration file

  • /etc/dirvish/master.conf
    • ## Example dirvish master configuration file:
      xdev: 1
      index: gzip
      image-default: %Y-%m-%d_%H-%M
      
      bank:
              /srv/backup
      exclude:
              lost+found/
              *~
              .nfs*
      Runall:
              home
              etc
              var
      expire-default: +5 days
      expire-rule:
      #       MIN HR    DOM MON       DOW  STRFTIME_FMT
              *   *     *   *         1    +1 months
              *   *     1   *         *    +1 year
      

Vault configuration

  • cd /srv/backup
  • sudo mkdir etc
  • cd etc
  • sudo mkdir dirvish
  • sudo vi dirvish/default.conf
    • client: my_server
      # tree: use trailing "/" !
      tree: /etc
      exclude: # Exclude a specific directory /cache/ #excludes /etc/cache # Exclude any directory in all subdirectories
             cache/ #excludes e.g. /etc/cache, /etc/php5/cache, ...
      #       /**/.*/**/*cache/
      #       /**/.*/*cache/
      #       /**/.*/**/*Cache/
      #       .kde/share/thumbnails/
  • Example network config : /media/disk/my_remote_backup/home_my_user/dirvish/default.conf
    • client: my_user@remote_server.example.com
      # tree: use trailing "/" !
      tree: /home/my_user/
      #exclude:
      #       /**/.*/**/*cache/
      pre-client:
      /home/my_user/bin/dirvish_mysql_dump.sh
      zxfer: 1
      speed-limit: 0.5

Initialize a vault

  • dirvish --vault my_vault --init

Run cronjob

  • sudo vi /etc/cron.d/dirvish
    • # /etc/cron.d/dirvish: crontab fragment for dirvish
      
      # run every night
      4 1 * * *     root      /etc/dirvish/dirvish-cronjob

 

Example MySQL dump script

  • on the remote machine
  • Example: /home/my_user/bin/dirvish_mysql_dump.sh
    • # dumps mysql databases locally to be included in remote dirvish backup cd /home/my_user/mysql_dumps mysqldump -u user1 --password=password1 --add-drop-table db1 > db1.mysql.dump mysqldump -u user2 --password=password2 --add-drop-table db2 > db2.mysql.dump chmod 600 *.dump

 Duplicate / Copy a dirvish backup disk

  • # -H stands for "preserve hardlinks"
    sudo rsync -avH --delete --stats --progress /media/disk/ /media/disk-1/

Automated replication to a backup disk

  • /etc/dirvish/backup-clone
  • #! /bin/sh
    #
    # daily cron job for the dirvish package
    # Klemens Ullmann-Marx 2010-01-31
    #
    ## Example of how to mount and umount a backup partition...
    
    MOUNTPOINT="/media/inseq_backup_1"
    
    mountpoint $MOUNTPOINT
    
    # $? is the exit status of the last bash command
    # ("mountpoint" in that case")
    # The exit status "0" in case of success, an integer between "1" and "255" in case of error
    if [ $? -eq 0 ] ; then
      echo "Good..."
    else
      echo "Trying to mount it now..."
      mount $MOUNTPOINT
      if [ $? -eq 0 ] ; then
        echo "$MOUNTPOINT successfully mounted!"
      else
        echo "Failed to mount $MOUNTPOINT!"
        exit 1
      fi
    fi
    
    #rsync -aHq --delete /srv/backup $MOUNTPOINT
    umount $MOUNTPOINT

Symlink latest backups to a directory for remote backup

  • /etc/divish/master.conf
    • post-server: /root/bin/latest_backup_symlink.sh
  • /root/bin/latest_backup_symlink.sh
    • #!/bin/bash
      #
      # 2009-10-12 by Klemens Ullmann-Marx
      
      BACKUP_DEST=/srv/backup_latest$DIRVISH_SRC
      
      rm -rf $BACKUP_DEST
      ln -s $DIRVISH_DEST $BACKUP_DEST

Delete a file or directory from all snapshots (DANGEROUS!)

Example delete a directory "public" from a vault /srv/backup/srv

  • find /srv/backup/srv -type d -name public -exec rm -rf '{}' \;