问题背景
今天刚试着将原来的hyper-V NAS虚拟机转到ESXi新机器,启用一块闲置的500G NVMe固态硬盘。考虑到NAS中用的大容量硬盘都是机械盘,而且为了降低噪音,选的都是低转速的。
因此想着把这块不大不小的NVMe固态用起来。网上一搜,就看到LVM + SSD Cache的文章,其中这篇比较常见:https://www.cnblogs.com/jfLin/p/9542812.html
但是我觉得这篇讲得更好:https://man.archlinux.org/man/lvmcache.7
问题经过
有了文档知道,根据上面第二篇文档,做了以下实验:
现在情况是:已经有lvm卷,其中卷组(vg)名为 nas, 逻辑卷(lv)名为data,NVME硬盘在/dev/nvme0n1,目的是给 nas1/data这个LV增加一个SSD Cache。
步骤1、SSD Cache,要求SSD所在LV和原数据LV在同一个卷组(VG中),所以第一步,需要将给SSD盘(或者分区)创建物理卷(PV):
pvcreate /dev/nvme0n1
步骤2、将PV加入数据LV同一个卷组:
vgextend nas /dev/nvme0n1
步骤3、为SSD硬盘(或分区)创建名为datacache的Cache LV池(自动包含cache、metadata):
lvcreate --type cache-pool -L 256G -n datacache nas /dev/nvme0n1
该命令,直接指定了数据大小(-L 256G),同时它会自动分配metadata的空间,不需要人工划分大小,非常方便!
步骤4、将Cache LV池转换为Cache(相当于绑定、激活Cache):
lvconvert --type cache --cachemode writethrough --cachepool datacache nas/data
上面的命令,用--cachemode 选项可以指定Cache的模式:writethrough或者writeback。
敲完命令一切正常,也提示Cache成功!
最后坑爹的一环出现了——重启系统后,系统挂了——启动过程中,加载了Cache的LVM都没有正常挂载,导致系统无法正常启动。网上有说修改grub和boot分区的,嫌麻烦,不想折腾了。
所以最后拆了cache LV池
lvconvert --uncache nas/data
关于修改后影响启动,这里有grub的官方说明:https://www.gnu.org/software/grub/manual/grub/html_node/LVM-cache-booting.html
问题小结
在grub没有解决问题之前,暂时不考虑自己载试LVM+SSD Cache了