Thank you so much, Bill, for your excellent explanation. It was 100% clear to me what needs to be done.
I am happy to tell you that nearly all your proposals are already implemented in my setup. They only bit left to do is to put your scripts in as jobs. I currently have only this maintenance job: Job { Name = "Pruning" Description = "Prune all expired volumes" Type = "Admin" Schedule = "EveryNight" JobDefs = "DefaultJob" PruneJobs = yes PruneFiles = yes PruneVolumes = yes Enabled = yes Runscript { RunsWhen = "Before" RunsOnClient = no Console = "prune expired volume yes" } Priority = 12 AllowDuplicateJobs = no } Thank you again, J/C > On 11. Jun 2022, at 22:09, Bill Arlofski via Bacula-users > <bacula-users@lists.sourceforge.net> wrote: > > On 6/10/22 17:08, Justin Case wrote: >> Hi there, >> I am using Bacula since some weeks now, but operationally I am a complete >> noob. Haven’t run through many use cases yet. >> Since I have included my laptop as a job the incrementals run relatively >> quick, but the fulls take long. Sometime I put the laptop to sleep without >> thinking about the backup! >> If that happens during a job for the laptop, then the job stops if the >> connect does not work for some time. This leads to an errored job that has a >> lot of data in volumes, but the job is incomplete. I run that job later. OK, >> from a safety point of vie no problem at all. >> But what about the space occupied by the incomplete job? >> What is an efficient way to reclaim this space using the Baculum UI? >> Deleting the incomplete job does not do the trick I suppose? What are >> additional steps that are required? >> Thanks for your experienced feedback! >> J/C > > > Hello Justin, > > > Short answer: > > You can not delete data inside Bacula volumes. > > > Long answer: > > To begin the process of seeing if you can reclaim these volume(s), deleting > the failed laptop jobs is the correct first step. This removes any mention of > those jobs and files from the catalog, which means when you look to see what > jobs are stored on the volume(s) that those failed jobs used (the next step > to do), you will see either no jobs associated with the volume(s), or any > other jobs that may have also used them. > > When you check the "Jobs on volume" in Baculum, if there are no jobs > associated with a volume, Bacula will just prune/purge/recycle and re-use > them as necessary once a pruning operation takes place. > > If there are other jobs that used these volumes, you can just let things be > and the volumes will be pruned/purged/recycled and re-used once the volume > reaches its retention period - as above. > > If you want to reclaim the volumes sooner, you can delete the other jobs that > are on the volume(s) - of course making the right decisions about important > jobs and not deleting those. > > But if you keep any jobs that wrote to the volume(s) and don't delete them, > they are still in the catalog and you will need to wait for the volume > retention period to pass before Bacula will re-use the volume(s). > > > Future hints: > > You may want to create a special pool for the laptop and maybe even set in > this pool "MaximumVolumeJObs = 1". Then, you can be guaranteed that only > laptop jobs will ever be on volumes in this pool, and that only one laptop > job will ever be on any given volume in this pool. > > Then, when you run into this situation again and you want to clean up, it > will be as easy as just deleting the failed job(s), and then the volume(s) > that the deleted job(s) used will be ready for re-use as detailed in the > first paragraph. :) > > Additionally, if you really want/need to reclaim the actual disk space these > volumes use, there are some additional steps to take: > > First, I would globally disable pruning in the Director's 'Director{}' block > by adding "Autoprune = no". If you are running an older version of Bacula, > this option may not exist. > > Then, set "ActionOnPurge = truncate" in the new pool. > > Next create an Admin type job that runs nightly before the backup jobs run > which will run a small script which calls some bconsole commands to do some > catalog maintenance, including pruning and then truncating the pruned/purged > volumes. > > > The script that my NightlyMaint Admin job runs looks like the following: > ----8<---- > #!/bin/bash > > bcbin="/opt/comm-bacula/sbin/bconsole" > bcconfig="/opt/comm-bacula/include/bconsole.conf" > storage="XXXX" # set your defined storage resource name here > > echo > echo "========" > echo "Running update stats days=3 command..." > echo -e "update stats days=3\nquit\n" | ${bcbin} -n -c ${bcconfig} > > echo > echo "========" > echo "Running .bvfs_update command..." > echo -e ".bvfs_update\nquit\n" | ${bcbin} -n -c ${bcconfig} > > echo > echo "========" > echo "Running prune jobs all yes command..." > echo -e "prune jobs all yes\nquit\n" | ${bcbin} -n -c ${bcconfig} > > echo > echo "========" > echo "Pruning expired volumes" > echo -e "prune expired volume yes\nquit\n" | ${bcbin} -n -c ${bcconfig} > > echo > echo "========" > echo "Running truncate allpools storage=${storage} command..." > echo -e "truncate allpools storage=speedy-file\nquit\n" | ${bcbin} -n -c > ${bcconfig} > ----8<---- > > > My NightlyMaint Admin job looks like: > ----8<---- > Job { > Name = NightlyMaint > JobDefs = AdminJobs > > RunScript { > RunsWhen = before > RunsOnClient = no > FailJobOnError = yes > # This script runs the update slots command piped to bconsole > # ----------------------------------------------------------- > Command = "/opt/comm-bacula/include/scripts/updateslots.sh" > > # This script runs prune expired volumes, update stats, and .bvfs_update > commands > # > ------------------------------------------------------------------------------- > Command = "/opt/comm-bacula/include/scripts/consolecommands.sh" > > # This command performs a PostgreSQL vacuum on the bacula catalog DB > # ------------------------------------------------------------------ > Command = "/usr/bin/vacuumdb -q -z -d bacula" > } > } > ----8<---- > > > And finally, if you decide to use this "ActionOnPurge = truncate" option in > any of your current pools, you will need to do the following in bconsole to > make sure any existing volumes in those pools inherit this new setting: > > * reload > * update pool=xxxx (where xxxx is each pool you have modified) > * update volume fromallpools > > > > Hope this helps! > > > Best regards, > Bill > > -- > Bill Arlofski > w...@protonmail.com > _______________________________________________ > Bacula-users mailing list > Bacula-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/bacula-users
_______________________________________________ Bacula-users mailing list Bacula-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bacula-users