我正在尝试设置一个自动备份系统来将 Raspberry Pi 的数据备份到我的 Mac Mini。但是,从 RPi 向远程 Mac Mini 存储库主机调用 borg init 和 borg create 似乎都无法到达 Mac Mini 上运行的 borg 服务器。
在 Mac Mini 上:
% sudo borg serve --debug --restrict-to-path /Users/borg/BorgRepos/RetroPie
$LOG DEBUG borg.logger Remote: using builtin fallback logging configuration
$LOG DEBUG borg.archiver Remote: 33 self tests completed in 0.12 seconds
在树莓派上:
$ sudo borg create --debug --stats borg@octolen:/Users/borg/BorgRepos/RetroPie2::Friday2 RetroPie
using builtin fallback logging configuration
35 self tests completed in 0.59 seconds
SSH command line: ['ssh', 'borg@octolen', 'borg', 'serve', '--umask=077', '--debug']
Password:
Remote: zsh:1: command not found: borg
Connection closed by remote host. Is borg working on the server?
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/borg/archiver.py", line 4455, in main
exit_code = archiver.run(args)
File "/usr/lib/python3/dist-packages/borg/archiver.py", line 4387, in run
return set_ec(func(args))
File "/usr/lib/python3/dist-packages/borg/archiver.py", line 134, in wrapper
make_parent_dirs=make_parent_dirs, args=args)
File "/usr/lib/python3/dist-packages/borg/remote.py", line 577, in __init__
raise ConnectionClosedWithHint('Is borg working on the server?') from None
borg.remote.ConnectionClosedWithHint: Connection closed by remote host. Is borg working on the server?
Platform: Linux retropie2 5.10.103-v7l+ #1529 SMP Tue Mar 8 12:24:00 GMT 2022 armv7l
Linux: debian 10.13
Borg: 1.1.9 Python: CPython 3.7.3
PID: 28539 CWD: /home/pi
sys.argv: ['/usr/bin/borg', 'create', '--debug', '--stats', 'borg@octolen:/Users/borg/BorgRepos/RetroPie2::Friday2', 'RetroPie']
SSH_ORIGINAL_COMMAND: None
我确实将 /usr/bin/borg 添加到 Mac 防火墙允许传入连接的应用程序列表中。我在这里缺少什么?
答案1
如果你决心使用borg
我没有什么可提供的。如果您只想备份 RPi 上的某些文件(而不是整个 SD 卡的“映像备份”),我建议您考虑rsync
。
你的首要任务是理解什么rsync
是。在一个顶层,rsync
更新位于指定的文件目的地匹配指定的文件来源。它是单程手术; IE (来源==>目的地)rsync
中的文件不会更新来源与文件在目的地- 即使它们是较新的。事实上,很容易错误地“更新”目标文件 - 用旧文件覆盖新文件!
rsync
提供了几种执行其操作的选项。在顶层,我想说有三个选择 -鉴于唯一涉及的两个主机是您的 MacMini 和您的 RPi。例如,如果您的“系统”包括 NAS 或可移动介质,那么选项的数量就会增加。但对于 2 主机系统,四个选项是:
- RPi为客户, Mac Mini 为服务器
- Mac Mini 作为客户, RPi 为服务器
- 4. 设置
rsync
为服务/守护进程- 在 Mac 或 RPi 上。
这官方文档解释了这些流程和角色比我好得多。您应该通读本文,并首先做出这些基本决定。您可能希望在这里考虑许多因素 - 这些因素将决定您的实施如何满足您的需求。例如,如果您的一台主机 24x7 运行,而另一台主机间歇性运行断断续续地, 那可能指向使用 24x7 系统来扮演服务器角色。这也将取决于调度程序您用来启动备份/同步;例如cron
,systemd
和launchctl
(仅限 Mac)。是的 - 这可能会变得有点复杂,但您也可以自由地做出选择,然后如果您有更好的想法则可以更改它。
我就停在这里。您可能会对rsync
是否选择将其用作解决方案的一部分有更详细的问题。我还没有提到图像备份此处的解决方案,因为它是特定于 RPi 的,并且RPi SE 涵盖, 但它或许适合您情况的更好工具。无论哪种情况,一旦您选择了前进的道路,请随时提出后续具体问题。
答案2
reddit 用户 Moocha 和 Justin473说:
如果您在创建存档时明确提供远程 borg 的完整路径,它会起作用吗?即,
sudo borg create --debug --stats --remote-path /usr/bin/borg borg@octolen:/Users/borg/BorgRepos/RetroPie2::Friday2 RetroPie
其中 /usr/bin/borg 是远程 Mac Mini 上看到的 Borg 二进制文件的路径,即 Mac Mini 上名为 octolen 的名为 borg 的用户将访问它。
听起来,当客户端连接时,borg 并不在路径中——ssh 没有启动交互式 shell,并且环境与交互式 shell 所获得的环境不同。
ssh 不会获取用户的配置文件,因此 PATH 是系统默认值,例如 /usr/bin:/bin。尝试将 —remote-path 传递给客户端,传递服务器上的路径。