Last active
November 7, 2022 08:09
-
-
Save ebal/43066e21ecd26a55250f837c8d8d5c66 to your computer and use it in GitHub Desktop.
BTRFS: Automatic Snapshots Script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -e | |
# ebal, Mon, 07 Nov 2022 08:49:37 +0200 | |
## 0 0 * * Fri /usr/local/bin/btrfsSnapshot.sh | |
# paths MUST end with '/' | |
btrfs_paths=("/" "/home/" "/opt/") | |
timestamp=$(date +%Y%m%d_%H%M%S) | |
keep_snapshots=3 | |
yymmdd="$(date +%Y/%m/%d)" | |
logfile="/var/log/btrfsSnapshot/${yymmdd}/btrfsSnapshot.log" | |
sudo mkdir -p "/var/log/btrfsSnapshot/${yymmdd}/" | |
echo "######## $(date -R) ########" | sudo tee -a "${logfile}" | |
echo "" | sudo tee -a "${logfile}" | |
for btrfs_path in "${btrfs_paths[@]}"; do | |
## Create Snapshot directory | |
sudo mkdir -p "${btrfs_path}".Snapshot/ | |
## How many Snapshots are there ? | |
list_btrfs_snap=$(sudo btrfs subvolume list -o -r -s "${btrfs_path}" | grep -c ".Snapshot/") | |
## Get oldest rootfs btrfs snapshot | |
while [ "${keep_snapshots}" -le "${list_btrfs_snap}" ] | |
do | |
prev_btrfs_snap=$(sudo btrfs subvolume list -o -r -s "${btrfs_path}" | grep ".Snapshot/" | sort | head -1 | awk '{print $2}') | |
## Delete a btrfs snapshot by their subvolume id | |
sudo btrfs subvolume delete --subvolid "${prev_btrfs_snap}" "${btrfs_path}" | sudo tee -a "${logfile}" | |
list_btrfs_snap=$(sudo btrfs subvolume list -o -r -s "${btrfs_path}" | grep -c ".Snapshot/") | |
done | |
## Create a new read-only btrfs snapshot | |
sudo btrfs subvolume snapshot -r "${btrfs_path}" "${btrfs_path}.Snapshot/${timestamp}" | sudo tee -a "${logfile}" | |
echo "" | sudo tee -a "${logfile}" | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment