btrbk: add btrbk archive --raw option

pull/293/head
Axel Burri 2019-08-04 22:48:50 +02:00
parent dcc57abac4
commit 3e40903720
2 changed files with 16 additions and 9 deletions

20
btrbk
View File

@ -4894,8 +4894,11 @@ MAIN:
my @config_override_cmdline;
my @exclude_cmdline;
my ($config_cmdline, $preserve_snapshots, $preserve_backups, $wipe_snapshots, $skip_snapshots, $skip_backups, $print_schedule, $lockfile_cmdline);
my $resume_only_DEPRECATED; # as of btrbk-v0.26.0
my ($config_cmdline, $lockfile_cmdline, $print_schedule,
$preserve_snapshots, $preserve_backups, $wipe_snapshots, $skip_snapshots, $skip_backups,
$archive_raw,
$resume_only_DEPRECATED, # as of btrbk-v0.26.0
);
unless(GetOptions(
'help|h' => sub { VERSION_MESSAGE(); HELP_MESSAGE(0); exit 0; },
'version' => sub { VERSION_MESSAGE(); exit 0; },
@ -4917,6 +4920,7 @@ MAIN:
'print-schedule|S' => \$print_schedule,
'lockfile=s' => \$lockfile_cmdline,
'override=s' => \@config_override_cmdline, # e.g. --override=incremental=no
'raw' => \$archive_raw,
))
{
VERSION_MESSAGE();
@ -5357,8 +5361,8 @@ MAIN:
exit 1;
}
my $archive_root = vinfo($archive_url, $config);
unless(vinfo_init_root($archive_root)) {
ERROR "Failed to fetch subvolume detail for '$archive_root->{PRINT}'" . ($err ? ": $err" : "");
unless($archive_raw ? vinfo_init_raw_root($archive_root) : vinfo_init_root($archive_root)) {
ERROR "Failed to fetch " . ($archive_raw ? "raw target metadata" : "subvolume detail") . " for '$archive_root->{PRINT}'" . ($err ? ": $err" : "");
exit 1;
}
@ -5384,7 +5388,7 @@ MAIN:
};
my $config_droot = { CONTEXT => "archive_target",
PARENT => $config_sroot,
target_type => "send-receive", # macro_send_receive checks this
target_type => ($archive_raw ? "raw" : "send-receive"), # macro_send_receive checks this
url => $droot_url, # ABORTED() needs this
};
$config_sroot->{SUBSECTION} = [ $config_droot ];
@ -5400,8 +5404,8 @@ MAIN:
my $droot = vinfo($droot_url, $config_droot);
vinfo_assign_config($droot);
unless(vinfo_init_root($droot)) {
DEBUG("Failed to fetch subvolume detail" . ($err ? ": $err" : ""));
unless($archive_raw ? vinfo_init_raw_root($droot) : vinfo_init_root($droot)) {
DEBUG "Failed to fetch " . ($archive_raw ? "raw target metadata" : "subvolume detail") . " for '$droot->{PRINT}'" . ($err ? ": $err" : "");
unless(system_mkdir($droot)) {
ABORTED($droot, "Failed to create directory: $droot->{PRINT}/");
WARN "Skipping archive target \"$droot->{PRINT}\": " . ABORTED_TEXT($droot);
@ -5416,7 +5420,7 @@ MAIN:
}
else {
# after directory is created, try to init again
unless(vinfo_init_root($droot)) {
unless($archive_raw ? vinfo_init_raw_root($droot) : vinfo_init_root($droot)) {
ABORTED($droot, "Failed to fetch subvolume detail" . ($err ? ": $err" : ""));
WARN "Skipping archive target \"$droot->{PRINT}\": " . ABORTED_TEXT($droot);
next;

View File

@ -237,7 +237,7 @@ as it is still required in order to determine the latest
snapshot/backup pair (which is always preserved, regardless of the
retention policy).
*archive* <source> <target>::
*archive* <source> <target> [--raw]::
Recursively copy all subvolumes created by btrbk from <source> to
<target> directory, optionally rescheduled using
'archive_preserve_*' configuration options. Also creates directory
@ -250,6 +250,9 @@ need to create them by hand (e.g. by running "btrfs subvolume create
<target>/dir"). Check the output of --dry-run if unsure.
+
Note that this feature needs a *linux kernel >=4.4* to work correctly!
+
If '--raw' option is set, creates raw targets (experimental, see
btrbk.conf(5), TARGET TYPES).
*clean* [filter...]::
Delete incomplete (garbled) backups. Incomplete backups can be