前要:
一直以来使用外置硬盘给Mac做Time Machine备份盘,但是存在若干不够方便的地方,如:
- 磁盘需要格式化为APFS格式,虽然APFS的“卷共享容器空间”的机制可以很方便的让Time Machine卷和其他资料卷共用空间,而不是像传统的分盘让空间分隔,还要考虑空间分配问题。但APFS格式只在macOS设备间方便使用
- 虽然在不连接磁盘的情况下,内置存储也会保留24小时内到每小时快照,但总是需要刻意记起找出插入硬盘进行备份的操作
正好最近使用旧电脑刷了Ubuntu用作NAS使用,于是想了解关于如何配置无线Time Machine
无线Time Machine的共享协议选择:
最开始找到的教程是使用AFP的开源实现netatalk让Linux支持AFP共享协议,然后作为Time Machine盘。但发现netatalk最近曝出过严重漏洞,项目本身在GitHub也只有0.2K Star的关注。主观感觉其稳定性是存在疑问的。
后来发现,并不一定是AFP协议的共享才能做Time Machine备份盘;Samba只要进行一些配置就能做Time Machine备份用了
在Apple官方文档中说明有写到
【提示】如果可以选择 SMB 或 AFP,请使用 SMB 来备份到外置备份磁盘。
目前Apple官方也是更推荐使用SMB协议来作为无线Time Machine备份的
Linux上Samba的配置
首先需要安装avahi和samba,关于其安装和配置和samba用户的设置管理这里不再赘述,不同的Linux发行版安装方式会有一些差异,可以自行搜索。
个人的 /etc/samba/smb.conf 内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
[global] workgroup = WORKGROUP server string = %h server (Samba, Ubuntu) log file = /var/log/samba/log.%m max log size = 1000 logging = file panic action = /usr/share/samba/panic-action %d server role = standalone server obey pam restrictions = yes unix password sync = yes passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . pam password change = yes map to guest = never usershare allow guests = no security = user public = no writable = yes guest ok = no vfs objects = catia fruit streams_xattr min protocol = SMB3_11 smb encrypt = required ea support = yes fruit:metadata = stream fruit:model = MacSamba fruit:posix_rename = yes fruit:veto_appledouble = no fruit:wipe_intentionally_left_blank_rfork = yes fruit:delete_empty_adfiles = yes fruit:aapl = yes [samba_WD] #comment = mydisk #available = yes #browseable = yes path = /media/xiaoming/WD vaild user = xiaoming create mask = 0755 [samba_xiaoming] #comment = xiaominghome #available = yes #browseable = yes path = /home/xiaoming/Documents vaild user = xiaoming create mask = 0755 [myTimeMachine] path = /media/xiaoming/WD/tmbackup valid users = xiaoming fruit:time machine = yes #fruit:time machine max size = 500G |
其中,与 Time Machine 的启用相关的关键部分为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[global] vfs objects = catia fruit streams_xattr min protocol = SMB3_11 smb encrypt = required ea support = yes fruit:metadata = stream fruit:model = MacSamba fruit:posix_rename = yes fruit:veto_appledouble = no fruit:wipe_intentionally_left_blank_rfork = yes fruit:delete_empty_adfiles = yes fruit:aapl = yes [myTimeMachine] path = /media/xiaoming/WD/tmbackup valid users = xiaoming fruit:time machine = yes #fruit:time machine max size = 500G |
因为个人这里是只配合自己的Mac使用的,所以配置文件尽量确保了安全性和与macOS设备的兼容性,比如在global中把最小连接协议设置为SMB3_11,强制启用了传输加密,和很多更加兼容macOS的fruit选项。请根据个人需求修改。
配置可参考
Configure Samba to Work Better with Mac OS X
最后使用systemctl restart smbd另配置生效即可。
备份盘的选择:
上述配置文件中,/media/xiaoming/WD是外置硬盘在fstab中设置挂载的路径,而Time Machine备份的目录则放在了该目录的./tmbackup下。登陆用户我设置为“xiaoming”,并确保这两个目录都具有用户“xiaoming”的权限读写。后续在使用SMB访问时,才能正常读写文件
特别提示:如果你的外置磁盘并非ext4这样的适合Linux使用的格式,而是如exFAT这种,会出现问题。像exFAT是不兼容在Linux上的文件用户分组的。个人测试,exFAT磁盘中所有文件所属只能为root:root。且使用sudo chown -R xiaoming:xiaoming也无法更改权限。建议备份磁盘文件后,格式化为ext4这种适合Linux使用的格式
macOS上的配置:
打开访达,边栏上应该能直接看到服务器,点击后点上面的“连接身份...”,再点“注册用户”,输入用户和密码,勾选“在我的钥匙串中记住此密码”,点连接,随后会显示出多个共享,多选连接即可。
如果边栏没有,则需按command+K来手动连接,输入smb://xiaomingnas.local。这里xiaomingnas.local中的xiaomingnas是主机的hostname,通常avahi的mDNS服务会使用<hostname>.local作为域名。点连接,后续步骤与上述相同。
随后在Mac的系统设置-通用-时间机器,点+号,就能选择设置的Time Machine进行备份了。然后根据提示设置登录用户名,时间机器的加密密码即可。
无线备份受限于网络传输速度,首次备份可能需要数小时才能完成,可耐心等待。
Time Machine默认设置了速度限制,以保障网络和磁盘可正常使用,首次备份可以在Mac上暂时解除该限制
1 2 3 4 5 6 7 8 |
#解除限制 $ sudo sysctl debug.lowpri_throttle_enabled=0 #恢复速度限制: $ sudo sysctl debug.lowpri_throttle_enabled=1 #查看状态 $ sysctl -n debug.lowpri_throttle_enabled |
用外置磁盘和无线共享设置Time Machine的区别:
使用外置磁盘备份,点击边栏上的卷后,可以看到目录形式展示的每次的备份,并直接查看其中的目录文件。还可以方便地多选备份进行删除,来腾出空间占用
而使用SMB共享作为备份盘。这会在共享路径下生成一个类似“小明的MacBook Air.sparsebundle”目录。大致结构如下
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ tree -L 2 . └── 小明的MacBook Air.sparsebundle ├── bands ├── com.apple.TimeMachine.MachineID.bckup ├── com.apple.TimeMachine.MachineID.plist ├── com.apple.TimeMachine.Results.plist ├── com.apple.TimeMachine.SnapshotHistory.plist ├── Info.bckup ├── Info.plist ├── lock ├── mapped └── token |
其中bands目录中会有大量固定大小为67MB的二进制文件,这些便是备份的数据。
Apple官方对sparsebundle的解释的大致意思是,它是一个以二进制形式存储的,可按需收缩和扩大的可扩展文件。
这样看用SMB共享设置Time Machine实际上更加灵活,相比之下不挑磁盘格式,且备份在Linux上的磁盘中仅作为某个路径下的某个目录存在,而不像使用外置磁盘备份一样单独占据一个APFS卷。
但其不能像外置磁盘一样,可以任意多选删除备份来腾出空间。但可以设置fruit:time machine max size来限制备份大小,这样达到空间临界点时macOS就会自动删除最旧的备份来腾出空间。当然,磁盘备份同样也可以在添加APFS卷时,通过设置“配额大小”来限制Time Machine过度膨胀(但设置完毕后不易变更)
实际使用的体验:
无线备份的速度慢于磁盘备份,这取决于你的局域网环境。不过备份过程同样是完全无感的,和有线备份一样,即使是合盖休眠情况下也会自动创建备份。
Time Machine是可以同时备份到多个位置的,因此可以同时使用磁盘备份和无线备份,这样数据安全性也更好。如果再配合zerotier异地组网,设置一个异地的NAS作为无线Time Machine,那么你就得到了一个符合“3-2-1原则”的,完全无感、自动化、无需干涉的备份系统。且Time Machine本身也有加密,无惧因备份介质遗失导致数据泄漏的风险。
考虑到传输速度,无线的Time Machine用于找回过去的文件没有问题,但不太适合做整机恢复,如果是换机这种操作,还是建议使用磁盘备份节省时间。
更建议使用 docker-timemachine 镜像进行配置,可以在搜索 docker-timemachine 然后进行配置。