Scope
Bacula Enterprise Microsoft 365 Plugin is applicable on environments using any enterprise plan where target services of this plugin are included:
Office 365 platform
Exchange Online
OneDrive for Business
Sharepoint Online
The lack of any of the services in your subscription could lead to authentication problems (See troubleshooting section App Registration Error).
For more details about Microsoft 365 plans, visit these links:
This paper presents solutions for Bacula Enterprise version 12.8 and later, and is not applicable to prior versions.
Note
Important considerations
Before using this plugin, please carefully read the elements discussed in this section.
Onedrive Recycle Bin
Onedrive Recycle Bin cannot be protected with this plugin. This is a Microsoft limitation coming from their exposed REST APIs, where it is not possible to access Recycle Bin information. If future versions of Microsoft REST APIs officially include this function, Bacula Systems will include it as a new feature of this plugin.
Empty files
In general, empty files (files with 0 byte contents) are simply not backed up by Microsoft 365 plugin. In particular, email attachments or onedrive files will show a message in the joblog to inform about empty files detected and so not processed.
Backup of Attachments and Files
In general, this plugin backups two types of information:
Objects
Files
Objects are elements representing some entity in Microsoft 365 such as a calendar event, a contact, an email, a team, etc.
Files are attachments, hosted contents or OneDrive files.
While objects are directly streamed from memory to the backup engine, files need to be downloaded to the FD host before being sent. This is done in order to make some metadata checks and to improve overall performance, as this way operations can be parallelized. Every file is removed just after being completely downloaded and sent to the backup engine.
The path used for this purpose is established by the ‘path’ plugin variable, that usually is set up in the m365_backend script with the value: /opt/bacula/working
Inside the path variable, a ‘spool’ directory will be created and used for those temporary download processes.
Therefore, it is necessary to have at least enough disk space available for the size of the largest file in the backup session. If you are using concurrency between jobs or through the same job (by default this is the case through the concurrent_threads=5 parameter), you would need at least that size for the largest file multiplied by the number of operations in parallel you run.
Accurate Mode and Virtual Full Backups
Accurate mode is ignored and Virtual Full backups are not supported. These features will be addressed in future versions of this plugin.
Site Template Provisioning
Microsoft can modify at any time (and they do it frequently) the properties, structure or limitations of any element belonging to a site kind (team site, communication site, project site, etc) whicn can cause the restore provision process to fail. It is even common to see native structures of Sharepoint Online trigger errors with particular items/values and this error comes from the Sharepoint Online API.
As a result, is not possible to guarantee that a given template is going to work in a provision process. Many times, the template might need to be partially modified before being applied (removing some particular item, removing some particular column..). That part of the process is not possible to predict or automate, so we strongly recommend frequent testing of site restore processes to detect any need of manual restore processes before a real restore is required.
Particular List/ListItems Restores
It is possible to select and restore a particular list or listItems, without restoring an entire Sharepoint Site, and pointing the operation to an existing Site. This is done using the Graph API, but as we have previously exposed, this API has many limitations with the Sharepoint API. One of the limitations is that lists or list items with advanced elements (location, images, etc) are not supported. Therefore this feature should only be used for user created lists implying simple elements like texts, checks, dates, etc.
Site Backups In Parallel
Backing up sites in parallel from the same FD is not supported.
Email Limitations
The following items associated to Outlook elements (Exchange Online service) are not supported due to the fact they are currently not accessible using the APIs this plugin relies on (MS Graph API and PnP Powershell):
Sharing permissions associated to MailFolders
Public Folders
Onenote Limitations
The following items associated to Onenote elements are not supported due to the fact they are currently not accessible using the APIs this plugin relies on (MS Graph API and PnP Powershell):
Sharing permissions associated to Notebooks
Shared elements from one entity to another one. To protect them it is necessary to make it always from the source entity.
Notebook 5000 files limitation
Onenote notebooks can only store up to 5000 different items into their associated OneDrive Libraries, this a M365 limitation.
When they surpass that limit they become unaccessible, not only for backup but also for accessing them through any other Microsoft native interface.
When a job finds this kind of notebooks, an error message will be generated and the notebook won’t be included in the backup.
You can get more information about this limit and how to solve it in the following Microsoft documentation link:
External Personal Calendars
External calendars (as Google Calendar) connected to Microsoft accounts are not supported. They are external elements not exposed through MS APIs, so M365 Plugin cannot protect that information.
Calendar Events icons
Little icons that appear on the left of a calendar event title (usually auto-generated by the Outlook service) cannot be backed up, as they are not exposed through the MS Graph API the plugin is relying on.
Chats types
For the chats module, only types ‘group’ or ‘one_on_one’ can be backed up. Other types like: ‘meeting’ or ‘unknownFutureValue’ will be ignored.
MS Cloud APIs General Disclaimer
MS Cloud APIs are Microsoft property and they can change or evolve at any time. In particular, the Graph API is actively developed, containing new features every week, even if the version number of the service (1.0) is not changed as a result of any of those additions:
This situation is significantly different from traditional on-premise software, where each update is clearly numbered and controlled for a given server, so applications consuming that software, can clearly state what is offered and what are the target supported versions.
Microsoft is committed to trying to not break any existing functionality that could affect external applications. However, this situation can happen and therefore, cause some occasional problems with this plugin. Bacula Systems controls this with an advanced automatic monitoring system which is always checking the correct behavior of existing features, and will react quickly to that hypothetical event, but please be aware of the nature and implications of this kind of cloud technologies.
Go back to Microsoft 365 (M365) Plugin article.