低成本NAS从掉速到性能翻倍:基于Bcache的NAS缓存优化实践
低成本NAS从掉速到性能翻倍:基于Bcache的NAS缓存优化实践
本文分享了一位技术爱好者通过Bcache技术优化低成本NAS存储性能的经验。从问题发现到解决方案的实施,详细记录了整个优化过程,包括工具安装、设备配置和性能测试等关键步骤。对于IT技术人员和NAS用户来说,这篇文章提供了实用的技术参考和解决方案。
低成本NAS从掉速到性能翻倍:基于Bcache的NAS缓存优化实践
引言
之前自己搭建的150元的 NAS,发现机械硬盘,传输速度在100mb左右徘徊,有时候发个碎片文件,速度严重下降,这个问题忒严重,这不准备上个二手的固态做缓存。
正好把台式机的系统盘拆下来,却遭遇了新问题。固态硬盘的速度从原本的 500 多 MB/秒骤降至 170 多 MB/秒,且降速呈山峰状极不稳定,与常见的 SSD 掉速情况不同。我严重怀疑是固态硬盘缓存满了导致掉速。
实际上,固态硬盘在使用中确实可能因缓存写满而出现掉速现象,这也是一个常见的冷知识。
为进一步排查问题,我把固态硬盘拆下,通过 M2 转 SATA 接口进行单独测速。
结果显示,其速度稳定在 128MB/秒左右,表现十分稳定。由此推测,问题可能出在 NAS 系统上,比如网络问题、主控过热保护(这种情况相对少见),也可能是主控为避免 SSD 降频发热,或者是缓存被占满。
全程速度稳定的可怕
想了半天,问题应该是缓存,鉴于问题集中在磁盘缓存方面,当缓存写满后性能必然受影响,因此需要对 NAS 缓存进行策略调整。
因为搭建的NAS是Linux系统,给我后续修改提供便利,直接改Bache或者LVM chche,
这两种方式都是将 SSD 作为缓存来加速机械硬盘(HHD),即数据先写入 SSD 缓存,再在后台慢慢写入 HHD。考虑到 LVM cache 需要改写磁盘,操作相对复杂,所以我决定采用 Bcache 为机械硬盘加速。
相关概念及策略
在使用 Bcache 之前,我们需要了解几个关键概念。
Bcache 支持三种缓存策略:
- writeback(回写策略):所有数据先写入缓存盘,随后等待系统将数据回写到后端数据盘,该策略性能最佳。
- writethrough(直写策略):这是 Bcache 的默认策略,数据会同时写入缓存盘和后端数据盘。
- writearound:数据直接写入后端磁盘,此策略性能最差。
Bcache 还具备以下主要功能:
- 可使用单个超速缓存设备为任意数量的后备设备加速,且在运行时能挂载和分离已使用的后备设备。
- 支持在非正常关机后恢复,确保只有在超速缓存与后备设备数据一致时才完成写入。
- 当 SSD 出现拥塞时,能限制传至 SSD 的流量。
- 拥有高效的写回实施方案,脏数据始终按排序顺序写出。
- 系统稳定可靠,可用于生产环境。
好了,废话不多说,直接上操作步骤
安装工具包
Bcache 通过 make - bcache 命令创建,需要安装相关工具包 bcache - tools。我们可以从 GitHub 下载源码进行编译安装:
下载源码(使用了 GitHub 链接代理加速):
wget https://github.moeyy.xyz/https://github.com/g2p/bcache-tools/archive/refs/tags/v1.0.8.tar.gz
解压源码压缩包:
tar -zxvf v1.0.8.tar.gz
安装依赖:
yum install libblkid - devel -y
编译安装(若没有 make 命令需自行安装软件包):
make && make install
格式化硬盘分区
在将硬盘应用到 Bcache 模式之前,需将目标分区格式化为 Bcache,此操作会破坏磁盘分区中的所有数据。如果磁盘是首次使用或为空,通常可跳过擦除分区文件信息这一步;若磁盘已挂载,需先卸载,否则会出现“device busy”的错误。
使用命令:
wipefs -a /dev/sdb /dev/sdc
创建缓存和后端设备
创建缓存(Cache):将 SSD 的分区作为缓存,使用命令:
make - bcache -C /dev/sdc1
可通过
bcache - super - show /dev/sdc1
查看相关信息。
创建后端(Backend):创建被加速的后端设备,即机械硬盘(HDD),使用命令:
make - bcache -B /dev/sdb
同样可通过
bcache - super - show /dev/sdb
查看信息。
设备绑定
之后就是通过Bache绑定磁盘设置cache设备的block_size。
测速:优化后的读写速度如下:达到270M左右,很稳定。
总结:
通过Bcache实现SSD缓存加速,本质是以软件策略弥补硬件瓶颈。这玩意是仁者见仁智者见智,主要是损失SSD读写次数给HHD换来读写速度。反正是旧的128G,不值啥钱。
注:数据无价,妥善保存!!!