Guest User

Untitled

a guest
Apr 21st, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.62 KB | None | 0 0
  1. #!/bin/bash
  2. # Author: Jeffrey Vandenborne
  3. # Date: November 17, 2011
  4. # TODO: monitor whether snapshot size does the job well enough at <num>gb
  5.  
  6. # FIX: path is now set
  7. PROFILE_FILES=(/etc/profile)
  8. for pfile in $PROFILE_FILES; do
  9.     [ -f $pfile ] && {
  10.         echo "Set environment variables: $pfile"
  11.         . $pfile || exit 1
  12.     }
  13. done
  14.  
  15. RSYNC=$(which rsync)
  16. MOUNT=$(which mount)
  17. UMOUNT=$(which umount)
  18. LVCREATE=$(which lvcreate)
  19. LVREMOVE=$(which lvremove)
  20. GREP=$(which egrep)
  21. RSYNC_FLAGS="-a --delete"
  22. BACKUP_DIR=/backup/homes
  23. BDIR_IS_MOUNT=1
  24. BACKUPGROUP=backup
  25. SNAPSHOT_NAME=s_homes_bck
  26. SNAPSHOT_SIZE=16G
  27. VOL_GROUP=system
  28. SNAPSHOT_TARGET=home
  29. SNAPSHOT_DIR=/mnt/snap_home_bck
  30. USERS=$(egrep ^$BACKUPGROUP /etc/group | perl -pe 's/.*://g' | tr ',' ' ')
  31.  
  32. # Make sure snapsnots are unmounted and removed upon completion of backup
  33. trap "cleanup; echo BACKUP END -- $(date); echo" EXIT
  34. trap "echo 'SIGINT/SIGTERM detected'; cleanup; echo 'TERMINATING -- '$(date); echo; kill -9 $$" SIGINT SIGTERM
  35.  
  36. # Create snapshot for home volume
  37. create_snapshot() {
  38.     $LVCREATE -L$SNAPSHOT_SIZE -s -n $SNAPSHOT_NAME /dev/$VOL_GROUP/$SNAPSHOT_TARGET
  39.     [ $? -ne 0 ] && return 1
  40.  
  41.     if [[ ! -d "$SNAPSHOT_DIR" ]]; then
  42.         mkdir "$SNAPSHOT_DIR" 2>/dev/null
  43.         [ $? -ne 0 ] && return 1 || echo "$SNAPSHOT_DIR created!"
  44.     else
  45.         1>&2 echo "Directory $SNAPSHOT_DIR exists, exiting"
  46.         exit 1
  47.     fi
  48.  
  49.     $MOUNT "/dev/$VOL_GROUP/$SNAPSHOT_NAME" "$SNAPSHOT_DIR"
  50.     return $?
  51. }
  52.  
  53. # Unmount and remove snapshot
  54. cleanup() {
  55.     echo "Unmounting and removing snapshot volume: $SNAPSHOT_NAME"
  56.     /bin/sync
  57.     $UMOUNT "$SNAPSHOT_DIR"
  58.     $LVREMOVE -f "/dev/$VOL_GROUP/$SNAPSHOT_NAME"
  59.     rmdir "$SNAPSHOT_DIR" 2>/dev/null
  60. }
  61.  
  62. [ -z "$USERS" ] && exit 0
  63.  
  64. # Check wether the volume is mounted or not
  65. if [[ $BDIR_IS_MOUNT -eq 1 ]]; then
  66.     if ! $MOUNT | $GREP -q "\W$BACKUP_DIR\W"; then
  67.         1>&2 echo "Volume is not mounted, exiting"
  68.         exit 1
  69.     fi
  70. else
  71.     if [ ! -d $BACKUP_DIR ]; then
  72.         1>&2 echo "Backup dir doesnt exist"
  73.         exit 1
  74.     fi
  75. fi
  76.  
  77. # Create a snapshot for data efficiency
  78. create_snapshot || {
  79.     echo "Can't create snapshot"
  80.     exit 1
  81. }
  82.  
  83. echo "BACKUP START: $(date)"
  84. for user in $USERS; do
  85.     [ ! -d $SNAPSHOT_DIR/$user ] && break
  86.  
  87.     # TODO: read backup exclude files located at $SNAPSHOT_DIR/$user/.backup.exclude
  88.     # Every directory and file mentioned in this file will be ignored by rsync    
  89.  
  90.     echo "BACKUP: $SNAPSHOT_DIR/$user"
  91.     $RSYNC $RSYNC_FLAGS $SNAPSHOT_DIR/$user $BACKUP_DIR
  92.     [ $? -eq 0 ] || echo "Backup for $user failed"
  93. done
  94.  
  95. exit 0
Add Comment
Please, Sign In to add comment