搭建无线Time Machine【Log.002】

  2023年3月22日更新:刚刚Time Machine帮我挽回了一份没保存的Keynote文件,虽然文件不太重要,但也减少了我重新编写文件的时间。

  本篇博文将介绍我借助mbentley提供的镜像使用Docker在OpenWrt系统的软路由下部署网络存储,并应用于Time Machine。本文同时介绍了一种机械硬盘的数据记录技术和磁盘文件系统。

Apple 时间机器设置界面

前情提要

  这里是一些概念的介绍,对此较为了解的同学可以直接看实践的部分。

    Time Machine

  Time Machine(时间机器)是苹果公司就著 macOS 操作系统而推出用作备份的工具程序。此程序可与苹果公司出品的网络存储设备 AirPort 时光囊、内置无线 Wi-Fi 网络的硬盘、内置及外置的设备配搭使用。

  Time Machine 会每天自动把用户系统上文件创建备份(也包括操作系统本身),能让用户回溯任何被变更或删除的文件到指定的日期以供日后恢复。

  根据我过去使用Time Machine的经验来看,这个工具能无声无息的完成同步和备份,也能在关键时刻找回很多重要文件。这种本可以做到类似iCloud的润物无声的体验,却总是被有线连接的硬盘给打断。因此,我希望能想办法在局域网挂载一个网络存储设备,来实现Time Machine的功能。

    OpenWrt

  OpenWrt是适用于嵌入式设备的一个Linux发行版,一般运行在软路由上。

  OpenWrt本身未带任何UI,需要通过LuCI,webif等各种延伸界面,LuCI界面是使用率最高的Web管理界面。

  我使用一台ABOX-600来充当软路由,并在其上安装了OpenWrt作为系统。选用OpenWrt的理由之一是,它的众多软件包中包含Docker。这将方便我以后部署其他我需要的服务。

    Docker

  Docker是一个开放源代码的开放平台软件,用于开发应用、交付(shipping)应用和运行应用。Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。

  这里我使用Docker运行mbentley提供的镜像,用来提供AFP协议的网络存储。

    EXT4

  第四代扩展文件系统(英语:Fourth extended filesystem,缩写为ext4)是Linux系统下的日志文件系统,是ext3文件系统的后继版本。

  由于OpenWrt使用Linux内核,我选择将磁盘格式化为该文件系统,以便防止与软路由的Linux文件系统不同而发生冲突。

    SMR

  叠瓦磁记录(英语:Shingled magnetic recording,SMR,直译为分层磁记录),是一种用于硬盘驱动器的磁存储数据记录技术,可提高存储密度和每个驱动器的整体存储容量。常规的硬盘驱动器通过写入彼此平行而不重叠的磁道来记录数据(垂直磁记录,PMR)。而叠瓦磁记录技术的硬盘写入的新磁道则与先前写入的磁道部分重叠,从而使先前的磁道更窄,因此能拥有更高的磁道密度。

  由于磁道存在重叠,叠瓦磁盘的写入过程较为复杂。同学们只需要知道,当SMR磁盘在尝试随机读写时,会有很明显的性能瓶颈。

小插曲

  我在网上物色了一块闪迪云盘ECO 1.92T的SSD,这是一块上电了4年的企业级固态,采用马牌主控,2G缓存,拥有掉电保护。由于担心其主控因为上电时间过长而不时掉盘,我将我台式机中的一块英特尔企业级SSD拆下来换上闪迪云盘,只用来存游戏;英特尔SSD则放到软路由中作为备份盘。

  在实操之前,我找好友借到了一块东芝2.5寸2T移动硬盘挂载到软路由上作为试验。在尝试将其格式化为EXT4文件系统的过程中,我的Web管理界面出现了明显的卡顿。我随后将该移动硬盘挂载到MacBook上,用我笔记本上的CentOS Stream 9虚拟机对其进行格式化。我使用的指令是mkfs.ext4 /dev/sda -f。随后我也察觉到了明显的iowait,经strace查看得知,系统调用fallocate()迟迟没有返回。

  我将笔记本设置为用不待机,用一晚上的时间完成了该磁盘的格式化。然后挂载到软路由上开始使用。该磁盘默认采用0022的umask挂载,这导致我在尝试给Docker中的用户分配rwx权限时,命令无法生效。我随后发现并改正了默认umask,但这样挂载的磁盘却总是让系统处于iowait状态,无法快速响应我的操作。

  经询问得知,好友的这块2.5寸HDD为SMR磁盘。这让我想起我在物色备份盘时,并未在市场上发现超过1T的2.5寸机械硬盘。原来是东芝采用的SMR技术提高了磁盘容量的密度。我不得不庆幸当时没有选择2.5寸大容量机械来做备份盘,避开了我忘了注意的SMR问题。

实践操作

  在开始操作之前,我已经将软路由刷入了OpenWrt系统,并安装了Docker。

  将英特尔SSD格式化为EXT4格式并挂载到软路由的/backup下。

  在Docker Hub中检索timemachine,找到了由mbentley在最近几日仍在维护的镜像:"docker image to run Samba or AFP (netatalk) to provide a compatible Time Machine for MacOS"

  我按照作者给的使用例,将/backup挂载到/opt/timemachine下,并给予host网络环境,启动后成功地让Mac在局域网下自动发现了该网络磁盘。

  进入该容器下的终端,将/opt/timemachine的权限修改为0777,以方便镜像内部非root账户操作该目录下的文件。

  最后在macOS上的Time Machine上设置网络磁盘备份,输入设置的用户名和密码后选择加密备份,Time Machine成功连接到Docker虚拟的AFP磁盘。

  在经过长达5小时的初次备份后,Time Machine能正常做到保留24小时内的每小时备份,一个月内的每天备份和每月备份。

参考资料

  1. Time Machine:https://zh.wikipedia.org/wiki/時光機_(macOS)
  2. OpenWrt:https://zh.wikipedia.org/wiki/OpenWrt
  3. Docker:https://zh.wikipedia.org/wiki/Docker
  4. EXT4:https://zh.wikipedia.org/wiki/Ext4
  5. SMR:https://zh.wikipedia.org/wiki/叠瓦磁记录
  6. timemachine Docker镜像:https://hub.docker.com/r/mbentley/timemachine

评论

此博客中的热门博文

德州扑克-web全栈开发【Log.003】

序【Vol.001】