bcache не работает должным образом с ramdisk в качестве устройства кэширования

bcache не работает должным образом с ramdisk в качестве устройства кэширования

Я пробовал bcache, но у меня нет SSD, поэтому я хотел использовать свободную память в качестве замены. Поскольку ramdisk указан /proc/devicesкак блочное устройство, я предполагал, что это будет работать нормально, но с помощью простого теста ниже я не могу заставить его работать.

Это Ubuntu 15.10 с установленным последним ядром 4.5, и я использую /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

Я также пробовал использовать loop devices для обоих, но это провалилось еще хуже. Запуск команды ниже приводит к неприятному 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? Без какого-либо stdout/err, указывающего на ошибку, я не уверен, является ли это моей ошибкой в ​​настройке или ошибкой.

Спасибо, Фло

решение1

некоторые устройства необходимо зарегистрировать для использования

после создания кэш-устройств с

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

вам нужно зарегистрировать оба (по крайней мере, ramdisk, loop-устройства и жесткие диски, похоже, регистрируются автоматически в большинстве случаев) с помощью

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

Затем должна отобразиться запись uuid в /sys/fs/bcache, и устройство должно быть автоматически подключено как видимое в

# 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 вы не сможете удалить устройство loop с помощью

# losetup -d /dev/loop2

это приведет к молчаливому сбою, даже если код выхода равен 0 (успех!)

вам нужно сначала отменить все с

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

Связанный контент