Linux使用bcache 将SSD加速硬盘

2024-03-05 03:52

本文主要是介绍Linux使用bcache 将SSD加速硬盘,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

在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,稳定可靠,可在生产环境中使用。

Bcache通过make-bcache命令完成bcache的创建,需要安装相关的工具包bcache-tools。

我们通过编译安装 (Github)

https://github.com/g2p/bcache-tools/archive/refs/tags/v1.0.8.tar.gz

这是最新的v1.0.8,如果要查看其他版本请访问

Tags · g2p/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的分区作为缓存

缓存参数意义:

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

查看下

[root@master ~]# bcache-super-show /dev/sdc1
sb.magic		ok
sb.first_sector		8 [match]
sb.csum			C322F881FE092899 [match]
sb.version		0 [cache device]dev.label		(empty)
dev.uuid		d3834fdd-d31d-4347-9da3-31064cae77ac
dev.sectors_per_block	1
dev.sectors_per_bucket	1024
dev.cache.first_sector	1024
dev.cache.cache_sectors	20968448
dev.cache.total_sectors	20969472
dev.cache.ordered	no
dev.cache.discard	no
dev.cache.pos		0
dev.cache.replacement	0 [lru]cset.uuid		0609854c-f083-408b-8ea6-f90d4afd60c6

创建backend


接着创建被加速的backend 

make-bcache -B /dev/sdb

这快硬盘就是我们的HDD 机械硬盘

查看下

[root@master ~]# bcache-super-show /dev/sdb
sb.magic		ok
sb.first_sector		8 [match]
sb.csum			C71B7848F1913A17 [match]
sb.version		1 [backing device]dev.label		(empty)
dev.uuid		da958760-83c8-4d05-9789-f8b371bd62aa
dev.sectors_per_block	1
dev.sectors_per_bucket	1024
dev.data.first_sector	16
dev.data.cache_mode	0 [writethrough]
dev.data.cache_state	0 [detached]cset.uuid		9a492f33-f28d-41f8-8cb1-3cfd93d07885

注册

echo /dev/sdb > /sys/fs/bcache/register
echo /dev/sdc1 > /sys/fs/bcache/register

设备绑定

往backend附加cache

此处附加的uuid,是在上面查询到的cache的uuid

echo d3834fdd-d31d-4347-9da3-31064cae77ac > /sys/block/bcache0/bcache/attach

这篇关于Linux使用bcache 将SSD加速硬盘的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/775254

相关文章

Python使用Pandas对比两列数据取最大值的五种方法

《Python使用Pandas对比两列数据取最大值的五种方法》本文主要介绍使用Pandas对比两列数据取最大值的五种方法,包括使用max方法、apply方法结合lambda函数、函数、clip方法、w... 目录引言一、使用max方法二、使用apply方法结合lambda函数三、使用np.maximum函数

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2