From 73b5000cd66fa0e1a5c46793ccfec9f8f5959512 Mon Sep 17 00:00:00 2001 From: Tobias K <6317548+theCalcaholic@users.noreply.github.com> Date: Thu, 5 Jan 2023 02:01:26 +0100 Subject: [PATCH] nc-restore: Fix potential dataloss when restoring backup (fixes #1417) - nc-restore: Keep old data directory if present - nc-restore: Temporarily move and restore user files during nc-restore Signed-off-by: Tobias K <6317548+theCalcaholic@users.noreply.github.com> --- bin/ncp/BACKUPS/nc-backup.sh | 1 + bin/ncp/BACKUPS/nc-restore.sh | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/bin/ncp/BACKUPS/nc-backup.sh b/bin/ncp/BACKUPS/nc-backup.sh index 240ab4091..b25c3318d 100644 --- a/bin/ncp/BACKUPS/nc-backup.sh +++ b/bin/ncp/BACKUPS/nc-backup.sh @@ -114,6 +114,7 @@ tar $compress_arg -cf "$destfile" \ --exclude "nextcloud/data/*/files_versions/*" \ --exclude "nextcloud/data/ncp-update-backups" \ --exclude "nextcloud/data/__groupfolders" \ + --exclude "nextcloud/.data_*" \ -C $basedir nextcloud/ \ || { echo "error generating backup" diff --git a/bin/ncp/BACKUPS/nc-restore.sh b/bin/ncp/BACKUPS/nc-restore.sh index 36a158cc9..2dcd39a3a 100644 --- a/bin/ncp/BACKUPS/nc-restore.sh +++ b/bin/ncp/BACKUPS/nc-restore.sh @@ -63,9 +63,31 @@ tar $compress_arg -xf "$BACKUPFILE" -C "$TMPDIR" || exit 1 ## RESTORE FILES echo "restore files..." +[[ -d "$NCDIR/data" ]] && { + DATA_BKP_DIR="$(mktemp -d -p "$NCDIR/.." nc-data-XXXXXX)" + mv -T "$NCDIR/data" "$DATA_BKP_DIR/" +} rm -rf "$NCDIR" mv -T "$TMPDIR"/nextcloud "$NCDIR" || { echo "Error restoring base files"; exit 1; } +if [[ -n "$DATA_BKP_DIR" ]] +then + echo "Restoring $NCDIR/data..." + target="$NCDIR/data" + [[ -d "$target" ]] && target="$NCDIR/.data_$(date)" + mv -T "$DATA_BKP_DIR" "$target" +else +fi + +if [[ -n "$DATA_BKP_DIR" ]] +then + echo "Restoring $NCDIR/data..." + target="$NCDIR/data" + [[ -d "$target" ]] && target="$NCDIR/.data_$(date)" + mv -T "$DATA_BKP_DIR" "$target" +else +fi + # update NC database password to this instance sed -i "s|'dbpassword' =>.*|'dbpassword' => '$DBPASSWD',|" /var/www/nextcloud/config/config.php