diff --git a/supervisor/backups/backup.py b/supervisor/backups/backup.py index 51b7aafcb..6b0d03c95 100644 --- a/supervisor/backups/backup.py +++ b/supervisor/backups/backup.py @@ -387,30 +387,29 @@ class Backup(CoreSysAttributes): return # Take backup - try: - _LOGGER.info("Backing up folder %s", name) - with SecureTarFile( - tar_name, "w", key=self._key, gzip=self.compressed - ) as tar_file: - atomic_contents_add( - tar_file, - origin_dir, - excludes=[], - arcname=".", - ) + _LOGGER.info("Backing up folder %s", name) + with SecureTarFile( + tar_name, "w", key=self._key, gzip=self.compressed + ) as tar_file: + atomic_contents_add( + tar_file, + origin_dir, + excludes=[], + arcname=".", + ) - _LOGGER.info("Backup folder %s done", name) - self._data[ATTR_FOLDERS].append(name) - except (tarfile.TarError, OSError) as err: - _LOGGER.warning("Can't backup folder %s: %s", name, err) + _LOGGER.info("Backup folder %s done", name) + self._data[ATTR_FOLDERS].append(name) # Save folder sequential # avoid issue on slow IO for folder in folder_list: try: await self.sys_run_in_executor(_folder_save, folder) - except Exception as err: # pylint: disable=broad-except - _LOGGER.warning("Can't save folder %s: %s", folder, err) + except (tarfile.TarError, OSError) as err: + raise BackupError( + f"Can't backup folder {folder}: {str(err)}", _LOGGER.error + ) from err async def restore_folders(self, folder_list: list[str]): """Backup Supervisor data into backup.""" diff --git a/supervisor/exceptions.py b/supervisor/exceptions.py index 697ae34a8..44e414848 100644 --- a/supervisor/exceptions.py +++ b/supervisor/exceptions.py @@ -467,3 +467,7 @@ class StoreJobError(StoreError, JobException): class BackupError(HassioError): """Raise if an error during backup is happening.""" + + +class HomeAssistantBackupError(BackupError, HomeAssistantError): + """Raise if an error during Home Assistant Core backup is happening.""" diff --git a/supervisor/homeassistant/module.py b/supervisor/homeassistant/module.py index 1a4610745..294f8b4e9 100644 --- a/supervisor/homeassistant/module.py +++ b/supervisor/homeassistant/module.py @@ -34,6 +34,7 @@ from ..const import ( from ..coresys import CoreSys, CoreSysAttributes from ..exceptions import ( ConfigurationFileError, + HomeAssistantBackupError, HomeAssistantError, HomeAssistantWSError, ) @@ -351,6 +352,11 @@ class HomeAssistant(FileConfiguration, CoreSysAttributes): _LOGGER.info("Backing up Home Assistant Core config folder") await self.sys_run_in_executor(_write_tarfile) _LOGGER.info("Backup Home Assistant Core config folder done") + except (tarfile.TarError, OSError) as err: + raise HomeAssistantBackupError( + f"Can't backup Home Assistant Core config folder: {str(err)}", + _LOGGER.error, + ) from err finally: try: await self.sys_homeassistant.websocket.async_send_command(