btrbk: rename *preserve_all to *preserve_min

pull/88/head
Axel Burri 2016-04-12 19:55:29 +02:00
parent 55b121c372
commit d143d75b43
3 changed files with 48 additions and 48 deletions

View File

@ -144,7 +144,7 @@ Retention policy:
/etc/btrbk/btrbk-mylaptop.conf: /etc/btrbk/btrbk-mylaptop.conf:
snapshot_preserve_all 2d snapshot_preserve_min 2d
snapshot_preserve 14d snapshot_preserve 14d
target_preserve 20d 10w *m target_preserve 20d 10w *m
@ -260,7 +260,7 @@ to only fetch the snapshots.
volume ssh://192.168.0.42/mnt/btr_pool volume ssh://192.168.0.42/mnt/btr_pool
subvolume home subvolume home
snapshot_dir btrbk_snapshots snapshot_dir btrbk_snapshots
snapshot_preserve_all forever snapshot_preserve_min all
snapshot_create no snapshot_create no
target_preserve 0d 10w *m target_preserve 0d 10w *m
@ -270,7 +270,7 @@ to only fetch the snapshots.
If the server runs btrbk with this config, the latest snapshot (which If the server runs btrbk with this config, the latest snapshot (which
is *always* transferred), 10 weeklies and all monthlies are received is *always* transferred), 10 weeklies and all monthlies are received
from 192.168.0.42. The source filesystem is never altered because of from 192.168.0.42. The source filesystem is never altered because of
`snapshot_preserve_all forever`. `snapshot_preserve_min all`.
Example: backup from non-btrfs source Example: backup from non-btrfs source
@ -375,7 +375,7 @@ ssh:
# example backup target (also allowing deletion of old snapshots) # example backup target (also allowing deletion of old snapshots)
command="/backup/scripts/ssh_filter_btrbk.sh -l --target --delete" <pubkey>... command="/backup/scripts/ssh_filter_btrbk.sh -l --target --delete" <pubkey>...
# example fetch-only backup source (snapshot_preserve_all=forever, snapshot_create=no), # example fetch-only backup source (snapshot_preserve_min=all, snapshot_create=no),
# restricted to subvolumes within /home or /data # restricted to subvolumes within /home or /data
command="/backup/scripts/ssh_filter_btrbk.sh -l --send -p /home -p /data" <pubkey>... command="/backup/scripts/ssh_filter_btrbk.sh -l --send -p /home -p /data" <pubkey>...

76
btrbk
View File

