为了能够可靠且自动化备份数据(主要针对苹果设备),经过几天的努力,结合了多项开源技术,在家用网络环境中实现一个高可用性的分布式存储,并且能够支持苹果设备的TimeMachine备份。

费用只有苹果设备的一半,但是使用开源技术打造的分布式存储,不仅支持基于网络的TimeMachine备份,而且还实现底层数据透明镜像,自动在两台存储设备保持两个副本。这样,即使出现磁盘故障,也不会丢失备份数据。

使用到的开源技术主要有:

在内存有限的ARM环境使用glusterfs存储需要注意缓存配置 128M内存Arch Linux ARM使用glusterfs客户端

  • netatalk 和 avahi - 实现零配置(zeroconfig,由Avahi实现)的苹果文件协议(Apple Filing Protocol,由netatalk实现),使得苹果设备能够通过网络实现TimeMachine备份

安装netatalk

pacman -S netatalk

激活netatalk在启动时启动

systemctl enable netatalk.service

配置 /ect/afp.conf

[Global]
hosts allow = 192.168.1.0/16
log file = /var/log/netatalk.log
log level = default:debug

[Time Machine]
path = /g_data/g_backup/timemachine
valid users = timemachine
time machine = yes

这里timemachine帐号需要先在服务器上开设,并且设置好密码

Mac客户端连接TimeMachine的设备会提示帐号密码,认证通过后才能访问磁盘

启动 netatalk

systemctl start netatalk.service

然后在Mac客户端,使用finder尝试连接服务器,输入以下连接

afp://ip-of-pogoplug-or-archlinux

此时会提示帐号密码,认证通过后就可以看到挂载成一个远程磁盘。

Setting up time machine/netatalk/afp on arch linux arm (pogoplug)验证下来还是有问题的。虽然上述步骤可以将磁盘挂载好,但是使用 TimeMachine 选择磁盘的时候却看不到这个挂载磁盘。原因是TimeMachine需要使用使用zeroconf来发现设备,这个zeroconf在Linux上的实现称为 Avahi

Avahi是一个自由软件的”零配置网络”实现(Zero-configuration networking, zeroconf),包括了多播DNS/DNS-SD服务发现系统。允许程序发布和发现位于一个局域网内的服务而不需要做任何配置。例如,你可以加入一个网络并立即找到打印机进行打印,或者查看文件以及和其他用户通讯。(Avahi(software)))

参考 Arch Linux Avahi 启动 Avahi (似乎不需要配置)

systemctl start avahi-daemon.service

此时再次打开 Time Machine 面板,并且 “Select Disk…” 就会立即看到可以使用的 Time Machine 远程挂载磁盘

Time Machine远程磁盘

如果前面没有使用Finder挂载 afp://ip-of-pogoplug-or-archlinux ,此时也会提示你访问帐号和密码

最后,同样别忘记将 avahi-daemon.service 设置为操作系统启动时启动

systemctl enable avahi-daemon.service

总结

我们使用了两台性价比较高的希捷NAS存储以以下步骤实现了一个企业级的并且支持苹果设备TimeMachine备份的分布式存储。

完整的技术部署设备总体费用不超过3000元(在淘宝上1500元可以购买到一台4TB的希捷家用NAS存储)。而同样的费用只能购买到一台苹果的AirPort Time Capsule 3TB设备。最重要的是,所有的备份都是双份镜像,实现了数据的高可靠性。一切都是通过开源软件,通过合理的技术组合来实现的。

唯一的遗憾是设备造型没有苹果的漂亮,不过,你却拥有了两台在房间角落里默默无声地为你可靠备份数据的存储设备。

参考