mirror of
https://github.com/uroni/urbackup_backend.git
synced 2025-10-26 11:36:50 +00:00
104 lines
2.4 KiB
Bash
Executable File
104 lines
2.4 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
set -e
|
|
|
|
SNAP_ID=$1
|
|
SNAP_MOUNTPOINT="$2"
|
|
SNAP_ORIG_PATH="$5"
|
|
|
|
CDIR=`dirname $0`
|
|
|
|
remove_overlay() {
|
|
if test -e "$SNAP_ORIG_PATH/.overlay_2fefd007-3e48-4162-b2c6-45ccdda22f37_$SNAP_ID"
|
|
then
|
|
chattr -i "$SNAP_ORIG_PATH/.overlay_2fefd007-3e48-4162-b2c6-45ccdda22f37_$SNAP_ID"
|
|
rm "$SNAP_ORIG_PATH/.overlay_2fefd007-3e48-4162-b2c6-45ccdda22f37_$SNAP_ID"
|
|
fi
|
|
|
|
if test -e "$SNAP_ORIG_PATH/.overlay_2fefd007-3e48-4162-b2c6-45ccdda22f37_$SNAP_ID-wsnap"
|
|
then
|
|
LODEV=`losetup -j "$SNAP_ORIG_PATH/.overlay_2fefd007-3e48-4162-b2c6-45ccdda22f37_$SNAP_ID-wsnap" | cut -d':' -f1`
|
|
if [ "x$LODEV" != x ]
|
|
then
|
|
losetup -d "$LODEV"
|
|
fi
|
|
rm "$SNAP_ORIG_PATH/.overlay_2fefd007-3e48-4162-b2c6-45ccdda22f37_$SNAP_ID-wsnap"
|
|
fi
|
|
}
|
|
|
|
remove_dm() {
|
|
if ! [ -e "${SNAP_MOUNTPOINT}-name" ]
|
|
then
|
|
echo "Could not find snapshot device name at ${SNAP_MOUNTPOINT}-name. Cannot remove dm nodes"
|
|
return 1
|
|
fi
|
|
|
|
DEVNAME=$(cat "${SNAP_MOUNTPOINT}-name")
|
|
|
|
echo "Removing dm snapshot..."
|
|
|
|
dmsetup remove "$DEVNAME-$SNAP_ID-wsnap" || true
|
|
dmsetup remove "$DEVNAME-$SNAP_ID" || true
|
|
|
|
echo "Removing snapshot cow storage..."
|
|
dmsetup remove "$DEVNAME-$SNAP_ID-cow-storage" || true
|
|
|
|
rm "${SNAP_MOUNTPOINT}-name"
|
|
rm "${SNAP_MOUNTPOINT}-dev"
|
|
rmdir "${SNAP_MOUNTPOINT}"
|
|
}
|
|
|
|
if ! test -e $SNAP_MOUNTPOINT
|
|
then
|
|
echo "Snapshot at $SNAP_MOUNTPOINT was already removed"
|
|
remove_dm
|
|
remove_overlay
|
|
exit 0
|
|
fi
|
|
|
|
TYPE=$(df -T -P | egrep " ${SNAP_MOUNTPOINT}\$" | head -n 1 | tr -s " " | cut -d" " -f2)
|
|
|
|
if [ "x$TYPE" = "x" ]
|
|
then
|
|
if btrfs subvolume list -o "$SNAP_MOUNTPOINT" > /dev/null 2>&1
|
|
then
|
|
TYPE="btrfs"
|
|
fi
|
|
fi
|
|
|
|
if [ "x$TYPE" = "xbtrfs" ]
|
|
then
|
|
$CDIR/btrfs_remove_filesystem_snapshot "$@"
|
|
exit $?
|
|
fi
|
|
|
|
if ! df -T -P | egrep " ${SNAP_MOUNTPOINT}\$" > /dev/null 2>&1
|
|
then
|
|
echo "Snapshot is not mounted. Already removed"
|
|
remove_dm
|
|
remove_overlay
|
|
exit 0
|
|
fi
|
|
|
|
if ! [ -e "${SNAP_MOUNTPOINT}-name" ]
|
|
then
|
|
echo "Could not find snapshot device name at ${SNAP_MOUNTPOINT}-name"
|
|
exit 1
|
|
fi
|
|
|
|
DEVNAME=$(cat "${SNAP_MOUNTPOINT}-name")
|
|
|
|
echo "Unmounting /dev/mapper/$DEVNAME-$SNAP_ID at /mnt/urbackup_snaps/$SNAP_ID..."
|
|
|
|
if ! umount /mnt/urbackup_snaps/$SNAP_ID
|
|
then
|
|
lsof | grep /mnt/urbackup_snaps/$SNAP_ID || true
|
|
echo "Unmounting /mnt/urbackup_snaps/$SNAP_ID failed. Retrying in 10s..."
|
|
sleep 10
|
|
umount /mnt/urbackup_snaps/$SNAP_ID
|
|
fi
|
|
|
|
remove_dm
|
|
remove_overlay
|
|
exit 0
|