自建基于 Linux 的 Time Capsule 服务
更改历史
- 2011-02-14 更改 netatalk 部分配置参数
- 2011-02-10 初始化版本
前言
Apple 的 Time Machine 提供了非常完备的数据备份方案,但每次使用外接磁盘备份很 麻烦也很容易忘记备份。同时,个人对于 Time Capsule “高昂的”售价(虽然它的确值那些钱)颇有微词。
其实,大部分管理员已经有数台 Linux 服务器,所以考虑能否安装类似 Time Capsule 的服务让 Linux 为 Mac 提供网络备份。
如果您和我一样有类似的需求,那么这篇文章可能就是你想要的 :^D
安装软件包
本人使用的 Linux 发行版为 Debian,其他发行版的也应该类似。
首先,安装需要的软件包:
% sudo apt-get install netatalk % sudo apt-get install avahi # 通常这个包已经安装了的 % sudo apt-get install nss-mdns
注意:如果需要自己编译安装 netatalk 包,则需要加入 ssl 支持,具体看编译脚本参数。
配置
上面的软件包正常安装完毕以后,接下来就是配置了。
服务器端
1、编辑 /etc/default/netatalk 文件,找到对应的内容,更改为
ATALKD_RUN=yes PAPD_RUN=no CNID_METAD_RUN=yes AFPD_RUN=yes TIMELORD_RUN=no A2BOOT_RUN=no
2、编辑文件 /etc/netatalk/afpd.conf 在最底部加入行:
- -tcp -noddp -uamlist uams_dhx.so,uams_dhx2.so -nosavepassword
3、编辑文件 /etc/nsswitch.conf 在最底部加入行:
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 mdns
4、新增文件 /etc/avahi/services/afpd.service,内容为:
<?xml version="1.0" standalone='no'?> <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> <service-group> <name replace-wildcards="yes">%h</name> <service> <type>_afpovertcp._tcp</type> <port>548</port> </service> <service> <type>_device-info._tcp</type> <port>0</port> <txt-record>model=Xserve</txt-record> </service> </service-group>
这个时候 netatalk 协议已经配置完毕,我们要共享出个目录让 Mac 映射为磁盘。编辑文 件 /etc/netatalk/AppleVolumes.default 加入下面的行:
~/TimeMachine "TimeMachine" allow:mingcheng cnidscheme:cdb options:usedots,upriv,tm
简单得说明下:
- 其中的 mingcheng 为用户名,它指定了哪些用户应用该规则。如果有多个用户,则使用“,”逗号分割。
- ~/TimeMachine 为用户主目录下的 TimeMachine 目录,也就是我们要保存备份数据的目录。
- "TimeMachine" 为映射磁盘的名称,便于辨别起见,通常不用更改。
- 较关键的地方是 “options:tm”,这个选项其实就是让 netatalk 充当 Time Machine 服务器的意思(via)。
- 更多的配置参见配置文件中的说明,很详细。
Tips:由于备份数据比较大,可以考虑 mount --bind 映射到 Linux 本地的其他合适的分区或目录(详细)。
至此,基本的 Linux 服务器端配置完毕,重启服务(重启需要花点时间)
% service netatalk restart % service avahi-daemon restart
重启服务以后,在 Mac 端连接 Linux 服务器,输入对应的用户名和密码以后,即可挂载已经配置好的磁盘。
Mac 端
在 Mac 端,我们还需要做些配置。打开终端(Terminal),执行下面的命令使 Time Machine 能够使用网络磁盘作为备份盘:
defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1
由于部分兼容性问题,还需要另外手工制作磁盘疏散镜像。打开“偏好设置”中的“共享”,可以看见“电脑名称”, 例如我的是“明城的 Macbook Pro”(注意大小写和空格),这里将其命名为 <computer_name>
然后,打开终端粘贴如下面的命令获得本机的网卡 Mac 地址,这里将其命名为 <mac address>
ifconfig en0 | grep ether | awk '{print $2}' | sed 's/://g'
如图,例如我的是
然后运行下面的命令,注意将上步骤获得的 <computer_name>、<mac address> 代入命令行:
sudo hdiutil create -size 320g -type SPARSEBUNDLE -nospotlight -volname "Backup of <computer_name>" \ -fs "Case-sensitive Journaled HFS+" -verbose ~/Desktop/<computer_name>_<mac address>.sparsebundle
注意:-size 320g 参数是本机的硬盘容量,请根据实际情况更改。
最终在桌面会有个类似我本机的文件名(注意空格等字符):
明城的 Macbook Pro_0026bb6a1f40.sparsebundle
然后将这文件扔到上面配置好的 Linux 网络磁盘根目录。打开 TimeMachine 选择对应的磁 盘,即可以开始开始备份。
Tips:首次网络备份会比较缓慢,建议插入网线。
一般问题
问:这样做符不符合 Apple 的协议?
答:未知,如有明确结果的,请各位告知。
问:为什么我选择网络磁盘以后,TimeMachine 一直在“正在准备磁盘”?
答:这是磁盘疏散镜像没有制作正确,或者你命名的文件名不正确。可以暂停备份,挂载网络磁盘看 TimeMachine 为你自己生成的文件名,然后在将上面步骤生成的文件替换。
问:TimeMachine 的备份数据是加密过的吗?
答:抱歉,保存在服务器上的数据是 没有加密 的(数据传输如有 SSL 是加密的)。
参考资源
- http://wowubuntu.com/ubuntu-timemachine.html
- http://guides.macrumors.com/Fedora12_Based_Time_Capsule_Server
- http://www.kremalicious.com/2008/06/ubuntu-as-mac-file-server-and-time-machine-volume/
- http://www.levelofindirection.com/journal/2009/10/10/using-a-networked-drive-for-time-machine-backups-on-a-mac.html
-- EOF --