分享免费的编程资源和教程

网站首页 > 技术教程 正文

大容量存储,ubuntu22.04安装配置bcache

goqiw 2025-03-24 16:22:57 技术教程 21 ℃ 0 评论

操作系统:ubuntu22.04

硬件环境:服务器:宁畅R640 G40,1个1.7T nvme做系统盘,2个3.2T NVME做缓存盘,HDD硬盘共36个,阵列卡9560-16I-8G

磁盘做成做成两个raid5,:23*20T磁盘做raid5,11*20T做raid5,2个硬盘做成热备盘,但是raid5超过7块磁盘会造成写效率低下,故打算用bcache做缓存提高raid效率

一、fio测试

1、安装fio

sudo apt update
sudo apt install fio

2、fio基本用法

  • fio 通过配置文件或命令行参数定义测试任务。以下是一些常用参数:
    • --name:测试任务名称。
    • --filename:测试文件路径。
    • --size:测试文件大小。
    • --rw:读写模式(如 read、write、randread、randwrite 等)。
    • --bs:块大小(如 4k、64k 等)。
    • --iodepth:I/O 队列深度。
    • --numjobs:并发任务数。
    • --runtime:测试运行时间(秒)。
    • --direct:是否使用直接 I/O(绕过缓存)。
    • --group_reporting:汇总所有任务的性能数据。

3、在未挂载卷的情况下,对磁盘进行读写性能测试,测试数据大小30G

顺序读

fio --name=seq_read_sda --ioengine=libaio --rw=read --bs=1M --direct=1 --size=30G --numjobs=1 --runtime=60 --time_based --group_reporting --filename=/dev/sda

顺序写

fio --name=seq_write_sda --ioengine=libaio --rw=write --bs=1M --direct=1 --size=30G --numjobs=1 --runtime=60 --time_based --group_reporting --filename=/dev/sda

随机读

fio --name=rand_read_sda --ioengine=libaio --rw=randread --bs=4k --direct=1 --size=30G --numjobs=1 --runtime=60 --time_based --group_reporting --filename=/dev/sda

随机写

fio --name=rand_write_sda --ioengine=libaio --rw=randwrite --bs=4k --direct=1 --size=30G --numjobs=1 --runtime=60 --time_based --group_reporting --filename=/dev/sda

混合读写

fio --name=mixed_io_sda --ioengine=libaio --rw=randrw --rwmixread=70 --bs=4k --direct=1 --size=30G --numjobs=1 --runtime=60 --time_based --group_reporting --filename=/dev/sda


4、在已挂载卷的情况下对磁盘进行读写测试

在已挂载卷的情况下,如果对磁盘进行写性能测试有可能造成磁盘数据被覆盖丢失,故--filename参数不能再指向设备名,需要指向具体的某个文件

(1)、生成测试文件

使用 fio 的 --randrepeat 参数在/dev/sda1生成30G随机数据:

fio --name=rand_test --filename=/mnt/filedisk/testfile --size=30G --rw=randrw --bs=4k --iodepth=32 --numjobs=8 --runtime=60 --direct=1 --group_reporting --randrepeat=1

(2)、读写测试

前面所有命令的 --filename参数需修改为:--filename=/mnt/filedisk/testfile

二、安装配置bcache

1、内核开启bcache

modprobe bcache
lsmod |grep bcache

2、安装bcache-tools

apt update
apt install bcache-tools

3、查看当前磁盘

后端磁盘sda 180T,sdb 400T,缓存盘nvme0n1和nvme1n1

4、清除磁盘块信息

wipefs -a /dev/nvme0n1
wipefs -a /dev/nvme1n1
wipefs -a /dev/sda
wipefs -a /dev/sdb

5、添加数据盘

make-bcache -B /dev/sda
make-bcache -B /dev/sdb

6、添加缓存盘

make-bcache -C /dev/nvme0n1
make-bcache -C /dev/nvme1n1

7、将缓存盘与数据盘绑定

查看缓存盘uuid,最后一行的cset.uuid的值就是我们要找的uuid

bcache-super-show /dev/nvme0n1
bcache-super-show /dev/nvme1n1

绑定缓存盘

echo "703eca51-28c3-4913-aa43-1e2d5172b546" > /sys/block/bcache0/bcache/attach
echo "116cfa32-5b94-4f04-8032-b282b49c950f" > /sys/block/bcache1/bcache/attach


一个数据盘只能绑定一个缓存盘,但是一个缓存盘可以绑定多个数据盘

8、查看缓存状态

cat /sys/block/bcache0/bcache/state

no cache:该backing device没有attach任何caching device

clean:一切正常,缓存是干净的

dirty:一切正常,已启用回写,缓存是脏的

inconsistent:遇到问题,后台设备与缓存设备不同步

9、更改缓存策略

如果缓存状态是clean,可以将缓存策略更改为writeback

Bcache有三种缓存策略

(1)writeback回写策略:数据先写入到缓存磁盘,再等待系统将缓存磁盘数据刷到后端磁盘

(2)writethrough写通策略:数据会同时写入缓存磁盘和数据磁盘(默认是该模式)

(3)writearound直达策略:数据直接写入后端磁盘。

查看缓存模式

cat /sys/block/bcache0/bcache/cache_mode
cat /sys/block/bcache1/bcache/cache_mode

改为writeback

echo writeback > /sys/block/bcache0/bcache/cache_mode
echo writeback > /sys/block/bcache1/bcache/cache_mode


那个方括号框在writeback,说明当前模式是writeback

10、格式化和挂载数据盘

缓存状态是clean的时候,bcache0和bcache1这时候就像一个裸设备一样,进行格式化和挂载处理

将bcache

格式化为xfs文件系统

mkfs.xfs /dev/bcache0

挂载到/mnt/data1

mkdir /mnt/data1
mount /dev/bcache0 /mnt/data1

添加到开机启动

blkid /dev/bcache0
vi /etc/fstab
UUID=**uuid**     mnt/data1                  xfs     defaults        0 0

三、bcache踩坑

1、/sys/block/bcache0/bcache下面的文件代表当前的运行参数,可以通过cat查看这些参数,echo重定向修改这些文件可以调整参数


attach:绑定缓存盘 detach:解除绑定缓存盘

state:缓存状态

dirty_data:当前缓存盘内还未写入数据盘的脏数据量

stop:1停止缓存

其他的参数有空慢慢测试

2、/sys/fs/bcache下面可以看到当前绑定的缓存盘uuid,操作相应uuid文件夹下的文件可以获取和修改相应缓存盘的参数


3、bcache-super-show

bcache-super-show 是一个用于显示 bcache 设备超级块信息的工具,可以查看 bcache 设备的详细配置信息,包括设备状态、UUID、缓存模式等

数据盘:可以看到工作在writeback模式

缓存盘:

bcache0:不知道为什么,bcache0查看超级块始终报错,好像也不影响使用,留待以后解决

4、卸载bcache设备

(1)停止所有bcache设备

echo 1 | sudo tee /sys/block/bcache*/bcache/stop

(2)卸载所有bcache设备

sudo umount /dev/bcache*

(3)清除设备bcache配置

sudo wipefs --all /dev/sda
sudo wipefs --all /dev/sdb
sudo wipefs --all /dev/nvme0n1
sudo wipefs --all /dev/nvme1n1

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表