blob: 91acdfcdacb5e18250440eb25099ab9b76f83f52 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
#!/usr/bin/bash
logger "================================================================================"
# BACKUP_NAME=$ID_SERIAL-part$ID_PART_ENTRY_NUMBER
BACKUP_NAME=$(echo $1 | sed -e 's/\\x2d/-/g')
MOUNT_TARGET=/media/$BACKUP_NAME
function fail() {
logger -s -t "$0" "Backup '$1' -> '$2' failed."
sudo -u max beep -f 40 -l 500
# sudo -u max beep -f 523 -l 150 -n -f 54 -l 600
}
function start() {
DEVNAME=$(echo $1 | sed 's/-/\\x2d/')
systemctl restart media-$DEVNAME.automount
logger -t "$0" "Backup '$1' -> '$2' started."
sudo -u max beep -f 147 -l 120 -n -f 294 -l 200 -n -f 831
}
function stop() {
DEVNAME=$(echo $1 | sed 's/-/\\x2d/')
systemctl stop media-$DEVNAME.automount
logger -t "$0" "Backup '$1' -> '$2' finished."
sudo -u max beep -f 831 -l 120 -n -f 294 -l 200 -n -f 147
}
function zfs_snapshot() {
zfs diff $LAST_SNAPSHOT > $ZFS_PATH/backup-differences.txt
zfs snap media-backup/$BACKUP_NAME@$(date +%Y-%m-%d--%H-%M)
echo "Here comes a list of changes since your last backup: $LAST_SNAPSHOT" | mailx -A typesafe -a $ZFS_PATH/backup-differences.txt -s 'Backup overview' max@entwicklerseite.de
}
start $1
if ! findmnt $MOUNT_TARGET; then
logger "$MOUNT_TARGET is not mounted. Cannot back it up."
exit 0
fi
logger ">> Inspecting $BACKUP_NAME"
ZFS_PATH=$(zfs get mountpoint -H -o value media-backup/$BACKUP_NAME) || fail "$MOUNT_TARGET" "(no zfs dataset found)"
ZFS_MOUNTPATH=$(findmnt -no source $ZFS_PATH) || fail "$ZFS_PATH (not mounted)" "(no association)"
LAST_SNAPSHOT=$(zfs list -t snap -o name -s creation media-backup/$BACKUP_NAME | tail -n1)
# Make sure, that we are really writing where a mountpoint is
if [ "$ZFS_PATH" == "/$ZFS_MOUNTPATH" ]; then
sudo -u max beep -f 831
logger "We can start $MOUNT_TARGET -> $ZFS_PATH"
rsync -ahoi -x --delete --info=all \
"/media/$BACKUP_NAME/" \
"$ZFS_PATH" \
2>&1 | tee $ZFS_PATH/backup-report.txt && zfs_snapshot
else
fail $ZFS_PATH $ZFS_MOUNTPATH
exit 1
fi
stop $1
# sleep a second so that /dev/disk/by-id/*-part become available
# sleep 1
# DISK=$(readlink -f /dev/disk/by-id/$ID_BUS-$ID_SERIAL)
# if ! [ -e "$DISK" ]; then
# fail
# logger "$DISK: Disk not there :("
# exit 1
# fi
|