btrbk: adapted subvolume creation for refactored configuration

pull/30/head
Axel Burri 2015-01-10 16:33:01 +01:00
parent 9908ed42f0
commit ef5658c1b0
1 changed files with 65 additions and 59 deletions

56
btrbk
View File

@ -865,7 +865,7 @@ MAIN:
{ {
my $svol = $config_subvol->{svol} || die; my $svol = $config_subvol->{svol} || die;
unless(subvol($sroot, $svol)) { unless(subvol($sroot, $svol)) {
ERROR "subvolume \"$svol\" not present in btrfs subvolume list for \"$sroot\", skipping"; WARN "Subvolume \"$svol\" not present in btrfs subvolume list for \"$sroot\", skipping section";
$config_subvol->{ABORTED} = 1; $config_subvol->{ABORTED} = 1;
next; next;
} }
@ -874,7 +874,7 @@ MAIN:
my $droot = $config_target->{droot} || die; my $droot = $config_target->{droot} || die;
$vol_info{$droot} //= btr_subtree($droot); $vol_info{$droot} //= btr_subtree($droot);
unless($vol_info{$droot}) { unless($vol_info{$droot}) {
ERROR "Failed to read btrfs subvolume list for \"$droot\", skipping"; WARN "Failed to read btrfs subvolume list for \"$droot\", skipping target";
$config_target->{ABORTED} = 1; $config_target->{ABORTED} = 1;
next; next;
} }
@ -936,19 +936,14 @@ MAIN:
# #
my $timestamp = sprintf("%04d%02d%02d", @today); my $timestamp = sprintf("%04d%02d%02d", @today);
my %snapshot_cache; my %snapshot_cache;
foreach my $job (@$jobs) foreach my $config_vol (@{$config->{VOLUME}})
{ {
my $sroot = $job->{sroot} || die; next if($config_vol->{ABORTED});
my $svol = $job->{svol} || die; my $sroot = $config_vol->{sroot} || die;
my $droot = $job->{droot} || die; foreach my $config_subvol (@{$config_vol->{SUBVOLUME}})
my $type = $job->{type} || die; {
next if($config_subvol->{ABORTED});
unless(subvol($sroot, $svol)) { my $svol = $config_subvol->{svol} || die;
WARN "Source subvolume not found, aborting job: $sroot/$svol";
$job->{ABORTED} = 1;
next;
}
my $snapshot; my $snapshot;
my $snapshot_name; my $snapshot_name;
if($snapshot_cache{"$sroot/$svol"}) if($snapshot_cache{"$sroot/$svol"})
@ -970,33 +965,44 @@ MAIN:
$snapshot_name = "$svol$postfix"; $snapshot_name = "$svol$postfix";
} }
my $create_snapshot = config_key($config_subvol, "snapshot_create_always"); # TODO: check for "yes", ...
foreach my $config_target (@{$config_subvol->{TARGET}})
{
next if($config_target->{ABORTED});
my $droot = $config_target->{droot} || die;
if(subvol($droot, $snapshot_name)) { if(subvol($droot, $snapshot_name)) {
# TODO: this seems not right here: maybe just skip this check, and panic later # TODO: this seems not right here: maybe just skip this check, and panic later
WARN "Snapshot already exists at destination, aborting job: $droot/$snapshot_name"; WARN "Snapshot already exists at destination, skipping target: $droot/$snapshot_name";
$job->{ABORTED} = 1; $config_target->{ABORTED} = 1;
next; next;
} }
if($config_target->{target_type} eq "send-receive") {
$create_snapshot = 1;
}
}
unless($create_snapshot) {
WARN "No snapshots to be created, skipping subvolume: $sroot/$svol";
$config_subvol->{ABORTED} = 1;
next;
}
create_snapdir($sroot, $svol, $snapdir); create_snapdir($sroot, $svol, $snapdir);
# make snapshot of svol, if not already created by another job # make snapshot of svol, if not already created by another job
unless($snapshot_cache{"$sroot/$svol"}) unless($snapshot_cache{"$sroot/$svol"})
{ {
DEBUG "***";
DEBUG "*** snapshot";
DEBUG "*** source: $sroot/$svol";
DEBUG "*** dest : $snapshot";
DEBUG "***";
INFO "Creating subvolume snapshot for: $sroot/$svol"; INFO "Creating subvolume snapshot for: $sroot/$svol";
unless(btrfs_snapshot("$sroot/$svol", $snapshot)) { unless(btrfs_snapshot("$sroot/$svol", $snapshot)) {
WARN "Failed to create snapshot, aborting job: $sroot/$svol"; WARN "Failed to create snapshot, skipping subvolume: $sroot/$svol";
$job->{ABORTED} = 1; $config_subvol->{ABORTED} = 1;
} }
$snapshot_cache{"$sroot/$svol"} = { name => $snapshot_name, $snapshot_cache{"$sroot/$svol"} = { name => $snapshot_name,
file => $snapshot }; file => $snapshot };
} }
$job->{snapshot} = $snapshot; $config_subvol->{snapshot} = $snapshot;
$job->{snapshot_name} = $snapshot_name; $config_subvol->{snapshot_name} = $snapshot_name;
}
} }
# #