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