家用 NAS 服务器(3)| SSD缓存加速机械硬盘
呀吼,读者朋友们我们又见面了 o( ̄▽ ̄)ブ。还记得上一章我们已经安装了 Windows Server,并且把 Ubuntu Server 成功在 Hyper-V 中安装。安装成功后,笔者将机械硬盘直通给了 Ubuntu 虚拟机。
但是大家都知道,机械硬盘的随机读写性能非常低,因此为了提高 HDD 的随机读写能力,在这一章中,笔者将带大家,通过设置 bcache
工具,将以 SSD 固态硬盘作为缓存,来提高机械硬盘的随机读写能力。
SSD 缓存可以有效缓解机械硬盘的随机读写性能低的问题,因此将是服务器投入使用前的第一件需要设置的事情。
在开始演示操作前,笔者先说明一下我的 Ubuntu 的设备结构。如果发现自己的设备结构不同,需要自行调整命令或在 Hyper-V 中修改设备位置。笔者的设备结构如下:
尽管硬盘不强制分区,笔者还是喜欢给每个存储设备分一个区,此处使用 fdisk
工具创建 GPT 表并进行分区:
> sudo fdisk /dev/sdc > g > n
读者如果有自己的分区需求,可以自行调整分区结构。此处 SSD 不参与分区。
分区后,笔者目前的分区设备为 /dev/sdc1
与 /dev/sdd1
。
bcache 是一项 Linux 下的工具,其允许使用固态硬盘作为读写缓存(writeback模式)或者读缓存(writethrough 或者 writearound模式)来为另一个 block 设备(通常是机械硬盘或硬盘阵列)加速。
此外,bcache 团队还开发了基于 bcache 的 bcachefs,这个文件系统在提供 SSD 缓存加速之余,还提供了 COW(Copy On Write 写时拷贝)、数据加密、数据备份和磁盘阵列等功能。不过此处我们已经设置了 xfs 文件系统,就不需要用到,下面的内容部分参考于 Bcache – ArchWiki。
在 Ubuntu 中如果要启用,需要先下载 bcache 工具。幸运的是,apt 源中已经含有 bcache,只需要用以下命令即可下载安装:
sudo apt install bcache-tools
注意:后面的 bcache 初始化操作,将会清空硬盘上的所有数据,因此 bcache 应该是在文件系统初始化之前的步骤。
然后,开始初始化固态硬盘和机械硬盘:
make-bcache -B /dev/sdc1 make-bcache -B /dev/sdd1 make-bcache -C /dev/sdb
如果上述命令成功执行了,那么现在在 /dev
目录下将多出两个设备:/dev/bcache0
和 /dev/bcache1
,分别对应着 /dev/sdc
和 /dev/sdd
。目前的缓存与后端设备的对应关系为:
之后,我们将固态硬盘作为缓存设备,添加到机械硬盘(后端设备)的缓存列表中。首先查看当前的固态硬盘缓存设备的 UUID:
ls /sys/fs/bcache/
echo /dev/sdb > /sys/fs/bcache/register
上面两条命令都能看到缓存设备的 UUID,把这个 UUID 记住,并添加到后端设备的缓存列表中,即可启用 SSD 缓存加速:
echo UUID__from_previous_command > /sys/block/bcache0/bcache/attach echo UUID__from_previous_command > /sys/block/bcache1/bcache/attach
显示bcached设备的信息:
bcache-super-show /dev/sdXY
停止后端设备:
echo 1 > /sys/block/sdX/sdX[Y]/bcache/stop
让缓存设备脱机:
echo 1 > /sys/block/sdX/sdX[Y]/bcache/detach
bcache 的工作模式一共有 4 种,分别是:
none
:完全不缓存。writeback
:性能最好的缓存模式,所有读写请求在 SSD 上完成的时候就视作请求完成。注意,这种模式虽然能大幅提升性能,但是由于 SSD 上的数据将异步的与后端设备进行同步,因此如果同步的过程中遭遇断电,可能将导致 SSD 上的数据损失。尽管如此,bcache 在下一次重启后,会继续将上次未完成的异步同步过程继续完成,将数据损失的风险降到最低。writethrough
:默认的缓存模式,性能相较于上面一个有所下降。此模式下,所有读操作都将经过缓存层。不同的是,所有写入请求将同时对 SSD 以及后端设备进行,且仅当后端设备写入完成后,视作请求完成。这样的好处是,写入后一段时间内的读操作得到了缓存的性能提升。writearound
:性能较低的模式,但是能延长 SSD 的寿命。此模式下,仅仅缓存读操作。
后端设备运行时,可以查看后端设备所采用的缓存模式:
cat /sys/block/bcache0/bcache/cache_mode cat /sys/block/bcache1/bcache/cache_mode
笔者考虑到 SSD 的寿命问题,以及自己对于写操作的缓存不是很感冒,因此选择修改缓存模式为 writearound
模式:
echo writearound > /sys/block/bcache0/bcache/cache_mode echo writearound > /sys/block/bcache1/bcache/cache_mode
当然,各位读者如果有自己的需求,可以自行选择缓存模式。
在建立好缓存机制的后端设备之上,我们将开始对其格式化文件系统。这个文件系统可自行选择,不一定要是 xfs 文件系统,只是笔者选择了 xfs。
首先,安装 xfs 的相关工具:
sudo apt install xfsprogs
之后,对我们的后端设备分区建立文件系统,注意之后直接对 bcache*
的设备进行操作:
sudo mkfs.xfs /dev/bcache0 sudo mkfs.xfs /dev/bcache1
至此,xfs 文件系统已经在含有 SSD 缓存的硬盘上成功建立,可以挂载了。
文件系统建立完毕后,最好是设置其自动挂载。
此处,我打算将两个盘分别挂载于 /mnt/sdc
和 /mnt/snapraid_backup
。首先创建好挂载点:
sudo mkdir -p /mnt/sdc /mnt/snapraid_backup
然后通过查看 bcache*
设备的 UUID 并记下来:
sudo lsblk -f
使用编辑器打开 /etc/fstab
,加入以下代码:
UUID=<bcache0 的 UUID> /mnt/sdc xfs defaults 0 0 UUID=<bcache1 的 UUID> /mnt/snapraid_backup xfs defaults 0 0
保存后重启系统,如果成功,则带有 SSD 缓存的机械硬盘就建立完毕了。
这一期,笔者终于把 SSD 缓存加速机制搭建好,也算是调教好 bcache 的功能了。在 bcache 的加持下,一段时间内的随机访问速度从原来的 2MB/s 提升到了现在的 30Mb/s,相较于原来的机械硬盘,已经有了巨大的提升。
此外,本期还将文件系统一起创建出来,为下一期的 mergerfs 和 snapraid 的出场做好了铺垫。只有当 mergerfs + snapraid 建立起来,才算是真正的给数据建立起了安全的港湾。
同志们如果觉得我的内容有用,还请给我留个赞和评论,最好点个关注,俺都会很开心的!😘
最近看到很多水分很大的博文,内容朴素无华且同质化严重,俺终究还是不想变成这种营销号,愿开源精神长存!
原文链接:https://blog.csdn.net/linkyy5/article/details/125884083?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171836987416800226511564%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=171836987416800226511564&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-26-125884083-null-null.nonecase&utm_term=%E7%BB%BF%E8%81%94NAS