在 FreeBSD 10 上搭建 Time Machine 备份服务

Backblaze 是一家在线存储服务商,每隔一段时间他们就会发布他们的存储服务器 Storage Pod 设计细节Storage Pod 4.5),一些第三方公司就按照这个设计造出一些廉价的存储服务器来出售。

没调查清楚头脑一热就买了,买回来拆开一看有点后悔:

  • 只有一个系统盘,OS 装在一个盘上太危险,至少应该双硬盘 RAID1;
  • 只有一个电源,服务器系统至少需要配用2个可用电源;
  • 没有硬件 RAID,这个无所谓,我们也不打算用 RAID;
  • 只有2个 GigE 网卡,我们购买了额外2个 10 GigE;
  • 开箱操作不方便,更换一个硬盘每次都要把10几个螺丝钉卸下来;
  • 没有硬盘指示灯,哪个硬盘坏了无法从45个硬盘里迅速识别出来。
  • ……

backblaze

不过我们对这台存储服务器没太多要求,主要做归档备份用,不是我们的主备份,也不太在乎它是否可靠,所以先凑合着用吧。两年前我们提到 “把 Time Machine 备份到 FreeNAS 上”,FreeNAS 现在变得有点臃肿,官方要求最小 8GB 内存,推荐最小 16GB 内存,这次打算直接用 FreeBSD + ZFS.

ZFS 准备工作

我们选择 FreeBSD 做备份的主要原因就是因为 ZFS,ZFS 操作起来太方便了。把30个硬盘连起来创建一个叫做 backup 的大存储池,采用 raidz2(相当于 RAID6):

# zpool create backup raidz2 /dev/da0 /dev/da1 /dev/da2 /dev/da3 /dev/da4 /dev/da5 /dev/da6
 /dev/da7 /dev/da8 /dev/da9 /dev/da10 /dev/da11 /dev/da12 /dev/da13 /dev/da14 /dev/da15 /
dev/da16 /dev/da17 /dev/da18 /dev/da19 /dev/da20 /dev/da21 /dev/da22 /dev/da23 /dev/da24
/dev/da25 /dev/da26 /dev/da27 /dev/da28 /dev/da29

在 pool 上创建一个文件系统 timemachine,创建好后就自动挂载好了,不用再手动 mount:

# zfs create backup/timemachine

# df -h
Filesystem            Size    Used   Avail Capacity  Mounted on
/dev/ada0p2           447G    2.3G    409G     1%    /
devfs                 1.0K    1.0K      0B   100%    /dev
backup                 31T    278K     31T     0%    /backup
backup/timemachine     31T    1.0G     31T     0%    /backup/timemachine

对每个使用 Mac/Time Machine 的用户需要在 FreeBSD 系统上增加一个对应的帐户,并把帐户加到 timemachine 组里面便于统一管理:

# pw useradd -n vpsee -s /bin/csh -m
# passwd vpsee

# pw groupadd timemachine
# pw groupmod timemachine -m vpsee
# pw groupshow timemachine
timemachine:*:1002:vpsee

在 /backup/timemachine 下面新建一个用户目录,并给予适当权限:

# mkdir /backup/timemachine/vpsee
# chown vpsee:timemachine /backup/timemachine/vpsee
# chmod 700 /backup/timemachine/vpsee
# chmod 777 /backup/timemachine

安装和配置 Netatalk

Netatalk 是一个开源的 AFP (Apple File Protocol) 文件服务器,为 Mac OS X 提供文件共享服务。Avahi 是 Apple Zeroconf 协议的开源实现,类似 Bonjour 的功能,它可以让你在 Mac 系统里自动发现你的 FreeBSD 服务器。我们直接使用 pkg 安装软件包:

# pkg install netatalk3
# pkg install nss_mdns
# pkg install avahi

修改 nsswitch.conf:

# vi /etc/nsswitch.conf
#
# nsswitch.conf(5) - name service switch configuration file
# $FreeBSD: releng/10.2/etc/nsswitch.conf 224765 2011-08-10 20:52:02Z dougb $
#
...
hosts: files dns mdns
...

配置 afp:

# vi /usr/local/etc/afp.conf
;
; Netatalk 3.x configuration file
;

[Global]
vol preset = default_for_all_vol
log file = /var/log/netatalk.log
log level = default:info
hosts allow = 172.20.0.0/23
mimic model = TimeCapsule6,116
disconnect time = 1

[default_for_all_vol]
file perm = 0640
directory perm = 0750
cnid scheme = dbd

[TimeMachine]
time machine = yes
path=/backup/timemachine/$u
valid users = @timemachine
#512 GB limit
vol size limit = 512000

配置完后启动各服务:

# /usr/local/etc/rc.d/dbus onestart
# /usr/local/etc/rc.d/avahi-daemon onestart
# /usr/local/etc/rc.d/netatalk onestart

如果测试后都好用的话别忘了把服务加到启动文件里:

# vi /etc/rc.conf
...
zfs_enable="YES"
dbus_enable="YES"
avahi_daemon_enable="YES"
avahi_dnsconfd_enable="YES"
netatalk_enable="YES"
...

Mac 配置

在 Mac 上把这个选项打开:

$ defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1

打开 Finder -> Go -> Connect to Server… 填入 FreeBSD 的 IP 地址(afp://192.168.2.201)后点击 Connect,使用刚才创建的帐号和密码登录进入之后就会看到 TimeMachine 文件夹。

打开 System Preferences -> Time Machine -> On 选择 TimeMachine 文件夹,然后点击 Use Disk 就应该能用了。

timemachine

把 Time Machine 备份到 FreeNAS 上

Mac 上的 Time Machine 很好用,不过每次备份都要用移动硬盘挺麻烦的。如果有多人使用多台 Mac 能不能把大家的 Time Machine 统一备份到云里或者局域网的某台服务器上呢?我们实验室大部分人都在用 Mac,现在正需要这么一个备份方案。谷歌了一下,发现这种使用 Time Machine 备份到远程电脑的方案是最方便、廉价的了,只需要一台普通 PC 就可以充当备份服务器。

Apple 使用自己的 Apple Filing Protocol (AFP) 协议提供文件共享服务,FreeNAS 刚好支持这一协议(貌似 Openfiler 目前还没有实现 AFP)。在一台服务器或虚拟机上安装 FreeNAS,安装过程很容易,这里省略。

配置 FreeNAS

安装好后进入 web 管理界面创建一个新用户,然后创建一个新 APF 共享, 在左边菜单里面选择 Sharing->Add Apple (AFP) Share,这里需要注意钩上 Disk Discovery 并选择 Disk discovery mode 为 Time Machine:

create a afp share

搞定~

配置 Mac

现在剩下的配置在 Mac 完成,让 Mac 连接刚创建的 AFP Share,点击 Mac 顶部菜单 Go->Connect to Server…,填入 freenas 服务器的 IP 地址 192.168.2.200 连接服务器:

time machine backup

成功连接后会挂载一个 AFP share 盘,然后配置 Time Machine 选择这个盘当作备份盘:

time machine backup

大功告成,等着自动备份吧:

time machine backup