Because the instructions in the Bacula documentation left me hanging on how to actually restore the Exchange data from a backup, I am writing this little summary after extracting all information from the mailing lists.
In my case, I have one server called ‘axmail-fd’ running Exchange 2003 and another server called ‘axemail-fd’ running Exchange 2003 SP2. The following steps are needed to restore into the Recovery Storage Group on the new server in order to migrate the mail from the old to the new server.
To prepare, please create the Recovery Storage Group on the target Exchange server. Create the database name you want to recover, for example “Mailbox Store (AXMAIL)”, which will generate a “Mailbox Store (AXMAIL).edb” in the Recovery Storage Group folder. Clear out any log files or other remnants of previous restores as Exchange tends to get confused if data from multiple databases are in there.
Start bconsole, select the restore mode and select the Exchange backup to restore:
*restore First you select one or more JobIds that contain files to be restored. You will be presented several methods of specifying the JobIds. Then you will be allowed to select which files from those JobIds are to be restored. To select the JobIds, you have the following choices: 1: List last 20 Jobs run 2: List Jobs where a given File is saved 3: Enter list of comma separated JobIds to select 4: Enter SQL list command 5: Select the most recent backup for a client 6: Select backup for a client before a specified time 7: Enter a list of files to restore 8: Enter a list of files to restore before a specified time 9: Find the JobIds of the most recent backup for a client 10: Find the JobIds for a backup for a client before a specified time 11: Enter a list of directories to restore for found JobIds 12: Cancel Select item: (1-12): 5 Defined Clients: ... 4: axmail-fd ... 10: axemail-fd Select the Client (1-10): 4 The defined FileSet resources are: 1: AXMAIL Full Data Set 2: Exchange Select FileSet resource (1-2): 2 +-------+-------+----------+---------------+---------------------+-------------------------------+ | JobId | Level | JobFiles | JobBytes | StartTime | VolumeName | +-------+-------+----------+---------------+---------------------+-------------------------------+ | 90 | F | 13 | 5,313,968,371 | 2009-06-24 15:36:10 | Deventer_Exchange_Backup_0013 | | 90 | F | 13 | 5,313,968,371 | 2009-06-24 15:36:10 | Deventer_Exchange_Backup_0014 | | 91 | I | 5 | 2,671,174 | 2009-06-24 17:28:25 | Deventer_Exchange_Backup_0014 | | 92 | I | 5 | 233,882 | 2009-06-24 18:00:01 | Deventer_Exchange_Backup_0014 | | 118 | I | 17 | 40,099,025 | 2009-06-25 18:00:02 | Deventer_Exchange_Backup_0014 | +-------+-------+----------+---------------+---------------------+-------------------------------+ You have selected the following JobIds: 90,91,92,118 Building directory tree for JobId(s) 90,91,92,118 ... 24 files inserted into the tree.
Now we want to select the entire First Storage Group to restore, except for the Public Folders store.
Note: If you have the mailbox store defined, perhaps the restoration will work. An old mailing list conversation in 2008 stated that it was only possible to restore one database at a time – hence we now unmark the Public Folder.
You are now entering file selection mode where you add (mark) and remove (unmark) files to be restored. No files are initially added, unless you used the "all" keyword on the command line. Enter "done" to leave this mode. cwd is: /$ mark * 29 files marked. $ cd "@EXCHANGE/Microsoft Information Store/First Storage Group" cwd is: /@EXCHANGE/Microsoft Information Store/First Storage Group/ $ unmark Public* 4 files unmarked. $ lsmark *C:\Program Files\Exchsrvr\mdbdata\E0002FC5.log *C:\Program Files\Exchsrvr\mdbdata\E0002FC6.log *C:\Program Files\Exchsrvr\mdbdata\E0002FC7.log *C:\Program Files\Exchsrvr\mdbdata\E0002FC8.log *C:\Program Files\Exchsrvr\mdbdata\E0002FC9.log *C:\Program Files\Exchsrvr\mdbdata\E0002FCA.log *C:\Program Files\Exchsrvr\mdbdata\E0002FCB.log *C:\Program Files\Exchsrvr\mdbdata\E0002FCC.log *C:\Program Files\Exchsrvr\mdbdata\E0002FCD.log *C:\Program Files\Exchsrvr\mdbdata\E0002FCE.log *C:\Program Files\Exchsrvr\mdbdata\E0002FCF.log *C:\Program Files\Exchsrvr\mdbdata\E0002FD0.log *C:\Program Files\Exchsrvr\mdbdata\E0002FD1.log *C:\Program Files\Exchsrvr\mdbdata\E0002FD2.log *C:\Program Files\Exchsrvr\mdbdata\E0002FD3.log *C:\Program Files\Exchsrvr\mdbdata\E0002FD4.log *C:\Program Files\Exchsrvr\mdbdata\E0002FD5.log *C:\Program Files\Exchsrvr\mdbdata\E0002FD6.log *Mailbox Store (AXMAIL)/ *C:\Program Files\Exchsrvr\mdbdata\priv1.edb *C:\Program Files\Exchsrvr\mdbdata\priv1.stm *DatabaseBackupInfo $ done Bootstrap records written to /var/bacula/axnet-dir.restore.23.bsr The job will require the following Volume(s) Storage(s) SD Device(s) =========================================================================== Deventer_Exchange_Backup_ File FileStorage 25 files selected to be restored. Run Restore job JobName: RestoreFiles Bootstrap: /var/bacula/axnet-dir.restore.23.bsr Where: /tmp/bacula-restores Replace: always FileSet: Empty FileSet Backup Client: axmail-fd Restore Client: axmail-fd Storage: File When: 2009-06-26 00:44:50 Catalog: MyCatalog Priority: 10 Plugin Options: *None*
We now need to change the target to the new server and clear out the Where setting:
OK to run? (yes/mod/no): m Parameters to modify: 1: Level 2: Storage 3: Job 4: FileSet 5: Restore Client 6: When 7: Priority 8: Bootstrap 9: Where 10: File Relocation 11: Replace 12: JobId 13: Plugin Options Select parameter to modify (1-13): 5 The defined Client resources are: 1: bartje-fd 2: nakor-fd 3: hermione-fd 4: snape-fd 5: hagrid-fd 6: axnet-fd 7: axweb-fd 8: axmail-fd 9: axexact-fd 10: axklant-fd 11: axemail-fd Select Client (File daemon) resource (1-11): 11 Run Restore job JobName: RestoreFiles Bootstrap: /var/bacula/axnet-dir.restore.23.bsr Where: /tmp/bacula-restores Replace: always FileSet: Empty FileSet Backup Client: axmail-fd Restore Client: axemail-fd Storage: File When: 2009-06-26 00:44:50 Catalog: MyCatalog Priority: 10 Plugin Options: *None* OK to run? (yes/mod/no): m Parameters to modify: 1: Level 2: Storage 3: Job 4: FileSet 5: Restore Client 6: When 7: Priority 8: Bootstrap 9: Where 10: File Relocation 11: Replace 12: JobId 13: Plugin Options Select parameter to modify (1-13): 9 Please enter path prefix for restore (/ for none): / Run Restore job JobName: RestoreFiles Bootstrap: /var/bacula/axnet-dir.restore.23.bsr Where: Replace: always FileSet: Empty FileSet Backup Client: axmail-fd Restore Client: axemail-fd Storage: File When: 2009-06-26 00:44:50 Catalog: MyCatalog Priority: 10 Plugin Options: *None* OK to run? (yes/mod/no): y Job queued. JobId=132 You have messages.
Notice how we did not use any renaming on the database paths: if Exchange 2003 has a Recovery Storage Group defined, that group will receive any restores, making manual adjustment of the paths unneeded.
Troubleshooting ∞
Error 0x7fe1f42 ∞
If you get this error: “Error: HrESERestoreAddDatabase failed with error 0xc7fe1f42 – Database not found. Check that the Database you are trying to restore actually exists in the Storage Group you are restoring to”. You have not created the database in the Exchange manager in the Recovery Storage Group. Make sure you created the database in the manager and check the name.
Error 0xc7ff1004 ∞
I ran into this message after figuring out how to restore the data: “Error: HrESERestoreComplete failed with error 0xc7ff1004 – Unknown error”. The error is given by the FD after the data has been restored and the FD crashed after that.
You can run the eseutil.exe against the .edb file to check the state (use eseutil /mh filename.edb
) and you will probably see the state as “Dirty Shutdown”.
The cause is a problem during the backup and is making the restore fail. If you have all the log files (E00xxxx.log in ‘restore’ in the Recovery Storage Group folder) you can use the eseutil /cc restore
command to replay the log files and fix the database.
After replaying the logs, the database should mount fine and all the mail should be there.