Snapshot manager for various filesystems
Project description
AnySnap - Snapshot manager for various filesystems
Description
Usage
Creating a snapshot and deleting the excess ones is as simple as
anysnap /path/to/a/supported/target
Without more arguments, it will create a new snapshot called
target@anysnap-TIMESTAMP and remove older snapshots (only those created by
anysnap, hence the "anysnap" in the snapshot name).
The two most important arguments are
--keep: define the number of snapshots to keep at all time (default value 10, 0 indicates to keep everything)--label: change the name of the snapshot (default valueanysnap), only snapshots with this label are taken into account for removal
A more interesting example is:
anysnap --label before-upgrade --keep 1 /usr
apt/yum/pacman/whatever upgrade
anysnap --label after-upgrade --keep 1 /usr
Assuming /usr is an admissible target, it will create two new snapshots and remove all other (since keep is 1). The new snapshots will be called:
usr@before-upgrade-TIMESTAMP1usr@after-upgrade-TIMESTAMP2
See the section on supported filesystem for details about the possible targets and the meaning of other arguments.
The choice of keeping or deleting a snapshot is purely made upon the number of
snapshot already existing, the timestamp is only here to sort the snapshots and
to inform the user and is not interpreted by anysnap.
Periodic snapshots
A typical usecase is to make periodic snapshots of a filesystem (here a ZFS
one): every day, every week, every month and every year. The --label argument
is used to differentiate between the various periods:
0 * * * * anysnap --keep 36 --label hourly home/someuser
30 20 * * * anysnap --keep 14 --label daily home/someuser
0 0 * * 1 anysnap --keep 6 --label weekly home/someuser
0 16 1 * * anysnap --keep 6 --label monthly home/someuser
Installation
Use your preferred Python package manager. For example:
pipx install anysnap
or
uv tool install anysnap
You will also need the userspace tools for the filesystems you want to use.
Supported filesystems and their specificities
ZFS
The userspace tools are needed (package zfsutils-linux in Debian). For a
precise semantic of snapshots with ZFS, see the relevant manpages (in particular
zfsconcepts(7)).
Target
With the ZFS commands, it's a filesystem which is snapshotted and not a path. For example, if your layout is the following
$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
rpool/home 337G 338G 26K /home
rpool/home/user 337G 338G 184G /home/user
then the target will be rpool/home/user (and not /home/user).
Snapshot location
Snapshots does not live in the same namespace as the filesystems, and are at a
fixed location. Therefor the --snapdir option is meaningless for ZFS.
Recursion
Snapshots can be recursive and therefore the --recursive option is supported
for ZFS.
BTRFS
The btrfs userspace tools are needed (package btrfs-progs in Debian). For a
precise semantic of snapshots with BTRFS, see the project website (in particular
the page on
subvolumes).
Target
A target can be the path of any subvolume inside a BTRFS filesystem (including the root subvolume).
Snapshot location
Snapshot can be located anywhere inside the filesystem, the --snapdir argument
is a path relative to the target and set the precise location. Beware of not
build a path outside the filesystem. For example, assuming we have following
layout:
root:~# btrfs subvolume list /home
ID 258 gen 53189 top level 5 path user
With the default --snapdir value (../), we get the snapshot outside the
/home/user subvolume:
root:~# btrfs subvolume list /home
ID 258 gen 53189 top level 5 path user
ID 258 gen 53189 top level 5 path user@anysnap-2024-11-29T12:00:00
Beware that this setup does not allow to snapshot the root directory, since it would point outside the filesystem.
With --snapdir ./, we get the snapshot inside:
root:~# btrfs subvolume list /home
ID 258 gen 53189 top level 5 path user
ID 258 gen 53189 top level 5 path user/user@anysnap-2024-11-29T12:00:00
Although not so elegant, it is not a problem given the subvolume barrier (see below).
Recursion
BTRFS snapshots are not recursive and snapshotting stops at the so-called
subvolume barrier: subvolume will appear as empty subvolume inside the snapshot.
Therefore, the --recursive option is silently ignored with this filesystem.
S3QL
The S3QL FUSE filesystem need to be installed. A snapshot is a server-side copy
made with s3qlcp and made
immutable with s3qllock. See
the manpages and the documentation for more
precise details.
Target
The target can be any subdirectory of the filesystem.
Snapshot location
A snapshot can be located anywhere inside the filesystem. The --snapdir
options allows to set this precise location. With the default value, the
snapshots are siblings of the target directory:
$ ls /path/to/s3ql/
mydirectory/
mydirectory@anysnap-2024-11-28T12:00:00/
mydirectory@anysnap-2024-11-29T12:00:00/
Recursion
All copies are recursive by design so the --recursive option is ignored.
Moreover, care should be take to not make infinite recursion of snapshots.
Contributing
This project is distributed under the terms of the GPL-3.0-or-later license.
All development happens on https://codeberg.org/oschwand/anysnap
The project is managed with uv.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file anysnap-0.2.0.tar.gz.
File metadata
- Download URL: anysnap-0.2.0.tar.gz
- Upload date:
- Size: 17.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e9f7e890769bd4605a700996cfa295245e8c8259a0a4b60522eba472ed042194
|
|
| MD5 |
20bc318a3204f130a48ab12221f3e934
|
|
| BLAKE2b-256 |
f4ea79559d6d4c1860b43dfdb5dc97a40141162fa5b90375c6f63b398c7928ee
|
File details
Details for the file anysnap-0.2.0-py3-none-any.whl.
File metadata
- Download URL: anysnap-0.2.0-py3-none-any.whl
- Upload date:
- Size: 18.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e68ac75b9acc0bb0ec1a7d984600ef222c260878365a7228139c9f4b7201bf07
|
|
| MD5 |
8f01b206bc53e6e28e9bfa0633ef4b18
|
|
| BLAKE2b-256 |
9defab9d90da50ec7728d99bc00f0c9f1c29031dab3d39caa315eabd47b04ce2
|