我正在尝试 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