我有一個 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