Assorted shell and Python scripts
1#!/usr/bin/env bash
2
3SNAP_DATE=$(date '+%Y-%m-%d_%H-%M-%S')
4
5# Check if device is mounted
6if ! grep "/mnt/storage" /etc/mtab >/dev/null; then
7 logger -p error -t btrfs_backup "ERROR: /mnt/storage is not mounted."
8 exit 1
9fi
10
11create_snapshot() {
12 if ! btrfs subvolume snapshot -r "$1" "${1}/.snapshots/$2-$SNAP_DATE" >/dev/null; then
13 echo "[$(date '+%Y-%m-%d %H:%M:%S')] Error creating snapshot of $1" | tee -a "$LOGFILE"
14 notify-send -i computer-fail "Error creating snapshot of $1"
15 exit 1
16 else
17 echo "[$(date '+%Y-%m-%d %H:%M:%S')] Create snapshot of $1: OK" | tee -a "$LOGFILE"
18 fi
19}
20
21send_snapshot() {
22 mkdir -p "/srv/backup/$SNAP_DATE"
23 if ! btrfs send -q "${1}/.snapshots/$2-$SNAP_DATE" | btrfs receive -q "/srv/backup/$SNAP_DATE"; then
24 echo "[$(date '+%Y-%m-%d %H:%M:%S')] Error sending snapshot of $1 to /srv/backup" | tee -a "$LOGFILE"
25 notify-send -i computer-fail "Error sending snapshot of $1 to /srv/backup"
26 exit 1
27 else
28 echo "[$(date '+%Y-%m-%d %H:%M:%S')] Send snapshot of $1 to /srv/backup: OK" | tee -a "$LOGFILE"
29 fi
30}
31
32# Create root and home snapshots
33create_snapshot "/" "root"
34create_snapshot "/home" "home"
35
36# Send root and home snapshots
37send_snapshot "/" "root"
38send_snapshot "/home" "home"