大约半年前,我在 FreeBSD 服务器上设置了一个 netatalk3 / afpd 守护进程,并将其用作 MacBook Pro 的联网 TimeMachine。基本上就是发射后不管。
然后,本月初,我从版本升级3.1.2,1
到了3.1.7,1
。
据我所知,这是 FreeBSD 10.0
-->10.1
升级的一部分。
我花了一段时间才注意到守护进程不再运行;实际上,过了一段时间后,MacBook 开始抱怨错过备份。
研究该问题后,似乎 netatalk3 守护进程一直在重新启动,但即使我已经增加了/usr/local/etc/afp.conf
使用的日志级别log level = default:debug
,也似乎没有任何提示表明重新启动的原因:
Jan 24 19:06:24.841243 netatalk[8651] {netatalk.c:386} (note:Default): Netatalk AFP server starting
Jan 24 19:06:24.843728 cnid_metad[8653] {cnid_metad.c:510} (note:AFPDaemon): CNID Server listening on localhost:4700
Jan 24 19:06:24.844380 netatalk[8651] {afp_avahi.c:80} (info:AFPDaemon): Registering volume 'TimeMachine' with UUID: '<some UUID>' for TimeMachine
Jan 24 19:06:24.844434 netatalk[8651] {afp_avahi.c:94} (info:AFPDaemon): hostname: <hostname>
Jan 24 19:06:24.844451 netatalk[8651] {afp_avahi.c:106} (info:AFPDaemon): Registering server '<hostname>' with Bonjour
Jan 24 19:06:24.845279 netatalk[8651] {afp_avahi.c:302} (info:AFPDaemon): Successfully started avahi loop.
Jan 24 19:06:24.845319 netatalk[8651] {netatalk.c:456} (note:Default): Registered with Zeroconf
Jan 24 19:06:24.845356 netatalk[8651] {netatalk.c:218} (info:Default): child[8652]: exited 1
Jan 24 19:06:25.843370 netatalk[8651] {netatalk.c:254} (note:AFPDaemon): Restarting 'afpd' (restarts: 1)
Jan 24 19:06:25.845151 netatalk[8651] {netatalk.c:218} (info:Default): child[8654]: exited 1
Jan 24 19:06:26.842367 netatalk[8651] {netatalk.c:254} (note:AFPDaemon): Restarting 'afpd' (restarts: 2)
Jan 24 19:06:26.844195 netatalk[8651] {netatalk.c:218} (info:Default): child[8655]: exited 1
Jan 24 19:06:27.846723 netatalk[8651] {netatalk.c:254} (note:AFPDaemon): Restarting 'afpd' (restarts: 3)
...
什么都没有/var/log/messages
。除了10.1
升级之外,我没有对服务器做任何更改;它只是坐在那里做它的事情。
有人能给我一些建议,告诉我如何找到问题的原因吗?
答案1
这只是一个非常疯狂的猜测;netatalk 文档说了这一点:
AFP 协议主要通过 ID 而不是名称来引用文件和目录。Netatalk 需要一种方法来持久存储这些 ID,为此,有几种不同的 CNID 后端可用。CNID 数据库默认位于 @localstatedir@/netatalk/CNID/(volumename)/.AppleDB/ 目录中。
中央数据库
"Concurrent database", backend is based on Oracle Berkley DB. With this backend several afpd daemons access the CNID database directly.
如果一个卷上有多个 afpd 进程处于活动状态,则使用 Berkeley DB 锁定来同步访问。缺点是,单个 afpd 进程崩溃可能会损坏数据库。
BerkeleyDB过去曾多次困扰过我(使用其他软件,我没有使用 netatalk),所以我认为它可能再次成为问题。如果您使用的是 CDB 后端,并且*.bdb
该目录中存在 BDB 文件(或类似文件)@localstatedir@.../.AppleDB/
,您可以尝试将这些文件备份到某处,然后db_repair
在那里运行命令。命令名称可能是db4.9_repair
或类似,反映当前的 BerkeleyDB 版本。