Hello,
We just upgraded our Barman v3.13 setup to v3.15 and now are no longer able to recover a backup over SSH.
I have double checked the privileges on the destination computer, and everything seems to be in order. I can connect over SSH and read/write/remove files in the destination folder. I am also able to use the "recover" command locally, but if I specify the "--remote-ssh-command" option, barman returns "EXCEPTION: Unable to create write check file".
Here is the full command and response from the terminal:
barman recover --remote-ssh-command 'ssh post...@192.163.1.36 -p 49166' pg_live 20250916T040109 /Users/Shared/dump
Processing xlog segments from streaming for pg_live (batch size: 9)
00000001000008690000006F
000000010000086900000070
000000010000086900000071
000000010000086900000072
000000010000086900000073
000000010000086900000074
000000010000086900000075
000000010000086900000076
000000010000086900000077
Processing xlog segments from file archival for pg_live
00000001000008690000006F
000000010000086900000070
000000010000086900000071
000000010000086900000072
000000010000086900000073
000000010000086900000074
000000010000086900000075
000000010000086900000076
000000010000086900000077
Starting remote restore for server pg_live using backup 20250916T040109
Destination directory: /Users/Shared/dump
Remote command: ssh post...@192.163.1.36 -p 49166
Copying the base backup.
EXCEPTION: Unable to create write check file
See log file for more details.
Barman is running on a Mac mini M1 with macOS Sequoia (15.3.1). The destination computer is also a Mac, running macOS 15.7.
Any idea what is wrong here? Below is the complete Barman log.
Kind regards,
Stan
--------------------------------------------------
2025-09-16 13:09:53,419 [89303] barman.wal_archiver INFO: Found 10 xlog segments from streaming for pg_live. Archive a batch of 9 segments in this run.
2025-09-16 13:09:53,420 [89303] barman.wal_archiver INFO: Archiving segment 1 of 9 from streaming: pg_live/00000001000008690000006F
2025-09-16 13:09:53,421 [89303] barman.wal_archiver INFO: Archiving segment 2 of 9 from streaming: pg_live/000000010000086900000070
2025-09-16 13:09:53,421 [89303] barman.wal_archiver INFO: Archiving segment 3 of 9 from streaming: pg_live/000000010000086900000071
2025-09-16 13:09:53,422 [89303] barman.wal_archiver INFO: Archiving segment 4 of 9 from streaming: pg_live/000000010000086900000072
2025-09-16 13:09:53,423 [89303] barman.wal_archiver INFO: Archiving segment 5 of 9 from streaming: pg_live/000000010000086900000073
2025-09-16 13:09:53,423 [89303] barman.wal_archiver INFO: Archiving segment 6 of 9 from streaming: pg_live/000000010000086900000074
2025-09-16 13:09:53,424 [89303] barman.wal_archiver INFO: Archiving segment 7 of 9 from streaming: pg_live/000000010000086900000075
2025-09-16 13:09:53,424 [89303] barman.wal_archiver INFO: Archiving segment 8 of 9 from streaming: pg_live/000000010000086900000076
2025-09-16 13:09:53,425 [89303] barman.wal_archiver INFO: Archiving segment 9 of 9 from streaming: pg_live/000000010000086900000077
2025-09-16 13:09:53,426 [89303] barman.wal_archiver INFO: Found 9 xlog segments from file archival for pg_live. Archive all segments in one run.
2025-09-16 13:09:53,426 [89303] barman.wal_archiver INFO: Archiving segment 1 of 9 from file archival: pg_live/00000001000008690000006F
2025-09-16 13:09:53,432 [89303] barman.wal_archiver INFO: Archiving segment 2 of 9 from file archival: pg_live/000000010000086900000070
2025-09-16 13:09:53,436 [89303] barman.wal_archiver INFO: Archiving segment 3 of 9 from file archival: pg_live/000000010000086900000071
2025-09-16 13:09:53,440 [89303] barman.wal_archiver INFO: Archiving segment 4 of 9 from file archival: pg_live/000000010000086900000072
2025-09-16 13:09:53,444 [89303] barman.wal_archiver INFO: Archiving segment 5 of 9 from file archival: pg_live/000000010000086900000073
2025-09-16 13:09:53,448 [89303] barman.wal_archiver INFO: Archiving segment 6 of 9 from file archival: pg_live/000000010000086900000074
2025-09-16 13:09:53,453 [89303] barman.wal_archiver INFO: Archiving segment 7 of 9 from file archival: pg_live/000000010000086900000075
2025-09-16 13:09:53,457 [89303] barman.wal_archiver INFO: Archiving segment 8 of 9 from file archival: pg_live/000000010000086900000076
2025-09-16 13:09:53,461 [89303] barman.wal_archiver INFO: Archiving segment 9 of 9 from file archival: pg_live/000000010000086900000077
2025-09-16 13:09:54,179 [89303] barman.recovery_executor INFO: Starting remote restore for server pg_live using backup 20250916T040109
2025-09-16 13:09:54,180 [89303] barman.recovery_executor INFO: Destination directory: /Users/Shared/dump
2025-09-16 13:09:54,181 [89303] barman.recovery_executor INFO: Remote command: ssh post...@192.163.1.36 -p 49166
2025-09-16 13:09:54,420 [89303] barman.recovery_executor WARNING: Unable to retrieve safe horizon time for smart rsync copy: The /Users/Shared/dump/.barman-recover.info file does not exist
2025-09-16 13:09:54,421 [89303] barman.recovery_executor INFO: Copying the base backup.
2025-09-16 13:09:56,235 [89303] Command WARNING: zsh:1: command not found: touch
2025-09-16 13:09:56,237 [89303] barman.cli ERROR: Unable to create write check file
See log file for more details.
Traceback (most recent call last):
File "/opt/macports-bin-pkg-version/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/barman/cli.py", line 2673, in main
args.func(args)
~~~~~~~~~^^^^^^
File "/opt/macports-bin-pkg-version/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/barman/cli.py", line 1302, in restore
server.recover(
~~~~~~~~~~~~~~^
backup_info,
^^^^^^^^^^^^
...<14 lines>...
**snapshot_kwargs,
^^^^^^^^^^^^^^^^^^
)
^
File "/opt/macports-bin-pkg-version/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/barman/server.py", line 2330, in recover
return self.backup_manager.recover(
~~~~~~~~~~~~~~~~~~~~~~~~~~~^
backup_info, dest, wal_dest, tablespaces, remote_command, **kwargs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/opt/macports-bin-pkg-version/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/barman/backup.py", line 1155, in recover
recovery_info = executor.recover(
backup_info,
...<4 lines>...
**kwargs
)
File "/opt/macports-bin-pkg-version/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/barman/recovery_executor.py", line 204, in recover
self._backup_copy(
~~~~~~~~~~~~~~~~~^
backup_info,
^^^^^^^^^^^^
...<4 lines>...
recovery_info=recovery_info,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/opt/macports-bin-pkg-version/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/barman/recovery_executor.py", line 3228, in _backup_copy
backup_info = operation.execute(
backup_info=backup_info,
...<5 lines>...
is_last_operation=is_last_operation,
)
File "/opt/macports-bin-pkg-version/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/barman/recovery_executor.py", line 1822, in execute
return self._execute(
~~~~~~~~~~~~~^
backup_info,
^^^^^^^^^^^^
...<5 lines>...
is_last_operation,
^^^^^^^^^^^^^^^^^^
)
^
File "/opt/macports-bin-pkg-version/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/barman/recovery_executor.py", line 2270, in _execute
return self._execute_on_chain(
~~~~~~~~~~~~~~~~~~~~~~^
backup_info,
^^^^^^^^^^^^
...<5 lines>...
is_last_operation,
^^^^^^^^^^^^^^^^^^
)
^
File "/opt/macports-bin-pkg-version/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/barman/recovery_executor.py", line 1925, in _execute_on_chain
volatile_backup = method(backup, destination, *args, **kwargs)
File "/opt/macports-bin-pkg-version/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/barman/recovery_executor.py", line 2338, in _rsync_backup_copy
self._copy_pgdata_and_tablespaces(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
backup_info, controller, dest_prefix, destination, tablespaces
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/opt/macports-bin-pkg-version/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/barman/recovery_executor.py", line 2464, in _copy_pgdata_and_tablespaces
self._prepare_directory(_dir)
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "/opt/macports-bin-pkg-version/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/barman/recovery_executor.py", line 2053, in _prepare_directory
self.cmd.check_write_permission(dest_dir)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/opt/macports-bin-pkg-version/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/barman/fs.py", line 228, in check_write_permission
raise FsOperationFailed("Unable to create write check file")
barman.exceptions.FsOperationFailed: Unable to create write check file