结果:
目录
对以上需求生成一个评分标准和权重 (w),用于评估方案。分数越高越好。
数据持久性 (w=4)
安全性 (w=4)
照片视频管理 (w=3)
易用程度 (w=2)
访问灵活程度 (w=2)
运维工作 (w=2)
噪音 (w=2)
待机功耗 (w=1)
体积 (w=1)
可定制/DIY/扩展 (w=1)
根据我们的需求和主观印象进行的评分结果:
移动硬盘 | 商业 NAS 产品 | 云存储 | 云存储 + 本地服务器 | |
---|---|---|---|---|
数据持久性 (w=4) | 1 | 2 | 2 | 3 |
安全性 (w=4) | 1-3 | 1-3 | 1-3 | 1-3 |
照片视频管理 (w=3) | 1 | 2-3 | 1-3 | 1-3 |
易用程度 (w=2) | 3 | 2 | 3 | 3 |
访问灵活程度 (w=2) | 1 | 2 | 3 | 3 |
运维工作 (w=2) | 3 | 2 | 3 | 1-2 |
噪音 (w=2) | 3 | 2-3 | 3 | 1-3 |
待机功耗 (w=1) | 3 | 2-3 | 3 | 1-3 |
体积 (w=1) | 3 | 1-3 | 3 | 1-3 |
可定制/DIY/扩展 (w=1) | 1 | 2-3 | 2 | 1-3 |
总分 | 38-46 | 39-56 | 47-61 | 38-64 |
现有的 NAS 产品功能强大,外观酷炫,配置简单。但我选择自建服务器的原因主要有:
从上表看,云存储 + 自建本地服务器有不错的潜力。下面分别介绍云存储和本地部分的设置。
这里考虑的云端存储需求主要是文件+照片视频。
云存储的安全性
基本要求是使用的云存储服务必须在传输过程和存储时都加密,并支持基于硬件的二次认证。 但云存储的厂商仍然有能力读取你的数据。对此我们的解决办法是将数据进行分级管理,对可能发生的未授权访问情况进行分析。 对于高度敏感的数据会在本地 PGP 加密之后再上传。
在离线系统上生成 PGP 密钥并存储在 Yubikey 和硬件加密的U盘中
文件存储有很多选择,例如 Google Drive, iCloud Drive, OneDrive, Dropbox, 百度网盘。
需求:
由于 iCloud 的第三方访问比较困难,只能排除。百度网盘因为距离远 + 用户体验一般,也排除。
需求:
在大概了解了几个服务之后,选择基本就只有 Google Photos 和 iCloud Photos。 虽然 iCloud 不支持第三方访问,但还是纳入考虑范围。
它们之间的一些区别:
Google Photos 支持选择压缩和原图存储,iCloud 全部存储原图。
Google Photos 支持简单的图片编辑,iCloud 的 macOS 端有远超 Google Photos 的编辑功能。
综上,选择了 Google Photos。
使用 Google Drive 和 Google Photos 的同时,还订阅了 Google 的企业服务。 Google Workspace 允许 Gmail 账号使用自己域名下的邮箱地址、一个账号绑定多个地址、统一账户管理和详细的安全设置等非常多的功能.. 这里不详细介绍。 但企业版也有一些限制,例如某些 Google 的服务无法使用 (Stadia)。
自定义域名邮箱
账户管理
安全事件通知规则
硬件选择对功耗、噪音、维护工作量都有很大的影响。
无风扇系统
作为湾区贫困人口,我们的一房一厅公寓面积很小,噪音需要控制在即使放在卧室也能睡觉的程度。 另外由于机器 24 小时持续运行,长时间运行的系统中风扇经常是容易坏或需要维护的部件。 无风扇系统几乎不会积累任何灰尘,几年后干净如新,可以极大减少维护工作量。
选取的硬件配置如下:
这些可以放进一个小型机箱。因为家里有机架,使用了一个 2U 机箱。
本地服务器
服务器软件环境基于 Ubuntu Server。使用 Ansible 管理配置。 在系统上只直接安装少量软件,较复杂的服务(例如 Unifi Controller 等)用 Docker 部署。
数据同步
用 Rclone 备份云端数据到本地。这个软件类似 rsync, 但支持各种云存储服务。
本地数据加密
本地服务器的安全目标是即使服务器被物理访问(假设整台机器被偷走),数据也不会泄露。设置如下:
系统盘不加密,系统可以自行启动
因此任何敏感数据都不能写入系统盘。Rclone 访问云存储需要的 API Key 以 AES-256-CTR 加密形式存储在系统盘, 每次系统重启后需要人工提供密码重新解密,解密后的 key 只存在于内存中。
数据盘使用 LUKS 加密 (AES-256-XTS),每次系统重启后需要人工提供密码后才能挂载。
为了方便操作,写了一系列 shell 脚本,在每次 ssh 登录时如发现数据盘未挂载后会进行提示和协助解密过程。
这样的设置在一旦断电/重启后,系统中就没有足够的信息来解密存储的数据(解密密钥必须人工由外部提供)。
block devices
本地数据备份
没有使用 RAID 来做冗余,主要原因是不能有效应对用户操作失误(例如误删文件等)。 服务器上设置了一个定期的 rsync 任务把第一块硬盘里的数据同步到第二块硬盘(镜像)。 这样在误操作发生后,通常还有时间从镜像盘中提取数据。 另外因为服务器的数据同步安排确保了同一时间只有一块硬盘在写入,这样在操作过程中断电可以降低数据损坏的概率。