bcache funktioniert nicht wie erwartet mit Ramdisk als Cache-Gerät

bcache funktioniert nicht wie erwartet mit Ramdisk als Cache-Gerät

Ich habe Bcache ausprobiert, aber ich habe keine SSD und wollte stattdessen freien Speicher verwenden. Da Ramdisk /proc/devicesals Blockgerät aufgeführt ist, ging ich davon aus, dass dies problemlos funktionieren würde, aber mit dem folgenden einfachen Test bekomme ich es nicht zum Laufen.

Dies ist auf Ubuntu 15.10 mit dem neuesten installierten 4.5-Kernel und ich verwende die Standardgeräte /dev/ramals SSD-Ersatz.

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 

Es wurde kein Fehler oder keine Ausgabe ausgegeben make-bcache. An diesem Punkt erwarte ich, dass das neue Bcache-Gerät in den folgenden Pfaden entweder nach UUID oder nach Name aufgelistet wird, aber da ist nichts.

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

Hier sind die Ergebnisse voncache-super-show

für Cache

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

und Herkunft

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

Ich habe auch versucht, für beide Loop-Geräte zu verwenden, aber das hat noch mehr fehlgeschlagen. Das Ausführen des folgenden Befehls führt zu einem hässlichen kernel BUGDump in 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/

Hat es jemand geschafft, eine Ramdisk als Caching-Gerät mit Bcache zum Laufen zu bringen? Ohne eine Art Standardausgabe/Fehler, die anzeigt, wo der Fehler liegt, bin ich mir nicht sicher, ob das an meiner Fehlkonfiguration liegt oder ein Fehler vorliegt.

Danke, fLo

Antwort1

Einige Geräte müssen registriert werden, um verwendet werden zu können

nachdem die Cache-Geräte mit

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

Sie müssen beide registrieren (zumindest die Ramdisk, Loop-Geräte und Festplatten scheinen sich die meiste Zeit automatisch zu registrieren) mit

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

der UUID-Eintrag in /sys/fs/bcache sollte dann angezeigt werden und das Gerät sollte automatisch als sichtbar in

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

wenn Sie den Cache und das Backing-Device separat mit make-bcache verwalten

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

das ist nicht der Fall und selbst nachdem Sie die Ram-Disk registrieren, wird es sagen

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

obwohl der Eintrag in /sys/fs/bcache angezeigt wird:

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

Sie müssen es dann mit

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

knifflige Falle: Sobald das Loop-Gerät an einen Bcache angeschlossen ist, kann es nicht mehr entfernt werden mit

# losetup -d /dev/loop2

dies schlägt stillschweigend fehl, auch wenn der Exit-Code 0 (Erfolg!) ist.

Sie müssen zuerst alles rückgängig machen mit

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

verwandte Informationen