linux 增加磁盘缓冲实例,Linux下SSD缓存加速之bcache使用

在Linux下,使用SSD为HDD加速,目前较为成熟的方案有:flashcache,enhanceIO,dm-cache,bcache等,多方面比较以后最终选择了bcache。 bcache 是一个 Linux 内核块层超速缓存。它允许使用一个或多个高速磁盘驱动器(例如 SSD)作为一个或多个速度低得多的硬盘的超速缓存。bcache 支持直写和写回,不受所用文件系统的约束。默认情况下,它只超速缓存随机读取和写入,这也是 SSD 的强项。它还适合用于台式机、服务器和高端储存阵列。CentOS和Ubuntu都可以使用bcache。bcache是在3.10以后的版本加入mainline的,因此需要3.10以上的内核版本。但是笔者使用Centos 7在3.10.0的内核上进行配置时,发现无法生成相应的配置文件节点,测试过程中使用4.3.3版的内核。

主要功能:

1,可以使用单个超速缓存设备来超速缓存任意数量的后备设备。在运行时可以挂接和分离已装入及使用中的后备设备。

2,在非正常关机后恢复 - 只有在超速缓存与后备设备一致后才完成写入。

3,SSD 拥塞时限制传至 SSD 的流量。

4,高效的写回实施方案。脏数据始终按排序顺序写出。

5,稳定可靠,可在生产环境中使用。

代码安装:

代码可以从github或官方网站上获取,但是master的代码版本非常老,dev branch的代码比较新。两种版本是不同的团队维护的,但是不管哪一个版本,在Ubuntu上编译都挺顺利,到了Centos上就遇到重重阻碍,有些甚至莫名奇妙,最后放弃了。

官方网站上获取:

git clone http://evilpiepirate.org/git/linux-bcache.git

编译bcache-tools:

#cd bcache-tools/#make & make install

Bcache配置

以下配置方法介绍中使用sdc表示cache device,也就是SSD的盘符,使用sdb表示backing device,也就是HDD的盘符。

格式化硬盘分区

应用硬盘到bcache模式之前需要将目标分区格式化为bcache,这一步会破坏磁盘分区中所有数据。方法和信息如下

#如果磁盘是第一次使用,或完全是空的,第一步通常不用执行,这一步市为了擦除分区文件信息,如果挂载也要先卸载,否则会出现device busy的问题#wipefs -a /dev/sdb /dev/sdc

#make-bcache -B /dev/sdb

UUID: 55d95b33-0736-4650-8fc0-c498c34c0feb

Set UUID: d62afd66-1f24-490b-985f-21176037e0ed

version:1block_size:1data_offset:16

#最后面的3个参数都可以不要,配置好以后可以通过控制节点进行修改#make-bcache -C /dev/sdc -w4k -b1M --writeback

UUID: f5ec37ac-2a74-48e0-85ed-1ae23810a4d2

Set UUID: 529b2734-5e08-4724-9893-f28b37735ad6

version: 0

nbuckets:32768block_size:1bucket_size:1024nr_in_set:1nr_this_dev: 0

first_bucket:1

缓存参数意义:

-B: 设置backing device-C: 设置cache device-w: block size (hard sector size of SSD),默认是2K,可使用--block=4K代替-b: bucket size,可以使用--bucket=1M代替

设备注册

格式化完成后需要完成设备的注册,使内核获取设备,可能由于内核版本的问题,在实际配置中发现,会报错,提示无法向register节点写入信息,但是并不影响使用。

#echo /dev/sdb > /sys/fs/bcache/register#echo /dev/sdc > /sys/fs/bcache/register

也可以通过下面的方式实现设备自动注册:

echo /dev/sd* > /sys/fs/bcache/register_quiet

完成注册以后会产生相应的系统节点,后面会有更详细的介绍:

/dev/bcache/

/dev/bcache/sys/block/bcache0/

/sys/fs/bcache/

设备绑定

完成注册的backing device需要在使用之前绑定到bchache,否则功能无法启用。首先找到完成注册的backing device设备的

#ls /sys/fs/bcache/

60fbcc3b-4f8e-485b-9f3c-c258c157d614 register register_quiet

那么< UUID > = 60fbcc3b-4f8e-485b-9f3c-c258c157d614。

#echo > /sys/block/bcache/bcache/attach

重新启动系统,完成配置。

实际配置后的磁盘情况,其中使用sdq作为backing device,sdr是SSD硬盘,单独建立一个16G分区作为cache用于性能测试。

#lsblk

sdq 65:0 0 558.9G 0 disk

└─bcache0252:0 0 558.9G 0 disk

sdr65:16 0 745.2G 0 disk

└─sdr165:170 16G 0 part

└─bcache0252:0 0 558.9G 0 disk

在/dev/目录下面你可以找到相应的bcache节点,相应的bcache会产生一些文件节点,比如下面的位置可以看到对应的绑定的两个磁盘:

#ls /sys/block/sdq/bcache/dev/slaves/

sdq sdr1

Bcache device状态查看

#bcache-super-show -f /dev/sdr

sb.magic ok

sb.first_sector8[match]

sb.csum 532A75DDACA80EC8 [match]

sb.version1[backing device]

dev.label (empty)

dev.uuid 0bb0de96-f7df-4fed-9280-b6e0615718da

dev.sectors_per_block1dev.sectors_per_bucket1024dev.data.first_sector16dev.data.cache_mode1[writeback]

dev.data.cache_state 0 [detached]

cset.uuid 538edd49-6d68-4fb0-8471-49a3346fae90

#bcache-super-show -f /dev/sds1

sb.magic ok

sb.first_sector8[match]

sb.csum 18DA32EC2B332BE2 [match]

sb.version3[cache device]

dev.label (empty)

dev.uuid 00a196c4-2af9-41b5-a450-e130ab1389e4

dev.sectors_per_block8dev.sectors_per_bucket2048dev.cache.first_sector2048dev.cache.cache_sectors33552384dev.cache.total_sectors33554432dev.cache.ordered yes

dev.cache.discard no

dev.cache.pos 0

dev.cache.replacement 0 [lru]

cset.uuid 60fbcc3b-4f8e-485b-9f3c-c258c157d614

设置文件系统和挂载

这个我就不同多说了,/dev/bcache可以当做普通盘符直接格式化所需的文件系统挂载:

#mkfs.ext4 /dev/bcache0#mount /dev/bcache0 /mnt

停用设备

注销设备:

echo 1 >/sys/fs/bcache//unregister

停用bcache:

echo 1 >/sys/block/bcache0/bcache/stop

擦除磁盘残留数据:

sudo wipefs -a /dev/sdc

sudo wipefs-a /dev/sdb

工作模式

bcache有四种不同工作模式:

writethrough、writeback、writearouond、none

工作模式切换:

echo writeback > /sys/block/sdr/bcache/cache_mode

参考文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值