Interacting with Bareos Using Bareos
CC Attribution 2.0 Belgium:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor.
Steffens, Jörg
Bareos (Backup Archiving Recovery Open Sourced) is a reliable, cross-networkopen source software for backup and recovery of data for a large set ofoperating systems (Linux, Unix, Windows, MacOS). Bareos offers a lot of toolsfor user interaction. The best known tool is the bconsole, offering a commandline interface. While it offers a lot of functions and can also be scripted,the Bareos JSON backend is much easier parse-able, especially when using thebareos-python module. This presentation will show, how Bareos can be scripted. It will give aoverview about the existing tools (bconsole, bls, bscan, bareos-dir, ...),with special focus to the Bareos Console. It will show the Bareos Consolefeature, like commands, ACLs, JSON backend and scripting abilities. Especiallyfor the JSON backend, we show how this can be accessed by the python-bareosmodule.
 I'm Jörg Steffen from the Barriers Projects and I'd like to show you some methods to interact with barriers. I assume this talk makes most sense for people who are already using barriers or regular. I hope you're all using it. Yeah. Okay. We will see. Okay. Then I will start with a short overview about barriers and then I show different interaction methods. One way to interact with the system is to configure it. Yes. Okay. I will handle this shortly. But the other thing I guess you are more interested in is runtime control of barriers and the other way around things that get triggered by barriers. And short roadmap afterwards. So how does a Barriers infrastructure look like? You have a central director locator which cares, yeah, keeps all the data, no, which controls all your backup environment and stores its information in a database. You have the storage demons which you have one or multiple storage demons each with one or multiple storage devices attached. This is where your backup data getting stored and you have your file demons or your lines installed on the different machines that you want to backup. You can interact with the director during runtime through the Barriers Director console interface and this is used by command line tool or web interface or some great tools. Okay. Yeah. This is the same just the newer, yeah. Lions can also be some plugins like the MBR, MSSGL, NMT and cluster, et cetera. Compuration file. Yeah, configuration is handled in resource. So the director configuration consists of a director resource, a catalog resource, how to connect to the database and stuff like this. The lines, the file sets, so data backup, your jobs, who is scheduled storage. As an example, I put in here the job resource, each resource got a name. This case, backup Barriers FD from type backup, level incremental and then it references to other resources. So it references to the client Barriers FD resource. It refers to the file sets, Linux all resource, to the schedule and so on to this different pool and it is enabled so you can also disable it. I missed some lines here, but it's not, okay. If you're not sure what you can type in here and are not willing to read the documentation, you can always ask the demons itself. So for example, the director Barriers director, means XS, like export schema, they show you all available derivatives as you can configure. If you change a configuration on the director, you can reload the director. So it's then immediately working for storage demon and file demon, you have to restart the demons. I hope this has been everything on this slide, but I guess so. Confuration can be quite large, but it's relatively straightforward and it's available for handle shared purpose or if I'm aware of. So far for the documentation, so it's a configuration, sorry. So runtime control of Barriers, you can direct, connect to your director. He has a D-Consult command that you would like to handle this on the command line. It's in D-Consult. It opens up a TCP connection to your Barriers director, authenticates. After this gets you an interactive prompt that you can type in your commands. This helps you get a list of all available commands. But you're not limited to interactive nearly use. You can also pipe in some commands in and then they will be executed and so on. Besides, they'll be listed here to standard out. So there are quite a number of script that just use this simple interface. There are some helper functions inside of D-Consult to generate, to write that script. Like for example, these are the so-called add commands. So you can redirect the output directly to another file and also handle this part of, this command should be outputted to this file and if you have another output, then the rest will be outputted to another file. You can do the same as input for commands or some other commands are available. Most commands have also the parameter yes, which says don't ask me any questions, just do it. So confirm, immediately confirm and if you have missed some parameter then the command will not start. Right, it's also important right until the job is finished or in this case until all jobs are finished. As said, you have, this uses the direct console interface and this can be accessed by the console, which we have seen right now. There's also a Python module, Python Barrios to access this. So Barrios Web UI, you see a screenshot of it here. Also uses the same connection. This is written in PHP, so if you have programmed something in PHP, then reuse part of the code and Q3 based interface, we, but also uses the same interface. But this is not as dedicated, of course, we hope that this thing is implemented in Barrios Web UI. No, you can have it where you like because you're just using the console interface and you can connect to it. In all ways you will connect to it via TCP so it can be on any system. Yes, sure. Yes. Sure. So, therefore, I have to say, most things easier to SSH to the machine and then use the decontrol but you can also use it remotely. This is, for example, done on some clients. If you want to give them specific access to trigger its own job or something like this, then you can have it decontrol locally installed, limit the access rights and use it from the clients. Okay, also cataloged database and also done other system lines. Okay, I've talked about the console interface. You should be aware that there are different type of consoles, so called default console or root console, which give you access to all the sources available in the director. This is normally the console used when you just type in decontrol. So, the default configuration, this is the absolute console. The other console is the name console or restricted console and therefore to use this you have to define ACS for this console. So, in this case, we have a console, we give it the name user1, go by the password, in this case, secret and allows the user1 to execute all commands except offset the need commands and only access data from the my catalog database, which is the default database, so probably all, but you can limit it. And only to the clients, client1 and client2 and all these words are regular expressions. So, here in this case, file set, all files that starting with the name Linux and then which has string job IDs also. If you don't specify ACS for some resource, then you don't have access to it. So, you have to specify it and provide all or some kind of design tools. I want to do some of the important commands of various help. It's always important to get the list of all commands available. If you also want to know the parameters, you type in height and then the command name, the list of the parameters. For one-time information of your different components, you can ask status, status director, so the information from the director or you can ask status of one of your storage systems that's attached to it. Or if this is a tape library, then you can ask what volumes are inside and what slots or ask the status of different lines. You can also ask when the scheduler has planned to execute this specific drops. If you don't specify a drop name here, then you will see get a list of all drops. Or otherwise, you can see one specific drop is planned to get started. The list command is to retrieve information from the catalog, from the database. You have two versions, the normal list and the long list, which provides you more information and you can ask about information about your backups, your clients, height sets, and so on. For example, if you are interested what drops are stored on volume full one, then you just ask list of drops that are stored on volume full one. Or the other way around, if you're interested, where the data from your drop one to three is stored, on what media, and you ask for the drop media from this drop ID. Or if you want to get the information you normally see at messages, or you can also ask for those messages that have been created during the drop as the drop did run. List drops last is quite important, I think. If you want to get a quick overview about the status of your drops, then you can type this command and it will show you the last one of all your drops. So normally, if you don't do this, then you maybe just get all drops from the last 24 hours or something like this, but with this you also get dropped that didn't run even for a longer period of time. But sometimes confuses people on the mailing list is, for example, if you modify or add a file set, and then, yeah, you restart your directory, and then make lists of files that then you will not see it. Because these data is first synchronized to the database, and there has been a drop one that uses this file set. Same with slides. This slide will only show all the slides where I dropped the drop for the slide. So if you have changed your configuration and want to verify that the director is aware of this, you can use the show command to show the configuration. You can also ask for specific resources in here. Yes. Yeah, and then you have commands to execute jobs like backup jobs, restore jobs, or it will drop to be finished. A small example to put this together is, let's say you have already installed your client's file demon on a new system and want to configure it on the director. You can use the configure ads clients, give it a name, give it a address, and give it a password. This command will complain if you have missed some required parameters or if you have put in invalid data. Otherwise, it creates a resource file, a population file for the new client and immediately loads it. So you can actually start to use it and check if it's really working. This starts as client and then client name. The same you can do with jobs. So you create your jobs, and after these two commands, three commands, you can just run the job and it's working. No, not here. Not if you use this command, then it's good. The director creates it automatically. Yes, okay. You can also specify all these specific parameters, but if it's a common job, then yeah, you can specify it. Yes. It will create a compilation file for you and immediately loads it. In this case, it also creates part of the compression file that's on the client. So if you look the other way, once you first add it here, then it has also the director export directory and you can copy it over to the client and yeah, you start it and then it's good. No, not with this because you have not the knowledge about this. You want to add some scripts that had to list this, but we haven't done so. For Windows, we have the installer and this has silent install options that you can use to configure it. Also, with the director, with the password and things like this, you also provide Opsi packages for the Opsi Windows management software management system Opsi. So you can integrate it in your Opsi environment, which you hopefully have and then install it and then it will be great. This is all things that work well. Sometimes they don't. So you can also enable debug during runtime. You do this with setDbug, specify the level, 100 is a good starting volume. You specify the trip log to a log file and adding temp. It's also usable and then what components have to debug and enable it. In this case, the director, you choose the storage. You can't specify to what file the log file will be generated. However, if you issue this command, it will write you the file where it's locked. This is not a big deal on Linux because it offers in this directory, but on Windows you are glad because you are depending on the Windows version to this difference log files. This has been all about the normal commands. You also have the special dot commands and they have been intended for non-interactive use but if you're creating kids, then you might want to use them. You will not see them with the help command, but if you use the dot help command, you will also see these dot commands. For example, dot SQL, normally you should be able to get all the information you require by the list command, but if this is not the case, you can also specify arbitrary SQL commands to execute. Of course, you could also directly connect to the database, but here you have already the authentication to the database and don't know what type of database you are using. Now it's getting interesting. The normal output from the v-control is in RP mode 0, meaning RP mode disabled. So it's intended to be human readable and it's quite okay. I guess for that, some time ago, the mode 1 has been introduced. There's a reason why we haven't used this anymore, but we introduced AP mode 2 with output data in JSON formats to be better usable by other programs. So as an example, I just start on top. In AP mode 0, list drop 1, you're getting this table nicely formatted and gets the information in there. This AP mode 1, yeah, the declaration is stripped, the first bar is stripped and I'm not sure what else have changed, but unfortunately, this is not really consistent between the different formats. This AP Imojason, it's the same command. You're getting dictionary named result and insights because we asked for jobs. You're getting an array of jobs, this is the information and articles are called. We already tried to mimic JSON RPC 2.0 format because we have to use some format and maybe then it gets easier to extend it someday to a real JSON RPC server. Yeah, how to use this? You could use Python variables, something like the deconsole, so it first connects to the director, but there's also a submodule for JSON, so you can handle the JSON data immediately. You can also directly connect to the storage team and file team, but they don't have, yeah, only provide limited commands that you can use. So as the same example as before, you first have to prepare your password, import the various BSOC class, prepare your password, then use the director console JSON class, connect to this address with this user and this password, and then you call the command that you have before and your middle key gets returned an item structure, this is the data included. Also not the result text, just the result. If there is an error, then you get an exception, so this is quite usable to create your own scripts. If you're doing backups, you'll probably care about the files and I will now show some methods to access data from files. So even before you really did run a backup job, you can call estimate, listing and get in return, so then the director will connect to the client and this will return all the files that would get back up if this job would run. If you have really run this job, then you can list files of this job ID, you get the list of the files and the directory that are back up by this job, but without extra information without that information and so on. If you use the restore command, say the last backup from this system, then it will generate a virtual file tree and will give you a new prompt and then you can use dir or ls or cd command to work through your backup data. If the file or directory is not really included in the backup, but only this because it's the parent directory, then the values here are all zero, like in this case, but here you also got the real backup data from your files, you can mark the files, say done and then these will be restored. This is fine, but if you really want to write the script to interact with your file data, then this is not enough. For this you have to use the bvss API, it is described in the developer guide and it looks quite nice as you see. You first have to update the cache for the drop ID you're careful and then ask where does this backup start. bvss ls directory is from this drop ID with an empty pass, you get root directory in return, this root directory has pass ID three and other values are set to zero and aaa means this is all zero because what you see here is a serialized form of the start field normally. This is done in this way, installed in this way to be more flexible about the database, about different lines, but it's not really handleable. You know that your slash directory is at pass ID three, you get the directories of pass ID three, then you see there's a user directory still with no information, but it's got the pass ID two and then you look for the directories in pass ID two, then you at least see oh this is really something because here are some information and the user sbin directory is in pass ID one and there are no further sub directories but you can list the files that are in this directory. So you need bvss if you want to ask the various directories for specific directories. Yeah I say that's not really easy but this is the way that and also the web UI restore pauser did work and use the commands because they can't work with the list of all files because they can be quite, quite a many. Oh yeah in JSON format you can at least read the data. Yeah if you want to but it doesn't help too much. Another way to access this is using Barrios fuse, so a fuse file system based on Python Barrios JSON mode and if you mount this, this will connect to your director and in this directory you mount it to Barrios FS for example you get directories for clients, for jobs, for pools, for volumes and then you can list for example the jobs running directory and you will see okay currently there's one job running, has this job ID, has the name Gonzo, client, Gonzo FD level is full and status is running because otherwise it wouldn't be in this directory. You can only ask for running jobs but you can also ask for auto jobs for client thing FD and then you will see, you have on the 20th January you have a job with this job ID for the name thing, client thing FD level full status, terminate successfully so this is good. On the day before you have a similar job which is incremental, I guess they both started at the same time but you see the full job did ends quite later, two hours later and so on and here on the 70th January you get a job that did fail. You not only see the job, you can also go to the directory and then get access to the job block for example or the info which is the information you would get from this job ID of this job and the data, the sub-directly. You can descend to the data directory and then you will see all the metadata or all the files that you have backup in your backup job. Of course you can't access them there because you only, you haven't done a restore, you just look at the metadata that is stored at the directory in the data bank but you get the information, you get the metadata, the file, change state and so on and you can use your normal UNIX tools like FIND for example to find all the files that are larger than 100 megabytes. Will the incremental directory show only the actual file that were backed up during the incremental or show the full data set for which the other directory? Incremental will only show the, only this specific job. You can handle this otherwise, this is just really shallow Python code with list jobs and list files and so on. If you want to have another feature just, it will be few lines of code three or four something like this. You not only can see the jobs of specific clients, you can also get a list of your pools and your volumes in your pools. Then you can immediately see we have this always incremental full volume that is in status full. So, we have written this amount of bytes to this volume and it's in read only mode because, yeah, because it's full. And here on this other volume you see it's in append mode so you can still write data to it and therefore it's in read wide. This last time data is written to it has been in this January. Again you can change to the directory of a volume, you get some extra information and also drops so you can descend to a volume, to a specific volume and then the drops and you will see all the drops that are back up on this volume and in this drop you can change to the directories in there and get the files that are back up with this job. So quite useful and you can write your normal Unix tools to script to retrieve some information. It's not the most efficient way to get the data but, yeah, it's quite comfortable. Okay, now we want to care about specific problems and writing script for this. For example, you have your various backup environment and you backup all your servers and everything works fine but your servers are always there so you can have a fixed scheduling for them and backup the data but now I think you have your coworkers with your laptops and they are sometimes in the office, sometimes not and maybe you have dynamic APIs and so it's complicated to get time when you can backup them. So how to solve this with this short script I can say and it works like it gets a list of all, no, I have to start otherwise, we use the client in the connection so in this case not the director connects to the client but the client is configured to direct, connects to the director and the director is then aware of all the clients that did the connection to it and have the connection and if there's a job for the client it will reuse this connection. And yeah, hey, so you get the information with status director and look at the field connected client connection and you only care about the name of the client. Then you loop through all the connected clients, you have the trigger function, you can call them by a quant for example every hour or every minute as you like, you get all the connected lines, you loop through the client, you guess a job name associated with the client so if your client is called client one, you look for a job backup of client one and if this job exists, you check if is there a job for this client in the last 24 hours. So if there's no job for this client then you just execute one, the job name that you have there, yes to confirm it and in result you get a job ID from the newly configured job and yeah, you can just print it out. So with this short script you can solve the problem with your mobile clients that are sometimes at the office, sometimes not just by running this periodically checking the clients that are connected and yeah, and starting a job if no job exists for the last 24 hours. So I have how much time left for 50 minutes? Oh, 20 minutes. Okay, then I go, no I don't go through this because it's not all on the slide. If you have a question about pooling volumes and how to automate this in specific case ask me after this talk. Oh, is that the question? Yes. No, no, this is for the time that the clients are back in your office, connect to the director which is also located in the office and then you know that your clients are there and then you trigger the backup. Okay, now the other way around things getting triggered by various for this you got one script you are got quite flexible one script either you can call this a job commands on the console itself so use the various direct various commands. You have options like they should only run if the job has succeeded or only if the job have failed and you can specify when they should run before a job after the job I guess one of the set and one failure only works with after the job or on windows after VSS something like this. You can also execute arbitrary system commands with your commands one script and then you have additional options there if these commands should be executed on the director or on the line for the backup ones and if the job should fail if the system command fails. Some examples for example if you want to create a virtual full backup from your existing backups and stored somewhere else to an archive pool but don't want that this newly generated virtual full is again used as a base for the next virtual full. Then what you can do is create your virtual full stored in the archive pool but after you have done so update the job ID because you know the current job ID why this variable and change the type from backup to archive. I have similar to backup jobs but they are not used internally for any other actions. So you can just run this this is a console command you can also type it in the B console but you can integrate it with your job and it should run on the server and it should not run if this job before has failed. Is it the same as a copy in archive? No, not the same. The archive job and the copy job are not the same. No. What other jobs are available are admin jobs normally you get backup jobs or restore jobs and this admin job you don't do any actual backup you just use this to run some commands and in this case after the backup of your own system you optimize the database which can be an advantage if you are using Postgres. So do onto backups but just use this as a kind of con but to get my other things in here. Relax and recover. Some of you have heard or have heard of this before. Relax and recover is a disaster recovery environment for Linux which works quite well. It works in two steps. Once it creates a rescue image from your current running system it creates a rescue image and you can boot with this rescue image and restore the system. One step could do backup but it can also integrate other backup solutions and thankfully various is also part of this and a minimized way and quite comfortable way to integrate it with various is normally you got the question okay then my system broke I need my rescue system so it should be able to have a recent rescue system. So when to create it and where to store it because normally you don't want to store it on your local system. We have options to store it on NFS and things like this but we are a backup solution so this approach just creates this regularly on every full backup and stores them locally on our own file system because our full file system is back up to the backup server and if you really require it you can extract it from our normal backup and then we store it to another machine where a CD burner or a USB drive is attached and we can put it on there and then we have the rescue image we can place it in the same server with the replaced artist and restore our system. We do so with a run before script so before we actually do the backup we run on the client disk command this is a short shell script this has one parameter and this is the backup level so full differential or incremental we only execute this on full because if you would do this in incremental then every incremental have an additional size of 50 or 60 megabytes which you don't want but on your full backup with whatever few gigabytes you use 50 megabytes more or less are not really important and it's important to create this rescue image regularly because it integrates your current kernel, your current network configuration, your kernel, your current hardest layout so if you don't do this regularly you may run into problems because if your rescue system is one year old so you can only get back to the status from your one year old system. So again something is missing on the slides what I would show you if the scheme has been larger you then have the B console you make to type in restore of control minus it's also an option hey thanks okay that's what you have to type restore from the current backup of clients you care about client fd1 extracts the file valyp rear output rear barriers.iso this is the default location by rear and restored to some other system which has CD burner attached and use this special restore job just we don't make the restore in the valyp rear output location but in the temp directory or some other directory you want to use so with this you have your normal backup drops drop and yeah and your rear directly integrated with this. No it doesn't require it offers you to store the data on NFS but it also offers different methods like maybe also copying Samba for sure and a lot of other possibilities. Yes so the rear barriers integration is that you can configure your rear that should use barriers and then in the rescue image creates uses the kernel your network setup your display out but also copies all the back barriers tools you have installed on the system on your rescue system so it boots up and has the same file demon available that you have on your running system and with this it restores just your data from your normal backup. And that will automatically be already into the recovery so that you will be able to. Yes you just as one line back up barriers something like this and this is all. No this is in the configuration we are local dot com but it's just one line in the configuration so it's really easy to handle and really powerful. Yes for sure. Okay then this is about scripts now we say two slides about plugins barriers can be extended by plugins for the director storage demon or file demon with this you get that to specific events you care about on the file demon plugins normally you use them to backup specific data like a database virtual machines or something like this. Plugins on the storage demon are normally made for rewrite data like like on the fly compressed data that's coming in normally this is done on the client but if your client is not that powerful but your storage server is then you can also make the compression there or SCSI crypto to use crypto tapes like this to get some status information or for the director this is normally here write a plugin there then you do this for status information and shortest possible plugin is something like this you have to import the various class for the director and then you have to override the init function then you register for the events you care about in this case we only care for the event the drop did end then you have to override the handle plugin event function when this is called this is called within specific event we check for this event okay this case it should always be events drop end because we only registered for this but we check nevertheless then we retrieve some other information like what client the drop did run have there been errors how many bytes how many files how many bytes have been transferred we format that in some other way and then we send it to a singer or a qualified or whatever you use for monitoring or for visualizing your your your backup system or your environment okay so I'm mostly done just roadmap for the upcoming release for the things that's important for integration is the python barriers is currently available at the barriers contract repository but will be moved to barriers corg repository in the next major release the barriers that you are I is actively developed by Frank over there and it will continue to be enhanced and therefore we also will extend to the vector form and to to provide more information yes it's part about media handling and optimizing this for this storage I skipped so I don't have it's not so important what I missed here at the roadmap it's we have seen you as a console connection where you specify user and the password we have received pull requests for adding PEM support which has quite some implication but we want to yeah put work on this and get this integrated for we plan to integrate it this also for 17.2 so you can directly authenticate your adapter directly or whatever you like okay now we got time for questions no questions I'm done good okay one question so for the python barriers module so which opens a DSP connection to the director this also works with python 3 and is already you and uses python 3 for the plug-in yes as I heard before it's only python 2 right now but it's already prepared for a python 3 and will also be done soon I guess yeah I guess distribution because normally we compile it against what's available on the distribution and if the distribution only offers python 3 we will do it for python 3 yeah yeah okay has a question yes you in principle it's yeah it's connected to the director and then you can call the call function and put in all the commands you could also enter the be console and so this will be executed and the results will be given to you failover if you want to have a failover the only thing you need you have redundant database that you do with your database tools and then you can have a second director for this is only important the configuration directory etc barriers director and you can copy them over or keep them synchronized and then you can start the other director okay but now not simultaneously so it's just a failover it's possible that you need to expose those to the internet you know they need to be exposed to the internet so of course it's a security concern if you provide services to the internet but yes we are aware that people are doing so you of course should have your tless encryption configured to do so and probably also what would be a good choice is also to encrypt the data on the client there's also a various option so the support is encrypted and also through the encrypted transport your data is also have been encrypted before so this should be quite the data is encrypted on the client and can only be restart on the client or if you've got the master key or to configure somewhere else the second question is the file dm only the file dm I'm not sure about this I know that some people running the director and also the storage team on a Raspberry Pi so I'm sure that's not so of course it's not the fastest solution but a lot of people using this this way and also the core components are all written in cc++ also there you are running on a xapo x from 10 to 15 years old so it's not so it's also intensive so if you have to detect the files that have changed since the last backup then this can consume some time and also encrypting the data on the client will also consume time but this is this is normal so if you have to if you cannot afford this from your CPU time you can configure it to make this light bulb and maybe unencrypted but yeah maybe you don't want so okay this is it okay oh sorry yes they are planned so the question has been to use some file system mechanism to detect changed files more quickly and this is for ZFS or better FS yes and we discussed this and we have also a task defined for it but currently nobody is working on this but yeah it could be hopefully done quite easily but I checked this with better FS and this wasn't this easy because if you want to retrieve the file information that has changed you have these virtual mount points and then you yeah it wasn't as easy it's easier to get to change blocks but we're not backing up blocks we're backing up files so also this is not too efficient but yeah with a file given plugin this can be implemented quite easily okay okay yeah if needs help or not so much
 I'm Jörg Steffen from the Barriers Projects and I'd like to show you some methods to  interact with barriers.  I assume this talk makes most sense for people who are already using barriers or regular.  I hope you're all using it.  Yeah.  Okay.  We will see.  Okay.  Then I will start with a short overview about barriers and then I show different interaction  methods.  One way to interact with the system is to configure it.  Yes.  Okay.  I will handle this shortly.  But the other thing I guess you are more interested in is runtime control of barriers  and the other way around things that get triggered by barriers.  And short roadmap afterwards.  So how does a Barriers infrastructure look like?  You have a central director locator which cares, yeah, keeps all the data, no, which  controls all your backup environment and stores its information in a database.  You have the storage demons which you have one or multiple storage demons each with one  or multiple storage devices attached.  This is where your backup data getting stored and you have your file demons or your lines  installed on the different machines that you want to backup.  You can interact with the director during runtime through the Barriers Director console  interface and this is used by command line tool or web interface or some great tools.  Okay.  Yeah.  This is the same just the newer, yeah.  Lions can also be some plugins like the MBR, MSSGL, NMT and cluster, et cetera.  Compuration file.  Yeah, configuration is handled in resource.  So the director configuration consists of a director resource, a catalog resource, how  to connect to the database and stuff like this.  The lines, the file sets, so data backup, your jobs, who is scheduled storage.  As an example, I put in here the job resource, each resource got a name.  This case, backup Barriers FD from type backup, level incremental and then it references to  other resources.  So it references to the client Barriers FD resource.  It refers to the file sets, Linux all resource, to the schedule and so on to this different  pool and it is enabled so you can also disable it.  I missed some lines here, but it's not, okay.  If you're not sure what you can type in here and are not willing to read the documentation,  you can always ask the demons itself.  So for example, the director Barriers director, means XS, like export schema, they show you  all available derivatives as you can configure.  If you change a configuration on the director, you can reload the director.  So it's then immediately working for storage demon and file demon, you have to restart  the demons.  I hope this has been everything on this slide, but I guess so.  Confuration can be quite large, but it's relatively straightforward and it's available for handle  shared purpose or if I'm aware of.  So far for the documentation, so it's a configuration, sorry.  So runtime control of Barriers, you can direct, connect to your director.  He has a D-Consult command that you would like to handle this on the command line.  It's in D-Consult.  It opens up a TCP connection to your Barriers director, authenticates.  After this gets you an interactive prompt that you can type in your commands.  This helps you get a list of all available commands.  But you're not limited to interactive nearly use.  You can also pipe in some commands in and then they will be executed and so on.  Besides, they'll be listed here to standard out.  So there are quite a number of script that just use this simple interface.  There are some helper functions inside of D-Consult to generate, to write that script.  Like for example, these are the so-called add commands.  So you can redirect the output directly to another file and also handle this part of,  this command should be outputted to this file and if you have another output, then the rest  will be outputted to another file.  You can do the same as input for commands or some other commands are available.  Most commands have also the parameter yes, which says don't ask me any questions, just  do it.  So confirm, immediately confirm and if you have missed some parameter then the command  will not start.  Right, it's also important right until the job is finished or in this case until all  jobs are finished.  As said, you have, this uses the direct console interface and this can be accessed by the  console, which we have seen right now.  There's also a Python module, Python Barrios to access this.  So Barrios Web UI, you see a screenshot of it here.  Also uses the same connection.  This is written in PHP, so if you have programmed something in PHP, then reuse part of the code  and Q3 based interface, we, but also uses the same interface.  But this is not as dedicated, of course, we hope that this thing is implemented in Barrios  Web UI.  No, you can have it where you like because you're just using the console interface and  you can connect to it.  In all ways you will connect to it via TCP so it can be on any system.  Yes, sure.  Yes.  Sure.  So, therefore, I have to say, most things easier to SSH to the machine and then use the  decontrol but you can also use it remotely.  This is, for example, done on some clients.  If you want to give them specific access to trigger its own job or something like this,  then you can have it decontrol locally installed, limit the access rights and use it from the  clients.  Okay, also cataloged database and also done other system lines.  Okay, I've talked about the console interface.  You should be aware that there are different type of consoles, so called default console  or root console, which give you access to all the sources available in the director.  This is normally the console used when you just type in decontrol.  So, the default configuration, this is the absolute console.  The other console is the name console or restricted console and therefore to use this  you have to define ACS for this console.  So, in this case, we have a console, we give it the name user1, go by the password, in  this case, secret and allows the user1 to execute all commands except offset the need  commands and only access data from the my catalog database, which is the default database,  so probably all, but you can limit it.  And only to the clients, client1 and client2 and all these words are regular expressions.  So, here in this case, file set, all files that starting with the name Linux and then  which has string job IDs also.  If you don't specify ACS for some resource, then you don't have access to it.  So, you have to specify it and provide all or some kind of design tools.  I want to do some of the important commands of various help.  It's always important to get the list of all commands available.  If you also want to know the parameters, you type in height and then the command name,  the list of the parameters.  For one-time information of your different components, you can ask status, status director,  so the information from the director or you can ask status of one of your storage systems  that's attached to it.  Or if this is a tape library, then you can ask what volumes are inside and what slots  or ask the status of different lines.  You can also ask when the scheduler has planned to execute this specific drops.  If you don't specify a drop name here, then you will see get a list of all drops.  Or otherwise, you can see one specific drop is planned to get started.  The list command is to retrieve information from the catalog, from the database.  You have two versions, the normal list and the long list, which provides you more information  and you can ask about information about your backups, your clients, height sets, and so  on.  For example, if you are interested what drops are stored on volume full one, then you just  ask list of drops that are stored on volume full one.  Or the other way around, if you're interested, where the data from your drop one to three  is stored, on what media, and you ask for the drop media from this drop ID.  Or if you want to get the information you normally see at messages, or you can also  ask for those messages that have been created during the drop as the drop did run.  List drops last is quite important, I think.  If you want to get a quick overview about the status of your drops, then you can type  this command and it will show you the last one of all your drops.  So normally, if you don't do this, then you maybe just get all drops from the last 24  hours or something like this, but with this you also get dropped that didn't run even  for a longer period of time.  But sometimes confuses people on the mailing list is, for example, if you modify or add  a file set, and then, yeah, you restart your directory, and then make lists of files that  then you will not see it.  Because these data is first synchronized to the database, and there has been a drop  one that uses this file set.  Same with slides.  This slide will only show all the slides where I dropped the drop for the slide.  So if you have changed your configuration and want to verify that the director is aware  of this, you can use the show command to show the configuration.  You can also ask for specific resources in here.  Yes.  Yeah, and then you have commands to execute jobs like backup jobs, restore jobs, or it  will drop to be finished.  A small example to put this together is, let's say you have already installed your client's  file demon on a new system and want to configure it on the director.  You can use the configure ads clients, give it a name, give it a address, and give it  a password.  This command will complain if you have missed some required parameters or if you have put  in invalid data.  Otherwise, it creates a resource file, a population file for the new client and immediately loads  it.  So you can actually start to use it and check if it's really working.  This starts as client and then client name.  The same you can do with jobs.  So you create your jobs, and after these two commands, three commands, you can just run  the job and it's working.  No, not here.  Not if you use this command, then it's good.  The director creates it automatically.  Yes, okay.  You can also specify all these specific parameters, but if it's a common job, then yeah, you  can specify it.  Yes.  It will create a compilation file for you and immediately loads it.  In this case, it also creates part of the compression file that's on the client.  So if you look the other way, once you first add it here, then it has also the director  export directory and you can copy it over to the client and yeah, you start it and then  it's good.  No, not with this because you have not the knowledge about this.  You want to add some scripts that had to list this, but we haven't done so.  For Windows, we have the installer and this has silent install options that you can use  to configure it.  Also, with the director, with the password and things like this, you also provide Opsi  packages for the Opsi Windows management software management system Opsi.  So you can integrate it in your Opsi environment, which you hopefully have and then install  it and then it will be great.  This is all things that work well.  Sometimes they don't.  So you can also enable debug during runtime.  You do this with setDbug, specify the level, 100 is a good starting volume.  You specify the trip log to a log file and adding temp.  It's also usable and then what components have to debug and enable it.  In this case, the director, you choose the storage.  You can't specify to what file the log file will be generated.  However, if you issue this command, it will write you the file where it's locked.  This is not a big deal on Linux because it offers in this directory, but on Windows you  are glad because you are depending on the Windows version to this difference log files.  This has been all about the normal commands.  You also have the special dot commands and they have been intended for non-interactive  use but if you're creating kids, then you might want to use them.  You will not see them with the help command, but if you use the dot help command, you will  also see these dot commands.  For example, dot SQL, normally you should be able to get all the information you require  by the list command, but if this is not the case, you can also specify arbitrary SQL commands  to execute.  Of course, you could also directly connect to the database, but here you have already  the authentication to the database and don't know what type of database you are using.  Now it's getting interesting.  The normal output from the v-control is in RP mode 0, meaning RP mode disabled.  So it's intended to be human readable and it's quite okay.  I guess for that, some time ago, the mode 1 has been introduced.  There's a reason why we haven't used this anymore, but we introduced AP mode 2 with  output data in JSON formats to be better usable by other programs.  So as an example, I just start on top.  In AP mode 0, list drop 1, you're getting this table nicely formatted and gets the information  in there.  This AP mode 1, yeah, the declaration is stripped, the first bar is stripped and I'm not sure  what else have changed, but unfortunately, this is not really consistent between the  different formats.  This AP Imojason, it's the same command.  You're getting dictionary named result and insights because we asked for jobs.  You're getting an array of jobs, this is the information and articles are called.  We already tried to mimic JSON RPC 2.0 format because we have to use some format and maybe  then it gets easier to extend it someday to a real JSON RPC server.  Yeah, how to use this?  You could use Python variables, something like the deconsole, so it first connects to  the director, but there's also a submodule for JSON, so you can handle the JSON data  immediately.  You can also directly connect to the storage team and file team, but they don't have, yeah,  only provide limited commands that you can use.  So as the same example as before, you first have to prepare your password, import the  various BSOC class, prepare your password, then use the director console JSON class,  connect to this address with this user and this password, and then you call the command  that you have before and your middle key gets returned an item structure, this is the data  included.  Also not the result text, just the result.  If there is an error, then you get an exception, so this is quite usable to create your own  scripts.  If you're doing backups, you'll probably care about the files and I will now show some  methods to access data from files.  So even before you really did run a backup job, you can call estimate, listing and get  in return, so then the director will connect to the client and this will return all the  files that would get back up if this job would run.  If you have really run this job, then you can list files of this job ID, you get the  list of the files and the directory that are back up by this job, but without extra information  without that information and so on.  If you use the restore command, say the last backup from this system, then it will generate  a virtual file tree and will give you a new prompt and then you can use dir or ls or cd  command to work through your backup data.  If the file or directory is not really included in the backup, but only this because it's  the parent directory, then the values here are all zero, like in this case, but here you  also got the real backup data from your files, you can mark the files, say done and then  these will be restored.  This is fine, but if you really want to write the script to interact with your file data,  then this is not enough.  For this you have to use the bvss API, it is described in the developer guide and it  looks quite nice as you see.  You first have to update the cache for the drop ID you're careful and then ask where  does this backup start.  bvss ls directory is from this drop ID with an empty pass, you get root directory in return,  this root directory has pass ID three and other values are set to zero and aaa means  this is all zero because what you see here is a serialized form of the start field normally.  This is done in this way, installed in this way to be more flexible about the database,  about different lines, but it's not really handleable.  You know that your slash directory is at pass ID three, you get the directories of pass  ID three, then you see there's a user directory still with no information, but it's got the  pass ID two and then you look for the directories in pass ID two, then you at least see oh this  is really something because here are some information and the user sbin directory is  in pass ID one and there are no further sub directories but you can list the files that  are in this directory.  So you need bvss if you want to ask the various directories for specific directories.  Yeah I say that's not really easy but this is the way that and also the web UI restore  pauser did work and use the commands because they can't work with the list of all files  because they can be quite, quite a many.  Oh yeah in JSON format you can at least read the data.  Yeah if you want to but it doesn't help too much.  Another way to access this is using Barrios fuse, so a fuse file system based on Python  Barrios JSON mode and if you mount this, this will connect to your director and in this  directory you mount it to Barrios FS for example you get directories for clients, for  jobs, for pools, for volumes and then you can list for example the jobs running directory  and you will see okay currently there's one job running, has this job ID, has the name  Gonzo, client, Gonzo FD level is full and status is running because otherwise it wouldn't  be in this directory.  You can only ask for running jobs but you can also ask for auto jobs for client thing  FD and then you will see, you have on the 20th January you have a job with this job  ID for the name thing, client thing FD level full status, terminate successfully so this  is good.  On the day before you have a similar job which is incremental, I guess they both started  at the same time but you see the full job did ends quite later, two hours later and  so on and here on the 70th January you get a job that did fail.  You not only see the job, you can also go to the directory and then get access to the  job block for example or the info which is the information you would get from this job  ID of this job and the data, the sub-directly.  You can descend to the data directory and then you will see all the metadata or all  the files that you have backup in your backup job.  Of course you can't access them there because you only, you haven't done a restore, you  just look at the metadata that is stored at the directory in the data bank but you get  the information, you get the metadata, the file, change state and so on and you can use  your normal UNIX tools like FIND for example to find all the files that are larger than  100 megabytes.  Will the incremental directory show only the actual file that were backed up during the  incremental or show the full data set for which the other directory?  Incremental will only show the, only this specific job.  You can handle this otherwise, this is just really shallow Python code with list jobs  and list files and so on.  If you want to have another feature just, it will be few lines of code three or four  something like this.  You not only can see the jobs of specific clients, you can also get a list of your pools  and your volumes in your pools.  Then you can immediately see we have this always incremental full volume that is in  status full.  So, we have written this amount of bytes to this volume and it's in read only mode  because, yeah, because it's full.  And here on this other volume you see it's in append mode so you can still write data  to it and therefore it's in read wide.  This last time data is written to it has been in this January.  Again you can change to the directory of a volume, you get some extra information and  also drops so you can descend to a volume, to a specific volume and then the drops and  you will see all the drops that are back up on this volume and in this drop you can change  to the directories in there and get the files that are back up with this job.  So quite useful and you can write your normal Unix tools to script to retrieve some information.  It's not the most efficient way to get the data but, yeah, it's quite comfortable.  Okay, now we want to care about specific problems and writing script for this.  For example, you have your various backup environment and you backup all your servers  and everything works fine but your servers are always there so you can have a fixed scheduling  for them and backup the data but now I think you have your coworkers with your laptops  and they are sometimes in the office, sometimes not and maybe you have dynamic APIs and so  it's complicated to get time when you can backup them.  So how to solve this with this short script I can say and it works like it gets a list  of all, no, I have to start otherwise, we use the client in the connection so in this  case not the director connects to the client but the client is configured to direct, connects  to the director and the director is then aware of all the clients that did the connection  to it and have the connection and if there's a job for the client it will reuse this connection.  And yeah, hey, so you get the information with status director and look at the field  connected client connection and you only care about the name of the client.  Then you loop through all the connected clients, you have the trigger function, you can call  them by a quant for example every hour or every minute as you like, you get all the  connected lines, you loop through the client, you guess a job name associated with the client  so if your client is called client one, you look for a job backup of client one and if  this job exists, you check if is there a job for this client in the last 24 hours.  So if there's no job for this client then you just execute one, the job name that you  have there, yes to confirm it and in result you get a job ID from the newly configured  job and yeah, you can just print it out.  So with this short script you can solve the problem with your mobile clients that are  sometimes at the office, sometimes not just by running this periodically checking the  clients that are connected and yeah, and starting a job if no job exists for the last 24 hours.  So I have how much time left for 50 minutes?  Oh, 20 minutes.  Okay, then I go, no I don't go through this because it's not all on the slide.  If you have a question about pooling volumes and how to automate this in specific case  ask me after this talk.  Oh, is that the question?  Yes.  No, no, this is for the time that the clients are back in your office, connect to the director  which is also located in the office and then you know that your clients are there and then  you trigger the backup.  Okay, now the other way around things getting triggered by various for this you got one  script you are got quite flexible one script either you can call this a job commands on  the console itself so use the various direct various commands.  You have options like they should only run if the job has succeeded or only if the job  have failed and you can specify when they should run before a job after the job I guess  one of the set and one failure only works with after the job or on windows after VSS  something like this.  You can also execute arbitrary system commands with your commands one script and then you  have additional options there if these commands should be executed on the director or on the  line for the backup ones and if the job should fail if the system command fails.  Some examples for example if you want to create a virtual full backup from your existing  backups and stored somewhere else to an archive pool but don't want that this newly generated  virtual full is again used as a base for the next virtual full.  Then what you can do is create your virtual full stored in the archive pool but after  you have done so update the job ID because you know the current job ID why this variable  and change the type from backup to archive.  I have similar to backup jobs but they are not used internally for any other actions.  So you can just run this this is a console command you can also type it in the B console  but you can integrate it with your job and it should run on the server and it should  not run if this job before has failed.  Is it the same as a copy in archive?  No, not the same.  The archive job and the copy job are not the same.  No.  What other jobs are available are admin jobs normally you get backup jobs or restore jobs  and this admin job you don't do any actual backup you just use this to run some commands  and in this case after the backup of your own system you optimize the database which  can be an advantage if you are using Postgres.  So do onto backups but just use this as a kind of con but to get my other things in  here.  Relax and recover.  Some of you have heard or have heard of this before.  Relax and recover is a disaster recovery environment for Linux which works quite well.  It works in two steps.  Once it creates a rescue image from your current running system it creates a rescue image and  you can boot with this rescue image and restore the system.  One step could do backup but it can also integrate other backup solutions and thankfully  various is also part of this and a minimized way and quite comfortable way to integrate  it with various is normally you got the question okay then my system broke I need my rescue  system so it should be able to have a recent rescue system.  So when to create it and where to store it because normally you don't want to store it  on your local system.  We have options to store it on NFS and things like this but we are a backup solution so  this approach just creates this regularly on every full backup and stores them locally  on our own file system because our full file system is back up to the backup server and  if you really require it you can extract it from our normal backup and then we store it  to another machine where a CD burner or a USB drive is attached and we can put it on there  and then we have the rescue image we can place it in the same server with the replaced artist  and restore our system.  We do so with a run before script so before we actually do the backup we run on the client  disk command this is a short shell script this has one parameter and this is the backup  level so full differential or incremental we only execute this on full because if you  would do this in incremental then every incremental have an additional size of 50 or 60 megabytes  which you don't want but on your full backup with whatever few gigabytes you use 50 megabytes  more or less are not really important and it's important to create this rescue image  regularly because it integrates your current kernel, your current network configuration,  your kernel, your current hardest layout so if you don't do this regularly you may run  into problems because if your rescue system is one year old so you can only get back to  the status from your one year old system.  So again something is missing on the slides what I would show you if the scheme has been  larger you then have the B console you make to type in restore of control minus it's also  an option hey thanks okay that's what you have to type restore from the current backup  of clients you care about client fd1 extracts the file valyp rear output rear barriers.iso  this is the default location by rear and restored to some other system which has CD burner attached  and use this special restore job just we don't make the restore in the valyp rear output location  but in the temp directory or some other directory you want to use so with this you have your  normal backup drops drop and yeah and your rear directly integrated with this.  No it doesn't require it offers you to store the data on NFS but it also offers different  methods like maybe also copying Samba for sure and a lot of other possibilities.  Yes so the rear barriers integration is that you can configure your rear that should use  barriers and then in the rescue image creates uses the kernel your network setup your display  out but also copies all the back barriers tools you have installed on the system on your rescue  system so it boots up and has the same file demon available that you have on your running  system and with this it restores just your data from your normal backup.  And that will automatically be already into the recovery so that you will be able to.  Yes you just as one line back up barriers something like this and this is all.  No this is in the configuration we are local dot com but it's just one line in the configuration  so it's really easy to handle and really powerful.  Yes for sure.  Okay then this is about scripts now we say two slides about plugins barriers can be extended  by plugins for the director storage demon or file demon with this you get that to specific  events you care about on the file demon plugins normally you use them to backup specific data  like a database virtual machines or something like this.  Plugins on the storage demon are normally made for rewrite data like like on the fly  compressed data that's coming in normally this is done on the client but if your client  is not that powerful but your storage server is then you can also make the compression  there or SCSI crypto to use crypto tapes like this to get some status information or for  the director this is normally here write a plugin there then you do this for status  information and shortest possible plugin is something like this you have to import the  various class for the director and then you have to override the init function then you  register for the events you care about in this case we only care for the event the drop  did end then you have to override the handle plugin event function when this is called  this is called within specific event we check for this event okay this case it should always  be events drop end because we only registered for this but we check nevertheless then we  retrieve some other information like what client the drop did run have there been errors  how many bytes how many files how many bytes have been transferred we format that in some  other way and then we send it to a singer or a qualified or whatever you use for monitoring  or for visualizing your your your backup system or your environment okay so I'm mostly done  just roadmap for the upcoming release for the things that's important for integration  is the python barriers is currently available at the barriers contract repository but will  be moved to barriers corg repository in the next major release the barriers that you are  I is actively developed by Frank over there and it will continue to be enhanced and therefore  we also will extend to the vector form and to to provide more information yes it's part  about media handling and optimizing this for this storage I skipped so I don't have it's  not so important what I missed here at the roadmap it's we have seen you as a console  connection where you specify user and the password we have received pull requests for  adding PEM support which has quite some implication but we want to yeah put work on this and get  this integrated for we plan to integrate it this also for 17.2 so you can directly authenticate  your adapter directly or whatever you like okay now we got time for questions no questions  I'm done good okay one question so for the python barriers module so which opens a DSP  connection to the director this also works with python 3 and is already you and uses  python 3 for the plug-in yes as I heard before it's only python 2 right now but it's already  prepared for a python 3 and will also be done soon I guess yeah I guess distribution because  normally we compile it against what's available on the distribution and if the distribution  only offers python 3 we will do it for python 3 yeah yeah  okay has a question yes you in principle it's yeah it's connected to the director and then  you can call the call function and put in all the commands you could also enter the  be console and so this will be executed and the results will be given to you failover  if you want to have a failover the only thing you need you have redundant database that you  do with your database tools and then you can have a second director for this is only important  the configuration directory etc barriers director and you can copy them over or keep them synchronized  and then you can start the other director okay but now not simultaneously so it's just a  failover  it's possible that you need to expose those to the internet you know they need to be exposed  to the internet so of course it's a security concern if you provide services to the internet  but yes we are aware that people are doing so you of course should have your tless encryption  configured to do so and probably also what would be a good choice is also to encrypt the  data on the client there's also a various option so the support is encrypted and also  through the encrypted transport your data is also have been encrypted before so this should  be quite the data is encrypted on the client and can only be restart on the client or if  you've got the master key or to configure somewhere else the second question is the  file dm only the file dm I'm not sure about this I know that some people running the director  and also the storage team on a Raspberry Pi so I'm sure that's not so of course it's  not the fastest solution but a lot of people using this this way and also the core components  are all written in cc++ also there you are running on a xapo x from 10 to 15 years old  so it's not so it's also intensive so if you have to detect the files that have changed  since the last backup then this can consume some time and also encrypting the data on  the client will also consume time but this is this is normal so if you have to if you  cannot afford this from your CPU time you can configure it to make this light bulb  and maybe unencrypted but yeah maybe you don't want so okay this is it okay oh sorry yes  they are planned so the question has been to use some file system mechanism to detect  changed files more quickly and this is for ZFS or better FS yes and we discussed this  and we have also a task defined for it but currently nobody is working on this but yeah  it could be hopefully done quite easily but I checked this with better FS and this wasn't  this easy because if you want to retrieve the file information that has changed you have  these virtual mount points and then you yeah it wasn't as easy it's easier to get to change  blocks but we're not backing up blocks we're backing up files so also this is not too efficient  but yeah with a file given plugin this can be implemented quite easily okay okay yeah  if needs help or not so much
Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_0_131.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_132_683.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_684_1415.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_1416_2051.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_2052_2843.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_2844_3191.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_3192_5483.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_5484_5855.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_5856_6695.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_6696_8615.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_8616_9743.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_9744_11183.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_11184_13367.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_13368_13811.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_13812_14999.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_15000_18935.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_18936_19175.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_19176_24491.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_24492_25043.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_25044_25811.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_25812_26795.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_26796_28223.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_28224_29063.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_29064_30203.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_30204_31415.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_31416_32255.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_32256_32651.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_32652_35807.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_35808_36815.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_36816_38363.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_38364_39899.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_39900_41267.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_41268_41687.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_41688_42503.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_42504_42659.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_42660_43499.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_43500_43655.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_43656_45515.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_45516_46667.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_46668_46799.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_46800_48083.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_48084_48263.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_48264_49031.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_49032_49715.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_49716_50567.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_50568_50615.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_50616_50951.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_50952_54407.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_54408_55283.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_55284_55379.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_55380_56759.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_56760_57983.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_57984_58931.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_58932_60167.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_60168_60455.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_60456_61439.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_61440_62039.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_62040_62591.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_62592_64007.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_64008_65291.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_65292_65399.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_65400_65459.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_65460_65831.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_65832_65915.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_65916_66107.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_66108_66983.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_66984_67079.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_67080_69383.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_69384_72863.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_72864_73307.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_73308_73367.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_73368_73415.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_73416_74591.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_74592_74663.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_74664_74759.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_74760_75143.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_75144_75191.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_75192_75239.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_75240_75287.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_75288_75359.png Interacting_with_Bareos_Using_Bareos_Console_commands_to_automate_task_75360_75482.png