|
|
|
@ -49,34 +49,46 @@ EOF |
|
|
|
|
fi |
|
|
|
|
shift |
|
|
|
|
done |
|
|
|
|
|
|
|
|
|
BTRFS_VOLUMES=${BTRFS_VOLUMES:-$(awk '!/^#/ && $3=="btrfs" {print $2}' /etc/fstab)} |
|
|
|
|
TMP_MNT=${TMP_MNT:-/var/tmp/btrfs-backup} |
|
|
|
|
if test -n "${vols[*]}"; then |
|
|
|
|
BTRFS_VOLUMES="${vols[*]}" |
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
test -d "${TMP_MNT}" || mkdir -p "${TMP_MNT}" |
|
|
|
|
for fs in ${BTRFS_VOLUMES}; do |
|
|
|
|
device=$(mount | awk '$3=="'$fs'" && $5=="btrfs" {print $1}') |
|
|
|
|
subvol=$(mount | awk '$3=="'$fs'" && $5=="btrfs" {split(substr($6, 2, length($6)-2), res, ","); for (r in res) {if (res[r]~/^subvol=/) {sub(/^subvol=/,"" , res[r]); print res[r]}}}') |
|
|
|
|
if test -n "$subvol"; then |
|
|
|
|
name=${subvol} |
|
|
|
|
if test "$subvol" = "/@"; then |
|
|
|
|
name=${subvol} |
|
|
|
|
else |
|
|
|
|
name=${subvol}- |
|
|
|
|
fi |
|
|
|
|
else |
|
|
|
|
if test "$fs" = "/"; then |
|
|
|
|
name="@root" |
|
|
|
|
name="/" |
|
|
|
|
else |
|
|
|
|
name=${fs#/} |
|
|
|
|
name=${name%/} |
|
|
|
|
name=${name//\//-} |
|
|
|
|
name=/${name//\//-}- |
|
|
|
|
fi |
|
|
|
|
fi |
|
|
|
|
target="${name}-snapshot-$(date +%Y-%m-%d-%H-%M)" |
|
|
|
|
if test $dryrun -eq 1; then |
|
|
|
|
echo btrfs subvolume snapshot "${TMP_MNT}${subvol}" "${TMP_MNT}/${target}" |
|
|
|
|
else |
|
|
|
|
if mount | grep -q " on $TMP_MNT type "; then |
|
|
|
|
target="${name}snapshot-$(date +%Y-%m-%d-%H-%M)" |
|
|
|
|
if test -n "$device"; then |
|
|
|
|
if test $dryrun -eq 1; then |
|
|
|
|
echo -e "→ \e[1mbackup ${subvol:+subvol $subvol of }$fs on $device\e[0m" |
|
|
|
|
echo " " mount "$device" "$TMP_MNT" |
|
|
|
|
echo " " btrfs subvolume snapshot "${TMP_MNT}${subvol}" "${TMP_MNT}${target}" |
|
|
|
|
echo " " umount "$TMP_MNT" |
|
|
|
|
else |
|
|
|
|
if mount | grep -q " on $TMP_MNT type "; then |
|
|
|
|
sudo umount "$TMP_MNT" |
|
|
|
|
fi |
|
|
|
|
sudo mount "$device" "$TMP_MNT" |
|
|
|
|
sudo btrfs subvolume snapshot "${TMP_MNT}${subvol}" "${TMP_MNT}${target}" |
|
|
|
|
sudo umount "$TMP_MNT" |
|
|
|
|
fi |
|
|
|
|
sudo mount "$device" "$TMP_MNT" |
|
|
|
|
sudo btrfs subvolume snapshot "${TMP_MNT}${subvol}" "${TMP_MNT}/${target}" |
|
|
|
|
sudo umount "$TMP_MNT" |
|
|
|
|
else |
|
|
|
|
echo "ERROR: no device found for $fs" 1>&2 |
|
|
|
|
exit 2 |
|
|
|
|
fi |
|
|
|
|
done |
|
|
|
|