diff --git a/homeassistant/components/hassio/backup.py b/homeassistant/components/hassio/backup.py
index fe69b9e08e5aa217f033cc4c55c5dd8ec75e9e33..20f1ec82a7aa4850c4512b6df011744a3ea306f9 100644
--- a/homeassistant/components/hassio/backup.py
+++ b/homeassistant/components/hassio/backup.py
@@ -4,6 +4,7 @@ from __future__ import annotations
 
 import asyncio
 from collections.abc import AsyncIterator, Callable, Coroutine, Mapping
+from contextlib import suppress
 import logging
 import os
 from pathlib import Path, PurePath
@@ -173,7 +174,7 @@ class SupervisorBackupAgent(BackupAgent):
                 ),
             )
         except SupervisorNotFoundError as err:
-            raise BackupNotFound from err
+            raise BackupNotFound(f"Backup {backup_id} not found") from err
 
     async def async_upload_backup(
         self,
@@ -186,13 +187,14 @@ class SupervisorBackupAgent(BackupAgent):
 
         The upload will be skipped if the backup already exists in the agent's location.
         """
-        if await self.async_get_backup(backup.backup_id):
-            _LOGGER.debug(
-                "Backup %s already exists in location %s",
-                backup.backup_id,
-                self.location,
-            )
-            return
+        with suppress(BackupNotFound):
+            if await self.async_get_backup(backup.backup_id):
+                _LOGGER.debug(
+                    "Backup %s already exists in location %s",
+                    backup.backup_id,
+                    self.location,
+                )
+                return
         stream = await open_stream()
         upload_options = supervisor_backups.UploadBackupOptions(
             location={self.location},
@@ -218,14 +220,14 @@ class SupervisorBackupAgent(BackupAgent):
         self,
         backup_id: str,
         **kwargs: Any,
-    ) -> AgentBackup | None:
+    ) -> AgentBackup:
         """Return a backup."""
         try:
             details = await self._client.backups.backup_info(backup_id)
-        except SupervisorNotFoundError:
-            return None
+        except SupervisorNotFoundError as err:
+            raise BackupNotFound(f"Backup {backup_id} not found") from err
         if self.location not in details.location_attributes:
-            return None
+            raise BackupNotFound(f"Backup {backup_id} not found")
         return _backup_details_to_agent_backup(details, self.location)
 
     async def async_delete_backup(self, backup_id: str, **kwargs: Any) -> None:
@@ -237,8 +239,8 @@ class SupervisorBackupAgent(BackupAgent):
                     location={self.location}
                 ),
             )
-        except SupervisorNotFoundError:
-            _LOGGER.debug("Backup %s does not exist", backup_id)
+        except SupervisorNotFoundError as err:
+            raise BackupNotFound(f"Backup {backup_id} not found") from err
 
 
 class SupervisorBackupReaderWriter(BackupReaderWriter):
@@ -492,10 +494,12 @@ class SupervisorBackupReaderWriter(BackupReaderWriter):
     ) -> None:
         """Restore a backup."""
         manager = self._hass.data[DATA_MANAGER]
-        # The backup manager has already checked that the backup exists so we don't need to
-        # check that here.
+        # The backup manager has already checked that the backup exists so we don't
+        # need to catch BackupNotFound here.
         backup = await manager.backup_agents[agent_id].async_get_backup(backup_id)
         if (
+            # Check for None to be backwards compatible with the old BackupAgent API,
+            # this can be removed in HA Core 2025.10
             backup
             and restore_homeassistant
             and restore_database != backup.database_included