Wie entferne ich das Cache-Gerät aus dem Bcache?

7

Ich glaube, sobald ich sichergestellt habe, dass mein Cache-Gerätestatus "sauber" ist:

$ sudo cat /sys/block/bcache0/bcache/state

Ich kann es einfach physisch vom Computer entfernen, wenn es ausgeschaltet ist, oder mit liveCD booten und den Superblock reinigen mit:

$ sudo dd if=/dev/zero of=<backing device for cache> bs=1024 count=1024

Aber ich kann nirgendwo eine Bestätigung finden, dass dieses Verfahren nichts durcheinander bringen würde.

Adam Ryczkowski
quelle

Antworten:

12

Ich habe bcachenur in einer Durchschreibkonfiguration verwendet, und IIRC mag es auch dann bcacheüberhaupt nicht, wenn das Cache-Gerät verschwindet, während der Computer läuft. Erwarten Sie, dass das bcacheGerät in diesem Fall vollständig blockiert.

Ich habe nicht versucht, das Cache-Gerät zu entfernen, während der Computer ausgeschaltet ist, daher kann ich dazu nichts sagen. Ich denke, das bcacheist immer noch ziemlich heikel, daher würde ich empfehlen, dass Sie dies zuerst mit einer VM oder einem physischen Testcomputer versuchen.


Um das Cache-Gerät sicher zu entfernen, können Sie den Cache-Satz vom Bcache-Gerät trennen:

echo <cache-set-uuid> > /sys/block/bcache0/bcache/detach

Um die erforderliche UUID für den Cache-Satz zu ermitteln, schauen Sie in /sys/fs/bcache/:

host ~ # ll /sys/fs/bcache/
total 0
drwxr-xr-x 7 root root    0 Feb 19 00:11 eb99feda-fac7-43dc-b89d-18765e9febb6
--w------- 1 root root 4096 Feb 19 00:11 register
--w------- 1 root root 4096 Feb  7 07:17 register_quiet

Führen Sie in diesem Fall beispielsweise Folgendes aus:

echo eb99feda-fac7-43dc-b89d-18765e9febb6 > /sys/block/bcache0/bcache/detach

Die stateDatei sollte danach sagen no cache:

host ~ # cat /sys/block/bcache0/bcache/state
no cache
Martin von Wittich
quelle
6
Ich vermisse hier vielleicht eine Einschränkung, aber AFAICT, die Cache-UUID muss nicht an / sys / block / bcache0 / bcache / separate zurückgegeben werden. Sie können einfach '1' wiedergeben. Zumindest funktioniert das bei mir auf Kernel 3.13. Zum Anhängen müssen Sie jedoch die UUID angeben.
DanielSmedegaardBuus
2

Angenommen, Sie haben einen bcache erfolgreich eingerichtet, arbeiten bereits daran, legen dort viele wichtige Daten ab, die zu groß sind, um sie einfach zu sichern, und beginnen von vorne, wenn Sie feststellen, dass Sie das Caching-Gerät besser ersetzen sollten. So können Sie es machen. Diese Lösung basiert auf VM-Versuchen.

Nehmen wir an, wir sprechen über das Gerät /dev/bcache0, das neue Cache-Gerät /dev/sdf1und das Backing-Gerät /dev/md1. Alle Befehle werden von root ausgeführt.

  1. Stellen Sie sicher, dass dieses bcache0-Gerät nicht verwendet wird.
  2. In beliebiger Reihenfolge
    1. Entfernen Sie das Cache-Gerät, wie Martin von Wittich es geschrieben hat, indem Sie setUUID in wiedergeben /sys/block/bcache0/bcache/detach. Wenn Sie das Caching-Gerät neu partitionieren möchten, müssen Sie einen Neustart durchführen, da bcache die Partitionen weiterhin sperrt, sofern Sie die Registrierung nicht aufheben.
    2. Formatieren Sie ein neues Cache-Gerät mit make-bcache -C /dev/sdf1und notieren Sie sich die setUUID dieses Geräts.
  3. Registrieren Sie unser Sicherungsgerät mit dem neuen Cache-Set:

    echo [setUUID of new cache device] >/sys/block/bcache0/bcache/attach

Kein Neustart erforderlich.

Adam Ryczkowski
quelle
2

Einzeiler:

echo $(ls -d /sys/fs/bcache/*-*-* | cut -f5 -d/) > /sys/block/bcache0/bcache/detach

Warten Sie dann, bis der zwischengespeicherte Code gelöscht ist:

while true; do if [[ $(cat /sys/block/bcache0/bcache/state) != "dirty" ]]; 
then echo "DONE"; break; 
else cat /sys/block/bcache0/bcache/dirty_data; sleep 30; fi; done
Sanmai
quelle