Comment supprimer le périphérique de cache de bcache?

7

Je crois qu'une fois que je me suis assuré que l'état de mon périphérique de cache est "propre":

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

Je peux simplement le retirer physiquement de la machine lorsqu'il est éteint ou démarrer avec liveCD et nettoyer le superbloc avec:

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

Mais je ne trouve nulle part une confirmation que cette procédure ne gâcherait rien.

Adam Ryczkowski
la source

Réponses:

12

Je l'ai utilisé bcacheuniquement dans une configuration écrite, et même l'IIRC bcachen'aime pas du tout si le périphérique de cache disparaît pendant que la machine fonctionne. Attendez-vous à ce que l' bcacheappareil se bloque complètement si cela se produit.

Je n'ai pas essayé de supprimer le périphérique de cache lorsque la machine est hors tension, donc je ne peux rien dire à ce sujet. Je pense que c'est bcacheencore assez délicat, donc je vous recommande d'essayer d'abord avec une machine virtuelle ou une machine de test physique.


Pour supprimer en toute sécurité le périphérique de cache, vous pouvez détacher l'ensemble de cache du périphérique bcache:

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

Pour déterminer l'UUID de jeu de cache nécessaire, consultez /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

Par exemple, dans ce cas, exécutez:

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

Le statedossier devrait dire no cacheaprès cela:

host ~ # cat /sys/block/bcache0/bcache/state
no cache
Martin von Wittich
la source
6
Il me manque peut-être une mise en garde ici, mais AFAICT, l'UUID du cache n'a pas besoin d'être répercuté dans / sys / block / bcache0 / bcache / detach, vous pouvez simplement répéter '1'. Au moins, cela fonctionne pour moi sur le noyau 3.13. Pour l'attacher, cependant, vous devez fournir l'UUID.
DanielSmedegaardBuus
2

Supposons que vous ayez configuré avec succès un bcache, vous y travaillez déjà, y placez beaucoup de données importantes trop volumineuses pour simplement sauvegarder et recommencer, quand vous vous êtes rendu compte, que vous feriez mieux de remplacer le périphérique de mise en cache. Voilà comment vous pouvez le faire. Cette solution est basée sur une version d'essai de VM.

Disons que nous parlons du périphérique /dev/bcache0, du nouveau périphérique de cache /dev/sdf1et du périphérique de support /dev/md1. Toutes les commandes effectuées par root.

  1. Assurez-vous que rien n'utilise ce périphérique bcache0.
  2. Faites dans n'importe quel ordre
    1. Supprimez le périphérique de cache comme Martin von Wittich l'a écrit, en faisant écho à setUUID dans /sys/block/bcache0/bcache/detach. Si vous souhaitez repartitionner le périphérique de mise en cache, vous devez redémarrer, car bcache verrouille toujours les partitions sauf si vous le désinscrivez.
    2. formater le nouveau périphérique de cache avec make-bcache -C /dev/sdf1et prendre note du setUUID de ce périphérique.
  3. Enregistrez notre périphérique de sauvegarde avec le nouvel ensemble de cache:

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

Pas besoin de redémarrer.

Adam Ryczkowski
la source
2

Bon mot:

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

Attendez ensuite que le cache soit effacé:

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
la source