@ -80,9 +80,9 @@ my %config_options = (
incremental => { default => "yes", accept => [ "yes", "no", "strict" ] }, incremental => { default => "yes", accept => [ "yes", "no", "strict" ] },
preserve_day_of_week => { default => "sunday", accept => [ (keys %day_of_week_map) ] }, preserve_day_of_week => { default => "sunday", accept => [ (keys %day_of_week_map) ] },
snapshot_preserve => { default => undef, accept_preserve_matrix => 1, context => [ "root", "volume", "subvolume" ], }, snapshot_preserve => { default => undef, accept_preserve_matrix => 1, context => [ "root", "volume", "subvolume" ], },
snapshot_preserve_all => { default => '12h', accept => [ "forever", "no" ], accept_regexp => qr/^[0-9]+[hdwmy]$/, context => [ "root", "volume", "subvolume" ], }, snapshot_preserve_min => { default => '12h', accept => [ "all", "no" ], accept_regexp => qr/^[0-9]+[hdwmy]$/, context => [ "root", "volume", "subvolume" ], },
target_preserve => { default => undef, accept_preserve_matrix => 1 }, target_preserve => { default => undef, accept_preserve_matrix => 1 },
target_preserve_all => { default => undef, accept => [ "forever", "no" ], accept_regexp => qr/^[0-9]+[hdwmy]$/ }, target_preserve_min => { default => undef, accept => [ "all", "no" ], accept_regexp => qr/^[0-9]+[hdwmy]$/ },
btrfs_commit_delete => { default => undef, accept => [ "after", "each", "no" ] }, btrfs_commit_delete => { default => undef, accept => [ "after", "each", "no" ] },
ssh_identity => { default => undef, accept_file => { absolute => 1 } }, ssh_identity => { default => undef, accept_file => { absolute => 1 } },
ssh_user => { default => "root", accept_regexp => qr/^[a-z_][a-z0-9_-]*$/ }, ssh_user => { default => "root", accept_regexp => qr/^[a-z_][a-z0-9_-]*$/ },
@ -104,20 +104,20 @@ my %config_options = (
# deprecated options # deprecated options
snapshot_preserve_daily => { default => 'all', accept => [ "all" ], accept_numeric => 1, context => [ "root", "volume", "subvolume" ], snapshot_preserve_daily => { default => 'all', accept => [ "all" ], accept_numeric => 1, context => [ "root", "volume", "subvolume" ],
deprecated => { COMPAT_PRESERVE_ALL => 1, DEFAULT => { warn => 'Please use "snapshot_preserve" and/or "snapshot_preserve_all"' } } }, deprecated => { COMPAT_PRESERVE_ALL => 1, DEFAULT => { warn => 'Please use "snapshot_preserve" and/or "snapshot_preserve_min"' } } },
snapshot_preserve_weekly => { default => 0, accept => [ "all" ], accept_numeric => 1, context => [ "root", "volume", "subvolume" ], snapshot_preserve_weekly => { default => 0, accept => [ "all" ], accept_numeric => 1, context => [ "root", "volume", "subvolume" ],
deprecated => { COMPAT_PRESERVE_ALL => 1, DEFAULT => { warn => 'Please use "snapshot_preserve" and/or "snapshot_preserve_all"' } } }, deprecated => { COMPAT_PRESERVE_ALL => 1, DEFAULT => { warn => 'Please use "snapshot_preserve" and/or "snapshot_preserve_min"' } } },
snapshot_preserve_monthly => { default => 'all', accept => [ "all" ], accept_numeric => 1, context => [ "root", "volume", "subvolume" ], snapshot_preserve_monthly => { default => 'all', accept => [ "all" ], accept_numeric => 1, context => [ "root", "volume", "subvolume" ],
deprecated => { COMPAT_PRESERVE_ALL => 1, DEFAULT => { warn => 'Please use "snapshot_preserve" and/or "snapshot_preserve_all"' } } }, deprecated => { COMPAT_PRESERVE_ALL => 1, DEFAULT => { warn => 'Please use "snapshot_preserve" and/or "snapshot_preserve_min"' } } },
target_preserve_daily => { default => 'all', accept => [ "all" ], accept_numeric => 1, target_preserve_daily => { default => 'all', accept => [ "all" ], accept_numeric => 1,
deprecated => { COMPAT_PRESERVE_ALL => 1, DEFAULT => { warn => 'Please use "target_preserve" and/or "target_preserve_all"' } } }, deprecated => { COMPAT_PRESERVE_ALL => 1, DEFAULT => { warn => 'Please use "target_preserve" and/or "target_preserve_min"' } } },
target_preserve_weekly => { default => 0, accept => [ "all" ], accept_numeric => 1, target_preserve_weekly => { default => 0, accept => [ "all" ], accept_numeric => 1,
deprecated => { COMPAT_PRESERVE_ALL => 1, DEFAULT => { warn => 'Please use "target_preserve" and/or "target_preserve_all"' } } }, deprecated => { COMPAT_PRESERVE_ALL => 1, DEFAULT => { warn => 'Please use "target_preserve" and/or "target_preserve_min"' } } },
target_preserve_monthly => { default => 'all', accept => [ "all" ], accept_numeric => 1, target_preserve_monthly => { default => 'all', accept => [ "all" ], accept_numeric => 1,
deprecated => { COMPAT_PRESERVE_ALL => 1, DEFAULT => { warn => 'Please use "target_preserve" and/or "target_preserve_all"' } } }, deprecated => { COMPAT_PRESERVE_ALL => 1, DEFAULT => { warn => 'Please use "target_preserve" and/or "target_preserve_min"' } } },
resume_missing => { default => "yes", accept => [ "yes", "no" ], resume_missing => { default => "yes", accept => [ "yes", "no" ],
deprecated => { yes => { warn => 'ignoring' }, deprecated => { yes => { warn => 'ignoring' },
no => { warn => 'Please use "target_preserve_all latest" and "target_preserve no"', no => { warn => 'Please use "target_preserve_min latest" and "target_preserve no"',
replace_key => 'target_preserve', replace_key => 'target_preserve',
replace_value => 'no', replace_value => 'no',
} } }, } } },
@ -2086,15 +2086,15 @@ sub config_preserve_hash($$)
my $config = shift || die; my $config = shift || die;
my $prefix = shift || die; my $prefix = shift || die;
my $ret = config_key($config, $prefix . "_preserve") // {}; my $ret = config_key($config, $prefix . "_preserve") // {};
my $preserve_all = config_key($config, $prefix . "_preserve_all"); my $preserve_min = config_key($config, $prefix . "_preserve_min");
if(defined($preserve_all)) { if(defined($preserve_min)) {
$ret->{all} = $preserve_all; # used for raw schedule output $ret->{min} = $preserve_min; # used for raw schedule output
if($preserve_all eq 'forever') { if($preserve_min eq 'all') {
$ret->{all_n} = 'forever'; $ret->{min_n} = 'all';
} }
elsif($preserve_all =~ /^([0-9]+)([hdwmy])$/) { elsif($preserve_min =~ /^([0-9]+)([hdwmy])$/) {
$ret->{all_n} = $1; $ret->{min_n} = $1;
$ret->{all_q} = $2; $ret->{min_q} = $2;
} }
else { die; } else { die; }
} }
@ -2247,8 +2247,8 @@ sub append_config_option($$$$;$)
WARN "Using \"$key $value\""; WARN "Using \"$key $value\"";
} }
if($opt->{deprecated}->{COMPAT_PRESERVE_ALL}) { if($opt->{deprecated}->{COMPAT_PRESERVE_ALL}) {
$config_override{snapshot_preserve_all} = 'forever'; $config_override{snapshot_preserve_min} = 'all';
$config_override{target_preserve_all} = 'forever'; $config_override{target_preserve_min} = 'all';
WARN "Refusing to delete anything!"; WARN "Refusing to delete anything!";
} }
} }
@ -2656,8 +2656,8 @@ sub schedule(@)
my $result_hints = $args{result_hints} // {}; my $result_hints = $args{result_hints} // {};
my $preserve_day_of_week = $preserve->{dow} || die; my $preserve_day_of_week = $preserve->{dow} || die;
my $preserve_all_n = $preserve->{all_n}; my $preserve_min_n = $preserve->{min_n};
my $preserve_all_q = $preserve->{all_q}; my $preserve_min_q = $preserve->{min_q};
my $preserve_hourly = $preserve->{h}; my $preserve_hourly = $preserve->{h};
my $preserve_daily = $preserve->{d}; my $preserve_daily = $preserve->{d};
my $preserve_weekly = $preserve->{w}; my $preserve_weekly = $preserve->{w};
@ -2712,19 +2712,19 @@ sub schedule(@)
# filter "preserve all within N days/weeks/..." # filter "preserve all within N days/weeks/..."
foreach my $href (@sorted_schedule) { foreach my $href (@sorted_schedule) {
if($preserve_all_n) { if($preserve_min_n) {
if($preserve_all_n eq 'forever') { if($preserve_min_n eq 'all') {
$href->{preserve} ||= "preserve all: forever"; $href->{preserve} ||= "preserve min: all";
} elsif($preserve_all_q eq 'h') { } elsif($preserve_min_q eq 'h') {
$href->{preserve} ||= "preserve all: $href->{delta_hours} hours ago" if($href->{delta_hours} <= $preserve_all_n); $href->{preserve} ||= "preserve min: $href->{delta_hours} hours ago" if($href->{delta_hours} <= $preserve_min_n);
} elsif($preserve_all_q eq 'd') { } elsif($preserve_min_q eq 'd') {
$href->{preserve} ||= "preserve all: $href->{delta_days} days ago" if($href->{delta_days} <= $preserve_all_n); $href->{preserve} ||= "preserve min: $href->{delta_days} days ago" if($href->{delta_days} <= $preserve_min_n);
} elsif($preserve_all_q eq 'w') { } elsif($preserve_min_q eq 'w') {
$href->{preserve} ||= "preserve all: $href->{delta_weeks} weeks ago" if($href->{delta_weeks} <= $preserve_all_n); $href->{preserve} ||= "preserve min: $href->{delta_weeks} weeks ago" if($href->{delta_weeks} <= $preserve_min_n);
} elsif($preserve_all_q eq 'm') { } elsif($preserve_min_q eq 'm') {
$href->{preserve} ||= "preserve all: $href->{delta_months} months ago" if($href->{delta_months} <= $preserve_all_n); $href->{preserve} ||= "preserve min: $href->{delta_months} months ago" if($href->{delta_months} <= $preserve_min_n);
} elsif($preserve_all_q eq 'y') { } elsif($preserve_min_q eq 'y') {
$href->{preserve} ||= "preserve all: $href->{delta_years} years ago" if($href->{delta_years} <= $preserve_all_n); $href->{preserve} ||= "preserve min: $href->{delta_years} years ago" if($href->{delta_years} <= $preserve_min_n);
} }
} }
$first_in_delta_hours{$href->{delta_hours}} //= $href; $first_in_delta_hours{$href->{delta_hours}} //= $href;
@ -2812,11 +2812,11 @@ sub format_preserve_matrix($@)
if($format eq "debug_text") { if($format eq "debug_text") {
my @out; my @out;
my %trans = ( h => 'hours', d => 'days', w => 'weeks', m => 'months', y => 'years' ); my %trans = ( h => 'hours', d => 'days', w => 'weeks', m => 'months', y => 'years' );
if($preserve->{all_n} && $preserve->{all_n} eq 'forever') { if($preserve->{min_n} && $preserve->{min_n} eq 'all') {
push @out, "preserving all forever"; push @out, "preserving all forever";
} }
else { else {
push @out, "preserving all within $preserve->{all_n} $trans{$preserve->{all_q}}" if($preserve->{all_n} && $preserve->{all_q}); push @out, "preserving all within $preserve->{min_n} $trans{$preserve->{min_q}}" if($preserve->{min_n} && $preserve->{min_q});
push @out, "first present daily for $preserve->{d} days" if($preserve->{d}); push @out, "first present daily for $preserve->{d} days" if($preserve->{d});
unless($preserve->{d} && ($preserve->{d} eq 'all')) { unless($preserve->{d} && ($preserve->{d} eq 'all')) {
push @out, "first daily in week (starting on $preserve->{dow}) for $preserve->{w} weeks" if($preserve->{w}); push @out, "first daily in week (starting on $preserve->{dow}) for $preserve->{w} weeks" if($preserve->{w});
@ -2832,11 +2832,11 @@ sub format_preserve_matrix($@)
} }
my $s = ""; my $s = "";
if($preserve->{all_n} && ($preserve->{all_n} eq 'forever')) { if($preserve->{min_n} && ($preserve->{min_n} eq 'all')) {
$s = '*d+'; $s = '*d+';
} }
else { else {
$s .= $preserve->{all_n} . $preserve->{all_q} . '+' if($preserve->{all_n} && $preserve->{all_q}); $s .= $preserve->{min_n} . $preserve->{min_q} . '+' if($preserve->{min_n} && $preserve->{min_q});
foreach (qw(h d w m y)) { foreach (qw(h d w m y)) {
my $val = $preserve->{$_} // 0; my $val = $preserve->{$_} // 0;
next unless($val); next unless($val);

View File

@ -126,9 +126,9 @@ non-incremental (initial) backups are never created. Defaults to
Set retention policy for snapshots (see RETENTION POLICY below). Set retention policy for snapshots (see RETENTION POLICY below).
.RE .RE
.PP .PP
\fBsnapshot_preserve_all\fR forever|no|<number>{h,d,w,m,y} \fBsnapshot_preserve_min\fR all|no|<number>{h,d,w,m,y}
.RS 4 .RS 4
Preserve all snapshots for the given amount of hours (h), days (d), Preserve all snapshots for a minimum amount of hours (h), days (d),
weeks (w), months (m) or years (y), regardless of how many there weeks (w), months (m) or years (y), regardless of how many there
are. Defaults to \[lq]12h\[rq]. are. Defaults to \[lq]12h\[rq].
.RE .RE
@ -138,9 +138,9 @@ are. Defaults to \[lq]12h\[rq].
Set retention policy for backups (see RETENTION POLICY below). Set retention policy for backups (see RETENTION POLICY below).
.RE .RE
.PP .PP
\fBtarget_preserve_all\fR forever|no|<number>{h,d,w,m,y} \fBtarget_preserve_min\fR all|no|<number>{h,d,w,m,y}
.RS 4 .RS 4
Preserve all backups for the given amount of hours (h), days (d), Preserve all backups for a minimum amount of hours (h), days (d),
weeks (w), months (m) or years (y), regardless of how many there weeks (w), months (m) or years (y), regardless of how many there
are. Defaults to \[lq]no\[rq]. are. Defaults to \[lq]no\[rq].
.RE .RE
@ -219,8 +219,8 @@ Lines that contain a hash character (#) in the first column are
treated as comments. treated as comments.
.SH RETENTION POLICY .SH RETENTION POLICY
btrbk uses separate retention policy for snapshots and backups, which btrbk uses separate retention policy for snapshots and backups, which
are defined by the \fIsnapshot_preserve_all\fR, are defined by the \fIsnapshot_preserve_min\fR,
\fIsnapshot_preserve\fR, \fItarget_preserve_all\fR, \fIsnapshot_preserve\fR, \fItarget_preserve_min\fR,
\fItarget_preserve\fR, and the \fIpreserve_day_of_week\fR \fItarget_preserve\fR, and the \fIpreserve_day_of_week\fR
configuration options. configuration options.
.PP .PP