Timeshift auto-snapshot script which runs before any apt update|install|remove
command using a DPkg::Pre-Invoke
hook in APT. Works best in BTRFS
mode, but RSYNC
is also supported (might be slow though).
/boot
and /boot/efi
to /boot.backup
before the call to Timeshift for more flexible restore options.sudo timeshift-autosnap-apt
.sudo SKIP_AUTOSNAP= apt upgrade
)sudo apt install git make
sudo apt install timeshift
Open Timeshift and configure it either using btrfs or rsync. I recommend using btrfs as a filesystem for this, see my btrfs installation guides for Pop!_OS, Ubuntu, and Manjaro.
Clone this repository and install the script and configuration file with make:
git clone https://github.com/wmutschl/timeshift-autosnap-apt.git /home/$USER/timeshift-autosnap-apt
cd /home/$USER/timeshift-autosnap-apt
sudo make install
After this, make changes to the configuration file:
sudo nano /etc/timeshift-autosnap-apt.conf
For example, if you don't have a dedicated /boot
partition, then you should set snapshotBoot=false
. This will still make a copy of /boot/efi
.
grub-btrfs
grub-btrfs is a great package which will include all btrfs snapshots into the Grub menu. Clone and install it:
git clone https://github.com/Antynea/grub-btrfs.git /home/$USER/grub-btrfs
cd /home/$USER/grub-btrfs
sudo make install
By default the snapshots are displayed as "Arch Linux Snapshots", you can adapt this in /etc/default/grub-btrfs/config
.
The configuration file is located in /etc/timeshift-autosnap-apt.conf
. You can set the following options:
snapshotBoot
: If set to true /boot folder will be cloned with rsync into /boot.backup before the call to Timeshift. Note that this will not include the /boot/efi folder. Default: truesnapshotEFI
: If set to true /boot/efi folder will be cloned with rsync into /boot.backup/efi before the call to Timeshift. Default: trueskipAutosnap
: If set to true script won't be executed. Default: false.deleteSnapshots
: If set to false old snapshots won't be deleted. Default: truemaxSnapshots
: Defines maximum number of old snapshots to keep. Default: 3updateGrub
: If set to false GRUB entries won't be generated. Only if grub-btrfs is installed. Default: truesnapshotDescription
Defines string used to distinguish snapshots created using timeshift-autosnap-apt. Default: {timeshift-autosnap-apt} {created before call to APT}To test the functionality, simply run
sudo timeshift-autosnap-apt
Or try (re)installing some package maxSnapshots
number of times, e.g.
sudo apt install --reinstall rolldice
sudo apt install --reinstall rolldice
sudo apt install --reinstall rolldice
You should see output for BTRFS similar to
# Using system disk as snapshot device for creating snapshots in BTRFS mode
#
# /dev/dm-1 is mounted at: /run/timeshift/backup, options: rw,relatime,compress=zstd:3,ssd,space_cache,commit=120,subvolid=5,subvol=/
#
# Creating new backup...(BTRFS)
# Saving to device: /dev/dm-1, mounted at path: /run/timeshift/backup
# Created directory: /run/timeshift/backup/timeshift-btrfs/snapshots/2020-04-29_09-46-30
# Created subvolume snapshot: /run/timeshift/backup/timeshift-btrfs/snapshots/2020-04-29_09-46-30/@
# Created subvolume snapshot: /run/timeshift/backup/timeshift-btrfs/snapshots/2020-04-29_09-46-30/@home
# Created control file: /run/timeshift/backup/timeshift-btrfs/snapshots/2020-04-29_09-46-30/info.json
# BTRFS Snapshot saved successfully (0s)
# Tagged snapshot '2020-04-29_09-46-30': ondemand
# --------------------------------------------------------------------------
or for RSYNC similar to
# /dev/vdb1 is mounted at: /run/timeshift/backup, options: rw,relatime
# ------------------------------------------------------------------------------
# Creating new snapshot...(RSYNC)
# Saving to device: /dev/vdb1, mounted at path: /run/timeshift/backup
# Synching files with rsync...
# Created control file: /run/timeshift/backup/timeshift/snapshots/2020-04-29_10-25-35/info.json
# RSYNC Snapshot saved successfully (6s)
# Tagged snapshot '2020-04-29_10-25-35': ondemand
------------------------------------------------------------------------------
Open timeshift and see whether there are maxSnapshots
packages:
Close timeshift and reinstall the package another time and you should see that the first package is now deleted:
sudo apt install --reinstall rolldice
#
# Using system disk as snapshot device for creating snapshots in BTRFS mode
# /dev/dm-1 is mounted at: /run/timeshift/backup, options: rw,relatime,compress=zstd:3,ssd,space_cache,commit=120,subvolid=5,subvol=/
# Creating new backup...(BTRFS)
# Saving to device: /dev/dm-1, mounted at path: /run/timeshift/backup
# Created directory: /run/timeshift/backup/timeshift-btrfs/snapshots/2020-04-29_09-53-25
# Created subvolume snapshot: /run/timeshift/backup/timeshift-btrfs/snapshots/2020-04-29_09-53-25/@
# Created subvolume snapshot: /run/timeshift/backup/timeshift-btrfs/snapshots/2020-04-29_09-53-25/@home
# Created control file: /run/timeshift/backup/timeshift-btrfs/snapshots/2020-04-29_09-53-25/info.json
# BTRFS Snapshot saved successfully (0s)
# Tagged snapshot '2020-04-29_09-53-25': ondemand
# ------------------------------------------------------------------------------
#
# /dev/dm-1 is mounted at: /run/timeshift/backup, options: rw,relatime,compress=zstd:3,ssd,space_cache,commit=120,subvolid=5,subvol=/
#
# ------------------------------------------------------------------------------
# Removing snapshot: 2020-04-29_09-46-30
# Deleting subvolume: @home (Id:662)
# Deleted subvolume: @home (Id:662)
#
# Destroying qgroup: 0/662
# Destroyed qgroup: 0/662
#
# Deleting subvolume: @ (Id:661)
# Deleted subvolume: @ (Id:661)
#
# Destroying qgroup: 0/661
# Destroyed qgroup: 0/661
#
# Deleted directory: /run/timeshift/backup/timeshift-btrfs/snapshots/2020-04-29_09-46-30
# Removed snapshot: 2020-04-29_09-46-30
# ------------------------------------------------------------------------------
or for RSYNC:
# /dev/vdb1 is mounted at: /run/timeshift/backup, options: rw,relatime
#
# ------------------------------------------------------------------------------
# Creating new snapshot...(RSYNC)
# Saving to device: /dev/vdb1, mounted at path: /run/timeshift/backup
# Linking from snapshot: 2020-04-29_10-25-15
# Synching files with rsync...
# Created control file: /run/timeshift/backup/timeshift/snapshots/2020-04-29_10-25-35/info.json
# RSYNC Snapshot saved successfully (6s)
# Tagged snapshot '2020-04-29_10-25-35': ondemand
# ------------------------------------------------------------------------------
#
# /dev/vdb1 is mounted at: /run/timeshift/backup, options: rw,relatime
#
# ------------------------------------------------------------------------------
# Removing '2020-04-29_10-24-35'...
# Removed '2020-04-29_10-24-35'
# ------------------------------------------------------------------------------
cd /home/$USER/timeshift-autosnap-apt
sudo make uninstall
All new ideas and contributors are much appreciated and welcome, just open an issue for that!