linux系统raid0测试实验
Posted HeroKern
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux系统raid0测试实验相关的知识,希望对你有一定的参考价值。
本篇文章介绍嵌入式平台linux系统中raid0如何使用,并了解raid0磁盘阵列的工作原理,在后面文章中介绍pcie+switch存储方案raid0阵列的实现。在linux系统中raid0配置使用的mdadm命令,在嵌入式平台中,mdadm命令一般默认是没有的,需要手动安装mdadm命令。本次编写块设备驱动用两片内存模拟磁盘做raid0,在块设备中提供读写内存接口,打印内存接口,方便跟踪mdadm命令工作原理。
安装mdadm命令
- 下载mdadm.tar.gz
- tar –xzvf mdadm.tar.gz
- make CROSS_COMPILE=arm-linux-gnueabihf- 这里指定自己平台的编译器,如果编译中报错,修改Makefile,去掉CWFLAGS中的-Werror,再次编译就可以通过。
- 将当前目录的mdadm命令拷贝到嵌入式平台中
块设备驱动程序编写是比较简单的,这里我仅贴代码,就不讲解具体的代码。
驱动初始化函数,提供了块设备驱动初始化和注册,分配了一块4MB大小的内存,用于模拟磁盘,具体代码如下所示。
驱动初始化函数中提供了file_operations接口和request_queue块设备请求队列, request_queue用于文件系统与磁盘之间的数据交互,交互最小单元为一个bio结构,最常见的一次数据交互大小为4KB,请求队列函数如下所示。
- 块设备请求队列函数中,添加了打印信息,方便查看本次bio请求读写的扇区位置和扇区的个数,通过判断bio结构的读写实现bio缓存到内存的拷贝或内存到bio缓存的拷贝,ramblock_buf这个就是用内存模拟的磁盘,大小为4MB,在file_operations结构的read函数中,程序会读取这个内存的数据,方便跟踪两块磁盘中数据的分布,file_operations结构代码如下所示。
在read函数中,将拷贝ramblock_buf这块内存的数据到应用程序,拷贝多大通过上位机调用read函数是传入参数。应用程序将读两个驱动程序的内存数据,同时创建递增数文件,递增数文件方便对比两片内存的关联性。
递增数文件创建函数如下所示。
应用程序主程序会读取内存数据,并且将数据写入到data0或者data1文件中,具体代码如下所示。
代码准备工作已经完成,开始上板实测效果,需要先配置内核支持raid0,具体配置如下。
在开发板中手动加载驱动程序,同时执行mdadm命令,本次chunk大小为64KB,具体操作如下所示。
mdadm --query /dev/md0和./mdadm --detail /dev/md0命令用于查询raid0设备信息,通过查询设备信息可以确定raid0制作完成,下面开始格式化文件系统,挂载文件系统,拷贝递增数据到挂载目录,并且执行应用程序,将读取的两个内存数据分别通过tftp命令拷贝到windos。
通过compare比较data0和data1文件,发现生成的数据文件规律为一边拷贝64k的数据,这也正是raid0的基本原理,比较数据如下所示。
左右红框的内的数据,上下一行的差值都是0x4000=16KB,但是数据时32字节对齐的,所以数据的总数为16Kb*4=64KB,跟mdadm创建时指定的chunk参数一致,左右红框中,右边的结尾刚好是左边红框的开始,这也说明数据时左右以64KB大小在切换。本篇文章讲解了linux系统中raid0的使用方法,也给出了详细测试说明,后面文章分析pcie-switch价格raid0阵列方案设计。
所有命令如下:
insmod ram_drv0.ko insmod ram_drv1.ko ./mdadm -Cv /dev/md0 --chunk=64 -l0 -n2 /dev/ramblock0 /dev/ramblock1 ./mdadm --query /dev/md0 ./mdadm --detail /dev/md0 mkfs.ext4 /dev/md0 mount /dev/md0 /tmp/ cp increase.data /tmp/ ./test_raid0 0 0 8192 tftp -p -l data0 10.10.10.66 ./test_raid0 1 0 8192 tftp -p -l data1 10.10.10.66 |
以上是关于linux系统raid0测试实验的主要内容,如果未能解决你的问题,请参考以下文章