用树莓派实现 Time Capsule

坊间传言

备份不做,十恶不赦

定期插移动硬盘跑 Time Machine 做备份太麻烦,官方 Time Capsule 又有点贵,用 Pi 搞个替代品是坠吼的哇。

准备好

  • 一个正常运行的 Pi
  • 用于备份的移动硬盘
  • 带外接电源的 USB 集线器,Pi 自带的 USB 口可能电压不够带不动外接硬盘

处理硬盘

先确认一下 Pi 是否识别了外接硬盘。

$ sudo fdisk -l
Disk /dev/sda: 298.1 GiB, 320072933376 bytes, 625142448 sectors
...
Device Start End Sectors Size Type
/dev/sda1 40 409639 409600 200M EFI System
/dev/sda2 411648 625141759 624730112 297.9G Microsoft basic data <== 看这里

格式化分区,我这里要格式化/dev/sda2

$ sudo mkfs.ext4 /dev/sda2

新建硬盘挂载点。

$ sudo mkdir /mnt/TimeCapsule

为了让 Pi 开机后能自动挂载外接硬盘,在/etc/fstab文件尾添加:

/dev/sda2       /mnt/TimeCapsule        ext4    rw,defaults     0       0

重启 Pi 之后,确认一下硬盘能成功挂载上。

pi@raspberrypi:~ $ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 15G 3.5G 10G 26% /
...
/dev/sda2 294G 63M 279G 1% /mnt/TimeCapsule <== 看这里
pi@raspberrypi:~ $

修改硬盘挂载点的 owner。

sudo chown -R pi:pi /mnt/TimeCapsule

安装配置 netatalk

Netatalk is a freely-available Open Source AFP fileserver. A NIX/BSD system running Netatalk is capable of serving many Macintosh clients simultaneously as an AppleShare file server (AFP).

$ sudo apt-get install netatalk

在文件/etc/netatalk/AppleVolumes.default尾添加:

/mnt/TimeCapsule "Time Capsule" options:tm

AppleVolumes.default文件的每一行,代表一个共享文件夹,默认的,当前用户的家目录会被共享出来,名字为Home Directory

# By default all users have access to their home directories.
~/ "Home Directory"

重启 netatalk 服务。

$ sudo service netatalk restart

确认

这时候,在 Time Machine 的设置里,应该能看到 Pi 上挂的盘了。

time-machine-hdd-available

选择硬盘,输入用户名、密码验证身份,完成配置。

注意,这里输入的用户名,应该和之前 chown 的相同(我是用户 pi),否则可能有读写权限的问题

time-machine-rpi-pass

打开 Finder,也能看到 Pi 共享出来的两个文件夹。

time-machine-pi-netshare

踩到的一些坑

可能是网上搜到的文章都比较老了,最开始,我参考这篇文章这篇文章这篇文章这篇文章做了一遍配置,报了下面的错误。

time-machine-rpi-erro

不知道是什么情况。好在最后换了个套路搞定,所以我感觉

  • 硬盘不一定非要是hfs+格式
  • 不用配置 Avahi

参考