更改历史
- 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 --
复杂了,打开TMShowUnsupportedNetworkVolumes之后,就可以用samba之类的形式来做备份
那岂不是用window$也可以
建议不要使用 samba 等备份,因为有些文件属性(例如软连接、权限等)无法备份,使用后会出现问题
这么帅,那 sshfs 之类的岂不是更好?
博主已经改用debian发行版,不使用slackware了吗?
@fofighting
没,现在是混着用…
原来如此
Debian里面貌似是安装avahi-daemon,而且要安装它就默认有了后面那个nss-mdns了。
不知道你是不是也总是出现警告:
Something wrong with the volume's CNID DB, using temporary CNID DB instead. Check server messages for details!
研究了一下,原来出现警告的原因是cnidscheme不对:
~/TimeMachine \"TimeMachine\" allow:mingcheng cnidscheme:cdb options:usedots,upriv,tm
里面的cdb应该改成默认的dbd就好了,否则每次连接都会出现警告:
Something wrong with the volume's CNID DB, using temporary CNID DB instead. Check server messages for details!
参考:
http://forums.freebsd.org/showthread.php?t=20324
Lion版本的需要netatalk 2.2以上版本了,而且不需要安装avahi-daemon了,netatalk 2.2以上版本内置avahi了,如果是debian需要将源改至sid后安装。
哥,很诡异啊,为何我按照上面的方法,TimeMachine 备份的时候提示说“网络备份磁盘不支持所要求的 AFP 功能。”
难道还和Linux的分区有关?不能够啊。。。