掉lvm cache坑了!

发布时间 2023-03-27 00:31:29作者: 风驰电掣的马

问题背景

今天刚试着将原来的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了