52 lines
1.7 KiB
Bash
Executable File
52 lines
1.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
export SOURCE_DIR=${SOURCE_DIR:=root}
|
|
# Fix basename / showing up as "/" -> change to "root"
|
|
if [ $(basename $SOURCE_DIR) = / ]; then
|
|
export SNAPSHOT_PREFIX=${SNAPSHOT_PREFIX:=root}
|
|
else
|
|
export SNAPSHOT_PREFIX=${SNAPSHOT_PREFIX:=$(basename $SOURCE_DIR)}
|
|
fi
|
|
# Set snapshot prefix based on basename
|
|
export SNAPSHOT_TIME=$(date +"%y_%m_%d-%H.%M")
|
|
export SNAPSHOT_NAME=$SNAPSHOT_PREFIX-$SNAPSHOT_TIME
|
|
export SNAPSHOT_DIR=${SNAPSHOT_DIR:=/.snapshots}
|
|
export LATEST=$SNAPSHOT_PREFIX-latest
|
|
export BACKUP_DRIVE_MNT=${BACKUP_DRIVE_MNT:=/mnt/backup0}
|
|
export BACKUP_DIR=${BACKUP_DIR:=/mnt/backup0/DucoBacktop}
|
|
|
|
# Show snapshot settings
|
|
echo "SOURCE_DIR: $SOURCE_DIR"
|
|
echo "SNAPSHOT_PREFIX: $SNAPSHOT_PREFIX"
|
|
echo "SNAPSHOT_TIME: $SNAPSHOT_TIME"
|
|
echo "SNAPSHOT_NAME: $SNAPSHOT_NAME"
|
|
echo "SNAPSHOT_DIR: $SNAPSHOT_DIR"
|
|
echo "LATEST: $LATEST"
|
|
echo "BACKUP_DRIVE_MNT: $BACKUP_DRIVE_MNT"
|
|
echo "BACKUP_DIR: $BACKUP_DIR"
|
|
|
|
# Create readonly snapshot
|
|
btrfs subvolume snapshot -r $SOURCE_DIR $SNAPSHOT_DIR/$SNAPSHOT_NAME
|
|
|
|
# Check if backup disk is mounted
|
|
mount $BACKUP_DRIVE_MNT
|
|
mountpoint $BACKUP_DRIVE_MNT
|
|
|
|
if [ $? = 0 ]; then
|
|
if [ -d $BACKUP_DIR/$LATEST ]; then
|
|
btrfs send -p $SNAPSHOT_DIR/$LATEST $SNAPSHOT_DIR/$SNAPSHOT_NAME | btrfs receive $BACKUP_DIR
|
|
else
|
|
btrfs send $SNAPSHOT_DIR/$SNAPSHOT_NAME | btrfs receive $BACKUP_DIR
|
|
fi
|
|
|
|
# Update latest in snapshot dir
|
|
rm -f $SNAPSHOT_DIR/$LATEST
|
|
ln -s $SNAPSHOT_DIR/$SNAPSHOT_NAME $SNAPSHOT_DIR/$LATEST
|
|
|
|
# Update latest in backup dir
|
|
rm -f $BACKUP_DIR/$LATEST
|
|
ln -s $BACKUP_DIR/$SNAPSHOT_NAME $BACKUP_DIR/$LATEST
|
|
else
|
|
echo "Backup location $BACKUP_DRIVE_MNT not mounted. Snapshot $SNAPSHOT_NAME not synced"
|
|
fi
|