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