NAS系列-补充:bcache更换固态

253 阅读2分钟

内容说明

bcache 使用固态做缓存加速,但是固态更换这个问题老早就碰上并且解决了,记录也做了,但就是一直没空写,现在特别开一篇说明一下固态的更换问题。

场景

当初建缓存加速的时候,考虑到频繁读写,使用了一个垃圾小固态,写爆也不心疼,试想,现在又拿到一块淘汰的某大厂的小固态,MLC 颗粒,读写比在用的不知高到哪里去了,谁会不动心把旧的换掉呢?但是!出于所以然而不知其所以然,没看文档,我直接就换了。于是就有这篇文章的内容。

直接更换问题

直接更换缓存盘,等效于认为原来的缓存盘爆了,于是只能换新的,问题就在于,缓存加速建立在后端盘挂载到指定的缓存盘,是一一对应配套的,缓存盘损坏后,系统就无法将对应的缓存盘和后端盘配套起来。直接更换了新的缓存盘后,也不能直接手动更改后端盘所绑定的缓存盘。
由于此时后端盘对应的旧的缓存盘在系统中不存在,结果就是能识别的缓存盘没有对应的后端盘,绑定了不存在的缓存盘的后端盘系统又无法识别,同时后端盘对应的缓存盘信息又不能直接修改,因此绑定操作时会报错,/sys/block/路径下也不会有对应的bcache。因此要实现缓存盘的更换,后端盘需要重新注册、运行后再绑定。

解决方式

这里假如新的缓存盘为dev/sdb,后端盘dev/sdd,需要执行以下操作:

# 注意此时缓存盘需要已经注册并运行,即 /sys/fs/bcache/ 目录下有对应 cset.uuid 对应的文件夹
# 具体注册过程见 NAS系列-1
# 先把后端盘停下来
sudo bash -c 'echo 1 > /sys/block/sdd/bcache/stop'
# 重新注册后端盘
sudo bash -c 'echo /dev/sdd > /sys/fs/bcache/register'
# 运行
sudo bash -c 'echo 1 > /sys/block/sdd/bcache/running'
# 绑定
sudo bash -c 'echo cset.uuid > /sys/block/sdd/bcache/attach'

大概就是这么个处理流程:换了新固态后,注册为缓存盘,然后停用后端盘,再重新注册、运行后端盘,最后执行 attach 绑定操作即可。上述有部分信息是查文档得到的,但是是哪部分因为时间间隔太久忘了,所以懒得加出处了。