Reverse Differential Backup
Setup for Backup Server:
- Configure forwarding of root’s email to GroupWise System Admin resource:
echo user@test.com > /root/.forward - Create/modify /etc/rsyncd.conf. See example Backup Server rsyncd.conf.
- Enable rsync daemon: chkconfig rsyncd on
- Start rsyncd: rcrsyncd start
- Change into the backup volume/directory:
- For a NSS BACKUP volume: cd /media/nss/BACKUP
- For a XFS /backup directory: cd /backup
- Create the backup folders for the primary server:
mkdir primaryservername
mkdir primaryservername/APPS
mkdir primaryservername/backup
mkdir primaryservername/boot
mkdir primaryservername/etc
mkdir primaryservername/GW
mkdir primaryservername/mbr
mkdir primaryservername/SHARED
mkdir primaryservername/USERS - Create the backup folders for the backup server:
mkdir backupservername
mkdir backupservername/backup
mkdir backupservername/boot
mkdir backupservername/etc
mkdir backupservername/mbr - Modify /etc/exports to export the BACKUP volume and /install directory:
- /install *(ro,sync,root_squash) 10.1.1.0/255.255.255.0(rw,no_root_squash,sync) 10.1.2.0/255.255.255.0(rw,no_root_squash,sync)
- For NSS BACKUP Volume:
/media/nss/BACKUP primaryservername(rw,no_root_squash,sync,fsid=20) backup1(rw,no_root_squash,sync,fsid=20) - For XFS /backup directory:
/backup primaryservername(rw,no_root_squash,sync) backup1(rw,no_root_squash,sync)
- Enable nfsserver: chkconfig nfsserver on
- Start nfsserver: rcnfsserver start
- Create backup script bkp_backupservername.sh. See example Backup Server Backup Script.
- Set executable permission: chmod +x bkp_backupservername.sh
- Create lst file. See example exclude.lst.
- Use crontab -e to edit the cron jobs and add the backup script:
- For a NSS BACKUP volume: @daily /media/nss/BACKUP/bkp_backupservername.sh
- For a XFS /backup directory: @daily /backup/bkp_backupservername.sh
Backup Setup for Primary Server:
- Configure forwarding of root’s email to GroupWise System Admin resource:
echo user@test.com > /root/.forward - Create the backup folder: mkdir /backup
- Change into backup folder: cd /backup
- Create the mount folder: mkdir primaryservername
- Modify /etc/fstab to auto-mount the backup volume:
- NSS BACKUP volume:
backupservername:/media/nss/BACKUP/primaryservername /backup/primaryservername nfs rw,intr,proto=tcp,rsize=32768,wsize=32768 0 0 - XFS /backup directory:
backupservername:/backup/primaryservername /backup/primaryservername nfs rw,intr,proto=tcp,rsize=32768,wsize=32768 0 0
- NSS BACKUP volume:
- Mount the backup volume: mount -a
- Create backup script bkp_primaryservername.sh. See example Primary Server Backup Script.
- Set executable permission: chmod +x bkp_primaryservername.sh
- Create lst file. See example exclude.lst.
- Use crontab -e to edit the cron jobs and add:
@daily /backup/bkp_primaryservername.sh
Example: Backup Server rsyncd.conf (NSS BACKUP volume):
uid = root gid = root read only = false use chroot = true transfer logging = false log format = %h %o %f %l %b log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid hosts allow = primaryservername.test.com backup.test.com slp refresh = 300 [primaryservername_APPS] path = /media/nss/BACKUP/primaryservername/APPS [primaryservername_boot] path = /media/nss/BACKUP/primaryservername/boot [primaryservername_etc] path = /media/nss/BACKUP/primaryservername/etc [primaryservername_GW] path = /media/nss/BACKUP/primaryservername/GW [primaryservername_USERS] path = /media/nss/BACKUP/primaryservername/USERS [primaryservername_SHARED] path = /media/nss/BACKUP/primaryservername/SHARED
Example: Backup Server rsyncd.conf (XFS /backup directory):
uid = root gid = root read only = false use chroot = true transfer logging = false log format = %h %o %f %l %b log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid hosts allow = primaryservername.test.com backup1.test.com slp refresh = 300 [primaryservername_APPS] path = /backup/primaryservername/APPS [primaryservername_boot] path = /backup/primaryservername/boot [primaryservername_etc] path = /backup/primaryservername/etc [primaryservername_GW] path = /backup/primaryservername/GW [primaryservername_USERS] path = /backup/primaryservername/USERS [primaryservername_SHARED] path = /backup/primaryservername/SHARED
Example: Backup Server Backup Script:
#!/bin/bash # Version: 2008-02-27 03:10pm # Modified By: Dan O. StartTime=`date` Today=`date +%F` Yesterday=`date --date=yesterday +%F` PurgeDate=`date --date='31 days ago' +%F` echo "**********************************************************************" echo "Starting backup of system files on $HOSTNAME at $StartTime..." echo -e "\nChanging into backup directory '/backup/$HOSTNAME'..." cd /backup/$HOSTNAME echo -e "\nPurging backup folders older than 30 days..." echo -e "backup boot etc mbr" | while read DirName do find $DirName/* -type d ! -name . -prune -mtime +30 -exec rm -rf {} \; done echo -e "\nCreating new backup directories for $Today:" echo -e "backup boot etc mbr" | while read DirName do mkdir -v $DirName/$Today done echo -e "\nRotating files from $Yesterday/ to $Today/..." # No rotation for /backup/ scripts or mbr (too small to worry about differential) echo -e "boot etc" | while read DirName do mv $DirName/$Yesterday/* $DirName/$Today/ done echo -e "\nSaving backup scripts..." cp /backup/* backup/$Today/ touch backup/$Today echo -e "\nSaving Master Boot Record for sda & sdb..." dd if=/dev/sda of=mbr/$Today/sda-mbr bs=512 count=1 dd if=/dev/sdb of=mbr/$Today/sdb-mbr bs=512 count=1 touch mbr/$Today echo -e "\nBacking up /boot/ directory:" rsync -azb --stats --delete --backup-dir boot/$Yesterday/ /boot/ boot/$Today/ touch boot/$Today echo -e "\nBacking up /etc/ directory:" rsync -azb --stats --delete --backup-dir etc/$Yesterday/ /etc/ etc/$Today/ touch etc/$Today EndTime=`date` echo -e "\n\nBackup of system files on $HOSTNAME completed at $EndTime." echo "**********************************************************************"
Example: exclude.lst:
._NETWARE ~DFSINFO.8-P VOLDATA.TDF .Trash-root Thumbs.db thumbs.db THUMBS.DB
Example: Primary Server Backup Script:
#!/bin/bash
# Version: 2008-02-27 03:00pm
# Modified By: Dan O.
StartTime=`date`
Today=`date +%F`
Yesterday=`date --date=yesterday +%F`
PurgeDate=`date --date='31 days ago' +%F`
BackupHost="backupservername"
echo "**********************************************************************"
echo "Starting backup from $HOSTNAME to $BackupHost at $StartTime..."
echo -e "\nMaking sure backup directory is mounted with 'mount -a'..."
mount -a
# Would rather do a check to make sure it's already mounted. If not, try to mount. If it fails, abort.
echo -e "\nChanging into backup directory '/backup/$HOSTNAME'..."
cd /backup/$HOSTNAME
# Need to add check to make sure this directory change was successful, or abort.
echo -e "\nPurging backup folders older than 30 days..."
echo -e "backup
boot
etc
GW
mbr
SHARED
USERS" |
while read DirName
do
# rm -rf $DirName/$PurgeDate
# find $DirName/* -type d ! -name . -prune -mtime +30 -exec echo {} \;
find $DirName/* -type d ! -name . -prune -mtime +30 -exec rm -rf {} \;
done
# Creating a new new "$Today" directory, then moving $Yesterday/* $Today/
# keeps the timestamp on $Yesterday/, and makes the script better able to handle
# manual backups (no nested $Today/$Yesterday, which can happen on a restart)
echo -e "\nCreating new backup directories for $Today:"
echo -e "backup
boot
etc
GW
mbr
SHARED
USERS" |
while read DirName
do
mkdir -v $DirName/$Today
done
echo -e "\nRotating files from $Yesterday/ to $Today/..."
# No rotation for /backup/ scripts or mbr (too small to worry about differential)
echo -e "boot
etc
GW
SHARED
USERS" |
while read DirName
do
mv $DirName/$Yesterday/* $DirName/$Today/
done
echo -e "\nSaving backup scripts..."
cp /backup/* backup/$Today/
touch backup/$Today
echo -e "\nSaving Master Boot Record for sda & sdb..."
dd if=/dev/sda of=mbr/$Today/sda-mbr bs=512 count=1
dd if=/dev/sdb of=mbr/$Today/sdb-mbr bs=512 count=1
touch mbr/$Today
echo -e "\n\nBacking up APPS volume:"
rsync -az --stats --delete --exclude-from=/backup/exclude.lst /media/nss/APPS/ "$BackupHost"::"$HOSTNAME"_APPS/
touch APPS/
BackupOptions="-azb --stats --delete --exclude-from=/backup/exclude.lst --backup-dir /$Yesterday/"
echo -e "\nBackup options set to '$BackupOptions'..."
echo -e "\nBacking up /boot/ directory:"
rsync $BackupOptions /boot/ "$BackupHost"::"$HOSTNAME"_boot/$Today/
touch boot/$Today
echo -e "\nBacking up /etc/ directory:"
rsync $BackupOptions /etc/ "$BackupHost"::"$HOSTNAME"_etc/$Today/
touch etc/$Today
echo
/etc/init.d/grpwise stop
echo "Backing up GW volume:"
rsync $BackupOptions /media/nss/GW/ "$BackupHost"::"$HOSTNAME"_GW/$Today/
/etc/init.d/grpwise start
touch GW/$Today
echo -e "\n\nSaving Trustees for USERS volume..."
/opt/novell/nss/sbin/metamig save USERS -m t > /media/nss/USERS/trustees.xml
echo "Backing up USERS volume:"
rsync $BackupOptions /media/nss/USERS/ "$BackupHost"::"$HOSTNAME"_USERS/$Today/
touch USERS/$Today
echo -e "\n\nSaving Trustees for SHARED volume..."
/opt/novell/nss/sbin/metamig save SHARED -m t > /media/nss/SHARED/trustees.xml
echo "Backing up SHARED volume:"
rsync $BackupOptions /media/nss/SHARED/ "$BackupHost"::"$HOSTNAME"_SHARED/$Today/
touch SHARED/$Today
EndTime=`date`
echo -e "\n\nBackup of $HOSTNAME to $BackupHost completed at $EndTime."
echo "**********************************************************************"
Posted: March 7th, 2008 under Linux, Uncategorized.
Comments: none