我有一个 LVM,我想使用 bcache 来缓存其中一个 LV。 (是的,我知道我可以使用 lvmcache,但我在启动时遇到问题,所以我放弃了使用它。)
首先,我用了块将 LV 转换为 bcache 支持设备(这似乎确实有效!):
blocks to-bcache /dev/my_vg/my_lv
我在 SSD 上创建了一个缓存设备:
make-bcache --block 4k --bucket 2M -C /dev/sdc4
然后我尝试将缓存附加到支持设备:
bcache-super-show /dev/sdc4 | grep cset.uuid
echo 'above_uuid' > /sys/block/bcache0/bcache/attach
然后我重新启动了我的机器(添加到后/dev/bcache0
)/etc/fstab
并意识到缓存没有运行。
# cat /sys/block/bcache0/bcache/state
no cache
# bcache-super-show /dev/my_vg/my_lv | grep cache_state
dev.data.cache_state 0 [detached]
我错过了什么吗?我需要使用另一个命令来启用缓存吗?
为什么 bcache 不喜欢我的缓存设备并且不允许我将其附加到我的支持设备?我是否对--block
和使用了错误的值--bucket
?
答案1
我设法通过在 上重新创建超级块来解决此问题/dev/sdc4
。看起来 --block 4k --bucket 2M
不正确,这就是缓存设备未连接的原因。
我清除了超级块,然后运行:
make-bcache -C /dev/sdc4
现在当我这样做时:
echo 'uuid' > /sys/block/bcache0/bcache/attach
有效!
答案2
我有同样的问题:
make-bcache --block 4k --bucket 2M -C /dev/nvme0n1p1
导致写入错误:参数无效。
具体来说,是 --block 4k 导致了问题。
make-bcache --bucket 2M -C /dev/nvme0n1p1
效果很好。
答案3
首先,尝试一些清理:
echo $cset_uuid | sudo tee /sys/fs/bcache/pendings_cleanup
echo $backing_uuid | sudo tee /sys/fs/bcache/pendings_cleanup
用于bcache-super-show
获取 uuid。
然后再次尝试注册:
echo $cset_uuid | sudo tee /sys/fs/bcache/register
echo $backing_uuid | sudo tee /sys/fs/bcache/register
如果缓存设备注册成功,则缓存 uuid 应该存在于 /dev/fs/bcache 中。
如果您的支持设备有cache_state
,invalid
您的支持数据将受到 的支配fsck
。
如果bcache-super-show
说后备状态dev.data.cache_state
是clean
且cset.uuid
仅由零组成,则 bcache 设备处于无效状态并且必须重新创建。 [来源]
但是,如果干净,您可以尝试在没有缓存设备的情况下强制启动支持设备:
echo 1 | sudo tee /sys/class/block/$dev/bcache/running