在本地文件系统ext3上跑filebench
在本地文件系统上跑filebench,在ext3代码中添加printk打印出想要的信息。
1. 修改ext3文件系统
由于根文件系统是ext3,需修改文件系统名称不是ext3,这样后面的加载ext3模块才能成功,不然会报file exist。
先从/usr/src/linux-…../目录下拷贝一份ext3的代码,都是对这个代码做修改。
不清楚为什么需要改这三处,但还是改了,第一处是/ext3/super.c文件,结构体struct file_system_type ext3_fs_type,修改文件系统名称为phenixfs,第二处是函数init_inodecache(),kmem_cache_create("ext3_inode_cache",修改为phenixfs_inode_cache;第三处是xattr.c文件函数init_ext3_xattr,修改为如下ext3_xattr_cache = mb_cache_create("phenixfs_xattr"。
2. 编译
修改完成编译,执行make –C /usr/src/linux SUBDIRS=$PWD modules。;
另外建议阅读下这篇博客:
http://blog.csdn.net/qljessica123/article/details/38010579
编译时,在makefile文件中,添加KERNELDIR := /usr/sr/linux,最后一行添加default:
make –C $(KERNELDIR) M=$(PWD) modules。这样,直接执行make命令就可以编译。还可以在makefile文件中做修改。
3. 加载模块
加载2编译生成的ext3.ko文件,先修改名称为phenixfs.ko,insmod时发现报错,-1 invalid module format,dmesg查看信息,ext3 : unknown symbol journal,大概有几十个。开始怀疑是因为这些函数原ext3是导出的,现在没有导出,看看又不是,各种google和baidu发现是模块依赖,加载ext3模块前需要先加载两个其他模块。
加载mbcache和jbd模块:
再加载phenixfs.ko,OK。
4. 格式化文件系统
mkfs.ext3 /dev/sdb,我是添加了一块新硬盘格式化成ext3,而不是格式化成phenixfs。
5. 挂载文件系统到挂载点
格式化成功后,挂载磁盘上的文件系统到挂载点。
如果你仍挂载ext3,就会报unknown filesystem。
最后,按照上面描述的步骤进行,如果你是CentOS,则挂载成功,到此结束。如果你是悲催的SUSE系统,则不好意思,编译就会报错如下:
即使是仅仅从/usr/src/linux/fs/ext3 拷贝到当前目录下,也是会有同样的问题的。