# Maintenance for Backups

Verification, Pruning and Garbage Collection

# Verification Jobs

### **What is a verification job?**

On Proxmox Backup Server, a verification job checks all the backups you have on your datastore to ensure there hasn't been any corruption or bit rot. Usually it is best to schedule verification jobs whenever you are not backing up data to your datastore or around any downtime.

### **Setting Up a Verification Job**

To setup a verification job, you can either login to your backup server or the TAC.GLOBAL dashboard. We advise setting up your verification job through the dashboard since you can enable email notifications for the status and runtime of your verification job.

Login to the dashboard [here.](https://my.tac.global/tac_dash)

On the home page, navigate to the verification job table.

[![Screenshot 2026-05-01 190248.png](https://kb.tac.global/uploads/images/gallery/2026-05/scaled-1680-/screenshot-2026-05-01-190248.png)](https://kb.tac.global/uploads/images/gallery/2026-05/screenshot-2026-05-01-190248.png)

In the bottom right corner, click to add a new job.

[![Screenshot 2026-05-06 181010.png](https://kb.tac.global/uploads/images/gallery/2026-05/scaled-1680-/screenshot-2026-05-06-181010.png)](https://kb.tac.global/uploads/images/gallery/2026-05/screenshot-2026-05-06-181010.png)

You can set how many days you'd like the verification status to last, but once the verification outdated number of days has passed your verification job will check the backup to ensure no corruption/bit rot.

# Pruning Jobs & Retention Policy

### **Setting Up A Prune Job**

There are two ways you can set up/schedule a prune job. You can do it through the backup server or through the dashboard. We suggest setting it up through the dashboard.

[![Screenshot 2026-06-04 123744.png](https://kb.tac.global/uploads/images/gallery/2026-06/scaled-1680-/2YPscreenshot-2026-06-04-123744.png)](https://kb.tac.global/uploads/images/gallery/2026-06/2YPscreenshot-2026-06-04-123744.png)

Under there you can view, edit, run or delete any existing jobs. To add a new job, hit Add New Job under the prune job table.

[![Screenshot 2026-06-04 123910.png](https://kb.tac.global/uploads/images/gallery/2026-06/scaled-1680-/qu8screenshot-2026-06-04-123910.png)](https://kb.tac.global/uploads/images/gallery/2026-06/qu8screenshot-2026-06-04-123910.png)

Once the prune job is added, it will show up in the prune jobs table.

### **Retention Policies**

With pruning jobs you can set how long you'd like backups to be kept for. You can define multiple rules for the retention policy and a backup can be kept if it satisfies multiple rules defined. Pruning only removes the reference of your backups to your datastore, but it doesn't remove the actual backup. Backups are only removed when a garbage collection job is run. The table below refers to all the retention policy rules that can be applied. Proxmox also has a [pruning job simulator](https://pbs.proxmox.com/docs/prune-simulator/) you can use to visualize your rules.

<table border="1" class="min-w-full border-collapse text-sm leading-[1.7] whitespace-normal" id="bkmrk-option-what-it-keeps" style="border-collapse: collapse; border-style: solid; height: 243.734px; width: 100%;"><thead class="text-left"><tr style="height: 29.7969px;"><th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" scope="col" style="width: 33.2924%; height: 29.7969px;">Option</th><th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" scope="col" style="width: 33.2924%; height: 29.7969px;">What it keeps</th><th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" scope="col" style="width: 33.2962%; height: 29.7969px;">Example</th></tr></thead><tbody><tr style="height: 46.5938px;"><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 33.2924%; height: 46.5938px;">`keep-last`</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 33.2924%; height: 46.5938px;">The N most recent backups, regardless of age</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 33.2962%; height: 46.5938px;">`3` — always keep the last 3 backups</td></tr><tr style="height: 30.1094px;"><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 33.2924%; height: 30.1094px;">`keep-hourly`</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 33.2924%; height: 30.1094px;">One backup per hour, for N hours</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 33.2962%; height: 30.1094px;">`24` — one per hour for the last day</td></tr><tr style="height: 30.1094px;"><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 33.2924%; height: 30.1094px;">`keep-daily`</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 33.2924%; height: 30.1094px;">One backup per day, for N days</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top align-left" style="width: 33.2962%; height: 30.1094px;">`7` — one per day for the last week</td></tr><tr style="height: 30.1094px;"><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 33.2924%; height: 30.1094px;">`keep-weekly`</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 33.2924%; height: 30.1094px;">One backup per week, for N weeks</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 33.2962%; height: 30.1094px;">`4` — one per week for the last month</td></tr><tr style="height: 30.1094px;"><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 33.2924%; height: 30.1094px;">`keep-monthly`</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 33.2924%; height: 30.1094px;">One backup per month, for N months</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 33.2962%; height: 30.1094px;">`6` — one per month for the last half-year</td></tr><tr style="height: 46.9062px;"><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 33.2924%; height: 46.9062px;">`keep-yearly`</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 33.2924%; height: 46.9062px;">One backup per year, for N years</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 33.2962%; height: 46.9062px;">`1` — one per year, kept indefinitely if set high</td></tr></tbody></table>

# Garbage Collection Jobs

### **Setting Up Your Garbage Collection Job**

By default, a garbage collection job is already set for your server that runs daily. Any data that has been pruned gets removed when this job runs.

To edit the garbage collection job, login to the [TAC.GLOBAL dashboard](https://my.tac.global/tac_dash). On the homepage at the bottom, you should see your garbage collection job. Click Edit Job.

[![garbage collection view.png](https://kb.tac.global/uploads/images/gallery/2026-07/scaled-1680-/garbage-collection-view.png)](https://kb.tac.global/uploads/images/gallery/2026-07/garbage-collection-view.png)

You can adjust the garbage collection job schedule from here.

[![Screenshot 2026-07-09 131441.png](https://kb.tac.global/uploads/images/gallery/2026-07/scaled-1680-/screenshot-2026-07-09-131441.png)](https://kb.tac.global/uploads/images/gallery/2026-07/screenshot-2026-07-09-131441.png)