From eebb4a10fbdf4f17ed02151e5c2ac998d60ab12c Mon Sep 17 00:00:00 2001 From: root <root@antea.fi.muni.cz> Date: Thu, 9 Sep 2021 13:23:32 +0200 Subject: [PATCH] backup: Cleanup tweaks --- backup-tar/clean.pl | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/backup-tar/clean.pl b/backup-tar/clean.pl index f0055b6..37d26b8 100755 --- a/backup-tar/clean.pl +++ b/backup-tar/clean.pl @@ -48,8 +48,6 @@ my $last_daily_stamp = timestamp_months_ago(1); my $last_weekly_stamp = timestamp_months_ago(2); my $last_full_stamp = timestamp_months_ago(4); -say "$last_full_stamp / $last_weekly_stamp / $last_daily_stamp"; - my @summary = (); for my $stamp ( @stamps ) { my $backup_root = dirname($stamp); @@ -66,7 +64,15 @@ for my $stamp ( @stamps ) { push( @{$backups{ $backup_path }->{ $type }}, $timestamp ); } while (my ($path, $backups) = each %backups ) { - say "$backup_root -> $path…"; + my $info_printed = 0; + my $info = sub { + my ( $trigger, @msgs ) = @_; + if ( $trigger) { + say "\n$backup_root -> $path…" unless $info_printed; + $info_printed = 1; + say join "\n", @msgs; + } + }; my @full = @{$backups->{full}}; my @weekly = @{$backups->{weekly}}; my @daily = @{$backups->{daily}}; @@ -76,26 +82,28 @@ for my $stamp ( @stamps ) { scalar @full, scalar @weekly, scalar @daily)); # drop daily backups older than the last weekly backup at least month old + # except for trailing daily backups my @old_weekly = older_than( $last_daily_stamp, @weekly ); - if (@old_weekly == 0) { - next - } + next if (@old_weekly == 0); my $last_weekly_with_dailys = $old_weekly[-1]; - drop_backups( $backup_root, $path, map { "$_.daily" } older_than( $last_weekly_with_dailys, @daily ) ); + my @daily_to_delete = older_than( $last_weekly_with_dailys, @daily ); + $info->( scalar @daily_to_delete ); + drop_backups( $backup_root, $path, map { "$_.daily" } @daily_to_delete ); # drop weekly backups older than the last full backup at least two months old my @old_full = older_than( $last_weekly_stamp, @full ); - if (@old_full == 0) { - next - } + next if (@old_full == 0); my $last_full_with_weeklys = $old_full[-1]; my @weekly_to_delete = older_than( $last_full_with_weeklys, @weekly ); - say " weekly_to_delete = " . join " ", @weekly_to_delete; - # drop_backups( $backup_root, $path, map { "$_.weekly" } @weekly_to_delete ); + $info->( scalar @weekly_to_delete ); #, " weekly_to_delete = " . join " ", @weekly_to_delete ); + drop_backups( $backup_root, $path, map { "$_.weekly" } @weekly_to_delete ); my @full_to_delete = older_than( $last_full_stamp, @full ); - say " full_to_delete = " . join " ", @full_to_delete; - # drop_backups( $backup_root, $path, map { "$_.full" }, @full_to_delete ); + while ( @full_to_delete && (scalar @full_to_delete) > (scalar @full - 2) ) { + pop @full_to_delete; + } + $info->( scalar @full_to_delete, " full_to_delete = " . join " ", @full_to_delete ); + drop_backups( $backup_root, $path, map { "$_.full" } @full_to_delete ); } } -- GitLab