mirror of https://github.com/digint/btrbk
btrbk: rename *preserve_all to *preserve_min
parent
55b121c372
commit
d143d75b43
|
@ -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
76
btrbk
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue