当前位置: 首页 > news >正文

ubuntu20.04 调试bcache源码

搭建单步调试bcache的环境,/dev/sdb作为backing dev, /dev/sdc作为cache dev。

一、宿主机环境

1)安装ubuntu 20.04 :

参考ubuntu20.04 搭建kernel调试环境第一篇--安装系统_ubuntu kernel-CSDN博客安装,其中的第六节(安装qemu)、第七节(安装apache服务)安装完成即可。

2)配置网络

host(ubuntu系统)和guest(qemu运行的系统,待调试)之间需共享文件,所以需要配置网络。

参考ubuntu20.04 搭建kernel调试环境第六篇(上)--网络配置_ubuntu20 menuconfig-CSDN博客,按其中的第三节(ubuntu宿主机配置步骤)、第4节(buildroot配置)、第五节(启动虚拟机)配置,最终能ping通外网就行。

二、静态编译bcache-tools工具

guest运行的kernel是我们自己编译的,busybox只支持一些简单的命令,动态库也很少,所以无法使用apt-get install bcache-tools方式安装bcache的用户态工具。需要自己下载源码,然后用静态方式编译出可执行文件。

1)git下载bcache-tools源码:
git clone https://github.com/g2p/bcache-tools.git

2) Makefile改成静态编译

root@linux:/home/gsf/code/bcache-tool-git/bcache-tools# git diff Makefile
diff --git a/Makefile b/Makefile
index c824ae3..ccea7ee 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,8 @@ PREFIX=/usr
 UDEVLIBDIR=/lib/udev
 DRACUTLIBDIR=/lib/dracut
 INSTALL=install
-CFLAGS+=-O2 -Wall -g
+CFLAGS+=-O2 -Wall -g -static
+

3)编译bcache-tools

root@linux:/home/gsf/code/bcache-tool-git/bcache-tools# make

root@linux:/home/gsf/code/bcache-tool-git/bcache-tools# make install
install -m0755 make-bcache bcache-super-show    /usr/sbin/  (关注这一行中的两个文件)
install -m0755 probe-bcache bcache-register        /lib/udev/
install -m0644 69-bcache.rules    /lib/udev/rules.d/
install -m0644 -- *.8 /usr/share/man/man8/
install -D -m0755 initramfs/hook    /usr/share/initramfs-tools/hooks/bcache
install -D -m0755 initcpio/install    /usr/lib/initcpio/install/bcache
install -D -m0755 dracut/module-setup.sh /lib/dracut/modules.d/90bcache/module-setup.sh

可能遇到的错误1:

Perhaps you should add the directory containing `uuid.pc'
to the PKG_CONFIG_PATH environment variable
No package 'uuid' found
Package blkid was not found in the pkg-config search path.
Perhaps you should add the directory containing `blkid.pc'
to the PKG_CONFIG_PATH environment variable
No package 'blkid' found
make-bcache.c:11:10: fatal error: blkid.h: No such file or directory
   11 | #include <blkid.h>
      |          ^~~~~~~~~

解决:apt-get install libblkid-dev

可能遇到的错误2:

root@linux:/home/gsf/code/bcache-tools/bcache-tools-master# make
cc -O2 -Wall -g `pkg-config --cflags uuid blkid`    make-bcache.c bcache.o  `pkg-config --libs uuid blkid` -o make-bcache
/usr/bin/ld: /tmp/ccsteIC1.o: in function `write_sb':
/home/gsf/code/bcache-tools/bcache-tools-master/make-bcache.c:277: undefined reference to `crc64'
collect2: error: ld returned 1 exit status
make: *** [<builtin>: make-bcache] Error 1

解决:源码bcache.c中的crc_table数组、crc64函数复制一份,放在bcache.h前面。

三、kernel编译

在编译kernel前,需通过make menuconfig打开以下选项:

<*> Block device as cache

[*] Bcache debugging

 kernel编译参考:

ubuntu20.04 搭建kernel调试环境第三篇--kernel编译及运行_在qemu中运行f2fs-CSDN博客

四、qemu启动guest系统

以下命令在host即ubuntu中执行!

1)生成cache盘img,大小3G

root@linux:/home/gsf/linux-5.18.11# qemu-img create -f raw disk_raw_3G_C.qcow 3G

2)生成backing盘img,大小5G

qemu-img create -f raw disk_raw_5G_B.qcow 5G

3)生成用于测试nvme的img

qemu-img create -f raw disk10G.qcow 5G

3)启动guest系统

root@linux:/home/gsf/linux-5.18.11# qemu-system-x86_64 -kernel arch/x86_64/boot/bzImage -drive file=rootfs.f2fs,if=ide,format=raw,id=myid0 --nographic -append "root=/dev/sda console=ttyS0" -hdb disk_raw_5G_B.qcow -hdc disk_raw_3G_C.qcow -device nvme,drive=nvme1,serial=deadbeaf,num_queues=8 -drive file=disk10G.qcow,if=none,id=nvme1 -smp 4 -net nic,macaddr=52:54:00:12:34:56,model=e1000 -net bridge,id=net0,helper=/usr/lib/qemu/qemu-bridge-helper,br=virbr0

红色字段,创建/dev/sdb,在guest起来后,该设备会格式化成backing dev

蓝色字段,创建/dev/sdc,在guest起来后,该设备会格式化成cache dev

黄色字段,创建/dev/nvme0,作为nvme测试使用,bcache用不到。

guest系统启动后,输入root登录,dev文件如下:

# ls /dev  (guest中执行的命令)

cpu_dma_latency sda tty26 tty56

fd sda1 tty27 tty57

full sdb tty28 tty58  ---sdb

fuse sdc tty29 tty59  ---sdc

nvme0 tty17 tty47 vcsu1

nvme0n1 tty18 tty48 vga_arbiter

nvme0n1p1 tty19 tty49 zero

五、拷贝bcache-tools到guset系统

1)将make-bcache拷贝到guest中

host系统中执行:

root@linux:/var/www/html# cp /usr/sbin/make-bcache ./

root@linux:/var/www/html# cp /usr/sbin/bcache-super-show ./

host系统中执行:

root@linux:/home/gsf# ifconfig

找到virbr0的ip地址,比如

virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:5e:c9:bb  txqueuelen 1000  (Ethernet)
        RX packets 299  bytes 25524 (25.5 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 431  bytes 1335005 (1.3 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

guest系统中执行:

# wget http://192.168.122.1/make-bcache (上面ifconfig看到的ip地址)
Connecting to 192.168.122.1 (192.168.122.1:80)
saving to 'make-bcache'
make-bcache          100% |********************************| 1273k  0:00:00 ETA
'make-bcache' saved
# wget http://192.168.122.1/bcache-super-show
Connecting to 192.168.122.1 (192.168.122.1:80)
saving to 'bcache-super-show'
bcache-super-show    100% |********************************|  908k  0:00:00 ETA
'bcache-super-show' saved

# chmod 777 make-bcache
# chmod 777 bcache-super-show
# ls
bcache-super-show  make-bcache

六、配置bcache磁盘

以下命令在guest中执行!

1)格式化bcache设备

# /root/make-bcache -B /dev/sdb
UUID:            3a5fa145-1cc9-44e0-b91c-1beaf245355f
Set UUID:        25fceacc-0546-4c32-80d0-5c9881a1d67f
version:        1
block_size:        1
data_offset:        16
#
# /root/make-bcache -C /dev/sdc
UUID:            c66b56a8-bb3e-4d8e-9b9f-3b402cd6b258
Set UUID:        fe0af6ee-67e8-49c3-bfec-5633ba05f782
version:        0
nbuckets:        6144
block_size:        1
bucket_size:        1024
nr_in_set:        1
nr_this_dev:        0
first_bucket:        1

2)注册backing device

# echo /dev/sdb > /sys/fs/bcache/register
[ 2157.866302] bcache: register_bdev() registered backing device sdb

#


