Time Capsule是苹果公司推出的与Mac配合使用的无线硬盘驱动器,可以很方便地在Apple系列的设备之间共享数据,Mac可以利用Mac OS X系统下的Time Machine软件通过WiFi和Time Capsule连接实现系统的全自动备份。

想必很多人都使用过外置硬盘来完成电脑数据的备份,这确实可以工作的很好,不过尽管移动硬盘可以移动,但是相比WiFi,移动性还是差了很多,尤其是当在膝上办公的时候。如果有一个无线硬盘驱动器,确实可以方便不少,然而Time Capsule价格虚高,而且可定制性也不强,对于我这种爱折腾的人来说,自然不是一个好的选择,如果可以使用树莓派打造一个廉价版的Time Capsule,一定是一个很有趣的事情。

准备工作

准备移动硬盘

如果你是空硬盘,建议你在OS X系统下格式化它,文件系统选择HFS+。方便移动硬盘不使用无线的时候也可以直接连接Mac电脑。如果你的硬盘已经是Mac系统备份盘,则不需要做任何处理。如果你硬盘是其他文件系统格式,则建议你备份数据后,再在OS X系统把硬盘格式化为HFS+。

准备树莓派

先把移动硬盘插到树莓派USB接口,启动树莓派,并把树莓派接入无线路由器。启动完成后,可以使用如下命令查看硬盘是否已经是否正确接入到USB接口。

sudo fdisk -l
#
# WARNING: GPT (GUID Partition Table) detected on '/dev/sda'! The util fdisk doesn't support GPT. Use GNU Parted.
# 
# 
# Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
# 255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
# Units = sectors of 1 * 512 = 512 bytes
# Sector size (logical/physical): 512 bytes / 512 bytes
# I/O size (minimum/optimal): 512 bytes / 512 bytes
# Disk identifier: 0x00000000
# 
#    Device Boot      Start         End      Blocks   Id  System
# /dev/sda1               1  1953525167   976762583+  ee  GPT

# 列出所有块设备
sudo blkid
# /dev/mmcblk0p1: SEC_TYPE="msdos" LABEL="boot" UUID="140A-14B7" TYPE="vfat"
# /dev/mmcblk0p2: UUID="f24a4949-f4b2-4cad-a780-a138695079ec" TYPE="ext4"
# /dev/sda1: LABEL="EFI" UUID="70D6-1701" TYPE="vfat"
# /dev/sda2: UUID="7070f919-7738-309f-9a49-e3d643f33346" LABEL="TM" TYPE="hfsplus"

挂载hfs+分区

执行如下命令,使得raspbian支持hfs+分区。

sudo apt-get install hfsplus hfsutils hfsprogs

挂载hfs+分区。

sudo mkdir /tm
sudo chown -R nobody:nogroup /tm
sudo mount -t hfsplus -o force,rw /dev/sda2 /tm

# 如果想卸载,可以采用此命令 
sudo umount -v /dev/sda2 

配置无线硬盘驱动器

安装配置netatalk

Netatalk 是一个免费开源的 AppleTalk 通信协议的实现,Linux 或者 BSD 系统通过它可以充当 Mac 的文件服务器 (AppleShare File Server, 网络协议是 AFP)、AppleTalk 路由、打印服务器等。

手动安装 netatalk 3,它依赖于avahi-daemon(Avahi 是 Apple’s Zeroconf 协议的开源实现,实现类似 Bonjour 的功能,它可以让你在 Mac 系统里自动发现你的 Linux 计算机)。

# Remove Netatalk 2
sudo apt-get --purge remove netatalk

cd /usr/local/src
sudo wget http://prdownloads.sourceforge.net/netatalk/netatalk-3.1.7.tar.gz
tar -xvzf netatalk-3.1.7.tar.gz

# 安装相关依赖
sudo apt-get install automake autoconf avahi-daemon build-essential checkinstall db5.1-util db-util git-core libacl1-dev libavahi-client-dev libdb5.1-dev libgcrypt11 libgcrypt11-dev libpam0g-dev libtool pkg-config

cd netatalk-3.1.7

./configure \
    --enable-fhs \
    --with-acls \
    --with-init-style=debian-sysv \
    --with-zeroconf

make
sudo make install

sudo emacs /etc/afp.conf
sudo emacs /etc/netatalk/afp_signature.conf

# 创建一个用户用于netatalk
sudo adduser james --ingroup staff

/etc/afp.conf 示例

[Global]
mimic model = TimeCapsule6,106
log level = default:warn
log file = /var/log/afpd.log
hosts allow = 192.168.1.0/24
afpstats = yes
uam list = uams_dhx.so uams_dhx2.so uams_guest.so
zeroconf = yes
guest account = nobody
save password = no

; 默认用的是主机的hostname,一般情况下是raspberrypi
hostname = TimeCapsule

; 所有用户都可以访问
[TimeMachine]
path = /tm
time machine = yes

; 此共享目录需要用户名密码访问
[MacHome]
path = /home/james
valid users = james

最好不要在同一机器上既配置密码登陆又配置不需要密码的多个目录,这样会出现权限不一致的情况。

启动 netatalk 服务

sudo service avahi-daemon restart
sudo service netatalk restart

访问TimeCapsule

如果你用的是OS X系统,当netatalk服务启动后,局域网的OS X系统的电脑应该都可以主动发现TimeCapsule。

TimeCapsule

默认他可以显示所有供Guest访问的文件夹,如本例的TimeMachine。如果要访问指定用户的目录,如MacHome,则可以点击Connect As,输入用户名和密码即可以访问。

如果配置中加有 time machine = yes,则对应的文件夹可以被Time Machine发现。

TimeMachine

如果没有在Finder的侧边栏发现TimeCapsule,也可以尝试快捷键Command + k,输入地址 afp://192.168.x.x 来主动访问。