Here is a report I made to follow our duplications. It only show images that expire in the next 30 days and have not been duplicated. You will just need to add policy or schedule filters to only report on jobs you run to disk or VTL first.
select
datediff(dd,now(),backupimageexpirationtime) as 'Days Until Expired',
backuppolicyname as 'Policy',
backupimageuniqueid as 'Image',
backupfinaljobstarttime as 'Backup Start Time',
count (distinct backupimagecopyuniqueid) as 'Copies',
sum (backupimagefragmentsize) as 'Image Size (kb)',
backupimageexpirationtime as 'Expiration Time'
from
backupfinaljob,
backuppolicy,
backupimagecopy,
backupimage,
backupjobimage,
backupimagefragment,
object as mediaobject,
object as masterobject,
backupschedule
where
backupfinaljobid=backupjobimagebackupfinaljobid and
backupjobimagebackupimageid=backupimageid and
backupimageid=backupimagecopybackupimageid and
backupimagefragmentbackupimagecopyid=backupimagecopyid and
backupimageexpirationtime > (now()-30) and
backuppolicyid=backupfinaljobbackuppolicyid and
backupfinaljobbackupscheduleid=backupscheduleid and
backupimagecopymediaserverobjectid=mediaobject.objectid and
backupfinaljobmasterserverobjectid=masterobject.objectid
group by
backupimageuniqueid,
backupfinaljobstarttime,
backupimageexpirationtime,
backuppolicyname
having
(count (distinct backupimagecopyuniqueid))<'2'
order by
count (distinct backupimagecopyuniqueid) asc,
datediff(dd,now(),backupimageexpirationtime) asc