nova(基于NVM的文件系统)安装

nova(基于NVM的文件系统)安装

NOVA简单介绍

NOVA是一个基于日志结构的NVM文件系统;它用到了DAX和持久化内存pmem。源码在官方提供的地址:https://github.com/NVSL/linux-nova

笔者所用环境

最初的nova是只适合在4.3的内核上运行,后面nova更新后已经做到内核里去了;新的网址提供了很多不同内核的版本,经过笔者亲测,基本都可以下载下来直接编译可用!无不佩服其工程能力。

Nova安装

解压
unzip linux-nova-5.1.zip
cd linux-nova-5.1
配置内核编译选项
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@bogon linux-nova-5.1]# make nconfig
Device Drivers --->
<*> NVDIMM (Non-Volatile Memory Device) Support --->
<*> PMEM: Persistent memory block device support (NEW)
<*> BLK: Block data window (aperture) device support (NEW)
[*] BTT: Block Translation Table (atomic sector updates)
Processor type and features --->
<*> Support non-standard NVDIMMs and ADR protected memory
Memory Management options --->
[*] Allow for memory hot-add
[*] Online the newly added memory blocks by default
[*] Allow for memory hot remove
[*] Device memory (pmem, HMM, etc...) hotplug support
File systems --->
[*] Direct Access (DAX) support
<*> NOVA: log-structured file system for non-volatile memories
编译
1
2
3
make -j4
make modules_install
make install
设置pmem设备大小
1
2
3
vim /etc/default/grub
在`GRUB_CMDLINE_LINUX`这一行中加入`memmap=4G!12G`;表示将16GB的内存划分为12GB DRAM + 4GB的PMEM
grub2-mkconfig -o /boot/grub2/grub.cfg 【更新grub】

Nova使用

1
2
3
mkdir /mnt/ramdisk
modprobe nova
mount -t NOVA -o init /dev/pmem0 /mnt/ramdisk

安装过程中遇到的坑

1. 内核更新后启动不了,直接进行emergency mode

分析

在某种内核下进入emergency mode键盘可用,这时输入journalctl可以看到相关日志,发现/sysroot系统安装失败,进一步分析是由于这个挂载的是xfs文件系统,而编译内核的时候默认没有选上这个模块;按照以下方式选择这个模块编入即可!

1
2
3
4
5
6
[root@bogon linux-nova-5.1]# make nconfig
File systems --->
<*> XFS filesystem support
[*] XFS Quota support
[*] XFS POSIX ACL support
...
2. 按照nova官方文档,选择CONFIG_LIBNVDIMM, CONFIG_BLK_DEV_PMEM, CONFIG_FS_DAX, CONFIG_NOVA_FS,重启后/dev目录下没有看到pmem设备

分析

相关的配置选项没有选择完全;如以下:

1
2
Processor type and features  --->
<*> Support non-standard NVDIMMs and ADR protected memory
3. 执行挂载nova的时候报错,dmesg | tail输出device does not support DAX

分析

是由于没有配置MEMORY_HOTPLUG,这一个编译选项在新的内核里已经移植到了Memory Management options中,如果找不到可以在编译选项配置中进行搜索

1
2
3
4
5
Memory Management options  --->
[*] Allow for memory hot-add
[*] Online the newly added memory blocks by default
[*] Allow for memory hot remove
[*] Device memory (pmem, HMM, etc...) hotplug support

总结

基本都是内核编译选项没选择对。

参考文献

http://pmem.io/2016/02/22/pm-emulation.html
https://github.com/NVSL/linux-nova/blob/master/Documentation/filesystems/nova.txt