Como remover o dispositivo de cache do bcache?

8

Acredito que, depois de me certificar de que o estado do meu dispositivo de cache está "limpo":

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

Eu posso apenas removê-lo fisicamente da máquina quando ela está desligada 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 encontro em nenhum lugar uma confirmação, que esse procedimento não atrapalharia nada.

    
por Adam Ryczkowski 18.02.2014 / 18:59

3 respostas

2

Suponha que você tenha configurado um bcache com sucesso, já esteja trabalhando nele, coloque muitos dados importantes grandes demais para simplesmente fazer backup e começar de novo, quando perceber que é melhor substituir o dispositivo de armazenamento em cache. É assim que você pode fazer isso. Esta solução é baseada em testes de VM.

Digamos que estamos falando sobre o dispositivo /dev/bcache0 , o novo dispositivo de cache é /dev/sdf1 e o dispositivo de backup é /dev/md1 . Todos os comandos feitos pelo root.

  1. Certifique-se de que nada esteja usando esse dispositivo bcache0.
  2. Faça em qualquer ordem
    1. Remova o dispositivo de cache exatamente como Martin von Wittich escreveu, fazendo eco de setUUID em /sys/block/bcache0/bcache/detach . Se você quiser reparticionar o dispositivo de armazenamento em cache, será necessário reinicializar, porque o bcache ainda bloqueia as partições, a menos que você cancele o registro.
    2. formate o novo dispositivo de cache com make-bcache -C /dev/sdf1 e anote o setUUID desse dispositivo.
  3. Registre nosso dispositivo de apoio com o novo conjunto de cache:

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

Não há necessidade de reiniciar.

    
por 19.02.2014 / 11:03
13

Eu usei bcache apenas em uma configuração de gravação, e o IIRC, mesmo assim, bcache não gosta de nada se o dispositivo de cache desaparecer enquanto a máquina estiver em execução. Espere que o dispositivo bcache pare completamente se isso acontecer.

Eu não tentei remover o dispositivo de cache enquanto a máquina está desligada, por isso não posso dizer nada sobre isso. Eu acho que o bcache ainda é muito sensível, então eu recomendo que você tente isso com uma VM ou uma máquina de testes física primeiro.

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, procure em /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

Por exemplo, neste caso, execute:

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

O arquivo state deve dizer no cache depois disso:

host ~ # cat /sys/block/bcache0/bcache/state
no cache
    
por 19.02.2014 / 00:21
3

One-liner:

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
    
por 24.02.2017 / 04:50