Hello!

we where very unhappy with having Bareos to backup our whole Exchange DB each 
and every day. Furthermore Exchange is not able to recognize the backup taken 
by Bareos as full backup and will never flush the log files. This situation is 
very unsatisfactory. So I read a bit about VSS snapshotting and was finally 
able to set up a nearly perfect solution with the use of some scripting on the 
client.

Here is what you will need (We assume the Exchange Database is in one Folder 
named ExchangeDB and the transaction log in the ExchangeLOG folder on the same 
(virtual) drive:

FileSet {
  Name = "ExchangeFullDB"
  Ignore FileSet Changes = yes
  Enable VSS = no
  Include {
    Options {   signature = MD5
            }
        ExcludeDirContaining = nobackup.txt
    File = "B:/ExchangeDB"
    File = "B:/ExchangeLOG"
  }
}

Notice that B: ist NOT the actual drive where the exchange db resides but a 
temporary drive letter where we will expose the VSS snapshot. Furthermore 
notice that Enable VSS is set to no as our client script will take care of 
taking a vss snapshot. The ExcludeDirContaining directive is important this 
will make us able to exclude the DB from all incremental (and differential) 
backups.

Here is the Jobdef.

JobDefs {
        Name = "ExchangeServer"
        FileSet = ExchangeFullDB
        Type = Backup
        Level = Incremental
        Messages = Standard
        Pool = Default
        Full Backup Pool = HDDFull
        Incremental Backup Pool = HDDIncr
        Differential Backup Pool = HDDDiff
        Priority = 10
        Schedule = MonthlyCycle2
        Write Bootstrap = "/var/lib/bacula/%c_%n.bsr"
        Allow Duplicate Jobs = no
        Prefer Mounted Volumes = no
        Client Run Before Job = "C:/Programme/Bareos/Scripts/pre_backup_ex.cmd 
%l"
        Client Run After Job = "C:/Programme/Bareos/Scripts/post_backup_ex.cmd"
        Reschedule On Error = yes
        Reschedule Interval = 1 hour
        Reschedule Times = 20
}

And here is the pre_backup_ex.cmd which will reside on the client:

@echo off
if "%1" == "" (
   echo Backup job level has to be passed as first parameter.
   exit /b 1
)
if /i %1 == full (
        IF EXIST E:\ExchangeDB\nobackup.txt del /F E:\ExchangeDB\nobackup.txt
        diskshadow -s "c:\Program 
Files\Bareos\Scripts\pre_backup_ex_diskshadow.txt"
) else (
   copy /y nul E:\ExchangeDB\nobackup.txt
   diskshadow -s "c:\Program 
Files\Bareos\Scripts\pre_backup_ex_diskshadow_nofull.txt"
)

Furthermore this is the post backup script:

@echo off
diskshadow -s "c:\Program Files\Bareos\Scripts\post_backup_ex_diskshadow.txt"

pre_backup_diskshadow.txt:

#DiskShadow script file
delete shadows all
set context persistent
begin backup
add volume E: alias ExVolumeShadow
create
expose %ExVolumeShadow% b:
end backup

pre_backup_diskshadow_nofull.txt

#DiskShadow script file
delete shadows all
set context persistent
begin backup
add volume E: alias ExVolumeShadow
create
expose %ExVolumeShadow% b:

Note that the only difference is we are not issuing and end backup command 
here. That cancels the VSS operation and Exchange does not flush logs.

This produces an error message in the Eventlog which can be ignored but I don't 
know of a better solution right now.

A drawback is that end backup in case of a full backup will be issued BEFERE 
the actual data is flowing from the snapshot to the backup medium. I currently 
don't know a sultion for this cause of the design of Bareos pre/post scripts 
and disshadow. One can call a script from within diskshadow to do the backup 
but that does not help us. I don't see a possibility to quit diskshadow without 
destroying the context thats why I need to call end backup in the pre script 
else Exchange will not flush logs. You COULD instead run all the client stuff 
asynchronous and copy the Exchange Data somewhere manually where you grad it 
later with Bareos but this seemed to complicated for me. Instead I installed a 
job repition in case of a failing backup- which is not 1000% safe but seems 
good enough to me.

The last one is the rather boring post_backup_ex_diskshatow.txt:

#DiskShadow script file
delete shadows all

Which should in case of a successful backup delete the shadow copy. Possibly 
one could modify the pre script to not remove the shadow that would lead in 
case of a failure of a persisting b drive which can be copied the next time the 
backup runs. But this all is up to you.

I hope this helps other users too.

regards, Felix

-- 
You received this message because you are subscribed to the Google Groups 
"bareos-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to