From e387dea986f94cbd3ec5ba90c44e1f489f901620 Mon Sep 17 00:00:00 2001 From: Lubos Kolouch Date: Sat, 3 Oct 2020 13:39:36 +0200 Subject: [PATCH] Proposed implementation for https://github.com/digint/btrbk/issues/304 --- btrbk | 7 +++++++ btrbk.conf.example | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/btrbk b/btrbk index d2d595f..7a52af6 100755 --- a/btrbk +++ b/btrbk @@ -80,6 +80,7 @@ my %config_options = ( timestamp_format => { default => "short", accept => [ "short", "long", "long-iso" ], context => [ "global", "volume", "subvolume" ] }, snapshot_dir => { default => undef, accept_file => { relative => 1 }, context => [ "global", "volume", "subvolume" ] }, snapshot_name => { c_default => 1, accept_file => { name_only => 1 }, context => [ "subvolume" ], deny_glob_context => 1 }, # NOTE: defaults to the subvolume name (hardcoded) + snapshot_name_prefix_fullpath => { default => "no", accept => ["yes", "no" ] }, snapshot_create => { default => "always", accept => [ "no", "always", "ondemand", "onchange" ], context => [ "global", "volume", "subvolume" ] }, incremental => { default => "yes", accept => [ "yes", "no", "strict" ] }, incremental_clones => { default => 0, accept_numeric => 1 }, @@ -6612,6 +6613,12 @@ MAIN: my $postfix_counter = $lookup[0] // -1; $postfix_counter++; my $snapshot_name = $snapshot_basename . '.' . $timestamp . ($postfix_counter ? "_$postfix_counter" : ""); + if ( config_key($svol, "snapshot_name_prefix_fullpath") eq "yes" ) { + my $sanitized_snaproot = $snaproot->{PATH}; + # replace all /s with _ in the root + $sanitized_snaproot =~ s/\//_/msxg; + $snapshot_name = $sanitized_snaproot.$snapshot_name; + } if(@unconfirmed_target_name) { INFO "Assuming non-present subvolume \"$snapshot_name\" in skipped targets: " . join(", ", map { "\"$_->{PRINT}\"" } @unconfirmed_target_name); diff --git a/btrbk.conf.example b/btrbk.conf.example index 46a94e5..97df2f2 100644 --- a/btrbk.conf.example +++ b/btrbk.conf.example @@ -87,6 +87,10 @@ snapshot_dir _btrbk_snap # disk when btrbk terminates. #btrfs_commit_delete no +# Include full path in the snapshot name to distinguish between snapshots +# with the same name, but different roots +# snapshot_name_prefix_fullpath yes + # # Volume section: "volume "