# 命令完成后,dev目录中会生成bcache0设备
# ls /dev/
autofs           ptmx             tty21            tty51
bcache0          pts              tty22            tty52
bsg              random           tty23            tty53

3)注册cache device

# echo /dev/sdc > /sys/fs/bcache/register
[  146.450348] bcache: bch_journal_replay() journal replay done, 0 keys in 1 entries, seq 4
[  146.453397] bcache: register_cache() registered cache device sdc

如果不注册cache device,就执行attach命令,会报下面错误:

# echo "fe0af6ee-67e8-49c3-bfec-5633ba05f782" > /sys/block/bcache0/bcache/attach
[  114.804472] bcache: __cached_dev_store() Can't attach fe0af6ee-67e8-49c3-bfec-5633ba05f782
[  114.804472] : cache set not found
sh: write error: No such file or directory

4)绑定backing dev到cache dev上

格式化的时候,/dev/sdb格式化成了backing dev, /dev/sdc格式化成了cache dev,通过bcache-super-show找到cache dev的cset.uuid值。

# /root/bcache-super-show /dev/sdc
sb.magic        ok
sb.first_sector        8 [match]
sb.csum            5E71456A3E5F13A8 [match]
sb.version        3 [cache device]

dev.label        (empty)
dev.uuid        c66b56a8-bb3e-4d8e-9b9f-3b402cd6b258
dev.sectors_per_block    1
dev.sectors_per_bucket    1024
dev.cache.first_sector    1024
dev.cache.cache_sectors    6290432
dev.cache.total_sectors    6291456
dev.cache.ordered    yes
dev.cache.discard    no
dev.cache.pos        0
dev.cache.replacement    0 [lru]

cset.uuid        fe0af6ee-67e8-49c3-bfec-5633ba05f782  (该值用于写入backing dev的attach文件中)

执行绑定指令:

# echo "fe0af6ee-67e8-49c3-bfec-5633ba05f782" > /sys/block/bcache0/bcache/attach
[  151.527075] bcache: bch_cached_dev_run() cached dev sdb is running already
[  151.528160] bcache: bch_cached_dev_attach() Caching sdb as bcache0 on set fe0af6ee-67e8-49c3-bfec-5633ba05f782

5)backing dev格式化成具体的文件系统(比如f2fs)

# mkfs.f2fs /dev/bcache0

    F2FS-tools: mkfs.f2fs Ver: 1.13.0 (2019-09-24)

Info: Disable heap-based policy
Info: Debug level = 0
Info: Trim is enabled
Info: [/dev/bcache0] Disk Model: QEMU HARDDISK   
Info: Segments per section = 1
Info: Sections per zone = 1
Info: sector size = 512
Info: total sectors = 10485744 (5119 MB)
Info: zone aligned segment0 blkaddr: 512
Info: format version with
  "Linux version 5.18.11-g50a65f78b667 (root@linux) (gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #20 SM"
Info: [/dev/bcache0] Discarding device
Info: This device doesn't support BLKSECDISCARD
Info: Discarded 5119 MB
Info: Overprovision ratio = 2.810%
Info: Overprovision segments = 148 (GC reserved = 79)
Info: format successful
[ 1491.536112] mkfs.f2fs (194) used greatest stack depth: 13264 bytes left

6)挂载/dev/bcache0

# mkdir /mnt/bcachemp  创建一个目录用于挂载/dev/bcache0


# mount /dev/bcache0 /mnt/bcachemp
[ 1672.244480] F2FS-fs (bcache0): Found nat_bits in checkpoint
[ 1672.366811] F2FS-fs (bcache0): Mounted with checkpoint version = 19642f45
[ 1672.371205] mount (196) used greatest stack depth: 13144 bytes left

# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                98.0M     74.5M     23.5M  76% /
devtmpfs                 44.9M         0     44.9M   0% /dev
tmpfs                    46.8M         0     46.8M   0% /dev/shm
tmpfs                    46.8M     52.0K     46.7M   0% /tmp
tmpfs                    46.8M     20.0K     46.8M   0% /run
/dev/nvme0n1p1           10.0G      3.4G      6.6G  34% /mnt/nvmemp
/dev/bcache0              5.0G    340.0M      4.7G   7% /mnt/bcachemp  (bcache 挂载成功

bcache设备挂载成功,可通过gdb调试代码(gdb调试可参考https://blog.csdn.net/geshifei/article/details/128235389) 。

相关文章:

ubuntu20.04 调试bcache源码

搭建单步调试bcache的环境&#xff0c;/dev/sdb作为backing dev&#xff0c; /dev/sdc作为cache dev。 一、宿主机环境 1&#xff09;安装ubuntu 20.04 &#xff1a; 参考ubuntu20.04 搭建kernel调试环境第一篇--安装系统_ubuntu kernel-CSDN博客安装&#xff0c;其中的第六…...

xss csrf怎么预防?

一、XSS&#xff08;跨站脚本攻击&#xff09;预防 XSS 是指攻击者向目标网站注入恶意脚本&#xff0c;从而在用户浏览器中执行。 1. 输入过滤 清理用户输入&#xff1a; 拦截或清理HTML特殊字符&#xff08;如 <, >, , ", &&#xff09;。使用安全库&#x…...

near-synonym反义词生成(2):Prompt +Bert-MLM(FT)

near-synonym之反义词生成方法二 near-synonym, 中文反义词/近义词/同义词(antonym/synonym)工具包. 方法一为(neg_antonym): Word2vec -> ANN -> NLI -> Length 方法二为(mlm_antonym): Prompt Bert-MLM(FT) Beam-Search 项目地址 github: https://github.com/yon…...

【服务器项目部署】⭐️将本地项目部署到服务器!

目录 &#x1f378;前言 &#x1f37b;一、服务器选择 &#x1f379; 二、服务器环境部署 2.1 java 环境部署 2.2 mysql 环境部署 &#x1f378;三、项目部署 3.1 静态页面调整 3.2 服务器端口开放 3.3 项目部署 ​ &#x1f379;四、测试 &#x1f378;前言 小伙伴们大家好…...

Neo4j Desktop无法打开

解决方案——断网 9号——周一早上就开始打不开&#xff0c;后面去他官网找解决方案&#xff0c;看他们老外解决方法都是重新安装&#xff0c;但是都没彻底解决&#xff0c;我试着重新下载安装桌面版&#xff1a;1.6.1版本&#xff0c;9号晚上7.30的时候经过两次重新安装可以打…...

【编程语言】Kotlin快速入门 - 泛型

Kotlin的泛型与Java十分类似&#xff0c;也是使用这种的语法结构&#xff1a; class Fruit<T> {fun eat(f : T): Unit {println("eat...")}fun <T> buy(p : T): T {return p} }泛型限制 和Java一样&#xff0c;Kotlin也允许泛型是某个类的子类 fun &l…...

【PostgreSQL】入门篇——在不同操作系统上安装 PostgreSQL

PostgreSQL在 Windows、macOS 和 Linux&#xff08;以 Ubuntu 为例&#xff09;的安装步骤&#xff0c;以及可能出现的问题和解决办法。 一、在 Windows 上安装 PostgreSQL 1. 下载 PostgreSQL 安装程序 访问 PostgreSQL 官方网站&#xff1a;PostgreSQL Downloads点击“Dow…...

【Docker】部署MySQL容器

关于docker&#xff0c;Windows上使用Powershell/CMD执行指令&#xff0c;Linux系统直接使用终端执行指令。 拉取MySQL 也可以跳过拉取步骤&#xff0c;直接run&#xff0c;这样本地容器不存在的话&#xff0c;会自动拉取最新/指定的版本。 # 默认拉取最新版本 docker pull …...

mysql9.0windows安装

第一步下载 官网地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 点击后&#xff0c;选择不登录下载 第二步安装 双击下载的msi文件进行安装。打开后页面如下&#xff0c;选择安装类型&#xff0c;选择自定义安装。点击Next下一步。 自行选择安装目录 选好后点击…...

word中文献引用[]符号的上下标格式修改

word中文献引用[]符号的上下标格式修改 百度网址 1、查找打开使用通配符&#xff0c;输入[[][0-9]{1,2}[]]&#xff0c;即可匹配所有的字[1],[12]这些字符&#xff0c;然后鼠标点击替换为的空白处&#xff0c;再点击特殊格式–>“字体”&#xff0c;选中上标&#xff0c;最…...

计算机毕设-基于springboot的游戏创意工坊与推广平台的设计与实现(附源码+lw+ppt+开题报告)

博主介绍&#xff1a;✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围&#xff1a;Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…...

kafka的备份策略:从备份到恢复

文章目录 一、全量备份二、增量备份三、全量恢复四、增量恢复 前言&#xff1a;Kafka的备份的单元是partition&#xff0c;也就是每个partition都都会有leader partiton和follow partiton。其中leader partition是用来进行和producer进行写交互&#xff0c;follow从leader副本进…...

【畅购商城】微信支付之支付回调和支付状态

目录 Nuxt.js IP 启动 支付回调 回调接口 后端实现 查看支付状态 后端实现 前端实现 ​​​​​​​前置技术&#xff1a;RabbitMQ ​​​​​​​更新订单状态 ​​​​​​​Nuxt.js IP 启动 "config": {"nuxt": {"host": "0.0…...

【Compose multiplatform教程18】多平台资源的设置和配置

要正确配置项目以使用多平台资源&#xff0c;请执行以下操作&#xff1a; 添加库依赖项。 为每种资源创建必要的目录。 为限定资源创建其他目录&#xff08;例如&#xff0c;深色 UI 主题或本地化字符串的不同图像&#xff09;。 依赖项和目录设置 要访问多平台项目中的资源…...

MT6765核心板_MTK6765安卓核心板规格参数_联发科MTK模块开发

MTK6765安卓核心板是基于联发科高效八核处理器平台开发的一款强大硬件解决方案。这款核心板的核心是采用12纳米工艺打造的MTK6765 CPU&#xff0c;具备四个主频高达2.3GHz的CORTEX-A53核心和四个主频为1.8GHz的CORTEX-A53核心&#xff0c;提供了卓越的处理性能。用户可以根据需…...

conda常用维护命令

文章目录 1. 初始化和更新 Conda更新 Conda初始化 Conda&#xff08;如果需要&#xff09; 2. 管理环境创建新环境激活环境停用当前环境列出所有环境删除环境 3. 管理包安装包卸载包更新包更新所有包查找包列出已安装包 4. 导入导出环境导出环境配置从文件创建环境 5. 管理通道…...

Html——10 关键字和描述

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>淘宝网</title><meta name"keywords" content"我要自学网,自学HTML,自学CSS"/><meta name"description" content"要设置…...

Mysql(MGR)和ProxySQL搭建部署-Docker版本

项目路径&#xff1a;D:\study\backend\mysql\mgr 一、Mysql(MGR) 1.1 docker-compose.yaml volumes: # MySQL配置文件目录 - "./mysql-1/conf.d/my.cnf:/etc/mysql/my.cnf" # MySQL工作目录 - "./mysql-1/data:/var/lib/mysql" …...

QML学习(一) Qt Quick和QML介绍以及适用场景说明

一.介绍 1.Qt Quick 介绍 Qt Quick 提供了一套高动态&#xff0c;丰富的 QML 元素来定制用户界面的说明性框架。Qt Quick 有助于程序开发员与界面设计员的合作为便携式设备建立流畅的用户界面&#xff0c;例如&#xff1a;移动电话、媒体播放器&#xff0c;机顶盒以及上网本等…...

深入理解 PyTorch 的 view() 函数:以多头注意力机制(Multi-Head Attention)为例 (中英双语)

深入理解 PyTorch 的 view() 函数&#xff1a;以多头注意力机制&#xff08;Multi-Head Attention&#xff09;为例 在深度学习模型的实现中&#xff0c;view() 是 PyTorch 中一个非常常用的张量操作函数&#xff0c;它能够改变张量的形状&#xff08;shape&#xff09;而不改…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...