digint / digint/btrbk

`btrfs snapshot` does not create local snapshots when backup target is unavailable.

Open
#649 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Perl
Stars
2.1k
Forks
139
PR merge metrics
No merged PRs in 30d

Description

Ahoj,

I use btrbk version 0.32.6 on Artix GNU/Linux, btrbk installed from distribution repository.

I want to use it for both snapshotting (with a cron job, target is usually not available, and also want to integrate it with a hook for the package manager to create snapshots after installation/ removal of packages) and backup (manually started when I make the target available), over the same config file.

But `btrbk snapshot` does _not_ create snapshots when the target is unavailable.

I have seen [this discussion](https://github.com/digint/btrbk/issues/184): If I understand [the essence](https://github.com/digint/btrbk/issues/184#issuecomment-381555087) correctly, `btrbk snapshot` should _create_ snapshots even when target is unavailable, just not delete any snapshot.

My config file is:
```conf
### global section ###

## Basic options

snapshot_dir .snapshots/btrbk
snapshot_create ondemand
incremental yes
timestamp_format long

## Grouping options

## Retention policy options
preserve_day_of_week monday
snapshot_preserve_min 1d
snapshot_preserve no
target_preserve_min latest
target_preserve 23h 6d 3w 11m *y
archive_preserve_min latest
archive_preserve no

## SSH options

ssh_identity /home/username/.ssh/server-username
ssh_user username
ssh_compression yes
ssh_cipher_spec default

## Data stream options

stream_compress no
stream_buffer 256m

## System options

transaction_log /var/log/btrbk.log
transaction_syslog no
lockfile /var/lock/btrbk.lock
backend btrfs-progs

## btrfs specific options

btrfs_commit_delete no

### volume section(s), subvolume section(s) and target section(s) ###

volume /mnt/btrfs_root
subvolume '@'
target send-receive /mnt/backuphdd/backup/username-winmax2/btrbk/
subvolume '@home_username'
target send-receive /mnt/backuphdd/backup/username-winmax2/btrbk/
subvolume '@root'
target send-receive /mnt/backuphdd/backup/username-winmax2/btrbk/
subvolume '@var'
target send-receive /mnt/backuphdd/backup/username-winmax2/btrbk/
subvolume '@var_log'
target send-receive /mnt/backuphdd/backup/username-winmax2/btrbk/
subvolume '@var_spool'
target send-receive /mnt/backuphdd/backup/username-winmax2/btrbk/
```

Here what happens:

1. `/mnt/backuphdd` unmounted.

1. `ls -1F /mnt/btrfs_root/.snapshots/btrbk/`:
```ls
'@.20260626T1842'/
'@.20260630T1744'/
'@.20260630T1744_1'/
'@home_username.20260626T1842'/
'@home_username.20260630T1744'/
'@home_username.20260630T1744_1'/
'@root.20260626T1842'/
'@root.20260630T1744'/
'@root.20260630T1744_1'/
'@var.20260626T1842'/
'@var.20260630T1744'/
'@var.20260630T1744_1'/
'@var_log.20260626T1842'/
'@var_log.20260630T1744'/
'@var_log.20260630T1744_1'/
'@var_spool.20260626T1842'/
'@var_spool.20260630T1744'/
'@var_spool.20260630T1744_1'/
```
2. `btrbk -v snapshot`:
```btrbk
btrbk command line client, version 0.32.6 (Tue Jun 30 17:57:26 2026)
Using configuration: /etc/btrbk/btrbk.conf
WARNING: Skipping target "/mnt/backuphdd/backup/username-winmax2/btrbk": Failed to fetch subvolume detail
WARNING: ... Command execution failed (exitcode=1)
WARNING: ... sh: readlink -v -e '/mnt/backuphdd/backup/username-winmax2/btrbk'
WARNING: ... readlink: /mnt/backuphdd/backup/username-winmax2/btrbk: No such file or directory
WARNING: Skipping target "/mnt/backuphdd/backup/username-winmax2/btrbk": Failed to fetch subvolume detail
WARNING: Skipping target "/mnt/backuphdd/backup/username-winmax2/btrbk": Failed to fetch subvolume detail
WARNING: Skipping target "/mnt/backuphdd/backup/username-winmax2/btrbk": Failed to fetch subvolume detail
WARNING: Skipping target "/mnt/backuphdd/backup/username-winmax2/btrbk": Failed to fetch subvolume detail
WARNING: Skipping target "/mnt/backuphdd/backup/username-winmax2/btrbk": Failed to fetch subvolume detail
Using transaction log: /var/log/btrbk.log
Snapshot creation skipped: snapshot_create=ondemand, and no target is present for: /mnt/btrfs_root/@
Snapshot creation skipped: snapshot_create=ondemand, and no target is present for: /mnt/btrfs_root/@home_username
Snapshot creation skipped: snapshot_create=ondemand, and no target is present for: /mnt/btrfs_root/@root
Snapshot creation skipped: snapshot_create=ondemand, and no target is present for: /mnt/btrfs_root/@var
Snapshot creation skipped: snapshot_create=ondemand, and no target is present for: /mnt/btrfs_root/@var_log
Snapshot creation skipped: snapshot_create=ondemand, and no target is present for: /mnt/btrfs_root/@var_spool
Skipping backup creation (btrbk snapshot)
WARNING: Skipping cleanup of snapshots for subvolume "/mnt/btrfs_root/@", as at least one target aborted earlier
WARNING: Skipping cleanup of snapshots for subvolume "/mnt/btrfs_root/@home_username", as at least one target aborted earlier
WARNING: Skipping cleanup of snapshots for subvolume "/mnt/btrfs_root/@root", as at least one target aborted earlier
WARNING: Skipping cleanup of snapshots for subvolume "/mnt/btrfs_root/@var", as at least one target aborted earlier
WARNING: Skipping cleanup of snapshots for subvolume "/mnt/btrfs_root/@var_log", as at least one target aborted earlier
WARNING: Skipping cleanup of snapshots for subvolume "/mnt/btrfs_root/@var_spool", as at least one target aborted earlier
Completed within: 0s (Tue Jun 30 17:57:26 2026)
--------------------------------------------------------------------------------
Backup Summary (btrbk command line client, version 0.32.6)

Date: Tue Jun 30 17:57:26 2026
Config: /etc/btrbk/btrbk.conf

Options:
snapshot: No backups created
snapshot: Preserved all backups

Legend:
=== up-to-date subvolume (source snapshot)
+++ created subvolume (source snapshot)
--- deleted subvolume
*** received subvolume (non-incremental)
>>> received subvolume (incremental)
--------------------------------------------------------------------------------
/mnt/btrfs_root/@
!!! Target "/mnt/backuphdd/backup/username-winmax2/btrbk" aborted: Failed to fetch subvolume detail

/mnt/btrfs_root/@home_username
!!! Target "/mnt/backuphdd/backup/username-winmax2/btrbk" aborted: Failed to fetch subvolume detail

/mnt/btrfs_root/@root
!!! Target "/mnt/backuphdd/backup/username-winmax2/btrbk" aborted: Failed to fetch subvolume detail

/mnt/btrfs_root/@var
!!! Target "/mnt/backuphdd/backup/username-winmax2/btrbk" aborted: Failed to fetch subvolume detail

/mnt/btrfs_root/@var_log
!!! Target "/mnt/backuphdd/backup/username-winmax2/btrbk" aborted: Failed to fetch subvolume detail

/mnt/btrfs_root/@var_spool
!!! Target "/mnt/backuphdd/backup/username-winmax2/btrbk" aborted: Failed to fetch subvolume detail

NOTE: Some errors occurred, which may result in missing backups!
Please check warning and error messages above.
```
3. `ls -1F /mnt/btrfs_root/.snapshots/btrbk/`:
```ls
'@.20260626T1842'/
'@.20260630T1744'/
'@.20260630T1744_1'/
'@home_username.20260626T1842'/
'@home_username.20260630T1744'/
'@home_username.20260630T1744_1'/
'@root.20260626T1842'/
'@root.20260630T1744'/
'@root.20260630T1744_1'/
'@var.20260626T1842'/
'@var.20260630T1744'/
'@var.20260630T1744_1'/
'@var_log.20260626T1842'/
'@var_log.20260630T1744'/
'@var_log.20260630T1744_1'/
'@var_spool.20260626T1842'/
'@var_spool.20260630T1744'/
'@var_spool.20260630T1744_1'/
```
*(No snapshot created.)*

2. Now mount `/mnt/backuphdd`.

4. `btrbk -v snapshot`:
```btrbk
btrbk command line client, version 0.32.6 (Tue Jun 30 18:00:03 2026)
Using configuration: /etc/btrbk/btrbk.conf
Using transaction log: /var/log/btrbk.log
Creating subvolume snapshot for: /mnt/btrfs_root/@
[snapshot] source: /mnt/btrfs_root/@
[snapshot] target: /mnt/btrfs_root/.snapshots/btrbk/@.20260630T1800
Creating subvolume snapshot for: /mnt/btrfs_root/@home_username
[snapshot] source: /mnt/btrfs_root/@home_username
[snapshot] target: /mnt/btrfs_root/.snapshots/btrbk/@home_username.20260630T1800
Creating subvolume snapshot for: /mnt/btrfs_root/@root
[snapshot] source: /mnt/btrfs_root/@root
[snapshot] target: /mnt/btrfs_root/.snapshots/btrbk/@root.20260630T1800
Creating subvolume snapshot for: /mnt/btrfs_root/@var
[snapshot] source: /mnt/btrfs_root/@var
[snapshot] target: /mnt/btrfs_root/.snapshots/btrbk/@var.20260630T1800
Creating subvolume snapshot for: /mnt/btrfs_root/@var_log
[snapshot] source: /mnt/btrfs_root/@var_log
[snapshot] target: /mnt/btrfs_root/.snapshots/btrbk/@var_log.20260630T1800
Creating subvolume snapshot for: /mnt/btrfs_root/@var_spool
[snapshot] source: /mnt/btrfs_root/@var_spool
[snapshot] target: /mnt/btrfs_root/.snapshots/btrbk/@var_spool.20260630T1800
Skipping backup creation (btrbk snapshot)
Preserving all backups
Cleaning snapshots: /mnt/btrfs_root/.snapshots/btrbk/@.*
Deleted 0 subvolumes in: /mnt/btrfs_root/.snapshots/btrbk/@.*
Preserving all backups
Cleaning snapshots: /mnt/btrfs_root/.snapshots/btrbk/@home_username.*
Deleted 0 subvolumes in: /mnt/btrfs_root/.snapshots/btrbk/@home_username.*
Preserving all backups
Cleaning snapshots: /mnt/btrfs_root/.snapshots/btrbk/@root.*
Deleted 0 subvolumes in: /mnt/btrfs_root/.snapshots/btrbk/@root.*
Preserving all backups
Cleaning snapshots: /mnt/btrfs_root/.snapshots/btrbk/@var.*
Deleted 0 subvolumes in: /mnt/btrfs_root/.snapshots/btrbk/@var.*
Preserving all backups
Cleaning snapshots: /mnt/btrfs_root/.snapshots/btrbk/@var_log.*
Deleted 0 subvolumes in: /mnt/btrfs_root/.snapshots/btrbk/@var_log.*
Preserving all backups
Cleaning snapshots: /mnt/btrfs_root/.snapshots/btrbk/@var_spool.*
Deleted 0 subvolumes in: /mnt/btrfs_root/.snapshots/btrbk/@var_spool.*
Completed within: 0s (Tue Jun 30 18:00:03 2026)
--------------------------------------------------------------------------------
Backup Summary (btrbk command line client, version 0.32.6)

Date: Tue Jun 30 18:00:03 2026
Config: /etc/btrbk/btrbk.conf

Options:
snapshot: No backups created
snapshot: Preserved all backups

Legend:
=== up-to-date subvolume (source snapshot)
+++ created subvolume (source snapshot)
--- deleted subvolume
*** received subvolume (non-incremental)
>>> received subvolume (incremental)
--------------------------------------------------------------------------------
/mnt/btrfs_root/@
+++ /mnt/btrfs_root/.snapshots/btrbk/@.20260630T1800

/mnt/btrfs_root/@home_username
+++ /mnt/btrfs_root/.snapshots/btrbk/@home_username.20260630T1800

/mnt/btrfs_root/@root
+++ /mnt/btrfs_root/.snapshots/btrbk/@root.20260630T1800

/mnt/btrfs_root/@var
+++ /mnt/btrfs_root/.snapshots/btrbk/@var.20260630T1800

/mnt/btrfs_root/@var_log
+++ /mnt/btrfs_root/.snapshots/btrbk/@var_log.20260630T1800

/mnt/btrfs_root/@var_spool
+++ /mnt/btrfs_root/.snapshots/btrbk/@var_spool.20260630T1800
```
5. `ls -1F /mnt/btrfs_root/.snapshots/btrbk/`:
```ls
'@.20260626T1842'/
'@.20260630T1744'/
'@.20260630T1744_1'/
'@.20260630T1800'/
'@home_username.20260626T1842'/
'@home_username.20260630T1744'/
'@home_username.20260630T1744_1'/
'@home_username.20260630T1800'/
'@root.20260626T1842'/
'@root.20260630T1744'/
'@root.20260630T1744_1'/
'@root.20260630T1800'/
'@var.20260626T1842'/
'@var.20260630T1744'/
'@var.20260630T1744_1'/
'@var.20260630T1800'/
'@var_log.20260626T1842'/
'@var_log.20260630T1744'/
'@var_log.20260630T1744_1'/
'@var_log.20260630T1800'/
'@var_spool.20260626T1842'/
'@var_spool.20260630T1744'/
'@var_spool.20260630T1744_1'/
'@var_spool.20260630T1800'/
```
*(Snapshot created.)*

Regards!

Contributor guide

No contributing guide indexed for this repository

Research direction

Reproduce the behavior with the shown configuration, first with /mnt/backuphdd unmounted and then mounted, using `btrbk -v snapshot`. Trace the `snapshot_create=ondemand` handling when the target is unavailable; done means local snapshots are created without a target, while cleanup is not performed after the target failure.

Written by the indexing model from the issue text.

Assessment

Tech stack
linux, perl
Domain
cli, operating-systems
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.