Como faço para remover o dispositivo de cache do bcache?

7

Eu acredito que uma vez que eu verifiquei se o estado do meu dispositivo de cache está "limpo":

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

Posso removê-lo fisicamente da máquina quando está desligado ou inicializar com o liveCD e limpar o superbloco com:

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

Mas não consigo encontrar em nenhum lugar uma confirmação de que esse procedimento não estrague nada.

Adam Ryczkowski
fonte

Respostas:

12

Eu usei bcacheapenas em uma configuração de gravação, e o IIRC ainda bcachenão gosta se o dispositivo de cache desaparecer enquanto a máquina estiver em execução. Espere que o bcachedispositivo pare completamente se isso acontecer.

Não tentei remover o dispositivo de cache enquanto a máquina estiver desligada, por isso não posso dizer nada sobre isso. Eu acho que, embora isso bcacheainda seja bastante delicado, recomendo que você tente isso primeiro com uma VM ou uma máquina de teste físico.


Para remover com segurança o dispositivo de cache, você pode desanexar o conjunto de cache do dispositivo bcache:

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

Para determinar o UUID do conjunto de cache necessário, consulte /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

Então, por exemplo, neste caso, execute:

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

O statearquivo deve dizer no cachedepois disso:

host ~ # cat /sys/block/bcache0/bcache/state
no cache
Martin von Wittich
fonte
6
Talvez esteja faltando alguma ressalva aqui, mas AFAICT, o UUID do cache não precisa ser ecoado para / sys / block / bcache0 / bcache / desanexar, você pode apenas ecoar '1'. Pelo menos, isso funciona para mim no kernel 3.13. Para anexar, no entanto, você precisa fornecer o UUID.
DanielSmedegaardBuus
2

Suponha que você configurou com êxito um bcache, você já está trabalhando nele, coloque muitos dados importantes grandes demais para simplesmente fazer backup e reiniciar, quando você perceber, que é melhor substituir o dispositivo de cache. É assim que você pode fazer. Esta solução é baseada em avaliações de VM.

Digamos que estamos falando sobre o dispositivo /dev/bcache0, o novo dispositivo de cache /dev/sdf1e o dispositivo de suporte /dev/md1. Todos os comandos feitos pelo root.

  1. Verifique se nada está usando esse dispositivo bcache0.
  2. Faça em qualquer ordem
    1. Remova o dispositivo de cache exatamente como Martin von Wittich escreveu, repetindo setUUID /sys/block/bcache0/bcache/detach. Se você deseja reparticionar o dispositivo de armazenamento em cache, é necessário reiniciar, porque o bcache ainda bloqueia as partições, a menos que você o cancele o registro.
    2. formate o novo dispositivo de cache make-bcache -C /dev/sdf1e anote o setUUID desse dispositivo.
  3. Registre nosso dispositivo de suporte com o novo conjunto de cache:

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

Não há necessidade de reiniciar.

Adam Ryczkowski
fonte
2

Uma linha:

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

Aguarde até que o cache seja limpo:

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
fonte