bcache no funciona como se esperaba con ramdisk como dispositivo de caché

bcache no funciona como se esperaba con ramdisk como dispositivo de caché

Estaba probando bcache pero no tengo un SSD, así que quería usar memoria libre como sustituto. Como el disco RAM aparece /proc/devicescomo dispositivo de bloque, supuse que esto funcionaría bien, pero con la prueba simple a continuación no puedo hacerlo funcionar.

Esto está en Ubuntu 15.10 con el último kernel 4.5 instalado y estoy usando los /dev/ramdispositivos predeterminados como mi sustituto de 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 

No se produjo ningún error ni resultado de make-bcache. En este punto, espero que el nuevo dispositivo bcache aparezca en las siguientes rutas, ya sea por UUID o por nombre, pero no hay nada.

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

Aquí están los resultados decache-super-show

para caché

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

y origen

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

También intenté usar dispositivos de bucle para ambos, pero falló aún peor. La ejecución del siguiente comando da como resultado kernel BUGun volcado desagradable en 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/

¿Alguien ha conseguido que un disco ram funcione como dispositivo de almacenamiento en caché con bcache? Sin ningún tipo de salida estándar/err para indicar dónde está fallando, no estoy seguro de si se trata de un error de configuración o de un error.

gracias flo

Respuesta1

Algunos dispositivos deben registrarse para poder usarse.

después de hacer los dispositivos de caché con

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

necesita registrar ambos (al menos el disco ram, los dispositivos de bucle y los discos duros parecen registrarse automáticamente la mayor parte del tiempo) con

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

la entrada uuid en /sys/fs/bcache debería aparecer y el dispositivo debería conectarse automáticamente como se ve en

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

si realiza un cache en el caché y el dispositivo de respaldo por separado con

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

Este no es el caso e incluso después de registrar el disco RAM, dirá

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

aunque aparecerá la entrada en /sys/fs/bcache:

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

entonces necesitas adjuntarlo con

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

Error complicado: una vez conectado a un bcache, no se puede eliminar el dispositivo de bucle con

# losetup -d /dev/loop2

esto fallará silenciosamente, aunque el código de salida sea 0 (¡éxito!)

primero debes deshacer todo con

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

información relacionada