蜜獾NAS:存储方案搭建、Rsync定时备份、Docker书库搭建

2021-01-16

前言

最近入手了一台蜜獾超存作为 NAS,完成了第一篇体验《蜜獾矿渣:上手、换电源、安装 OpenMediaVault》

随着硬盘陆陆续续到手,在本篇中进行储存方案的搭建。整个方案采用3块硬盘,两块 4t 机械硬盘,一块 SSD 固态硬盘。没有采用常见的 RAID 方案,而是采用定时任务加 rsync 的方式。记录了如何在 OpenMediaVault 中实现这个方案。自己并非这个领域的专家,这个方案也不成熟(气氛民科了起来),还请各位大佬批评指正。最后通过 Docker 部署了一个个人书库,将 NAS 正式利用起来。

硬盘展示

在选购硬盘时,首先上网了解了一下适合作为 NAS 盘的方案。

首先了解到的是 NAS 盘,但是发现价格太贵。而且 NAS 盘中的优化是为 RAID 准备的,在我的方案中使用不到这些功能。

监控盘成为不错的选择,这种盘主要用于 7x24 小时工作的监控设备,适合长时间工作。

随后又发现了海康威视盘,即西数和希捷都会给海康威视 OEM 的硬盘,价格比自营要低一些。

我入手了两块海康西数紫盘 4TB,型号为 WD40PUR,便宜也意味着风险,西数自营的紫盘型号为 WD40EZRZ,可以看到型号是不同的。另一点区别是海康盘走的是海康自己的售后,享受海康的三年质保换新服务,而非西数或希捷的售后。

提示:价格美丽的背后可能会有坑……

收到的硬盘外包装长这样:

海康紫盘的型号,可以看到印着海康的标:

SSD 选用一款铠侠的 240GB,享有 3 年厂商质保:

装机

将硬盘放入硬盘笼后,3 块新硬盘 + 1 块老硬盘,6 盘位的主机一下子充实起来。

三块硬盘插入后在 OpenMediaVault 系统中正确识别:

均格式化为 ext4 分区。点击【存储器】-【文件系统】,点击创建。

每块硬盘创建文件系统大约需要 5min。

文件系统创建成功后,点击【挂载】。

两块机械硬盘的 S.M.A.R.T 信息:

SSD 的 S.M.A.R.T 信息:

这 SSD 里面为啥会有这么多 Unknown_Attribute……

噪声

在上一篇中曾说道:

蜜獾的噪声由两部分组成:① 链力电源风扇噪声,② 机箱后面 2 个 8cm 风扇噪声。最终的噪声由两部分叠加而成。

更换完电源之后,电源的噪声消除了,整机的噪声得。7025B 非常静音,耳朵贴上去才能听到很轻微的一点点声音。整机噪声得到了一定下降。

但机箱风扇的噪声还在,这部分噪声虽然好了许多,但还是有点吵。后续打算更换静音风扇 + 减速线,把这部分噪声降低一点就完美了。

当时机箱里没有装硬盘。当我把2块紫盘装进去之后,发现噪声也进一步下降。分析来看,硬盘笼为空的时候,机箱后面两个 8cm 风扇的风噪较大,当填充硬盘后,风量减小,风噪也得到下降。目前的噪声,放在桌子底下基本可以忽略了。

PS:最近又发现这两个 8cm 是两线扇,插在主板的四线风扇接口上。于是又买了俩四线扇,这样就能够 PWM 调速了,从而进一步降低噪声。风扇还在路上,等到了再评估效果。

存储方案

存储方案是本文的核心,这套存储方案主要由 3 块新硬盘构成,整体结构如下图所示:

图中可以看到每块硬盘是有编号的,每个编号都有具体含义:

  • SSD ssd3(240GB):应用数据盘
    • 后续高频访问的数据放在此盘下
    • 最突出特点是随时快速响应,比如在运行 MediaWiki 时,随时能够立即打开进行编辑,保障使用体验
    • 此盘下包含目录 ssd3_bk,将会分别备份到另外两块硬盘中 ssd3_bk_mssd3_bk_m2,其中后缀 m 为镜像(Mirror)的含义,bk 为备份(Backup)的含义
  • 紫盘 hd1(4TB)主数据盘:
    • 这个盘下主要存放大容量比分数据
    • 备份目录 hd1_bk:此目录下数据会备份到 hd2 的 hd1_bk_m
      • 适合存放一些重要资源
      • 如 Docker 应用的数据,重要文档、书库等
    • 无备份目录 hd1_nbk
      • 适合存放一些不重要资源,这些内容不会被备份
    • ssd3 备份 ssd3_bk_m
  • 紫盘 hd2(4TB)从数据盘:
    • 备份目录:hd1 备份而来的数据 hd1_bk_m
    • 无备份目录:
      • 适合存放一些不重要资源
    • ssd3 备份 ssd3_bk_m2

在实际使用中:

  • 保存的重要资料,则打开 hd1 进行保存,它将在固定时间点被同步到 hd2。
  • 保存不重要资料,可人选 hd1 或 hd2 的无备份目录进行保存。
  • SSD 和 hd1 的备份目录,将在固定时间点被同步到 hd1、hd2。

特点

整个存储系统即包含有备份空间,也存在无备份空间,充分利用磁盘空间。在数据读取性能上,采用 SSD 盘提高读取速度。

整个方案中重要数据有多份备份,任何一块盘损毁都不会导致数据完全丢失。但由于同步是每天一次,可能会丢失最新的部分。这个限制是可以接收的,因为我平时往 NAS 里存文件频率不高,而且有保留源文件的习惯。

