OMV使用固态硬盘作为缓存
给大家一个 OMV 添加固态缓存的方案。
这算是 OMV 教程的一个番外篇,给 OMV 添加缓存。其实 OMV 系统的面板里,插件里都没有缓存这个选项,就当前的版本 (OMV5),我们需要自己搞定。
在 google 上搜索,也没有找到现成的教程,只能找到一些线索,其中提到了 dm-cache 和 bcache。
我们都知道,OMV 是基于 Debian 的,只需要知道 Debian 系统上怎么使用固态作为机械硬盘的缓存就可以了,毕竟缓存盘在 Linux 服务器上还是很常见的。
Linux 的缓存方案其实挺多的,其中就有前面提到的 dm-cache 和 bcache,综合考虑之后我决定使用 bcache。
# 硬件介绍
NAS 配置
- 主板 华擎 IMB-170-V
- CPU i5-3380M
- 内存 金士顿 8G DDR3 1600 笔记本内存 * 2
硬盘
- 三星 (型号忘了) 120G 固态 * 1
- 东芝 P300 3T * 4
- 朗科 240G 固态 * 1
其中 4 块机械硬盘组成 RAID5 阵列,120G 固态作为系统盘,240G 固态作为缓存盘。
# 准备工作
首先需要知道 OMV 的一个注意事项,OMV 网络面板上有的选项,一定要在 OMV 的面板上做,如果你是使用命令行操作的,没有进入 OMV 的数据库,那会影响到后面的操作[1]。
还要知道,初始化 bcache 的时候,前端缓存和后端仓库,都需要是干净的,如果有数据存在要全部格掉,所以建议在组建 NAS 的时候就搞缓存,如果是使用了一段时间的 NAS,请一定要做好数据备份。
使用 bcache,建议对缓存盘也做好数据保护。
我们先在 OMV 的面板里创建好 RAID,机械盘组建好 RAID5,我在以前的文章里介绍过,这里不在赘述,如果资金充足,并且接口充裕,固态硬盘建议做 RAID1,防止缓存数据丢失。如果资金不足或者是接口不够,也没有关系的,数据是会及时回写的,即使缓存挂掉也最多只是丢掉刚刚写入的数据。
在开始动手之前,请熟读以下几篇文章,注意数据无价吗,开始动手之前请熟读以下文档,如果这篇文章和以下的文档以及相关链接有冲突,请以下面的文档为准,本文没有提到的注意事项和设置选项,请以下面的文档为准。包括稳定里链接的用户文档,FQA,也请熟读。
- https://www.kernel.org/doc/Documentation/bcache.txt (opens new window)
- https://bcache.evilpiepirate.org/ (opens new window)
- https://wiki.ubuntu.com/ServerTeam/Bcache (opens new window)
英文不好没关系,用翻译软件一段一段的翻译,不懂的地方就去百度,百度也不懂就去 google,一定要弄懂了,知道自己要设置哪些东西再动手。不要迷信本文,有些地方我可能没讲到,也可能是错的。
# 安装 bcache
使用 ssh 登录到 nas,安装 bcache-tools
sudo apt update
sudo apt install bcache-tools
2
然后请确保缓存盘和后端都是空的,如果不是空的,请提前清空,使用命令 wipefs -a
。
然后计算偏移量,原文是这样写的
Bcache has a bunch of config options and tunables. The defaults are intended to
be reasonable for typical desktop and server workloads, but they're not what you
want for getting the best possible numbers when benchmarking.
- Backing device alignment
The default metadata size in bcache is 8k. If your backing device is
RAID based, then be sure to align this by a multiple of your stride
width usingmake-bcache --data-offset
. If you intend to expand your
disk array in the future, then multiply a series of primes by your
raid stripe size to get the disk multiples that you would like.
For example: If you have a 64k stripe size, then the following offset
would provide alignment for many common RAID5 data spindle counts::
64k * 2 * 2 * 2 * 3 * 3 * 5 *7 bytes = 161280k
That space is wasted, but for only 157.5MB you can grow your RAID 5
volume to the following data-spindle counts without re-aligning::
3,4,5,6,7,8,9,10,12,14,15,18,20,21 ...
我根据我自己的实际情况算一下,如果不会算,就直接按最大的 256 算,结果也就是 645120K,这个多大无所谓,就是浪费 650M 的空间,不在乎的。怕浪费直接用他给的 161280k 也没问题。或者是根据自己的实际情况算出来,
# 同时创建后端仓库和缓存盘
然后初始化并绑定缓存盘
make-bcache -B /dev/md127 -C /dev/sdc --data-offset 645120k
# 分步创建后端仓库和缓存盘
创建后端仓库
make-bcache -B /dev/md127 --data-offset 645120k
创建缓存盘
make-bcache -C /dev/sdc
绑定缓存盘,先查看缓存盘的 cset.uuid
,下面只是其中一种方法
ls /sys/fs/bcache/
找到 uuid,执行
echo <UUID> > /sys/block/bcache<n>/bcache/attach
例如
echo "a49786fb-226d-41cf-835d-d843c700172d" > /sys/block/bcache0/bcache/attach
# 设置硬盘
不出意外的话,这个时候就可以再 OMV 的面板上看到已经创建好的 bcache 磁盘了,我们在 存储器
-> 文件系统
-> 创建
里,为前面创建的带有缓存的磁盘创建文件系统,并且挂载上,注意这些都要在 OMV 的面板上操作,如果面板一直报错,就重启一次系统。
然后再从 访问权限管理
-> 共享文件夹
中创建共享文件夹。接下来就是正常操作了,没什么特殊的。
如果感觉性能不够,可以改为写缓存模式
echo writeback > /sys/block/bcache0/bcache/cache_mode
还可以对其他的选项做调整,详情请看 文档 (opens new window)
# 操作示例
# 删除缓存盘
首先需要将硬盘卸载,在 OMV 的管理面板中操作,然后将缓存模式改为 writethrough
,确定缓存盘里没有数据,再卸载
echo writethrough > /sys/block/bcache0/bcache/cache_mode
cat /sys/block/bcache0/bcache/state
后面输出 clean
即可继续后面的步骤。
echo "a49786fb-226d-41cf-835d-d843c700172d" > /sys/block/bcache0/bcache/detach
# 注销缓存盘
首先按照删除缓存盘步骤删除缓存盘,然后执行
echo 1 > /sys/fs/bcache/<UUID>/unregister
例如
echo 1>/sys/fs/bcache/a49786fb-226d-41cf-835d-d843c700172d/unregister
# 更换缓存盘
首先按照注销缓存盘步骤,正常注销原有缓存盘,如有必要,关机更换新的缓存盘,然后按照分步创建后端仓库和缓存盘中的步骤,创建新的缓存盘,并将新的缓存盘与 bcache 绑定。