NOVA介绍
NOVA是一个基于日志结构的文件系统,但它不是为整个文件系统维护一个全局日志,而是为每个文件(inode)维护独立的日志。NOVA将日志分成4KB页面,它们在内存中不需要连续。日志只包含元数据。NOVA的目标是为字节寻址的非易失性存储器(例如,NVDIMM和即将发布的3DXpoint DIMM)提供高性能,功能齐全的生产就绪文件系统。它结合了许多其他文件系统的设计元素,提供高性能、一致性保证和全面的数据保护。NOVA支持DAX风格的mmap,使DAX表现出色,这是NOVA设计中的第一要务。具体介绍详见GitHub链接(NVSL/Linux-NOVA)。
NOVA配置
一、内核配置
NOVA的GitHub官方链接的目录linux-nova/fs/nova/下的Makefile文件给出的内核版本要求为:Linux 4.13。但是个人通过实践测试发现内核Linux 4.4.0-116-generic和Linux 4.13.8-041308-generic均不支持编译nova模块。其中在使用Linux 4.13.8内核编译nova模块时报错如下图所示。
通过与NOVA官方人员邮件沟通得到的回复是需要使用NOVA提供的patched kernel,具体实现如下(以下操作均在root权限下进行)。需要提醒的是,整个patched kernel编译安装后大概需要占据/boot目录所在分区的380MB左右的存储空间,所以请确保挂载在/boot目录的设备分区的空间充足。
- 从GitHub上下载NOVA源码:git clone https://github.com/NVSL/linux-nova(个人推荐下载在/usr/src目录下,以下操作均基于源码在/usr/src目录下)。
- 在下载好的/usr/src/linux-nova目录下make menuconfig配置内核文件,个人推荐使用之前内核版本的config文件(进入/boot目录,拷贝当前内核的config文件至/usr/src/linux-nova目录,修改文件名为.config),之后make menuconfig并保存修改至.config文件,并退出。
- 在/usr/src/linux-nova目录下make -j8(具体线程数请根据个人服务器或pc机的性能开启)编译内核,这个过程会因为当前内核版本问题提示某些头文件或引用文件不存在,基本均可通过百度、Google查询解决。
- 之后依次make modules、make modules_install、make install、reboot。重启后使用uname -rs查看当前内核版本即会发现已为新内核(对这部分命令不熟悉的请自行百度、Google查询Linux内核的编译教程)。
二、编译nova模块
1、进入/usr/src/linux-nova/fs/nova目录下,修改其Makefile文件如下所示(对Makefile不熟悉的可以参考学习“跟我一起写Makefile”,链接:跟我一起写Makefile)。
#
# Makefile for the linux NOVA filesystem routines.
# Modified by ZiweiZhao
#
obj-m += nova.o
nova-y := balloc.o bbuild.o checksum.o dax.o dir.o file.o gc.o inode.o ioctl.o \
journal.o log.o mprotect.o namei.o parity.o rebuild.o snapshot.o stats.o \
super.o symlink.o sysfs.o perf.o
all:
make -C /lib/modules/$(shell uname -r)/build M=`pwd`
clean:
make -C /lib/modules/$(shell uname -r)/build M=`pwd` clean
2、之后在/usr/src/linux-nova/fs/nova目录下make编译nova模块、insmod nova.ko加载nova模块,最后lsmod查看已有模块如下图所示。
3、挂载前首先需要模拟持久性内存(Persistent Memory),具体的模拟方法详见链接:如何模拟PM。我的服务器模拟的是从内存第8GB开始的8GB大小的PM设备/dev/pmem0。需要注意的是,链接指出模拟PM时最好从内存的第4GB开始,也就是说你的服务器、个人PC或者虚拟机都要保证至少大于4GB的内存大小,最好为8GB及以上(因为我的最终目标是使用NOVA文件系统管理PM,所以这一步根据个人需求选择性参考,对于NOVA支持的设备类型,请自行查看官方Github链接的介绍文档或者联系开发人员)。
4、挂载NOVA文件系统。根据GitHub官方/linux-nova/Documentation/filesystems(链接:nova.txt)目录下的nova.txt中的描述,无需对设备/dev/pmem0进行格式化,直接使用命令mount -t NOVA -o init /dev/pmem0 /mnt/ramdisk挂载即可。挂载结果使用mount命令查看如下图所示,至此,成功完成了NOVA文件系统的安装挂载。