概述
在前面的文章中介绍了 SSD加速SATA盘之flashcache策略。
一般我们也推荐选择稳定的flashcache策略来做SSD加速SATA盘,但在实践中,发现其在CentOS上编译安装还是很麻烦的,这里就抓紧研究实践了下bcache策略。
另外bcache使用可以用一块SSD来缓存多块SATA盘,对于使用中随时变动磁盘的应用场景来说,操作非常便捷。
并且官网说bcache的性能完全优于flashcache,参考:
http://www.accelcloud.com/2012/04/18/linux-flashcache-and-bcache-performance-testing/
Bcache
介绍:
https://wiki.archlinux.org/index.php/Bcache
https://bcache.evilpiepirate.org/
Bcache在Linux kernel 3.10版本加入了mainline,使用它只需要主机的kernel版本大于3.10即可。
bcache-tools 源码:https://evilpiepirate.org/git/bcache-tools.git
Ubuntu上安装
系统信息
1 | # lsb_release -a |
编译安装
加载系统的bcache module:
1 | # lsmod | grep bcache |
编译安装bcace-tools:
1 | # apt-get install -y pkg-config libblkid-dev |
网上搜索有这个bug的fix,如下:
https://www.spinics.net/lists/linux-bcache/msg02847.html
1 | --- a/bcache.c |
按上面patch修改bcache.c后,编译安装正常。
1 | # make |
CentOS上安装
因为bcache在kernel 3.10版本才进入主线,所以我们要保证CentOS的内核版本大于3.10,所以CenOS 6就不要尝试了,直接用新的CentOS 7吧。
系统信息
1 | # lsb_release -a |
编译安装
加载系统的bcache模块:
1 | # lsmod | grep bcache |
查看发现在kernel 3.10.0-693 版本里,默认是不编译bcache模块的,参考:
https://lakelight.net/2017/12/20/bcache-centos-7.html
这里就需要下载当前内核版本的源码,重新编译内核bcache模块,然后再加载bcache模块。
鉴于之前CentOS上安装flashcache时探索了内核版本的升级,所以这里在已经升级内核版本的机器上尝试,发现kernel 4.4版本默认已经编译好了bcache模块,所以在CentOS上使用cache时,还是建议升级到4.4版本内核。
1 | # uname -r |
编译安装bcace-tools:
1 | # yum install -y git pkgconfig libblkid-devel |
Bcache使用
下面在CentOS机器上,介绍如何使用bcache。
硬盘信息
1 | # fdisk -l | grep dev |
这里使用三块盘:vdb、vdc、vdd。
其中vdb、vdc是容量型磁盘,vdd是性能型磁盘,实验用vdd通过bcache加速vdb和vdc。
使用步骤
与bcache相关的命令有:make-bcache
和bcache-super-show
1 | # make-bcache |
创建backing device
1 | # make-bcache -B /dev/vdb |
创建cache device
1 | # make-bcache -C /dev/vdd |
绑定backing device到cache device
1 | # echo "4b60c663-7720-4dea-a17a-e9316078e796" > /sys/block/bcache0/bcache/attach |
查看bcache相关信息
1、state
1 | # cat /sys/block/bcache0/bcache/state |
state的几个状态:
- no cache:该backing device没有attach任何caching device
- clean:一切正常,缓存是干净的
- dirty:一切正常,已启用回写,缓存是脏的
- inconsistent:遇到问题,后台设备与缓存设备不同步
2、缓存数据量
1 | # cat /sys/block/bcache0/bcache/dirty_data |
3、缓存模式
1 | # cat /sys/block/bcache0/bcache/cache_mode |
4、writeback信息
1 | # cat /sys/block/bcache0/bcache/writeback_ |
解绑backing device的cache device
1 | # echo "697b764f-b3ef-4675-8761-d9518a12089c" > /sys/block/bcache0/bcache/detach |
解绑后设备可以继续使用,只是没有cache device的加速
添加新backing device
1 | # make-bcache -B /dev/vdc |
使用bcache device
1 | # mkfs.ext4 /dev/bcache1 |
注销bcache device
1 | # echo 1 > /sys/block/vdc/bcache/stop |
echo的数字不重要,可为任何值 ;)
快捷创建bcache device
1 | # make-bcache -B /dev/vdb /dev/vdc -C /dev/vdd |
遇到的问题
make-bcache命令有提示
之前做过bcache的device,重做bcache有提示
1 | # make-bcache -B /dev/vdb |
虽说有提示,但实际bcache device已经创建成果
针对上述情况,可以通过写device前一部分数据的方法解决
1 | 可以通过dd命令来清理device的前部分数据: |
设备没umount就直接注销
没有umount,注销bcache device后,设备依旧可以使用,umount后设备消失
1 | # lsblk |