与其它方案一样,这个方案也要多留意硬盘的健康状态,硬盘健康出现问题后及时更换,可降低数据丢失的风险。

冷备份是不可或缺的,具体做法为用移动硬盘连接 USB 3.0,使用 rsync 同步 hd2 全盘数据即可。

如果有硬盘出现健康问题,需要进行换盘,具体操作为将新硬盘插入空余硬盘位,进行格式化操作,建立 ext4 分区。将问题盘数据全盘拷贝到新分区中。关机,取出问题盘。开机,为新硬盘添加问题盘同标签(ssd3/hd1/hd2)。

风险声明:该存储系统仍处于概念阶段,未经过长时间、广泛验证。因此可能存在潜在问题,包括数据丢失、磁盘加速老化等风险。这些都需要后续进行大量验证。对数据可靠性有高要求的用户建议使用成熟的冗余备份方案。

搭建过程

在本节中介绍如何在 OpenMediaVault 中实现这个存储方案。

根目录共享

首先创建根目录的共享目录,通常不会直接访问根目录,一般用作维护。

分别创建:

目录名路径
ssd3ssd3/
hd1hd1/
hd2hd2/

进入【访问权限管理】-【共享文件夹】进行添加操作:

之后进入【服务】-【SMB/CIFS】,将共享文件加添加共享。

数据目录共享

分别创建:

目录名磁盘路径SMB/CIFS共享
ssd3_bkssd3/ssd3_bk
hd1_bkhd1/hd1_bk
hd1_nbkhd1/hd1_nbk
ssd3_bk_mhd1/ssd3_bk_m
hd2_nbkhd2/hd2_nbk
hd1_bk_mhd2/hd1_bk_m
ssd3_bk_m2hd2/ssd3_bk_m2

最终共享目录效果如下:

rsync 备份策略

凌晨 5 点开始执行增量备份。原因是我经常因失眠而通宵,但是到了凌晨 5 点,哪怕自己还没睡也没什么生产力了,可认为是空闲时间。

每天从五点开始:

时间源路径目标路径
05:00ssd3/ssd3_bkhd1/ssd3_bk_m
05:10ssd3/ssd3_bkhd2/ssd3_bk_m2
05:20hd1/hd1_bkhd2/hd1_bk_m

效果验证

第二天打开 hd2/hd1_bk_m,可以看到数据已经备份过来了:

打开 OpenMediaVault 日志后台,看 rsync 日志:

首先可看到 05:00 和 05:10 的两个 SSD 备份任务执行:

在上图可看到 05:20 hd1 向 hd2 备份的任务执行。hd1 中包含了大约 2GB 电子书库,21 秒备份完成。基本上 100MB/s 的速度吧。

安装 Docker

参考文献《OpenMediaVault(OMV)配置Docker》《OpenMediaVault(OMV)安装omv-extras》omv-extras.org《OMV安装:系统安装设置及一些功能的开启》

首先安装 omv-extras,之后【系统】中会多出【OMV-Extras】项。

值得一提的是,omv-extras 的 deb 包放在 GitHub 上 CDN 上面,这个网址通常是连不上的。这里有两个办法,一个是想办法连上去,另一个是下载 deb 包,在 OpenMediaVault 的 Web 管理页上手动安装。

进入【OMV-Extras】,进入【Docker】,选择分页内的【Docker】下拉框,选择安装。

docker 安装好后接下来安装 【Portainer】,安装完成后【Open Portainer】。

首次打开会创建一个用户,默认用户名为 admin。进入首页:

安装书库 calibre-webserver

calibre-webserver 是一个基于Calibre的简单的图书管理系统,支持在线阅读。主要特点是:

  • 由于Calibre自带的网页太丑太难用,于是独立编写了一个。
  • 为了网友们更方便使用,开发了多用户功能,支持豆瓣(已废弃)、QQ和微博登录。
  • 借助Readium.js 库,支持了网页在线阅读电子书。
  • 支持从百度百科、豆瓣搜索并导入书籍基础信息。

虽然 OpenMediaVault 提供了网页的 Docker 管理,但是 OpenMediaVault 是基于 Debian 的,还是 ssh 上去撸命令行比较方便。而且还能实时看到网络拉取进度。

在命令行里拉取镜像:docker pull talebook/calibre-webserver

docker 官方源速度有点慢,参考Docker必备六大国内镜像更换为国内镜像。

数据存储路径:/srv/dev-disk-by-uuid-{hd1-uuid}/hd1_bk/calibre-webserver-data,即 hd1 的主备份目录。

启动容器:

docker run -d --name calibre -p 8080:80 -v /srv/dev-disk-by-uuid-{hd1-uuid}/hd1_bk/calibre-webserver-data:/data talebook/calibre-webserver

之后进入配置页面:

登录后进入主界面:

上传图书失败

上传图书时遇到失败:

原因是上传的电子书太大了……其实也并不大,40MB 的 pdf。

解决方法,需要设置 nginx 的最大上传大小,参见。改完后重启容器即可。

改完了之后,100MB 以内的基本上都能上传成功,再大的还是会失败,这就跟这个项目的实现方式有关了。

小结

经过一周多的使用,可靠性还是不错的。每天我都会整理一部分数据,备份到 NAS 上去。从上学到现在积累了很多文件,有课程设计,有毕业论文、发表论文,还有工作后的一些资料,之前都没有好好去整理,散落地到处都是。希望自己能够养成分门别类、定期整理的好习惯~