Download Latest Version DistroClone Backup v1.2 source code.tar.gz (129.6 kB)
Email in envelope

Get an email when there's a new version of distroClone-backup

Home / v1.2
Name Modified Size InfoDownloads / Week
Parent folder
distroClone-backup_1.2_all.deb 2026-03-28 207.4 kB
DistroClone Backup v1.2 source code.tar.gz 2026-03-27 129.6 kB
DistroClone Backup v1.2 source code.zip 2026-03-27 129.7 kB
README.md 2026-03-27 7.5 kB
Totals: 4 Items   474.2 kB 5

Changelog

All notable changes to DistroClone Backup and Restore are documented in this file.

Format follows Keep a Changelog (https://keepachangelog.com/en/1.0.0/). Versioning follows Semantic Versioning (https://semver.org/).


Version 1.2 — 2026-03-28 (updated with bug fixes)

Fixed

Cron mode — wrong cache path and missing btrfs snapshot support (--incremental-silent)

    CACHE_BASE was hardcoded to /mnt/<distro>_live/.rootfs_cache, ignoring both
    the directory configured via Settings and the correct _backup suffix.
    The cron now reads ~/.config/distroclone-backup/settings.conf from the first
    real user (uid 1000–65533) who has a configuration file, then derives
    CACHE_BASE_DIR, MAX_SNAPSHOTS, and all dependent paths from it.

    Cron mode never called is_btrfs(), create_snapshot(), or prune_snapshots().
    Automatic nightly backups on btrfs destinations now create a read-only snapshot
    before rsync and prune snapshots beyond MAX_SNAPSHOTS, exactly as the GUI does.

    If the snapshot step fails the rsync still proceeds so the backup is never skipped.

    Claude-related directories added to the cron rsync exclusion list, consistent
    with the GUI backup path:
      /home/*/.config/Claude, /home/*/.claude, /home/*/.claude.json,
      /home/*/.cache/claude-desktop-debian, and the /root equivalents.

Delete Cache — snapshot subvolumes left orphaned on btrfs

    do_delete_cache called rm -rf on $ROOTFS_CACHE and $CACHE_META but never
    touched $SNAPSHOTS_DIR. On btrfs, rm -rf cannot remove subvolumes and silently
    fails, leaving read-only snapshots occupying disk space with no way to remove
    them without btrfs subvolume delete.

    The function now iterates over every @* snapshot in $SNAPSHOTS_DIR, deletes
    each with btrfs subvolume delete (falling back to rm -rf on non-btrfs), removes
    the .meta sidecar, then removes $SNAPSHOTS_DIR itself. The main cache subvolume
    is also deleted via btrfs subvolume delete when applicable.

Version 1.2 — 2026-03-27

Added

Btrfs snapshot versioning

New is_btrfs() function — detects whether the cache destination resides on a btrfs
filesystem.

New init_btrfs_subvolume() — initialises .rootfs_cache as a btrfs subvolume on the
first full backup. Warns if an existing non-subvolume cache is found.

New create_snapshot() — creates a read-only btrfs snapshot of the cache before each
backup run, named @YYYY-MM-DD_HH:MM. Writes a .meta sidecar with date, distro,
kernel, and size.

New list_snapshots() — enumerates available snapshots sorted oldest to newest.

New prune_snapshots() — automatically deletes snapshots beyond the MAX_SNAPSHOTS
retention limit after each backup. On non-btrfs destinations the legacy mkdir path
is preserved.

Restore from Snapshot (do_restore_snapshot)

New GUI dialog lists all available snapshots in a YAD table with columns:
name, date, distro, size.

Confirmation dialog shows snapshot name and protected paths before proceeding.

Restore uses rsync with the same exclusion rules as the standard restore:
/home, /root, /boot/efi, virtual filesystems, and snap directories are always
protected.

The Restore from Snapshot button appears in the main dashboard only when the
cache is on btrfs and at least one snapshot exists.

Settings — advanced options (step 2 dialog)

Settings redesigned as a two-step flow:
  Step 1: directory selection (unchanged behaviour).
  Step 2: new advanced options dialog with a numeric spinner for
          Max snapshots to keep (0 = disabled, default 3, range 0 to 20).

MAX_SNAPSHOTS variable persisted to the configuration file alongside CACHE_BASE_DIR.

SNAPSHOTS_DIR variable (${CACHE_BASE}/.snapshots) derived automatically from the
configured cache base.

Main dashboard

New Versioning status line:

  - "Versioning active (btrfs)" with snapshot count when on btrfs.
  - "Versioning not available (non-btrfs)" on standard filesystems.

Window height increased from 500 to 540 px to accommodate the new status line.

Window title updated to v1.2.

Multilanguage strings — all 5 languages (EN, IT, DE, FR, ES)

New strings added in every supported language:

S_SETTINGS_MAX_SNAPS     — Label for the max-snapshots spinner
S_BTRFS_AVAILABLE        — Dashboard status: btrfs versioning active
S_BTRFS_NOT_AVAILABLE    — Dashboard status: non-btrfs destination
S_BTRFS_NOT_SUBVOL_WARN  — Warning when existing cache is not a btrfs subvolume
S_SNAPSHOTS_NONE         — "No snapshots" label
S_SNAPSHOTS_COUNT        — "N snapshots available" label
S_BTN_RESTORE_SNAP       — Restore from Snapshot button label
S_SNAP_CREATING          — Log line: snapshot creation in progress
S_SNAP_CREATED           — Log line: snapshot created successfully
S_SNAP_PRUNING           — Log line: pruning old snapshots
S_SNAP_SELECT_TITLE      — Snapshot selector dialog title
S_SNAP_SELECT_TEXT       — Snapshot selector dialog header text
S_SNAP_NO_SNAPS          — Warning when no snapshots are available
S_SNAP_ERR_TITLE         — Snapshot error dialog title
S_SNAP_ERR_TEXT          — Snapshot error dialog body

Package

Recommends field in DEBIAN/control extended with btrfs-progs.

postinst sudoers block adds passwordless rules for /usr/bin/btrfs and /sbin/btrfs
for the sudo group.

Changed

Settings dialog step 1 — removed --image and --image-on-top from the
directory-selection YAD call; branding image moved to step 2 only.

Full backup flow — btrfs path branches on is_btrfs(): subvolume init, snapshot,
and prune before rsync; mkdir -p fallback preserved for non-btrfs.

Configuration file — now stores two keys (CACHE_BASE_DIR, MAX_SNAPSHOTS)
instead of one.

Main dashboard layout — button row extended with conditional Restore from Snapshot
entry (action code 45).

Version 1.1 — 2025

First public release.

Added

Full rootfs backup via rsync with real-time log window.

Incremental backup — transfers only files modified since the last full backup.

Safe system restore — rsync from cache to /, with hard exclusions on /home,
/root, /boot/efi, virtual filesystems, and snap directories.

Graphical cron scheduler (daily, weekly, or monthly) with configurable hour
and optional desktop notification.

Silent cron mode: distroClone-backup --incremental-silent

Operations log at /var/log/distroclone-backup.log.

Cache stored under <cache-dir>/<distro>_live/.rootfs_cache (default base: /mnt).

YAD-based dashboard showing distro, kernel, cache status, and active cron schedule.

Multilanguage interface — auto-detected from LANG:
English, Italiano, Deutsch, Francais, Espanol.

Desktop menu entry (distroclone-backup.desktop, System category).

Application icons at 48x48, 128x128, 256x256 px.

Package dependencies: yad, rsync, imagemagick.

Links

Maintained by Franco Conidi aka edmond — GPL-3.0-or-later

Source: README.md, updated 2026-03-27