Backup images are not expiring after upgrading to NetBackup version 10.3+ due to IMAGE_EXPIRY_DEPENDENCY_CHECK
Description
Backup images do not expire on their own after upgrading to NetBackup version 10.3 or higher, and they will expire when their dependent image expires.
This occurs because NetBackup 10.3 introduced a new feature called Image Dependency Expiration.
Documentation about this feature from the 10.3 admin guide (https://sort.veritas.com/doc_viewer/#/content?id=18716246-161584062-0%2Fv161737902-161584062):
About Image Dependency Expiration Cleanup
Image Dependency Expiration Cleanup checks whether any other backup images depend on an expiring backup image. It runs as part of an image clean-up job. The feature prevents a backup image from expiring if it has any subsequent dependent backup images.
For example, when expiring a new FULL backup image, NetBackup checks whether there are incremental (differential (INCR) or cumulative (CINCR)) backup images that depend on the FULL image. If the expiring FULL image has dependencies, it is put on hold and blocked from expiring until all dependencies expire or are removed. Similarly, an expiring incremental backup image with any backup image dependencies is put on hold until all the dependencies expire or are removed. This process can lead to holding a chain of dependent images. Consider an example where a chain of 10 expired images is held for a dependent copy. In that case it takes 10 image cleanup jobs to process and remove all of the images in the chain.
Explicit expiration (either with bpexpdate or the Expire action in the web UI) does not perform this check and therefore does not block an image from expiring.
Image Dependency Expiration Cleanup applies only to new backup images created with one of these supported policies:
Cloud
CloudStorage
Kubernetes
MS-Windows
NDMP
Hyper-V
HyperScale
Hypervisor
NAS-Data-Protection
Standard
VMware
Note: When you configure schedules, keep in mind that "forever" incremental backups might lead to holding all the images perpetually because each image depends on other image. So, it is recommended that you configure schedules in combination with FULL schedules.
Checking whether an image is "held for dependent copy"
Images that are put on hold due to Image Dependency Expiration Cleanup are marked as Held for dependent copy and reported at the copy level.
To see whether an image copy is held, enter the following command:
bpimagelist -backupid <backup_ID> -[-l|-L|-json]
Review the output for the following statement:
Held For Dependent Copy: yes
You can also check the NetBackup web UI (Catalog > <backup_image>) to see whether an image copy is held.
Enabling and disabling the feature
Note: Image Dependency Expiration Cleanup is enabled by default. When enabled, image cleanup jobs can run up to 2.5 times slower than when the feature is disabled.
To see whether Image Dependency Expiration Cleanup is enabled, enter the following command:
bpconfig -U
Review the output for the following statement:
Image Expiry Dependency Check:(enabled)
To disable Image Dependency Expiration Cleanup, enter the following command:
bpconfig -image_expiry_dependency_check 0
To re-enable the feature, enter the following command:
bpconfig -image_expiry_dependency_check 1
You can also use a REST API to turn the feature on or off. See the API documentation for more information.