home-assistant / home-assistant/supervisor
Restoring backup from samba fails
- Dominant language
- Python
- Stars
- 2.2k
- Forks
- 806
- Avg merge
- 1d 6h
- Merged PRs (30d)
- 55
Description
### Describe the issue you are experiencing
Restoring a backup from a samba share fails. The backup was created by the same HA instance a few hours previously, so there should be no issues with write permissions. The temp folder is created correctly, but the extraction of the tar file fails.
Copying the file to the local backup storage and restoring from there works as expected.
### What type of installation are you running?
Home Assistant OS
### Which operating system are you running on?
Home Assistant Operating System
### Steps to reproduce the issue
1. Add a samba share as backup folder
2. Create a backup
3. Restore the backup
### Anything in the Supervisor logs that might be useful for us?
```txt
2026-02-09 16:03:33.779 INFO (MainThread) [supervisor.backups.manager] Partial-Restore 6304af7f start
2026-02-09 16:03:33.784 ERROR (MainThread) [supervisor.backups.manager] Restore 6304af7f error
Traceback (most recent call last):
File "/usr/src/supervisor/supervisor/backups/manager.py", line 727, in _do_restore
async with backup.open(location):
~~~~~~~~~~~^^^^^^^^^^
File "/usr/local/lib/python3.13/contextlib.py", line 214, in __aenter__
return await anext(self.gen)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/supervisor/supervisor/backups/backup.py", line 525, in open
self._tmp = await self.sys_run_in_executor(_extract_backup)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.13/concurrent/futures/thread.py", line 59, in run
result = self.fn(*self.args, **self.kwargs)
File "/usr/src/supervisor/supervisor/backups/backup.py", line 516, in _extract_backup
tar.extractall(
~~~~~~~~~~~~~~^
path=tmp.name,
^^^^^^^^^^^^^^
members=secure_path(tar),
^^^^^^^^^^^^^^^^^^^^^^^^^
filter="fully_trusted",
^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/usr/local/lib/python3.13/tarfile.py", line 2355, in extractall
self._extract_one(tarinfo, path, set_attrs=not tarinfo.isdir(),
~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
numeric_owner=numeric_owner,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
filter_function=filter_function)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.13/tarfile.py", line 2464, in _extract_one
self._handle_fatal_error(e)
~~~~~~~~~~~~~~~~~~~~~~~~^^^
File "/usr/local/lib/python3.13/tarfile.py", line 2458, in _extract_one
self._extract_member(tarinfo, os.path.join(path, tarinfo.name),
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
set_attrs=set_attrs,
^^^^^^^^^^^^^^^^^^^^
numeric_owner=numeric_owner,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
filter_function=filter_function,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
extraction_root=path)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.13/tarfile.py", line 2547, in _extract_member
self.makefile(tarinfo, targetpath)
~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.13/tarfile.py", line 2596, in makefile
with bltn_open(targetpath, "wb") as target:
~~~~~~~~~^^^^^^^^^^^^^^^^^^
PermissionError: [Errno 13] Permission denied: '/data/mounts/backup/tmp0gfi78af/f7742ca0_tommysense-homeassistant-addon.tar.gz'
```
### System information
## System Information
version | core-2026.2.1
-- | --
installation_type | Home Assistant OS
dev | false
hassio | true
docker | true
container_arch | amd64
user | root
virtualenv | false
python_version | 3.13.11
os_name | Linux
os_version | 6.12.63-haos
arch | x86_64
timezone | Europe/Zurich
config_dir | /config
Home Assistant Community Store
GitHub API | ok
-- | --
GitHub Content | ok
GitHub Web | ok
HACS Data | ok
GitHub API Calls Remaining | 5000
Installed Version | 2.0.5
Stage | running
Available Repositories | 2676
Downloaded Repositories | 17
Home Assistant Supervisor
host_os | Home Assistant OS 17.0
-- | --
update_channel | stable
supervisor_version | supervisor-2026.01.1
agent_version | 1.8.1
docker_version | 29.1.3
disk_total | 62.3 GB
disk_used | 41.7 GB
nameservers | 10.11.5.36
healthy | true
supported | true
host_connectivity | true
supervisor_connectivity | true
ntp_synchronized | true
virtualization | kvm
board | ova
supervisor_api | ok
version_api | ok
installed_addons | MariaDB (2.7.2), Mosquitto broker (6.5.2), InfluxDB (5.0.2), MQTT Explorer (browser-1.0.3), openWakeWord (2.1.0), Advanced SSH & Web Terminal (23.0.2), Piper (2.2.2), File editor (5.8.0), Whisper (3.1.0), Grafana (12.1.0), Speech-to-Phrase (1.4.1), Zigbee2MQTT (2.8.0-1), Matter Server (8.2.2), Z-Wave JS UI (7.0.0), SONOFF Dongle Flasher (1.3.0), TOMMY (2.0.2)
Dashboards
dashboards | 3
-- | --
resources | 10
views | 9
mode | storage
Network Configuration
adapters | lo (disabled), enp0s3 (enabled, default, auto), docker0 (disabled), hassio (disabled), veth0a39f17 (disabled), veth7b70f3f (disabled), veth501c71b (disabled), vethe12b99f (disabled), veth47bc3b5 (disabled), veth48747f6 (disabled), vethfec82a2 (disabled), vethd0c2433 (disabled), veth5803caa (disabled), vethcd93a51 (disabled), veth4fb42c8 (disabled)
-- | --
ipv4_addresses | lo (127.0.0.1/8), enp0s3 (10.11.1.2/16), docker0 (172.30.232.1/23), hassio (172.30.32.1/23), veth0a39f17 (), veth7b70f3f (), veth501c71b (), vethe12b99f (), veth47bc3b5 (), veth48747f6 (), vethfec82a2 (), vethd0c2433 (), veth5803caa (), vethcd93a51 (), veth4fb42c8 ()
ipv6_addresses | lo (::1/128), enp0s3 (fe80::40b7:9539:706e:3508/64), docker0 (fe80::acae:57ff:fe2c:fce5/64), hassio (fd0c:ac1e:2100::1/48, fe80::7034:63ff:fe47:f96a/64), veth0a39f17 (fe80::3c1c:ffff:fe31:733d/64), veth7b70f3f (fe80::c814:f0ff:fee0:2d65/64), veth501c71b (fe80::10d0:a2ff:fe64:4f2/64), vethe12b99f (fe80::1036:92ff:fec3:4b04/64), veth47bc3b5 (fe80::4459:12ff:fe9e:41c2/64), veth48747f6 (fe80::40f4:51ff:fe98:f2f0/64), vethfec82a2 (fe80::f047:d7ff:fef8:b625/64), vethd0c2433 (fe80::e43d:bdff:feb6:7432/64), veth5803caa (fe80::cbc:6bff:fe3b:1d9/64), vethcd93a51 (fe80::bcdd:46ff:feae:f005/64), veth4fb42c8 (fe80::7049:4ff:fe7e:2d0a/64)
announce_addresses | 10.11.1.2, fe80::40b7:9539:706e:3508
Recorder
oldest_recorder_run | 8 January 2026 at 09:23
-- | --
current_recorder_run | 9 February 2026 at 11:20
estimated_db_size | 597.70 MiB
database_engine | mysql
database_version | 10.11.6
### Supervisor diagnostics
[config_entry-hassio-b961739c1d2c045bb0584e6a573ca678.json](https://github.com/user-attachments/files/25186986/config_entry-hassio-b961739c1d2c045bb0584e6a573ca678.json)
### Additional information
_No response_
Contributor guide
Research direction
Start with supervisor/backups/backup.py at open() and _extract_backup(), then inspect supervisor/backups/manager.py where restore invokes it. Reproduce the listed Samba-share backup and restore steps and compare them with local-storage restoration. Done means a backup created on the Samba share can be extracted and restored successfully.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- backend
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100