bcache 無法如預期使用 ramdisk 作為快取設備

bcache 無法如預期使用 ramdisk 作為快取設備

我正在嘗試 bcache,但我沒有 SSD,所以我想使用可用記憶體作為替代品。由於 ramdisk 被列為/proc/devices塊設備,我認為這可以正常工作,但通過下面的簡單測試,我無法讓它工作。

這是在安裝了最新 4.5 核心的 Ubuntu 15.10 上,我使用預設/dev/ram裝置作為 SSD 替代品。

losetup -f
dd if=/dev/zero of=/tmp/bcache_origin bs=1M count=200
losetup /dev/loop2 /tmp/bcache_origin 

make-bcache -B /dev/loop2 -C /dev/ram9 

沒有給出錯誤或輸出make-bcache。此時,我預計新的 bcache 設備將按 UUID 或名稱列在下面的路徑中,但什麼都沒有。

ls -al /sys/fs/bcache/
ls -al /sys/block/bcache*

這是輸出cache-super-show

用於緩存

bcache-super-show /dev/ram9

sb.magic                ok
sb.first_sector         8 [match]
sb.csum                 53EDD9C169F73E1B [match]
sb.version              0 [cache device]

dev.label               (empty)
dev.uuid                2189aa3b-67e7-4296-bb25-6b5ba886befa
dev.sectors_per_block   1
dev.sectors_per_bucket  1024
dev.cache.first_sector  1024
dev.cache.cache_sectors 130048
dev.cache.total_sectors 131072
dev.cache.ordered       no
dev.cache.discard       no
dev.cache.pos           0
dev.cache.replacement   0 [lru]

cset.uuid               0a6b3824-72c1-489e-9d96-d976cb49e8a9

和起源

bcache-super-show /dev/loop2

sb.magic                ok
sb.first_sector         8 [match]
sb.csum                 ECBC84E42E6F52B9 [match]
sb.version              1 [backing device]

dev.label               (empty)
dev.uuid                aff690a4-7ee1-4b62-85cc-ad41c775d7d8
dev.sectors_per_block   1
dev.sectors_per_bucket  1024
dev.data.first_sector   16
dev.data.cache_mode     0 [writethrough]
dev.data.cache_state    0 [detached]

cset.uuid               0a6b3824-72c1-489e-9d96-d976cb49e8a9

我也嘗試過對兩者都使用循環設備,但結果更糟。執行以下命令會kernel BUG在 dmesg 中產生令人討厭的轉儲。

losetup -f
dd if=/dev/zero of=/tmp/bcache_data bs=1M count=200
dd if=/dev/zero of=/tmp/bcache_cache bs=1M count=200

losetup /dev/loop5 /tmp/bcache_data
losetup /dev/loop6 /tmp/bcache_cache
make-bcache -B /dev/loop5 -C /dev/loop6
ll /sys/fs/bcache/

有沒有人成功地將 ramdisk 用作 bcache 的快取設備?沒有任何類型的標準輸出/錯誤來指示它在哪裡失敗,我不確定這是我的配置錯誤還是錯誤。

謝謝弗洛

答案1

有些設備需要註冊才能使用

製作快取設備後

# make-bcache -B /dev/loop2 -C /dev/ram9 

您需要註冊兩者(至少是 ramdisk,循環設備和硬碟似乎大多數時候都會自動註冊)

# echo /dev/ram9 >/sys/fs/bcache/register

然後 /sys/fs/bcache 中的 uuid 條目應該會顯示,並且設備應該自動附加,如中所示

# cat /sys/block/bcache0/bcache/state 
clean

如果你分別使用-bcache快取和支援設備

# make-bcache -B /dev/loop2
# make-bcache -C /dev/ram9

情況並非如此,即使您註冊了 ram 磁碟後,它也會說

# cat /sys/block/bcache0/bcache/state 
no-cache

儘管 /sys/fs/bcache 中的條目將顯示:

# ls /sys/fs/bcache
f876ea9b-af2c-4b01-84ba-43a87d60501c  register  register_quiet

然後你需要將它附加到

# echo f876ea9b-af2c-4b01-84ba-43a87d60501c >/sys/block/bcache0/bcache/attach
# cat /sys/block/bcache0/bcache/state 
clean

棘手的陷阱:一旦連接到 bcache,您就無法使用以下命令刪除循環設備

# losetup -d /dev/loop2

即使退出代碼為 0(成功!),這也會默默失敗

你需要先撤銷一切

# echo 1 >/sys/block/bcache0/bcache/stop
# echo 1 >/sys/fs/bcache/f876ea9b-af2c-4b01-84ba-43a87d60501c/unregister

相關內容