diff --git a/Containers/borgbackup/backupscript.sh b/Containers/borgbackup/backupscript.sh index f86edb01508b..5589c937d7fd 100644 --- a/Containers/borgbackup/backupscript.sh +++ b/Containers/borgbackup/backupscript.sh @@ -318,6 +318,13 @@ if [ "$BORG_MODE" = restore ]; then fi echo "Restoring '$SELECTED_ARCHIVE'..." + # Exclude previews from restore if selected to speed up process + ADDITIONAL_RSYNC_EXCLUDES=() + if [ -n "$RESTORE_EXCLUDE_PREVIEWS" ]; then + ADDITIONAL_RSYNC_EXCLUDES=(--exclude "nextcloud_aio_nextcloud/appdata_*/preview/**") + echo "Excluding previews from restore" + fi + # Save Additional Backup dirs if [ -f "/nextcloud_aio_volumes/nextcloud_aio_mastercontainer/data/additional_backup_directories" ]; then ADDITIONAL_BACKUP_DIRECTORIES="$(cat /nextcloud_aio_volumes/nextcloud_aio_mastercontainer/data/additional_backup_directories)" @@ -363,6 +370,7 @@ if [ "$BORG_MODE" = restore ]; then --exclude "nextcloud_aio_mastercontainer/data/daily_backup_running" \ --exclude "nextcloud_aio_mastercontainer/data/session_date_file" \ --exclude "nextcloud_aio_mastercontainer/session/**" \ + "${ADDITIONAL_RSYNC_EXCLUDES[@]}" \ /tmp/borg/nextcloud_aio_volumes/ /nextcloud_aio_volumes/; then RESTORE_FAILED=1 echo "Something failed while restoring from backup." @@ -486,6 +494,12 @@ if [ "$BORG_MODE" = restore ]; then touch "/nextcloud_aio_volumes/nextcloud_aio_nextcloud_data/fingerprint.update" chmod 777 "/nextcloud_aio_volumes/nextcloud_aio_nextcloud_data/fingerprint.update" + # Add file to Netcloud container to trigger a preview scan the next time it starts + if [ -n "$RESTORE_EXCLUDE_PREVIEWS" ]; then + touch "/nextcloud_aio_volumes/nextcloud_aio_nextcloud_data/trigger-preview.scan" + chmod 777 "/nextcloud_aio_volumes/nextcloud_aio_nextcloud_data/trigger-preview.scan" + fi + # Delete redis cache rm -f "/mnt/redis/dump.rdb" fi diff --git a/Containers/nextcloud/entrypoint.sh b/Containers/nextcloud/entrypoint.sh index 24bae727130c..419401cda573 100644 --- a/Containers/nextcloud/entrypoint.sh +++ b/Containers/nextcloud/entrypoint.sh @@ -495,6 +495,12 @@ if [ -f "$NEXTCLOUD_DATA_DIR/fingerprint.update" ]; then rm "$NEXTCLOUD_DATA_DIR/fingerprint.update" fi +# Perform preview scan if previews were excluded from restore +if [ -f "$NEXTCLOUD_DATA_DIR/trigger-preview.scan" ]; then + php /var/www/html/occ files:scan-app-data preview -vvv + rm "$NEXTCLOUD_DATA_DIR/trigger-preview.scan" +fi + # AIO one-click settings start # Do not remove or change this line! # Apply one-click-instance settings echo "Applying one-click-instance settings..." diff --git a/php/containers.json b/php/containers.json index 600477761698..bf5ae3e931ad 100644 --- a/php/containers.json +++ b/php/containers.json @@ -477,6 +477,7 @@ "BORG_PASSWORD=%BORGBACKUP_PASSWORD%", "BORG_MODE=%BORGBACKUP_MODE%", "SELECTED_RESTORE_TIME=%SELECTED_RESTORE_TIME%", + "RESTORE_EXCLUDE_PREVIEWS=%RESTORE_EXCLUDE_PREVIEWS%", "BACKUP_RESTORE_PASSWORD=%BACKUP_RESTORE_PASSWORD%", "ADDITIONAL_DIRECTORIES_BACKUP=%ADDITIONAL_DIRECTORIES_BACKUP%", "BORGBACKUP_HOST_LOCATION=%BORGBACKUP_HOST_LOCATION%", diff --git a/php/src/Controller/DockerController.php b/php/src/Controller/DockerController.php index 840985f86911..d76864bb09f8 100644 --- a/php/src/Controller/DockerController.php +++ b/php/src/Controller/DockerController.php @@ -113,6 +113,7 @@ public function StartBackupContainerRestore(Request $request, Response $response $config = $this->configurationManager->GetConfig(); $config['backup-mode'] = 'restore'; $config['selected-restore-time'] = $request->getParsedBody()['selected_restore_time'] ?? ''; + $config['restore-exclude-previews'] = $request->getParsedBody()['restore-exclude-previews'] ?? ''; $this->configurationManager->WriteConfig($config); $id = self::TOP_CONTAINER; diff --git a/php/src/Data/ConfigurationManager.php b/php/src/Data/ConfigurationManager.php index 69f59d5cd796..3c54b1b150f8 100644 --- a/php/src/Data/ConfigurationManager.php +++ b/php/src/Data/ConfigurationManager.php @@ -427,6 +427,15 @@ public function GetSelectedRestoreTime() : string { return $config['selected-restore-time']; } + public function GetRestoreExcludePreviews() : string { + $config = $this->GetConfig(); + if(!isset($config['restore-exclude-previews'])) { + $config['restore-exclude-previews'] = ''; + } + + return $config['restore-exclude-previews']; + } + public function GetAIOURL() : string { $config = $this->GetConfig(); if(!isset($config['AIO_URL'])) { diff --git a/php/src/Docker/DockerActionManager.php b/php/src/Docker/DockerActionManager.php index 89385a11bc76..298669659662 100644 --- a/php/src/Docker/DockerActionManager.php +++ b/php/src/Docker/DockerActionManager.php @@ -273,6 +273,8 @@ public function CreateContainer(Container $container) : void { $replacements[1] = $this->configurationManager->GetAIOURL(); } elseif ($out[1] === 'SELECTED_RESTORE_TIME') { $replacements[1] = $this->configurationManager->GetSelectedRestoreTime(); + } elseif ($out[1] === 'RESTORE_EXCLUDE_PREVIEWS') { + $replacements[1] = $this->configurationManager->GetRestoreExcludePreviews(); } elseif ($out[1] === 'APACHE_PORT') { $replacements[1] = $this->configurationManager->GetApachePort(); } elseif ($out[1] === 'TALK_PORT') { diff --git a/php/templates/containers.twig b/php/templates/containers.twig index 5449f1cdac58..563cc427c690 100644 --- a/php/templates/containers.twig +++ b/php/templates/containers.twig @@ -169,6 +169,7 @@ {% endfor %} + {% endif %}