BTRFS
Most common commands
# List snapshots
btrfs subvolume list -s <main vol path>
# List subvolumes
btrfs subvolume list -p <main vol path>
# Create subvolume
btrfs subvolume create </path/to/subvolume>
# Create snapshot
btrfs subvolume snapshot -r \
<source path> \
<snapshot dest_path>
# Delete snapshot
btrfs subvolume delete /mnt/data/@some_dir-snapshot-test
# Usage
btrfs filesystem usage <path>
# Balance (if disks are added/removed or FS is full)
btrfs balance start --bg /
btrfs balance status /
Snapshots to an external disk
(
set -eu
btrfs_root=
src=
btrfs_dst="${btrfs_root}/root"
date="$(date '+%Y-%m-%d')"
# mirror to btrfs disk
rsync -Pv -aHAXS --delete "${src}/" "$btrfs_dst"
# create new snapshot of mirror
btrfs subvolume snapshot -r \
"$btrfs_dst" \
"${btrfs_root}/.snapshots/root_ro_${date}"
# check all snapshots
btrfs subvolume list -s "$btrfs_root"
# remove as necessary
btrfs subvolume delete <path>