1.. _sec:api:
2
3API
4===
5
6General
7-------
8
9This document is intended mostly for developers who wish to develop a
10new GUI interface to **Bareos**.
11
12Minimal Code in Console Program
13~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
14
15All the Catalog code is in the Directory (with the exception of
16``dbcheck`` and ``bscan``). Therefore also user level security and
17access is implemented in this central place. If code would be spreaded
18everywhere such as in a GUI this will be more difficult. The other
19advantage is that any code you add to the Director is automatically
20available to all interface programs, like the tty console and other
21programs.
22
23GUI Interface is Difficult
24~~~~~~~~~~~~~~~~~~~~~~~~~~
25
26Interfacing to an interactive program such as Bareos can be very
27difficult because the interfacing program must interpret all the prompts
28that may come. This can be next to impossible. There are are a number of
29ways that Bareos is designed to facilitate this:
30
31-  The Bareos network protocol is packet based, and thus pieces of
32   information sent can be ASCII or binary.
33
34-  The packet interface permits knowing where the end of a list is.
35
36-  The packet interface permits special “signals” to be passed rather
37   than data.
38
39-  The Director has a number of commands that are non-interactive. They
40   all begin with a period, and provide things such as the list of all
41   Jobs, list of all Clients, list of all Pools, list of all Storage, …
42   Thus the GUI interface can get to virtually all information that the
43   Director has in a deterministic way. See
44   https://github.com/bareos/bareos/blob/master/core/src/dird/ua_dotcmds.cc
45   for more details on this.
46
47-  Most console commands allow all the arguments to be specified on the
48   command line: e.g. ``run job=NightlyBackup level=Full``
49
50dot commands
51------------
52
53Besides the normal commands (like list, status, run, mount, …) the
54Director offers a number of so called *dot commands*. They all begin
55with a period, are all non-interactive, easily parseable and are
56indended to be used by other Bareos interface programs (GUIs).
57
58See https://github.com/bareos/bareos/blob/master/core/src/dird/ua_dotcmds.cc
59for more details.
60
61-  ``.actiononpurge``
62-  .\ ``api [ 0 | 1 | 2 | off | on | json ]``
63
64   -  Switch between different `api modes <#sec:ApiMode>`__
65
66-  ``.clients``
67
68   -  List all client resources
69
70-  ``.catalogs``
71
72   -  List all catalog resources
73
74-  ``.defaults job=<job-name> | client=<client-name> | storage=<storage-name | pool=<pool-name>``
75
76   -  List default settings
77
78-  ``.filesets``
79
80   -  List all filesets
81
82-  ``.help [ all | item=cmd ]``
83
84   -  Print parsable information about a command
85
86-  ``.jobdefs``
87
88   -  List add JobDef resources
89
90-  ``.jobs``
91
92   -  List job resources
93
94-  ``.levels``
95
96   -  List all backup levels
97
98-  ``.locations``
99-  ``.messages``
100-  ``.media``
101
102   -  List all medias
103
104-  ``.mediatypes``
105
106   -  List all media types
107
108-  ``.msgs``
109
110   -  List all message resources
111
112-  ``.pools``
113
114   -  List all pool resources
115
116-  ``.profiles``
117
118   -  List all profile resources
119
120-  ``.quit``
121
122   -  Close connection
123
124-  ``.sql query=<sqlquery>``
125
126   -  Send an arbitary SQL command
127
128-  ``.schedule``
129
130   -  List all schedule resources
131
132-  ``.status``
133-  ``.storages``
134
135   -  List all storage resources
136
137-  ``.types``
138
139   -  List all job types
140
141-  ``.volstatus``
142
143   -  List all volume status
144
145-  ``.bvfs_lsdirs``
146-  ``.bvfs_lsfiles``
147-  ``.bvfs_update``
148-  ``.bvfs_get_jobids``
149-  ``.bvfs_versions``
150-  ``.bvfs_restore``
151-  ``.bvfs_cleanup``
152-  ``.bvfs_clear_cache``
153
154.. _sec:ApiMode:
155
156API Modes
157---------
158
159The ``.api`` command can be used to switch between the different API
160modes. Besides the ``.api`` command, there is also the ``gui on | off``
161command. However, this command can be ignored, as it set to gui on in
162command execution anyway.
163
164API mode 0 (off)
165~~~~~~~~~~~~~~~~
166
167::
168
169    .api 0
170
171By default, a console connection to the Director is in interactive mode,
172meaning the api mode is off. This is the normal mode you get when using
173the bconsole. The output should be human readable.
174
175API mode 1 (on)
176~~~~~~~~~~~~~~~
177
178.. deprecated:: 16.2.0
179
180To get better parsable output, a console connection could be switched to
181API mode 1 (on).
182
183::
184
185    .api 1
186
187or (form times where they have only been one API flavour)
188
189::
190
191    .api
192
193This mode is intended to create output that is earlier parsable.
194Internaly some commands vary there output for the API mode 1, but not
195all.
196
197In API mode 1 some output is only delimted by the end of a packet, by
198not a new line. bconsole does not display end of packets (for good
199reason, as some output (e.g. ``status``) is send in multiple packets).
200If running in a bconsole, this leads not parsable output for human.
201
202Example:
203
204.. code-block:: bconsole
205
206    *.api 0
207    api: 0
208    *.defaults job=BackupClient1
209    job=BackupClient1
210    pool=Incremental
211    messages=Standard
212    client=client1.example.com-fd
213    storage=File
214    where=
215    level=Incremental
216    type=Backup
217    fileset=SelfTest
218    enabled=1
219    catalog=MyCatalog
220    *.api 1
221    api: 1
222    *.defaults job=BackupClient1
223    job=BackupClient1pool=Incrementalmessages=Standardclient=client1.example.com-fdstorage=Filewhere=level=Incrementaltype=Backupfileset=SelfTestenabled=1catalog=MyCatalog
224
225This mode has been introduced by BAT and is now deprecated.
226
227-  :ref:`Signals <section-signals>`
228
229API mode 2 (json)
230~~~~~~~~~~~~~~~~~
231
232The API mode 2 (or JSON mode) has been introduced in Bareos-15.2 and
233differs from API mode 1 in several aspects:
234
235-  JSON output
236-  The JSON output is in the format of JSON-RPC 2.0 responce objects
237   (http://www.jsonrpc.org/specification#response_object). This should
238   make it easier to implement a full JSON-RPC service later.
239-  No user interaction inside a command (meaning: if not all parameter
240   are given to a ``run`` command, the command fails).
241-  Each command creates exaclty one responce object.
242
243Currently a subset of the available commands return there result in JSON
244format, while others still write plain text output. When finished, it
245should be safe to run all commands in JSON mode.
246
247A successful responce should return
248
249.. code-block:: bconsole
250
251    "result": {
252        "<type_of_the_results>": [
253            {
254                <result_object_1_key_1>: <result_object_1_value_1>,
255                <result_object_1_key_2>: <result_object_1_value_2>,
256                ...
257            },
258            {
259                <result_object_2_key_1>: <result_object_2_value_1>,
260                <result_object_2_key_2>: <result_object_2_value_2>,
261                ...
262            },
263            ...
264        ]
265    }
266
267All keys are lower case.
268
269Examples
270^^^^^^^^
271
272-  list
273
274   -  e.g.
275
276   .. code-block:: bconsole
277
278       *list jobs
279       {
280       "jsonrpc": "2.0",
281       "id": null,
282       "result": {
283         "jobs": [
284           {
285             "type": "B",
286             "starttime": "2015-06-25 16:51:38",
287             "jobfiles": "18",
288             "jobid": "1",
289             "name": "BackupClient1",
290             "jobstatus": "T",
291             "level": "F",
292             "jobbytes": "4651943"
293           },
294           {
295             "type": "B",
296             "starttime": "2015-06-25 17:25:23",
297             "jobfiles": "0",
298             "jobid": "2",
299             "name": "BackupClient1",
300             "jobstatus": "T",
301             "level": "I",
302             "jobbytes": "0"
303           },
304           ...
305         ]
306       }
307       }
308
309   -  keys are the table names
310
311-  llist
312
313   -  e.g.
314
315   .. code-block:: bconsole
316
317       *llist jobs
318       {
319       "jsonrpc": "2.0",
320       "id": null,
321       "result": {
322         "jobs": [
323           {
324             "name": "BackupClient1",
325             "realendtime": "2015-06-25 16:51:40",
326             "Type": "B",
327             "schedtime": "2015-06-25 16:51:33",
328             "poolid": "1",
329             "level": "F",
330             "jobfiles": "18",
331             "volsessionid": "1",
332             "jobid": "1",
333             "job": "BackupClient1.2015-06-25_16.51.35_04",
334             "priorjobid": "0",
335             "endtime": "2015-06-25 16:51:40",
336             "jobtdate": "1435243900",
337             "jobstatus": "T",
338             "jobmissingfiles": "0",
339             "joberrors": "0",
340             "purgedfiles": "0",
341             "starttime": "2015-06-25 16:51:38",
342             "clientname": "ting.dass-it-fd",
343             "clientid": "1",
344             "volsessiontime": "1435243839",
345             "filesetid": "1",
346             "poolname": "Full",
347             "fileset": "SelfTest"
348           },
349           {
350             "name": "BackupClient1",
351             "realendtime": "2015-06-25 17:25:24",
352             "type": "B",
353             "schedtime": "2015-06-25 17:25:10",
354             "poolid": "3",
355             "level": "I",
356             "jobfiles": "0",
357             "volsessionid": "2",
358             "jobid": "2",
359             "job": "BackupClient1.2015-06-25_17.25.20_04",
360             "priorjobid": "0",
361             "endtime": "2015-06-25 17:25:24",
362             "jobtdate": "1435245924",
363             "jobstatus": "T",
364             "jobmissingfiles": "0",
365             "JobErrors": "0",
366             "purgedfiles": "0",
367             "starttime": "2015-06-25 17:25:23",
368             "clientname": "ting.dass-it-fd",
369             "clientid": "1",
370             "volsessiontime": "1435243839",
371             "filesetid": "1",
372             "poolname": "Incremental",
373             "fileset": "SelfTest"
374           },
375           ...
376         ]
377       }
378       }
379
380   -  like the list ``command``, but more values
381
382-  .jobs
383
384   -  e.g.
385
386   .. code-block:: bconsole
387
388       *.jobs
389       {
390       "jsonrpc": "2.0",
391       "id": null,
392       "result": {
393         "jobs": [
394           {
395             "name": "BackupClient1"
396           },
397           {
398             "name": "BackupCatalog"
399           },
400           {
401             "name": "RestoreFiles"
402           }
403         ]
404       }
405       }
406
407Example of a JSON-RPC Error Response
408''''''''''''''''''''''''''''''''''''
409
410Example of a JSON-RPC Error Response
411(http://www.jsonrpc.org/specification#error_object):
412
413.. code-block:: bconsole
414
415    *gui
416    {
417      "jsonrpc": "2.0",
418      "id": null,
419      "error": {
420        "data": {
421          "result": {},
422          "messages": {
423            "error": [
424              "ON or OFF keyword missing.\n"
425            ]
426          }
427        },
428        "message": "failed",
429        "code": 1
430      }
431    }
432
433-  an error response is emitted, if the command returns false or emitted
434   an error message
435   (``void UAContext::error_msg(const char *fmt, ...)``). Messages and
436   the result so far will be part of the error response object.
437
438.. _sec:bvfs:
439
440Bvfs API
441--------
442
443The BVFS (Bareos Virtual File System) do provide a API for browsing the
444backed up files in the catalog and select files for restoring.
445
446The Bvfs module works correctly with BaseJobs, Copy and Migration jobs.
447
448The initial version in Bacula have be founded by Bacula Systems.
449
450General notes
451~~~~~~~~~~~~~
452
453-  All fields are separated by a tab (api mode 0 and 1). (api mode 2:
454   JSON format).
455
456-  The output format for api mode 0 and 1 have changed for bareos >=
457   17.2. In earlier versions the second column of the ``bvfs_lsdirs``,
458   ``bvfs_lsfiles`` and ``bvfs_versions`` command have been the
459   ``FilenameId``. As bareos >= 17.2 internally don’t use the
460   ``FilenameId`` any longer, this column have been removed.
461
462-  You can specify ``limit=`` and ``offset=`` to list smoothly records
463   in very big directories. By default, limit=2000.
464
465-  All operations (except cache creation) are designed to run instantly.
466
467-  The cache creation is dependent of the number of directories. As Bvfs
468   shares information across jobs, the first creation can be slow.
469
470-  Due to potential encoding problem, it’s advised to use ``pathid``
471   instead of ``path`` in queries.
472
473.. limitation:: BVFS: bvfs_lsdirs limit/offset not working correctly on MySQL
474
475  As described in :mantis:`975` the limit/offset does not work correctly for bvfs_lsdirs on MySQL.
476  The problem has been fixed for PostgreSQL, but the SQL syntax required to formulate the query is unavailable on MySQL so there is no easy way to replicate that fix on MySQL.
477
478Get dependent jobs from a given JobId
479~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
480
481Bvfs allows you to query the catalog against any combination of jobs.
482You can combine all Jobs and all FileSet for a Client in a single
483session.
484
485To get all JobId needed to restore a particular job, you can use the
486``.bvfs_get_jobids`` command.
487
488::
489
490    .bvfs_get_jobids jobid=num [all]
491
492Example:
493
494.. code-block:: bconsole
495
496    *.bvfs_get_jobids jobid=10
497    1,2,5,10
498    *.bvfs_get_jobids jobid=10 all
499    1,2,3,5,10
500
501In this example, a normal restore will need to use JobIds 1,2,5,10 to
502compute a complete restore of the system.
503
504With the ``all`` option, the Director will use all defined FileSet for
505this client.
506
507Generating Bvfs cache
508~~~~~~~~~~~~~~~~~~~~~
509
510The ``.bvfs_update`` command computes the directory cache for jobs
511specified in argument, or for all jobs if unspecified.
512
513::
514
515    .bvfs_update [jobid=numlist]
516
517Example:
518
519.. code-block:: bconsole
520
521    *.bvfs_update jobid=1,2,3
522
523You can run the cache update process in a RunScript after the catalog
524backup.
525
526List directories
527~~~~~~~~~~~~~~~~
528
529Bvfs allows you to list directories in a specific path.
530
531.. code-block:: bconsole
532
533    *.bvfs_lsdirs pathid=num path=/apath jobid=numlist limit=num offset=num
534    PathId  FileId  JobId  LStat  Path
535    PathId  FileId  JobId  LStat  Path
536    PathId  FileId  JobId  LStat  Path
537    ...
538
539In bareos < 17.2 the output has been:
540
541::
542
543    PathId  FilenameId  FileId  JobId  LStat  Path
544
545You need to ``pathid`` or ``path``. Using ``path=`` will list “/” on
546Unix and all drives on Windows.
547
548FilenameId is 0 for all directories.
549
550::
551
552    *.bvfs_lsdirs pathid=4 jobid=1,11,12
553    4       0       0       A A A A A A A A A A A A A A     .
554    5       0       0       A A A A A A A A A A A A A A     ..
555    3       0       0       A A A A A A A A A A A A A A     regress/
556
557In this example, to list directories present in ``regress/``, you can
558use
559
560::
561
562    *.bvfs_lsdirs pathid=3 jobid=1,11,12
563    3       0       0       A A A A A A A A A A A A A A     .
564    4       0       0       A A A A A A A A A A A A A A     ..
565    2       0       0       A A A A A A A A A A A A A A     tmp/
566
567List files
568~~~~~~~~~~
569
570API mode 0
571^^^^^^^^^^
572
573Bvfs allows you to list files in a specific path.
574
575.. code-block:: bconsole
576
577    .bvfs_lsfiles pathid=num path=/apath jobid=numlist limit=num offset=num
578    PathId  FileId  JobId  LStat  Filename
579    PathId  FileId  JobId  LStat  Filename
580    PathId  FileId  JobId  LStat  Filename
581    ...
582
583In bareos < 17.2 the output has been:
584
585::
586
587    PathId  FilenameId  FileId  JobId  LStat  Filename
588
589You need to ``pathid`` or ``path``. Using ``path=`` will list “/” on
590Unix and all drives on Windows. If FilenameId is 0, the record listed is
591a directory.
592
593.. code-block:: bconsole
594
595    *.bvfs_lsdir pathid=4 jobid=1,11,12
596    4       0       0       A A A A A A A A A A A A A A     .
597    5       0       0       A A A A A A A A A A A A A A     ..
598    1       0       0       A A A A A A A A A A A A A A     regress/
599
600In this example, to list files present in ``regress/``, you can use
601
602.. code-block:: bconsole
603
604    *.bvfs_lsfiles pathid=1 jobid=1,11,12
605    1   52   12    gD HRid IGk BAA I BMqcPH BMqcPE BMqe+t A     titi
606    1   53   12    gD HRid IGk BAA I BMqe/K BMqcPE BMqe+t B     toto
607    1   54   12    gD HRie IGk BAA I BMqcPH BMqcPE BMqe+3 A     tutu
608    1   55   12    gD HRid IGk BAA I BMqe/K BMqcPE BMqe+t B     ficheriro1.txt
609    1   56   12    gD HRie IGk BAA I BMqe/K BMqcPE BMqe+3 D     ficheriro2.txt
610
611API mode 1
612^^^^^^^^^^
613
614.. code-block:: bconsole
615
616    *.api 1
617    *.bvfs_lsfiles jobid=1 pathid=1
618    1   7   1   gD OEE4 IHo B GHH GHH A G9S BAA 4 BVjBQG BVjBQG BVjBQG A A C    bpluginfo
619    1   4   1   gD OEE3 KH/ B GHH GHH A W BAA A BVjBQ7 BVjBQG BVjBQG A A C  bregex
620    ...
621
622API mode 2
623^^^^^^^^^^
624
625.. code-block:: bconsole
626
627    *.api 2
628    *.bvfs_lsfiles jobid=1 pathid=1
629    {
630      "jsonrpc": "2.0",
631      "id": null,
632      "result": {
633        "files": [
634          {
635            "jobid": 1,
636            "type": "F",
637            "fileid": 7,
638            "lstat": "gD OEE4 IHo B GHH GHH A G9S BAA 4 BVjBQG BVjBQG BVjBQG A A C",
639            "pathid": 1,
640            "stat": {
641              "atime": 1435243526,
642              "ino": 3686712,
643              "dev": 2051,
644              "mode": 33256,
645              "gid": 25031,
646              "nlink": 1,
647              "uid": 25031,
648              "ctime": 1435243526,
649              "rdev": 0,
650              "size": 28498,
651              "mtime": 1435243526
652            },
653            "name": "bpluginfo",
654            "linkfileindex": 0
655          },
656          {
657            "jobid": 1,
658            "type": "F",
659            "fileid": 4,
660            "lstat": "gD OEE3 KH/ B GHH GHH A W BAA A BVjBQ7 BVjBQG BVjBQG A A C",
661            "pathid": 1,
662            "stat": {
663              "atime": 1435243579,
664              "ino": 3686711,
665              "dev": 2051,
666              "mode": 41471,
667              "gid": 25031,
668              "nlink": 1,
669              "uid": 25031,
670              "ctime": 1435243526,
671              "rdev": 0,
672              "size": 22,
673              "mtime": 1435243526
674            },
675            "name": "bregex",
676            "linkfileindex": 0
677          },
678          ...
679        ]
680      }
681    }
682
683API mode JSON contains all information also available in the other API
684modes, but displays them more verbose.
685
686Get all versions of a specific file
687~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
688
689Bvfs allows you to find all versions of a specific file for a given
690Client with the ``.bvfs_version`` command. To avoid problems with
691encoding, this function uses only PathId and FilenameId.
692
693The jobid argument is mandatory but unused.
694
695.. code-block:: bconsole
696
697    *.bvfs_versions jobid=0 client=filedaemon pathid=num fname=filename [copies] [versions]
698    PathId FileId JobId LStat Md5 VolName InChanger
699    PathId FileId JobId LStat Md5 VolName InChanger
700    ...
701
702Example:
703
704.. code-block:: bconsole
705
706    *.bvfs_versions jobid=0 client=localhost-fd pathid=1 fnane=toto
707    1  49  12  gD HRid IGk D Po Po A P BAA I A   /uPgWaxMgKZlnMti7LChyA  Vol1  1
708
709Restore set of files
710~~~~~~~~~~~~~~~~~~~~
711
712Bvfs allows you to create a SQL table that contains files that you want
713to restore. This table can be provided to a restore command with the
714file option.
715
716.. code-block:: bconsole
717
718    *.bvfs_restore fileid=numlist dirid=numlist hardlink=numlist path=b2num
719    OK
720    *restore file=?b2num ...
721
722To include a directory (with ``dirid``), Bvfs needs to run a query to
723select all files. This query could be time consuming.
724
725``hardlink`` list is always composed of a serie of two numbers (jobid,
726fileindex). This information can be found in the LinkFileIndex (LinkFI)
727field of the LStat packet.
728
729The ``path`` argument represents the name of the table that Bvfs will
730store results. The format of this table is ``b2[0-9]+``. (Should start
731by b2 and followed by digits).
732
733Example:
734
735.. code-block:: bconsole
736
737    *.bvfs_restore fileid=1,2,3,4 hardlink=10,15,10,20 jobid=10 path=b20001
738    OK
739
740Cleanup after Restore
741~~~~~~~~~~~~~~~~~~~~~
742
743To drop the table used by the restore command, you can use the
744``.bvfs_cleanup`` command.
745
746.. code-block:: bconsole
747
748    *.bvfs_cleanup path=b20001
749
750Clearing the BVFS Cache
751~~~~~~~~~~~~~~~~~~~~~~~
752
753To clear the BVFS cache, you can use the ``.bvfs_clear_cache`` command.
754
755.. code-block:: bconsole
756
757    *.bvfs_clear_cache yes
758    OK
759
760Example for directory browsing using bvfs
761~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
762
763.. code-block:: bconsole
764
765    # update the bvfs cache for all jobs
766    *.bvfs_update
767    Automatically selected Catalog: MyCatalog
768    Using Catalog "MyCatalog
769
770    # Get jobids required to reconstruct a current full backup.
771    # This is optional. Only required if you care about a full backup.
772    # If you are only interessed in a single (differential or incremental) backup job,
773    # just use the single jobid.
774    *.bvfs_get_jobids jobid=123
775    117,118,123
776
777    # get root directory of the combined jobs 117,118,123
778    *.bvfs_lsdir jobid=117,118,123 path=
779    134 0   0   A A A A A A A A A A A A A A .
780    133 0   0   A A A A A A A A A A A A A A /
781
782    # path=/ (pathid=133) is the root directory.
783    # Check the root directory for subdirectories.
784    .bvfs_lsdir jobid=117,118,123 pathid=133
785    133 0   0   A A A A A A A A A A A A A A .
786    130 0   0   A A A A A A A A A A A A A A ..
787    1   23  123 z GiuU EH9 C GHH GHH A BAA BAA I BWA5Px BaIDUN BaIDUN A A C sbin/
788
789    # the first really backed up path is /sbin/ (pathid=1)
790    # as it has values other than 0 for FileId, JobId and LStat.
791    # Now we check, if it has futher subdirectories.
792    *.bvfs_lsdir jobid=1 pathid=1
793    1   23  123 z GiuU EH9 C GHH GHH A BAA BAA I BWA5Px BaIDUN BaIDUN A A C .
794    129 0   0   A A A A A A A A A A A A A A ..
795
796    # pathid=1 has no further subdirectories.
797    # Now we list the files in pathid=1 (/sbin/)
798    .bvfs_lsfiles jobid=117,118,123 pathid=1
799    1   18  123 z Gli+ IHo B GHH GHH A NVkY BAA BrA BaIDUJ BaIDUJ BaIDUJ A A C  bareos-dir
800    1   21  123 z GkuS IHo B GHH GHH A C1bw BAA XA BaIDUG BaIDUG BaIDUG A A C   bareos-fd
801    1   19  123 z Glju IHo B GHH GHH A CeNg BAA UI BaIDUJ BaIDUJ BaIDUJ A A C   bareos-sd
802    ...
803
804    # there are a number of files in /sbin/.
805    # We check, if there are different versions of the file bareos-dir.
806    *.bvfs_versions jobid=0 client=bareos-fd pathid=1 fname=bareos-dir
807    1   18  123 z Gli+ IHo B GHH GHH A NVkY BAA BrA BaIDUJ BaIDUJ BaIDUJ A A C  928EB+EJGFtWD7wQ8bVjew  Full-0001   0
808    1   1067    127 z Glnc IHo B GHH GHH A NVkY BAA BrA BaKDT2 BaKDT2 BaKDT2 A A C  928EB+EJGFtWD7wQ8bVjew  Incremental-0007    0
809
810    # multiple versions of the file bareos-dir have been backed up.
811