使用QEMU模拟非易失性内存
qemu可以模拟出nvdimm硬件,并在虚拟机中对其访问。
模拟nvm设备
创建大小为20G,格式为qcow2的虚拟磁盘:
1
qemu-img create -f qcow2 diskname.qcow2 20g
从光盘启动,在虚拟磁盘上安装系统:
1
qemu-system-x86_64 -enable-kvm -hda ubuntu.qcow2 -boot d -cdrom path/to/your/distribution/img.iso -m 8192
其中
-boot d
指定boot order为光盘优先。模拟出nvdimm设备,并从硬盘启动虚拟机:
1
2
3qemu-system-x86_64 -machine pc,nvdimm=on -enable-kvm -hda diskname.qcow2 -m 8G,slots=8,maxmem=128G \
-object memory-backend-file,id=mem1,share=on,mem-path=nvdimm.img,size=16G \
-device nvdimm,id=nvdimm1,memdev=mem1其中
-machine
指明启动nvdimm特性,-object
指定了一个模拟nvdimm的文件及其大小,-device
挂载该设备。在虚拟机中可看到名为
/dev/pmem0
的nvdimm设备存在。
挂载文件系统
ndctl是管理libnvdimm子系统的工具,使用ndctl list
查看发现此时pmem0设备的mode为raw,不能直接挂载文件系统。使用dmesg可以看到错误提示:
1 | sudo mount -t somefs -o init /dev/pmem0 ~/mnt/ |
使用ndctl改变nvdimm设备的格式:
1 | sudo ndctl destroy-namespace --force namespace0.0 |
其中namespace的名字可以用ndctl list
查看。现在可以使用mount在设备pmem0上初始化并挂载文件系统了。
与宿主机通信
在启动qemu时增加参数,将host的某端口与guest的22端口(ssh)关联,并虚拟一个nic设备。
1
2-net user,hostfwd=tcp::10022-:22
-net nic确保guest中已运行sshd。
可以通过
ssh -p 10022 localhost
连接到虚拟机。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Do not touch fish!!