在 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

评论 (5 Comments)

  1. 这家公司还是很有名气的。系统盘,用软raid,这样省很多的,比硬件raid卡。算过成本吗,整体效果如何。一直在读这家公司的blog,他们自己其实也是用zfs做存储。

  2. 学习了!

  3. 文章写的不错,能否交换友链啊,站长!

  4. 你的博客好多年没有更新了,最近几年在做什么呢?

  5. 好多年了啊…

发表评论