自建基于 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

自建基于 Linux 的 Time Capsule 服务_第1张图片

自建基于 Linux 的 Time Capsule 服务_第2张图片

重启服务以后,在 Mac 端连接 Linux 服务器,输入对应的用户名和密码以后,即可挂载已经配置好的磁盘。

Mac 端

在 Mac 端,我们还需要做些配置。打开终端(Terminal),执行下面的命令使 Time Machine 能够使用网络磁盘作为备份盘:

defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1

由于部分兼容性问题,还需要另外手工制作磁盘疏散镜像。打开“偏好设置”中的“共享”,可以看见“电脑名称”, 例如我的是“明城的 Macbook Pro”(注意大小写和空格),这里将其命名为 <computer_name>

自建基于 Linux 的 Time Capsule 服务_第3张图片

然后,打开终端粘贴如下面的命令获得本机的网卡 Mac 地址,这里将其命名为 <mac address>

ifconfig en0 | grep ether | awk '{print $2}' | sed 's/://g'

如图,例如我的是

自建基于 Linux 的 Time Capsule 服务_第4张图片

然后运行下面的命令,注意将上步骤获得的 <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 选择对应的磁 盘,即可以开始开始备份。

自建基于 Linux 的 Time Capsule 服务_第5张图片

http://files.gracecode.com/2011_02_10/1297309278.jpg

Tips:首次网络备份会比较缓慢,建议插入网线。

一般问题

问:这样做符不符合 Apple 的协议?
答:未知,如有明确结果的,请各位告知。

自建基于 Linux 的 Time Capsule 服务_第6张图片

问:为什么我选择网络磁盘以后,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 --

你可能感兴趣的:(linux,time,capsule)